diff --git a/Gruntfile.js b/Gruntfile.js
index 6667be562535dc3437ca277d4270d2b0acd6d474..51178b18530a2053ea0973238004e8c688ea355c 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -11,6 +11,8 @@ module.exports = function (grunt) {
     // Require
     // --------------------------------------
 
+    require('./dev/tools/grunt/tasks/mage-minify')(grunt);
+
     // Time how long tasks take. Can help when optimizing build times
     require('time-grunt')(grunt);
 
@@ -33,7 +35,10 @@ module.exports = function (grunt) {
                 blank: 'app/design/frontend/Magento/blank',
                 luma: 'app/design/frontend/luma'
             },
-            doc: 'lib/web/css/docs'
+            doc: 'lib/web/css/docs',
+            uglify: {
+                legacy: 'lib/web/legacy-build.min.js'
+            }
         },
         doc: {
             styleName: 'docs'
@@ -110,7 +115,7 @@ module.exports = function (grunt) {
             },
             documentation: {
                 files: {
-                    '<%= config.path.doc %>/<%= config.doc.styleName %>.css': "<%= config.path.doc %>/source/<%= config.doc.styleName %>.less"
+                    '<%= config.path.doc %>/<%= config.doc.styleName %>.css': '<%= config.path.doc %>/source/<%= config.doc.styleName %>.less'
                 }
             }
         },
@@ -131,10 +136,40 @@ module.exports = function (grunt) {
                     '<%= config.path.doc %>': '<%= config.path.doc %>/source' // Todo UI: Check out JS for Styledocco
                 }
             }
-        }
+        },
 
+        'mage-minify': {
+            legacy: {
+                options: {
+                    type: 'yui-js',
+                    tempPath: 'var/cache/',
+                    options: ['--nomunge=true']
+                },
+                files: {
+                    '<%= config.path.uglify.legacy %>': [
+                        'lib/web/prototype/prototype.js',
+                        'lib/web/prototype/window.js',
+                        'lib/web/scriptaculous/builder.js',
+                        'lib/web/scriptaculous/effects.js',
+                        'lib/web/lib/ccard.js',
+                        'lib/web/prototype/validation.js',
+                        'lib/web/varien/js.js',
+                        'lib/web/mage/adminhtml/varienLoader.js',
+                        'lib/web/mage/adminhtml/tools.js'
+                    ]
+                }
+            }
+        }
     });
 
+    /**
+     * Creates build of a legacy files.
+     * Mostly prototype dependant libraries.
+     */
+    grunt.registerTask('legacy-build', [
+        'mage-minify:legacy'
+    ]);
+
     // Default task
     // --------------------------------------
     grunt.registerTask('default', []); // ToDo UI: define default tasks
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/requirejs-config.js b/app/code/Magento/AdminNotification/view/adminhtml/requirejs-config.js
index 4b18a9e043d354131b257a75249f7b8ff602db25..59cd1bbe68441210fe39726aa40fa6973edc7efd 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/requirejs-config.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/requirejs-config.js
@@ -6,10 +6,8 @@
 var config = {
     map: {
         '*': {
-            systemMessageDialog: 'Magento_AdminNotification/system/notification'
+            systemMessageDialog: 'Magento_AdminNotification/system/notification',
+            toolbarEntry:   'Magento_AdminNotification/toolbar_entry'
         }
-    },
-    deps: [
-        "Magento_AdminNotification/toolbar_entry"
-    ]
+    }
 };
\ No newline at end of file
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml
index dc2481ae7b569c6b8a3de42901fc2128eea81f9f..ffd2ff0a08ffc1aa3e315d38e35cde3469a76e24 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/notification/window.phtml
@@ -12,7 +12,7 @@
  * @see \Magento\AdminNotification\Block\Window
  */
 ?>
-<div class="fade critical-notification">
+<div data-mage-init='{"modalPopup": {}}' class="fade critical-notification">
     <div class="popup popup-<?php echo preg_replace('#[^a-z0-9]+#', '-', strtolower($this->getSeverityText())) ?>">
         <div class="popup-inner">
             <header class="popup-header">
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/toolbar_entry.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/toolbar_entry.phtml
index 9c0fdf546b19a6bfc08058764ec2e118f71635b8..8127ab727db2482f88a9a020bf16a38048ecace8 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/toolbar_entry.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/toolbar_entry.phtml
@@ -9,7 +9,7 @@
 ?>
 <?php /** @var $this \Magento\AdminNotification\Block\ToolbarEntry */ ?>
 <?php $notificationCount = $this->getUnreadNotificationCount(); ?>
-<div class="notifications-summary" data-notification-count="<?php echo $this->escapeHtml($notificationCount); ?>">
+<div data-mage-init='{"toolbarEntry": {}}' class="notifications-summary" data-notification-count="<?php echo $this->escapeHtml($notificationCount); ?>">
     <?php if ($notificationCount > 0) : ?>
         <a href="<?php echo $this->getUrl('adminhtml/notification/index'); ?>" class="action notifications-action" data-mage-init='{"dropdown":{}}' title="<?php echo __('Notifications'); ?>" data-toggle="dropdown">
             <span class="text"><?php echo __('Notifications'); ?></span>
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/toolbar_entry.js b/app/code/Magento/AdminNotification/view/adminhtml/web/toolbar_entry.js
index 64b6971a8ecea413d1aa8c68465f01f02beab8f2..e976bd9a624759e2deae2ec6bbe18d17e6cfed9d 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/web/toolbar_entry.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/toolbar_entry.js
@@ -4,106 +4,105 @@
  */
 define([
     "jquery",
-    "jquery/ui"
+    "jquery/ui",
+    "domReady!"
 ], function($){
     'use strict';
 
-    $(document).ready(function() {
-        // Mark notification as read via AJAX call
-        var markNotificationAsRead = function(notificationId) {
-            var requestUrl = $('.notifications-summary .dropdown-menu').attr('data-mark-as-read-url');
-            $.ajax({
-                url: requestUrl,
-                type: 'POST',
-                dataType: 'json',
-                data: {
-                    id: notificationId
-                },
-                showLoader: false
-            });
-        };
-        var notificationCount = $('.notifications-summary').attr('data-notification-count');
-        // Remove notification from the list
-        var removeNotificationFromList = function(notificationEntry) {
-            notificationEntry.remove();
-            notificationCount--;
-            $('.notifications-summary').attr('data-notification-count', notificationCount);
-
-            if (notificationCount == 0) {
-                // Change appearance of the bubble and its behavior when the last notification is removed
-                $('.notifications-summary .dropdown-menu').remove();
-                var notificationIcon = $('.notifications-summary .notifications-icon');
-                notificationIcon.removeAttr('data-toggle');
-                notificationIcon.off('click.dropdown');
-                $('.notifications-action .counter').text('');
-                $('.notifications-action .counter').hide();
-            } else {
-                $('.notifications-action .counter').text(notificationCount);
-                // Modify caption of the 'See All' link
-                var actionElement = $('.notifications-summary .dropdown-menu .last .action-more');
-                actionElement.text(actionElement.text().replace(/\d+/, notificationCount));
-            }
-        };
-
-        // Show popup with notification details
-        var showNotificationDetails = function(notificationEntry) {
-            var popupElement = notificationEntry.find('.notifications-dialog-content').clone();
-            var notificationId = notificationEntry.attr('data-notification-id');
-            var dialogClassSeverity = 'notifications-entry-dialog';
-            if (notificationEntry.attr('data-notification-severity')) {
-                dialogClassSeverity = 'notifications-entry-dialog notifications-entry-dialog-critical';
-            }
-            popupElement.dialog({
-                title: popupElement.attr('data-title'),
-                minWidth: 500,
-                modal: true,
-                dialogClass: dialogClassSeverity,
-                buttons: [
-                    {
-                        text: popupElement.attr('data-acknowledge-caption'),
-                        'class': 'action-acknowledge primary',
-                        click: function(event) {
-                            markNotificationAsRead(notificationId);
-                            removeNotificationFromList(notificationEntry);
-                            $(this).dialog('close');
-                        }
-                    },
-                    {
-                        text: popupElement.attr('data-cancel-caption'),
-                        'class': 'action-cancel',
-                        click: function(event) {
-                            $(this).dialog('close');
-                        }
-                    }
-                ]
-            });
-            popupElement.parent().attr('aria-live','assertive');
-            popupElement.dialog('open');
-        };
-
-        // Show notification description when corresponding item is clicked
-        $('.notifications-summary .dropdown-menu .notifications-entry').on('click.showNotification', function(event) {
-            // hide notification dropdown
-            $('.notifications-summary .notifications-icon').trigger('click.dropdown');
-            showNotificationDetails($(this));
-            event.stopPropagation();
-        });
-
-        // Remove corresponding notification from the list and mark it as read
-        $('.notifications-close').on('click.removeNotification', function(event) {
-            var notificationEntry = $(this).closest('.notifications-entry')
-            var notificationId = notificationEntry.attr('data-notification-id');
-            markNotificationAsRead(notificationId);
-            removeNotificationFromList(notificationEntry);
-            event.stopPropagation();
+    // Mark notification as read via AJAX call
+    var markNotificationAsRead = function(notificationId) {
+        var requestUrl = $('.notifications-summary .dropdown-menu').attr('data-mark-as-read-url');
+        $.ajax({
+            url: requestUrl,
+            type: 'POST',
+            dataType: 'json',
+            data: {
+                id: notificationId
+            },
+            showLoader: false
         });
+    };
+    var notificationCount = $('.notifications-summary').attr('data-notification-count');
+    // Remove notification from the list
+    var removeNotificationFromList = function(notificationEntry) {
+        notificationEntry.remove();
+        notificationCount--;
+        $('.notifications-summary').attr('data-notification-count', notificationCount);
 
-        // Hide notifications bubble
         if (notificationCount == 0) {
+            // Change appearance of the bubble and its behavior when the last notification is removed
+            $('.notifications-summary .dropdown-menu').remove();
+            var notificationIcon = $('.notifications-summary .notifications-icon');
+            notificationIcon.removeAttr('data-toggle');
+            notificationIcon.off('click.dropdown');
+            $('.notifications-action .counter').text('');
             $('.notifications-action .counter').hide();
         } else {
-            $('.notifications-action .counter').show();
+            $('.notifications-action .counter').text(notificationCount);
+            // Modify caption of the 'See All' link
+            var actionElement = $('.notifications-summary .dropdown-menu .last .action-more');
+            actionElement.text(actionElement.text().replace(/\d+/, notificationCount));
+        }
+    };
+
+    // Show popup with notification details
+    var showNotificationDetails = function(notificationEntry) {
+        var popupElement = notificationEntry.find('.notifications-dialog-content').clone();
+        var notificationId = notificationEntry.attr('data-notification-id');
+        var dialogClassSeverity = 'notifications-entry-dialog';
+        if (notificationEntry.attr('data-notification-severity')) {
+            dialogClassSeverity = 'notifications-entry-dialog notifications-entry-dialog-critical';
         }
+        popupElement.dialog({
+            title: popupElement.attr('data-title'),
+            minWidth: 500,
+            modal: true,
+            dialogClass: dialogClassSeverity,
+            buttons: [
+                {
+                    text: popupElement.attr('data-acknowledge-caption'),
+                    'class': 'action-acknowledge primary',
+                    click: function(event) {
+                        markNotificationAsRead(notificationId);
+                        removeNotificationFromList(notificationEntry);
+                        $(this).dialog('close');
+                    }
+                },
+                {
+                    text: popupElement.attr('data-cancel-caption'),
+                    'class': 'action-cancel',
+                    click: function(event) {
+                        $(this).dialog('close');
+                    }
+                }
+            ]
+        });
+        popupElement.parent().attr('aria-live','assertive');
+        popupElement.dialog('open');
+    };
+
+    // Show notification description when corresponding item is clicked
+    $('.notifications-summary .dropdown-menu .notifications-entry').on('click.showNotification', function(event) {
+        // hide notification dropdown
+        $('.notifications-summary .notifications-icon').trigger('click.dropdown');
+        showNotificationDetails($(this));
+        event.stopPropagation();
+    });
+
+    // Remove corresponding notification from the list and mark it as read
+    $('.notifications-close').on('click.removeNotification', function(event) {
+        var notificationEntry = $(this).closest('.notifications-entry')
+        var notificationId = notificationEntry.attr('data-notification-id');
+        markNotificationAsRead(notificationId);
+        removeNotificationFromList(notificationEntry);
+        event.stopPropagation();
     });
 
+    // Hide notifications bubble
+    if (notificationCount == 0) {
+        $('.notifications-action .counter').hide();
+    } else {
+        $('.notifications-action .counter').show();
+    }
+    
 });
\ No newline at end of file
diff --git a/app/code/Magento/Backend/Block/System/Config/Form/Fieldset.php b/app/code/Magento/Backend/Block/System/Config/Form/Fieldset.php
index ca621460b18faaa172958fefff60ea4817b7b9ad..45d5fc2c5a636aaee9f73b1e71174b01c5e83ca0 100644
--- a/app/code/Magento/Backend/Block/System/Config/Form/Fieldset.php
+++ b/app/code/Magento/Backend/Block/System/Config/Form/Fieldset.php
@@ -214,7 +214,7 @@ class Fieldset extends \Magento\Backend\Block\AbstractBlock implements
     protected function _getExtraJs($element)
     {
         $htmlId = $element->getHtmlId();
-        $output = "Fieldset.applyCollapse('{$htmlId}');";
+        $output = "require(['prototype'], function(){Fieldset.applyCollapse('{$htmlId}');});";
         return $this->_jsHelper->getScript($output);
     }
 
diff --git a/app/code/Magento/Backend/Block/Widget/Button/SplitButton.php b/app/code/Magento/Backend/Block/Widget/Button/SplitButton.php
index 771cfa1157ee77268c902b37513d1f7318327844..431c5c80e2a5df9f26cfccb48bed92317d0fe39d 100644
--- a/app/code/Magento/Backend/Block/Widget/Button/SplitButton.php
+++ b/app/code/Magento/Backend/Block/Widget/Button/SplitButton.php
@@ -123,7 +123,7 @@ class SplitButton extends \Magento\Backend\Block\Widget
         }
 
         $attributes = ['title' => $title, 'class' => join(' ', $classes), 'disabled' => $disabled];
-        $this->_getDataAttributes(['toggle' => 'dropdown'], $attributes);
+        $this->_getDataAttributes(['mage-init' => '{"dropdown": {}}', 'toggle' => 'dropdown'], $attributes);
 
         $html = $this->_getAttributesString($attributes);
         $html .= $this->getUiId('dropdown');
diff --git a/app/code/Magento/Backend/view/adminhtml/layout/default.xml b/app/code/Magento/Backend/view/adminhtml/layout/default.xml
index 3b04789783d8052ed6ee0d08b8d582a7d1e64c71..977282aa8d3a8f20f281e9d48b091bf8fb8da761 100644
--- a/app/code/Magento/Backend/view/adminhtml/layout/default.xml
+++ b/app/code/Magento/Backend/view/adminhtml/layout/default.xml
@@ -8,24 +8,10 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-1column" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
         <title>Magento Admin</title>
-        <link src="prototype/prototype.js"/>
-        <link src="prototype/window.js"/>
-        <link src="scriptaculous/builder.js"/>
-        <link src="scriptaculous/effects.js"/>
-        <link src="lib/ccard.js"/>
-        <link src="prototype/validation.js"/>
-        <link src="varien/js.js"/>
-        <link src="mage/adminhtml/varienLoader.js"/>
-        <link src="mage/adminhtml/tools.js"/>
-        <link src="lib/ds-sleight.js" ie_condition="lt IE 7" defer="defer"/>
-        <css src="mage/calendar.css"/>
+        <link src="legacy-build.min.js"/>
         <link src="requirejs/require.js"/>
-        <link src="mage/requirejs/resolver.js"/>
-        <link src="jquery/jquery.js"/>
-        <link src="mage/jquery-no-conflict.js"/>
-        <link src="app-config.js"/>
-        <link src="extjs/ext-tree.js"/>
-        <link src="extjs/ext-tree-checkbox.js"/>
+        <link src="jquery.js"/>
+        <css src="mage/calendar.css"/>
         <css src="extjs/resources/css/ext-all.css"/>
         <css src="extjs/resources/css/ytheme-magento.css"/>
     </head>
@@ -87,7 +73,6 @@
         <referenceContainer name="after.body.start">
             <block class="Magento\RequireJs\Block\Html\Head\Config" name="requirejs-config"/>
             <block class="Magento\Translation\Block\Js" name="translate" template="Magento_Translation::translate.phtml"/>
-            <block class="Magento\Framework\View\Element\Template" name="head.scripts" template="Magento_Backend::page/js/head_scripts.phtml"/>
             <block class="Magento\Framework\View\Element\Js\Components" name="head.components" as="components" template="Magento_Backend::page/js/components.phtml"/>
             <block class="Magento\Framework\View\Element\Html\Calendar" name="head.calendar" as="calendar" template="Magento_Backend::page/js/calendar.phtml"/>
         </referenceContainer>
diff --git a/app/code/Magento/Backend/view/adminhtml/requirejs-config.js b/app/code/Magento/Backend/view/adminhtml/requirejs-config.js
deleted file mode 100644
index 6a73dd88a6d699cd1206c287b24dd735801ac986..0000000000000000000000000000000000000000
--- a/app/code/Magento/Backend/view/adminhtml/requirejs-config.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-var config = {
-    map: {
-        '*': {
-            editTrigger:        'mage/edit-trigger',
-            translateInline:    'mage/translate-inline',
-            form:               'mage/backend/form',
-            button:             'mage/backend/button',
-            accordion:          'mage/accordion',
-            actionLink:         'mage/backend/action-link',
-            validation:         'mage/backend/validation',
-            notification:       'mage/backend/notification',
-            loader:             'mage/loader_old',
-            loaderAjax:         'mage/loader_old',
-            floatingHeader:     'mage/backend/floating-header',
-            suggest:            'mage/backend/suggest',
-            mediabrowser:       'jquery/jstree/jquery.jstree',
-            tabs:               'mage/backend/tabs',
-            treeSuggest:        'mage/backend/tree-suggest',
-            calendar:           'mage/calendar',
-            dropdown:           'mage/dropdown_old',
-            collapsable:        'js/theme',
-            collapsible:        'mage/collapsible',
-            menu:               'mage/backend/menu',
-            jstree:             'jquery/jstree/jquery.jstree'
-        }
-    },
-    deps: [
-        "js/theme",
-        'jquery/jquery-migrate',
-        "mage/dropdown_old",
-        "mage/backend/bootstrap"
-    ],
-    paths: {
-        "jquery/ui": "jquery/jquery-ui-1.9.2"
-    }
-};
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/admin/login.phtml b/app/code/Magento/Backend/view/adminhtml/templates/admin/login.phtml
index aaaa8e0dae823660166d287b9daec04757307178..544624968aa7dc1ac67796598a0d538bbb09489f 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/admin/login.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/admin/login.phtml
@@ -17,7 +17,7 @@
                 <div id="messages" data-container-for="messages">
                     <?php echo $this->getLayout()->getMessagesBlock()->getGroupedHtml() ?>
                 </div>
-                <form method="post" action="" id="login-form" autocomplete="off">
+                <form method="post" action="" id="login-form" data-mage-init='{"form": {}, "validation": {}}' autocomplete="off">
                     <fieldset class="fieldset">
                         <legend class="legend"><span><?php echo __('Welcome') ?></span></legend><br/>
                         <input name="form_key" type="hidden" value="<?php echo $this->getFormKey() ?>" />
@@ -41,29 +41,6 @@
                         </div>
                     </fieldset>
                 </form>
-                <script>
-                    function initForm($){
-                        $('#login-form').form().validation();
-                    }
-
-                    function focusInput(){
-                        var username            = document.getElementById('username'),
-                            autofocusSupport    = typeof username.autofocus !== 'undefined';
-
-                        if(!autofocusSupport){
-                            username.focus();
-                        }
-                    }
-
-                    require([
-                        "jquery",
-                        "mage/backend/form",
-                        "mage/backend/validation"
-                    ], initForm);
-
-                    focusInput();
-
-                </script>
             </div>
         </div>
     </div>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
index d14649e5e2407249075f989cbbe4346b6573ee47..1053a3ec62e8a3de0ce2a5b8320fd4248b0a3a92 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
@@ -10,7 +10,9 @@
 
 <?php if (is_array($this->getChildBlock('diagrams')->getTabsIds())) : ?>
 <script>
-function changeDiagramsPeriod(periodObj) {
+require(['prototype'], function(){
+
+window.changeDiagramsPeriod = function(periodObj) {
     periodParam = periodObj.value ? 'period/' + periodObj.value + '/' : '';
 <?php foreach ($this->getChildBlock('diagrams')->getTabsIds() as $tabId): ?>
     ajaxBlockParam = 'block/tab_<?php echo $tabId ?>/';
@@ -63,10 +65,7 @@ function changeDiagramsPeriod(periodObj) {
     });
 }
 
-function toggleCal(id) {
-    $('dashboard_'+id+'_cal_div').toggle();
-    $('dashboard_'+id+'_range_div').toggle();
-}
+});
 </script>
 <?php endif; ?>
  <div class="dashboard-container">
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/store/switcher.phtml
index abb41eaff14ab269532fd6b7fd410045137c3263..0d080c4c3c3d30155b79e319be5667c6dd2046ac 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/store/switcher.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/store/switcher.phtml
@@ -35,24 +35,29 @@
 </select>
 </p>
 <script>
-    function switchStore(obj){
-        if (obj.options[obj.selectedIndex].getAttribute('website') == 'true') {
-            var selectionType = 'website';
-        } else if (obj.options[obj.selectedIndex].getAttribute('group') == 'true') {
-            var selectionType = 'group';
-        } else {
-            var selectionType = 'store';
-        }
-        var storeParam = obj.value ? selectionType + '/' + obj.value + '/' : '';
-        if(obj.switchParams){
-            storeParam+= obj.switchParams;
-        }
-        if ($('diagram_tab_orders_content').style.display != 'none') {
-            var select = $('order_orders_period');
-        } else if ($('diagram_tab_amounts_content').style.display != 'none') {
-            var select = $('order_amounts_period');
+    require([
+        'prototype'
+    ], function () {
+
+        window.switchStore = function (obj) {
+            if (obj.options[obj.selectedIndex].getAttribute('website') == 'true') {
+                var selectionType = 'website';
+            } else if (obj.options[obj.selectedIndex].getAttribute('group') == 'true') {
+                var selectionType = 'group';
+            } else {
+                var selectionType = 'store';
+            }
+            var storeParam = obj.value ? selectionType + '/' + obj.value + '/' : '';
+            if (obj.switchParams) {
+                storeParam += obj.switchParams;
+            }
+            if ($('diagram_tab_orders_content').style.display != 'none') {
+                var select = $('order_orders_period');
+            } else if ($('diagram_tab_amounts_content').style.display != 'none') {
+                var select = $('order_amounts_period');
+            }
+            var periodParam = select.value ? 'period/' + select.value + '/' : '';
+            setLocation('<?php echo $this->getSwitchUrl() ?>' + storeParam + periodParam);
         }
-        var periodParam = select.value ? 'period/'+select.value + '/' : '';
-        setLocation('<?php echo $this->getSwitchUrl() ?>'+storeParam+periodParam);
-    }
+    });
 </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/menu.phtml b/app/code/Magento/Backend/view/adminhtml/templates/menu.phtml
index b7f4a6af41df98e1fa5307faa9376f98a0ffb4ee..4d8b8e40512eaf8668ec403d034227ff47351fb9 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/menu.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/menu.phtml
@@ -7,11 +7,6 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<nav class="navigation">
+<nav data-mage-init='{"globalNavigation": {}}' class="navigation">
     <?php echo $this->renderNavigation($this->getMenuModel(), 0, 12); ?>
 </nav>
-
-<?php /* @TODO: find the place for the help ?>
-<a id="page-help-link" href="<?php echo $this->helper('Magento\Backend\Helper\Data')->getPageHelpUrl() ?>"><?php echo __('Get help for this page') ?></a>
-<script>$('page-help-link').target = 'magento_page_help'</script>
-<?php */ ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/js/head_scripts.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/js/head_scripts.phtml
deleted file mode 100644
index 26b1869079cc347e244f32ab13c26fa26717f5c3..0000000000000000000000000000000000000000
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/js/head_scripts.phtml
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-?>
-<script>
-    Ext.BLANK_IMAGE_URL = BLANK_IMG;
-    Ext.UpdateManager.defaults.loadScripts = false;
-    Ext.UpdateManager.defaults.disableCaching = true;
-</script>
-
-<script type="text/javascript" src="<?php echo $this->getViewFileUrl('tiny_mce/tiny_mce_src.js') ?>"></script>
-
-<script>
-    Fieldset.addToPrefix(<?php echo $this->helper('Magento\Backend\Helper\Data')->getCurrentUserId() ?>);
-</script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/js/require_js.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/js/require_js.phtml
index a218b027ec4bd43024d89e0aa18aceee8a0b2b42..6123138f44bf49fa56bcdca49944f70363b3c148 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/js/require_js.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/js/require_js.phtml
@@ -5,11 +5,6 @@
  */
 ?>
 <script>
-    var BLANK_URL = '<?php echo $this->getViewFileUrl('blank.html') ?>';
-    var BLANK_IMG = '<?php echo $this->getViewFileUrl('spacer.gif') ?>';
     var BASE_URL = '<?php echo $this->getUrl('*') ?>';
     var FORM_KEY = '<?php echo $this->getFormKey() ?>';
-    var require = {
-        "baseUrl": "<?php echo $this->getViewFileUrl('/') ?>"
-    };
 </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
index 3db04de8d5e373461551bfdf9818c6e99e57a21a..f57f8a066620e5ecafcced3a087b9e5b0da1963a 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
@@ -13,12 +13,16 @@
         <?php echo $this->getLocaleSelect(); ?>
     </div>
     <script>
-        function setInterfaceLanguage(event) {
-            var elem = Event.element(event);
-            if (elem) {
-                setLocation('<?php echo $this->getChangeLocaleUrl() ?>locale/'+elem.value+'/<?php echo $this->getUrlForReferer() ?>');
+        (function () {
+            'use strict';
+
+            var elem = document.getElementById('footer_interface_locale');
+
+            function onChange() {
+                window.location.href = '<?php echo $this->getChangeLocaleUrl() ?>locale/' + elem.value + '/<?php echo $this->getUrlForReferer() ?>';
             }
-        }
-        Event.observe('footer_interface_locale', 'change', setInterfaceLanguage)
+
+            elem.addEventListener('change', onChange);
+        })();
     </script>
 </div>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/system/config/robots/reset.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/system/config/robots/reset.phtml
index 84fe5da528eb03f466c43a1c43541442376104bc..2b321ef90b1ab242cc85719f56e06bfea176e5d4 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/system/config/robots/reset.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/system/config/robots/reset.phtml
@@ -14,12 +14,15 @@ $coreHelper = $this->helper('Magento\Core\Helper\Data');
 ?>
 
 <script>
-    function resetRobotsToDefault()
-    {
-        $('design_search_engine_robots_custom_instructions').value = <?php
-            echo $coreHelper->jsonEncode($this->getRobotsDefaultCustomInstructions())
-        ?>;
-    }
+    require([
+        'prototype'
+    ], function () {
+        window.resetRobotsToDefault = function(){
+            $('design_search_engine_robots_custom_instructions').value = <?php
+                echo $coreHelper->jsonEncode($this->getRobotsDefaultCustomInstructions())
+            ?>;
+        }
+    });
 </script>
 
 <?php echo $this->getButtonHtml() ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/pageactions.phtml b/app/code/Magento/Backend/view/adminhtml/templates/pageactions.phtml
index 5a988cfb65c77e2ddb9137b5b7a03bc72bb48e70..086652afe89e03fa23a7c2ffad32c962f83d201c 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/pageactions.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/pageactions.phtml
@@ -8,7 +8,7 @@
 
 ?>
 <?php if ($this->getChildHtml()):?>
-    <div class="page-actions" <?php echo $this->getUiId('content-header') ?>>
+    <div data-mage-init='{"floatingHeader": {}}' class="page-actions" <?php echo $this->getUiId('content-header') ?>>
         <?php echo $this->getChildHtml(); ?>
     </div>
 <?php endif; ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/cache/edit.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/cache/edit.phtml
index 603aff5f66626e4f492c59b43b6bf55f1989ca3e..51db03e8c96c58aeb33ed684fd6ea74b802a79c2 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/cache/edit.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/cache/edit.phtml
@@ -16,13 +16,14 @@
  *  getForm() - html
  */
 ?>
-<div class="page-actions"><?php echo $this->getSaveButtonHtml() ?></div>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getSaveButtonHtml() ?></div>
 <form action="<?php echo $this->getSaveUrl() ?>" method="post" id="config-edit-form" enctype="multipart/form-data">
     <?php echo $this->getBlockHtml('formkey')?>
 
     <script>
-    function setCacheAction(id, button) {
-        $(id).value = button.id;
+    window.setCacheAction = function(id, button) {
+        document.getElementById(id).value = button.id;
+
         configForm.submit();
     }
     </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml
index 4b22ca0a2ace46b37dc21206fa1e2ebff0db4d9c..25358a07451459b59e22709cea42ce6e59f780f0 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/config/edit.phtml
@@ -25,331 +25,329 @@
 <script>
 require([
     "jquery",
+    "Magento_Ui/js/lib/registry/registry",
     "jquery/jquery.hashchange",
     "mage/mage",
-    "prototype"
-], function(jQuery){
+    "prototype",
+    "domReady!"
+], function(jQuery, registry){
 
-    jQuery(function() {
-        window.configForm = jQuery('#config-edit-form').mage('form').mage('validation', {
-            submitHandler: function(form)
-            {
-                $$('.requires').each(function(element) {
-                    var scopeElement = adminSystemConfig.getScopeElement(element);
-                    if (!scopeElement || !scopeElement.checked) {
-                        Element.extend(element).disabled = false;
-                    }
-                });
-                jQuery(form).trigger('afterValidate');
-                form.submit();
+    var adminSystemConfig = {
+        getUp: function (element, tag) {
+            var $element = Element.extend(element);
+            if (typeof $element.upTag == 'undefined') {
+                $element.upTag = {};
             }
-        });
-
-        window.adminSystemConfig = {
-            getUp: function (element, tag) {
-                var $element = Element.extend(element);
-                if (typeof $element.upTag == 'undefined') {
-                    $element.upTag = {};
-                }
-                if (typeof $element.upTag[tag] == 'undefined') {
-                    $element.upTag[tag] = Element.extend($element.up(tag));
-                }
-                return $element.upTag[tag];
-            },
-            getUpTd: function (element) {
-                return this.getUp(element, 'td');
-            },
-            getUpTr: function (element) {
-                return this.getUp(element, 'tr');
-            },
-            getScopeElement: function(element) {
-                var $element = Element.extend(element);
+            if (typeof $element.upTag[tag] == 'undefined') {
+                $element.upTag[tag] = Element.extend($element.up(tag));
+            }
+            return $element.upTag[tag];
+        },
+        getUpTd: function (element) {
+            return this.getUp(element, 'td');
+        },
+        getUpTr: function (element) {
+            return this.getUp(element, 'tr');
+        },
+        getScopeElement: function(element) {
+            var $element = Element.extend(element);
+            if (typeof $element.scopeElement == 'undefined') {
+                var scopeElementName = element.getAttribute('name').replace(/\[value\]$/, '[inherit]');
+                $element.scopeElement = this.getUpTr(element).select('input[name="' + scopeElementName + '"]')[0];
                 if (typeof $element.scopeElement == 'undefined') {
-                    var scopeElementName = element.getAttribute('name').replace(/\[value\]$/, '[inherit]');
-                    $element.scopeElement = this.getUpTr(element).select('input[name="' + scopeElementName + '"]')[0];
-                    if (typeof $element.scopeElement == 'undefined') {
-                        $element.scopeElement = false;
-                    }
+                    $element.scopeElement = false;
                 }
-                return $element.scopeElement;
-            },
-            getDeleteElement: function(element) {
-                var $element = Element.extend(element);
+            }
+            return $element.scopeElement;
+        },
+        getDeleteElement: function(element) {
+            var $element = Element.extend(element);
+            if (typeof $element.deleteElement == 'undefined') {
+                $element.deleteElement = this.getUpTd(element)
+                    .select('input[name="'+ element.getAttribute('name') + '[delete]"]')[0];
                 if (typeof $element.deleteElement == 'undefined') {
-                    $element.deleteElement = this.getUpTd(element)
-                        .select('input[name="'+ element.getAttribute('name') + '[delete]"]')[0];
-                    if (typeof $element.deleteElement == 'undefined') {
-                        $element.deleteElement = false;
-                    }
+                    $element.deleteElement = false;
                 }
-                return $element.deleteElement;
-            },
-            mapClasses: function(element, full, callback, classPrefix) {
-                if (typeof classPrefix == 'undefined') {
-                    classPrefix = 'shared'
+            }
+            return $element.deleteElement;
+        },
+        mapClasses: function(element, full, callback, classPrefix) {
+            if (typeof classPrefix == 'undefined') {
+                classPrefix = 'shared'
+            }
+            element.classNames().each(function(className) {
+                if (className.indexOf(classPrefix + '-') == 0
+                    || (full && className.indexOf(classPrefix + '_') == 0)
+                    ) {
+                    callback(className);
                 }
-                element.classNames().each(function(className) {
-                    if (className.indexOf(classPrefix + '-') == 0
-                        || (full && className.indexOf(classPrefix + '_') == 0)
-                        ) {
-                        callback(className);
-                    }
-                });
-            },
-            getRegisteredEvents: function(element) {
-                var events = [];
-                var registry = Element.retrieve(Element.extend(element), 'prototype_event_registry');
-                if (!registry) {
-                    return events;
+            });
+        },
+        getRegisteredEvents: function(element) {
+            var events = [];
+            var registry = Element.retrieve(Element.extend(element), 'prototype_event_registry');
+            if (!registry) {
+                return events;
+            }
+            registry.each(function(pair) {
+                var eventName = pair.key;
+                if (!eventName) {
+                    return;
                 }
-                registry.each(function(pair) {
-                    var eventName = pair.key;
-                    if (!eventName) {
-                        return;
-                    }
-                    var responders = registry.get(eventName);
-                    if (!responders) {
+                var responders = registry.get(eventName);
+                if (!responders) {
+                    return;
+                }
+                responders.each(function(responder) {
+                    if (!responder.handler) {
                         return;
                     }
-                    responders.each(function(responder) {
-                        if (!responder.handler) {
-                            return;
-                        }
-                        events.push({
-                            'eventName': eventName,
-                            'handler': responder.handler
-                        });
+                    events.push({
+                        'eventName': eventName,
+                        'handler': responder.handler
                     });
                 });
-                return events;
-            },
-            onchangeSharedElement: function(event) {
-                var element = Element.extend(Event.element(event));
-                adminSystemConfig.mapClasses(element, true, function(className) {
-                    $$('.' + className).each(function(el) {
-                        if (element == el) {
-                            return;
-                        }
+            });
+            return events;
+        },
+        onchangeSharedElement: function(event) {
+            var element = Element.extend(Event.element(event));
+            adminSystemConfig.mapClasses(element, true, function(className) {
+                $$('.' + className).each(function(el) {
+                    if (element == el) {
+                        return;
+                    }
 
-                        var tagName = el.tagName.toLowerCase();
-                        if (tagName == 'input' && el.getAttribute('type') == 'file') {
+                    var tagName = el.tagName.toLowerCase();
+                    if (tagName == 'input' && el.getAttribute('type') == 'file') {
+                        var $el = Element.extend(el);
+                        var events = adminSystemConfig.getRegisteredEvents(el);
+                        $el.stopObserving('change');
+                        var elId = $el.id;
+                        $el.replace($el.outerHTML);
+                        events.each(function(event) {
+                            Event.observe(Element.extend(document.getElementById(elId)), event.eventName, event.handler);
+                        });
+                    } else {
+                        el.stopObserving('change', adminSystemConfig.onchangeSharedElement);
+                        if (tagName == 'input' && el.getAttribute('type') == 'checkbox') {
+                            if (el.checked != element.checked) {
+                                Element.extend(el).click();
+                            }
+                        } else if (tagName == 'select') {
                             var $el = Element.extend(el);
-                            var events = adminSystemConfig.getRegisteredEvents(el);
-                            $el.stopObserving('change');
-                            var elId = $el.id;
-                            $el.replace($el.outerHTML);
-                            events.each(function(event) {
-                                Event.observe(Element.extend(document.getElementById(elId)), event.eventName, event.handler);
+                            Element.extend(element).select('option').each(function(option) {
+                                var relatedOption = $el.select('option[value="' + option.value + '"]')[0];
+                                if (typeof relatedOption != 'undefined') {
+                                    relatedOption.selected = option.selected;
+                                }
                             });
                         } else {
-                            el.stopObserving('change', adminSystemConfig.onchangeSharedElement);
-                            if (tagName == 'input' && el.getAttribute('type') == 'checkbox') {
-                                if (el.checked != element.checked) {
-                                    Element.extend(el).click();
-                                }
-                            } else if (tagName == 'select') {
-                                var $el = Element.extend(el);
-                                Element.extend(element).select('option').each(function(option) {
-                                    var relatedOption = $el.select('option[value="' + option.value + '"]')[0];
-                                    if (typeof relatedOption != 'undefined') {
-                                        relatedOption.selected = option.selected;
-                                    }
-                                });
-                            } else {
-                                el.value = element.getValue();
-                            }
-                            if (Element.extend(el).requiresObj) {
-                                Element.extend(el).requiresObj.indicateEnabled();
-                            }
-                            fireEvent(el, 'change');
-                            Event.observe(el, 'change', adminSystemConfig.onchangeSharedElement);
+                            el.value = element.getValue();
                         }
-                    });
+                        if (Element.extend(el).requiresObj) {
+                            Element.extend(el).requiresObj.indicateEnabled();
+                        }
+                        fireEvent(el, 'change');
+                        Event.observe(el, 'change', adminSystemConfig.onchangeSharedElement);
+                    }
                 });
-            },
-            checkRequired: function(element, callback) {
-                var tagName = this.tagName.toLowerCase();
-                if (tagName != 'fieldset') {
-                    if (adminSystemConfig.getUpTr(this).visible()) {
+            });
+        },
+        checkRequired: function(element, callback) {
+            var tagName = this.tagName.toLowerCase();
+            if (tagName != 'fieldset') {
+                if (adminSystemConfig.getUpTr(this).visible()) {
 
-                        if (this.hasClassName('not-required')) {
-                            return;
-                        }
+                    if (this.hasClassName('not-required')) {
+                        return;
+                    }
 
-                        var typeAttr = null;
-                        if (tagName == 'input') {
-                            typeAttr = this.getAttribute('type').toLowerCase();
-                        }
-                        var valueIsEmpty = false;
-                        var scopeElement = adminSystemConfig.getScopeElement(this);
-                        if (!scopeElement || !scopeElement.checked) {
-                            if (typeAttr == 'file') {
-                                var deleteUploadedElement = adminSystemConfig.getDeleteElement(this);
-                                valueIsEmpty = !deleteUploadedElement && this.value == ''
-                                    || deleteUploadedElement && deleteUploadedElement.checked;
-                            }
-                            valueIsEmpty = valueIsEmpty
-                                || (typeAttr == 'text' || typeAttr == 'password') && this.value == ''
-                                || (tagName == 'select') && (this.getAttribute('multiple') != null)
-                                && this.getValue().length == 0
-                                || (tagName == 'select') && (this.getAttribute('multiple') == null)
-                                && this.getValue() == null;
+                    var typeAttr = null;
+                    if (tagName == 'input') {
+                        typeAttr = this.getAttribute('type').toLowerCase();
+                    }
+                    var valueIsEmpty = false;
+                    var scopeElement = adminSystemConfig.getScopeElement(this);
+                    if (!scopeElement || !scopeElement.checked) {
+                        if (typeAttr == 'file') {
+                            var deleteUploadedElement = adminSystemConfig.getDeleteElement(this);
+                            valueIsEmpty = !deleteUploadedElement && this.value == ''
+                                || deleteUploadedElement && deleteUploadedElement.checked;
                         }
+                        valueIsEmpty = valueIsEmpty
+                            || (typeAttr == 'text' || typeAttr == 'password') && this.value == ''
+                            || (tagName == 'select') && (this.getAttribute('multiple') != null)
+                            && this.getValue().length == 0
+                            || (tagName == 'select') && (this.getAttribute('multiple') == null)
+                            && this.getValue() == null;
+                    }
 
-                        if (valueIsEmpty) {
-                            if (element.value != 0) {
-                                element.value = 0;
-                                fireEvent(element, 'change');
-                            }
-                            element.disable();
+                    if (valueIsEmpty) {
+                        if (element.value != 0) {
+                            element.value = 0;
+                            fireEvent(element, 'change');
                         }
+                        element.disable();
                     }
-                } else {
-                    this.select('input,select').each(function(inputElement) {
-                        adminSystemConfig.checkRequired.call(Element.extend(inputElement), element, callback);
-                    });
                 }
-                callback(this);
+            } else {
+                this.select('input,select').each(function(inputElement) {
+                    adminSystemConfig.checkRequired.call(Element.extend(inputElement), element, callback);
+                });
             }
-        };
+            callback(this);
+        }
+    };
+
+    window.configForm = jQuery('#config-edit-form').mage('form').mage('validation', {
+        submitHandler: function(form)
+        {
+            $$('.requires').each(function(element) {
+                var scopeElement = adminSystemConfig.getScopeElement(element);
+                if (!scopeElement || !scopeElement.checked) {
+                    Element.extend(element).disabled = false;
+                }
+            });
+            jQuery(form).trigger('afterValidate');
+            form.submit();
+        }
+    });
 
+    $$('.shared').each(function(element){
+        Event.observe(element, 'change', adminSystemConfig.onchangeSharedElement);
 
-        $$('.shared').each(function(element){
-            Event.observe(element, 'change', adminSystemConfig.onchangeSharedElement);
+        // scope should be shared together with the field
+        var scopeElement = adminSystemConfig.getScopeElement(element);
+        if (scopeElement) {
+            adminSystemConfig.mapClasses(element, false, function(className) {
+                scopeElement.addClassName('shared_scope-' + className.substr(7));
+            });
+            Event.observe(scopeElement, 'change', adminSystemConfig.onchangeSharedElement);
+        }
 
-            // scope should be shared together with the field
-            var scopeElement = adminSystemConfig.getScopeElement(element);
-            if (scopeElement) {
+        // file fields should share deletion
+        if (element.tagName.toLowerCase() == 'input' && element.getAttribute('type') == 'file') {
+            var deleteUploadedElement = adminSystemConfig.getDeleteElement(element);
+            if (deleteUploadedElement) {
                 adminSystemConfig.mapClasses(element, false, function(className) {
-                    scopeElement.addClassName('shared_scope-' + className.substr(7));
+                    deleteUploadedElement.addClassName('shared_delete-' + className.substr(7));
                 });
-                Event.observe(scopeElement, 'change', adminSystemConfig.onchangeSharedElement);
+                Event.observe(deleteUploadedElement, 'change', adminSystemConfig.onchangeSharedElement);
             }
+        }
 
-            // file fields should share deletion
-            if (element.tagName.toLowerCase() == 'input' && element.getAttribute('type') == 'file') {
-                var deleteUploadedElement = adminSystemConfig.getDeleteElement(element);
-                if (deleteUploadedElement) {
-                    adminSystemConfig.mapClasses(element, false, function(className) {
-                        deleteUploadedElement.addClassName('shared_delete-' + className.substr(7));
-                    });
-                    Event.observe(deleteUploadedElement, 'change', adminSystemConfig.onchangeSharedElement);
-                }
+        // process situation, when control is complex
+        adminSystemConfig.mapClasses(element, true, function(className) {
+            var controls = adminSystemConfig.getUpTd(element).select('.' + className);
+            if (controls.length < 2) {
+                return;
             }
 
-            // process situation, when control is complex
-            adminSystemConfig.mapClasses(element, true, function(className) {
-                var controls = adminSystemConfig.getUpTd(element).select('.' + className);
-                if (controls.length < 2) {
-                    return;
-                }
-
-                var counter = 0;
-                controls.each(function(controlElement) {
-                    controlElement.removeClassName(className);
-                    controlElement.addClassName('shared_' + counter + className.substr(6));
-                    counter++;
-                });
+            var counter = 0;
+            controls.each(function(controlElement) {
+                controlElement.removeClassName(className);
+                controlElement.addClassName('shared_' + counter + className.substr(6));
+                counter++;
             });
         });
+    });
 
-        $$('.requires').each(function(element) {
-            var eventObj = {
-                'element': Element.extend(element),
-                'requires': [],
-                'callback': function(required) {},
-                checkRequirements: function() {
-                    var scopeElement = adminSystemConfig.getScopeElement(eventObj.element);
-                    if (!scopeElement || !scopeElement.checked) {
-                        eventObj.element.enable();
-                        eventObj.requires.each(function(required) {
-                            adminSystemConfig.checkRequired.call(Element.extend(required), eventObj.element, eventObj.callback);
-                        }.bind(this));
+    $$('.requires').each(function(element) {
+        var eventObj = {
+            'element': Element.extend(element),
+            'requires': [],
+            'callback': function(required) {},
+            checkRequirements: function() {
+                var scopeElement = adminSystemConfig.getScopeElement(eventObj.element);
+                if (!scopeElement || !scopeElement.checked) {
+                    eventObj.element.enable();
+                    eventObj.requires.each(function(required) {
+                        adminSystemConfig.checkRequired.call(Element.extend(required), eventObj.element, eventObj.callback);
+                    }.bind(this));
+                }
+            },
+            keydownCheckRequirements: function() {
+                window.setTimeout(eventObj.checkRequirements, 1);
+            },
+            bindCheckingObserver: function(element) {
+                if (element.tagName.toLowerCase() == 'fieldset') {
+                    Element.extend(element).select('input,select').each(function(subElement) {
+                        eventObj.bindCheckingObserver(subElement);
+                    })
+                } else {
+                    var scopeElement = adminSystemConfig.getScopeElement(element);
+                    if (scopeElement) {
+                        Event.observe(scopeElement, 'click', eventObj.checkRequirements);
                     }
-                },
-                keydownCheckRequirements: function() {
-                    window.setTimeout(eventObj.checkRequirements, 1);
-                },
-                bindCheckingObserver: function(element) {
-                    if (element.tagName.toLowerCase() == 'fieldset') {
-                        Element.extend(element).select('input,select').each(function(subElement) {
-                            eventObj.bindCheckingObserver(subElement);
-                        })
+                    Event.observe(element, 'change', eventObj.checkRequirements);
+                    Event.observe(element, 'keydown', eventObj.keydownCheckRequirements);
+                }
+            },
+            indicateEnabled: function() {
+                var labelElement = adminSystemConfig.getUpTr(eventObj.element).select('td.label label')[0];
+                if (typeof labelElement != 'undefined') {
+                    if (eventObj.element.value == 1) {
+                        labelElement.addClassName('enabled');
                     } else {
-                        var scopeElement = adminSystemConfig.getScopeElement(element);
-                        if (scopeElement) {
-                            Event.observe(scopeElement, 'click', eventObj.checkRequirements);
-                        }
-                        Event.observe(element, 'change', eventObj.checkRequirements);
-                        Event.observe(element, 'keydown', eventObj.keydownCheckRequirements);
-                    }
-                },
-                indicateEnabled: function() {
-                    var labelElement = adminSystemConfig.getUpTr(eventObj.element).select('td.label label')[0];
-                    if (typeof labelElement != 'undefined') {
-                        if (eventObj.element.value == 1) {
-                            labelElement.addClassName('enabled');
-                        } else {
-                            labelElement.removeClassName('enabled');
-                        }
+                        labelElement.removeClassName('enabled');
                     }
                 }
-            };
-
-            // fill eventObj with required elements
-            adminSystemConfig.mapClasses(element, false, function(className) {
-                var requiredElement = Element.extend(document.getElementById(className.substr(9)));
-                if (requiredElement) {
-                    eventObj.requires.push(requiredElement);
-                }
-            }, 'requires');
-            Element.extend(element).requiresObj = eventObj;
+            }
+        };
 
-            // replacing "Use Default" action with checking requirements
-            var scopeElement = adminSystemConfig.getScopeElement(element);
-            if (scopeElement) {
-                Event.stopObserving(scopeElement, 'click');
-                Event.observe(scopeElement, 'click', function(event) {
-                    toggleValueElements(scopeElement, Element.previous(scopeElement.parentNode));
-                    eventObj.checkRequirements();
-                });
+        // fill eventObj with required elements
+        adminSystemConfig.mapClasses(element, false, function(className) {
+            var requiredElement = Element.extend(document.getElementById(className.substr(9)));
+            if (requiredElement) {
+                eventObj.requires.push(requiredElement);
             }
+        }, 'requires');
+        Element.extend(element).requiresObj = eventObj;
 
-            // binding events
-            eventObj.requires.each(function(required) {
-                eventObj.bindCheckingObserver(required);
+        // replacing "Use Default" action with checking requirements
+        var scopeElement = adminSystemConfig.getScopeElement(element);
+        if (scopeElement) {
+            Event.stopObserving(scopeElement, 'click');
+            Event.observe(scopeElement, 'click', function(event) {
+                toggleValueElements(scopeElement, Element.previous(scopeElement.parentNode));
+                eventObj.checkRequirements();
             });
-            Event.observe(eventObj.element, 'change', eventObj.indicateEnabled);
-            eventObj.checkRequirements();
-            eventObj.indicateEnabled();
+        }
+
+        // binding events
+        eventObj.requires.each(function(required) {
+            eventObj.bindCheckingObserver(required);
         });
+        Event.observe(eventObj.element, 'change', eventObj.indicateEnabled);
+        eventObj.checkRequirements();
+        eventObj.indicateEnabled();
+    });
 
-        var handleHash = function () {
-            if (window.location.hash == '') {
-                return false;
+    var handleHash = function () {
+        if (window.location.hash == '') {
+            return false;
+        }
+        try {
+            var hashString = window.location.hash.replace('#', ''),
+                containerId = hashString.replace('-link', ''),
+                state = jQuery('#' + containerId + '-state'),
+                head = jQuery('#' + containerId + '-head');
+            if (state.length) {
+                state.val(1);
             }
-            try {
-                var hashString = window.location.hash.replace('#', ''),
-                    containerId = hashString.replace('-link', ''),
-                    state = jQuery('#' + containerId + '-state'),
-                    head = jQuery('#' + containerId + '-head');
-                if (state.length) {
-                    state.val(1);
-                }
-                if (head.length) {
-                    head.collapsed = 0;
-                }
-                Fieldset.applyCollapse(containerId);
-            } catch(err) {
+            if (head.length) {
+                head.collapsed = 0;
             }
-            return false;
-        };
+            Fieldset.applyCollapse(containerId);
+        } catch(err) {
+        }
+        return false;
+    };
 
-        jQuery(window).hashchange(handleHash);
-        handleHash();
+    jQuery(window).hashchange(handleHash);
+    handleHash();
 
-    });
-    
-    jQuery(window).load(function(){jQuery('body').trigger('adminConfigDefined')})
+    registry.set('adminSystemConfig', adminSystemConfig);
 });
 </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/config/form/field/array.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/config/form/field/array.phtml
index 978f1806df767088feea206938412a00432c9b10..2707418fcd53e80e8f584305d0adf80dc65ab432 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/config/form/field/array.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/config/form/field/array.phtml
@@ -37,7 +37,7 @@ $_colspan = $this->isAddAfter() ? 2 : 1;
     <input type="hidden" name="<?php echo $this->getElement()->getName(); ?>[__empty]" value="" />
 
     <script>
-
+        require(['prototype'], function(){
         // create row creator
         var arrayRow<?php echo $_htmlId ?> = {
 
@@ -117,6 +117,6 @@ $_colspan = $this->isAddAfter() ? 2 : 1;
         <?php if ($this->getElement()->getDisabled()):?>
         toggleValueElements({checked: true}, $('grid<?php echo $_htmlId; ?>').parentNode);
             <?php endif;?>
-
+        });
     </script>
 </div>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/config/js.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/config/js.phtml
index dac09723f71f4ff21cd905a3c48d5484ff57c33b..aa73e1b8bd9ff8991b5a13802b945377aeaac51d 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/config/js.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/config/js.phtml
@@ -8,7 +8,10 @@
 
 ?>
 <script>
-//<![CDATA[
+require([
+    'prototype'
+], function () {
+
 var freeModel = Class.create();
 freeModel.prototype = {
     initialize : function()
@@ -236,8 +239,8 @@ function showHint() {
         });
     });
 }
-Event.observe(window, 'load', function(){
-    showHint();
+
+Event.observe(window, 'load', showHint);
+
 });
-//]]>
 </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml
index f023180974b5c7ef3d32bfcc00bb43c6c81fcf01..975849b3a7e7f428ba674d72a0ed533318bc2949 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/search.phtml
@@ -8,7 +8,7 @@
 
 /** @var $this \Magento\Backend\Block\GlobalSearch */
 ?>
-<div class="search-global miniform">
+<div class="search-global miniform" data-mage-init='{"globalSearch": {}}'>
     <form action="#" id="form-search">
         <div class="field search-global-field">
             <label class="label" for="search-global"><span><?php echo __('Search')?></span></label>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml
index e0f0bc0588079dd3d0db25f7f8b7b67fbeb0f40c..2ff4b202b9038fdd939f5c84253429be0798299b 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/shipping/applicable_country.phtml
@@ -5,7 +5,10 @@
  */
 ?>
 <script>
-//<![CDATA[
+require([
+    'prototype'
+], function () {
+
 var CountryModel = Class.create();
 CountryModel.prototype = {
     initialize : function()
@@ -108,5 +111,5 @@ CountryModel.prototype = {
 
 }
 countryApply = new CountryModel();
-//]]>
+});
 </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/system/variable/js.phtml b/app/code/Magento/Backend/view/adminhtml/templates/system/variable/js.phtml
index 29dc3c688435cfabbe2cf377d802a1dc96612c8f..25ecf31abccffb58af770fd93ef12a2c25e51434 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/system/variable/js.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/system/variable/js.phtml
@@ -5,9 +5,11 @@
  */
 ?>
 <script>
-//<![CDATA[
+require([
+    'prototype'
+], function () {
 
-function toggleValueElement(element) {
+window.toggleValueElement = function(element) {
     var disabled = false;
     if (element.value == 1) {
         // use default value
@@ -24,5 +26,5 @@ function toggleValueElement(element) {
     }
 }
 
-//]]>
+});
 </script>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element.phtml
index 8fcf631f014a883c39b6a1e4bf8558dd5b7e26ac..a8b8d55a857b989cf7a73ba1ae8da7dc54ae94e5 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element.phtml
@@ -60,33 +60,31 @@
     case 'wysiwyg': ?>
     <span class="form_row">
       <label for="<?php echo $element->getHtmlId() ?>"><?php echo $element->getLabel() ?>:</label>
-        <script type="text/javascript" src="<?php echo $this->getViewFileUrl('tiny_mce/tiny_mce.js') ?>"></script>
         <script>
-
-        //<![CDATA[
-        tinyMCE.init({
-            mode : "exact",
-            theme : "advanced",
-            elements : "<?php echo $element->getName(); ?>",
-            plugins : "inlinepopups,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras",
-            theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
-            theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
-            theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
-            theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,|,visualchars,nonbreaking",
-            theme_advanced_toolbar_location : "top",
-            theme_advanced_toolbar_align : "left",
-            theme_advanced_path_location : "bottom",
-            extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
-            theme_advanced_resize_horizontal : 'false',
-            theme_advanced_resizing : 'true',
-            apply_source_formatting : 'true',
-            convert_urls : 'false',
-            force_br_newlines : 'true',
-            doctype : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
-
+        require([
+            'tinymce'
+        ], function(tinyMCE){
+            tinyMCE.init({
+                mode : "exact",
+                theme : "advanced",
+                elements : "<?php echo $element->getName(); ?>",
+                plugins : "inlinepopups,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras",
+                theme_advanced_buttons1 : "newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect,fontselect,fontsizeselect",
+                theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
+                theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
+                theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,|,visualchars,nonbreaking",
+                theme_advanced_toolbar_location : "top",
+                theme_advanced_toolbar_align : "left",
+                theme_advanced_path_location : "bottom",
+                extended_valid_elements : "a[name|href|target|title|onclick],img[class|src|border=0|alt|title|hspace|vspace|width|height|align|onmouseover|onmouseout|name],hr[class|width|size|noshade],font[face|size|color|style],span[class|align|style]",
+                theme_advanced_resize_horizontal : 'false',
+                theme_advanced_resizing : 'true',
+                apply_source_formatting : 'true',
+                convert_urls : 'false',
+                force_br_newlines : 'true',
+                doctype : '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">'
+            });
         });
-        //]]>
-
 </script>
       <textarea name="<?php echo $element->getName() ?>" title="<?php echo $element->getTitle() ?>" id="<?php echo $element->getHtmlId() ?>" class="textarea <?php echo $element->getClass() ?>" cols="80" rows="20"><?php echo $element->getValue(); ?></textarea>
     </span>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml
index 74a7c81782bd2fbf22b0e02f7b3d7eca10c3476f..06fbcfad3d1dbeba7a05eb994e52a442627ac201 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/element/gallery.phtml
@@ -52,11 +52,13 @@ document.getElementById("gallery_thead").style.visibility="hidden";
 </tbody></table>
 
 <script>
-//<![CDATA[
+require([
+    'prototype'
+], function () {
 id = 0;
 num_of_images = <?php echo $i ?>;
 
-function addNewImage()
+window.addNewImage = function()
 {
 
     document.getElementById("gallery_thead").style.visibility="visible";
@@ -105,7 +107,7 @@ function addNewImage()
 
 }
 
-function deleteImage(image)
+window.deleteImage = function(image)
 {
     num_of_images--;
     if (num_of_images<=0) {
@@ -118,8 +120,7 @@ function deleteImage(image)
         image.parentNode.parentNode.parentNode.removeChild( image.parentNode.parentNode );
     }
 }
-//]]>
-
+});
 </script>
     </td>
 </tr>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
index af96e0bb2cf72b88d24d57de2f3593712bd3e139..2d35acca3518c298b7f4b3ff096647305fcefdb0 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
@@ -85,7 +85,7 @@ if ($isField) {
 
         <?php if ($element->hasAdvanced() && !$isField): ?>
             <?php echo(!$element->getNoContainer() && $advancedAfter)  ? '</fieldset>' : ''?>
-            <details class="details" id="details<?php echo $id ?>">
+            <details data-mage-init='{"details": {}}' class="details" id="details<?php echo $id ?>">
                 <summary class="details-summary" id="details-summary<?php echo $id ?>">
                     <span><?php echo $advancedLabel ?></span>
                 </summary>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/container.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/container.phtml
index 914fc4d80329cec2dd46b6a6c46ad1f67d05ab72..b9b47925d884040a56292376cefc5b0e02c7ac34 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/container.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/container.phtml
@@ -8,6 +8,6 @@
 
 ?>
 <?php if ($this->getButtonsHtml()): ?>
-<div class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
 <?php endif; ?>
 <?php echo $this->getGridHtml() ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/serializer.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/serializer.phtml
index fae5424a2fb995cc65dbfbf7ca2fd137d99a3fb1..56e9f6c7d944a0020931404c6b2e36bc41642345 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/serializer.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/serializer.phtml
@@ -16,17 +16,22 @@
 <?php $formId = $this->getFormId()?>
 <?php if (!empty($formId)) :?>
 <script>
-    Event.observe(window, "load", function(){
-        var serializeInput  = document.createElement('input');
-        serializeInput.type = 'hidden';
-        serializeInput.name = '<?php echo $this->getInputElementName()?>';
-        serializeInput.id   = '<?php echo $_id?>';
-        try {
-            document.getElementById('<?php echo $formId?>').appendChild(serializeInput);
-            new serializerController('<?php echo $_id?>', <?php echo $this->getDataAsJSON() ?>, <?php echo $this->getColumnInputNames(true) ?>, <?php echo $this->getGridBlock()->getJsObjectName() ?>, '<?php echo $this->getReloadParamName()?>');
-        } catch(e) {
-            //Error add serializer
-        }
+    require([
+        'prototype',
+        'mage/adminhtml/grid'
+    ], function(){
+        Event.observe(window, "load", function(){
+            var serializeInput  = document.createElement('input');
+            serializeInput.type = 'hidden';
+            serializeInput.name = '<?php echo $this->getInputElementName()?>';
+            serializeInput.id   = '<?php echo $_id?>';
+            try {
+                document.getElementById('<?php echo $formId?>').appendChild(serializeInput);
+                new serializerController('<?php echo $_id?>', <?php echo $this->getDataAsJSON() ?>, <?php echo $this->getColumnInputNames(true) ?>, <?php echo $this->getGridBlock()->getJsObjectName() ?>, '<?php echo $this->getReloadParamName()?>');
+            } catch(e) {
+                //Error add serializer
+            }
+        });
     });
 </script>
 <?php else :?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/view/container.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/view/container.phtml
index 7454f10a81d475c8575077c58386aed2ccddf202..ca594d0d7be2b23caf224bed8e3b1971f3036b56 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/view/container.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/view/container.phtml
@@ -7,5 +7,5 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
 <?php echo $this->getViewHtml() ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/web/js/bootstrap/editor.js b/app/code/Magento/Backend/view/adminhtml/web/js/bootstrap/editor.js
index 3bd60f3dccaec026b552c9162a30b856dd36481e..80ac54f08855e710660394d03e4862ce99a8f716 100644
--- a/app/code/Magento/Backend/view/adminhtml/web/js/bootstrap/editor.js
+++ b/app/code/Magento/Backend/view/adminhtml/web/js/bootstrap/editor.js
@@ -5,6 +5,5 @@
  */
 require([
     "Magento_Backend/variables",
-    "mage/adminhtml/browser",
-    "mage/adminhtml/wysiwyg/widget"
+    "mage/adminhtml/browser"
 ]);
\ No newline at end of file
diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index 0c5ceb2637abf0bff303dcb81bc9f2943051c674..7cf1fee5ac8759195e9ccdd38ffd8b9805a0b4de 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -8,7 +8,7 @@
 
 ?>
 <!-- TODO: refactor form styles and js -->
-<div class="fade backup-dialog" id="rollback-warning" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="rollback-warning" style="display: none;">
     <div class="popup popup-notice">
         <div class="popup-inner">
             <header class="popup-header">
@@ -24,7 +24,7 @@
     </div>
 </div>
 
-<div class="fade backup-dialog" id="backup-warning" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="backup-warning" style="display: none;">
     <div class="popup popup-notice">
         <div class="popup-inner">
             <header class="popup-header">
@@ -43,7 +43,7 @@
     </div>
 </div>
 
-<div class="fade backup-dialog" id="backup-options" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="backup-options" style="display: none;">
     <div class="popup popup-notice">
         <div class="popup-inner">
             <header class="popup-header">
@@ -78,7 +78,7 @@
     </div>
  </div>
 
-<div class="fade backup-dialog" id="rollback-request-password" style="display: none;">
+<div data-mage-init='{"modalPopup": {}}' class="fade backup-dialog" id="rollback-request-password" style="display: none;">
     <div class="popup popup-notice">
         <div class="popup-inner">
             <header class="popup-header">
diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Checkbox.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Checkbox.php
index 47f27eddc23772de23773c881aa094f460b7a0a8..b6dcb6d46c2620ce98b6a17107e0b2fe40bd7b62 100644
--- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Checkbox.php
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Checkbox.php
@@ -25,7 +25,7 @@ class Checkbox extends \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Op
     public function setValidationContainer($elementId, $containerId)
     {
         return '<script>
-            $(\'' .
+            document.getElementById(\'' .
             $elementId .
             '\').advaiceContainer = \'' .
             $containerId .
diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Multi.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Multi.php
index 8681cd4ee624e5f6e20ef84dd208b834ef84eb2a..a315e6312bb877e05b04ddd8287e6f4d886f679f 100644
--- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Multi.php
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Multi.php
@@ -25,7 +25,7 @@ class Multi extends \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Optio
     public function setValidationContainer($elementId, $containerId)
     {
         return '<script>
-            $(\'' .
+            document.getElementById(\'' .
             $elementId .
             '\').advaiceContainer = \'' .
             $containerId .
diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Radio.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Radio.php
index e5c1a3764da4796cf70e23fa4c43043dee2868cd..1594ab04445c23aa672df2b67dc7e04c064eeb8f 100644
--- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Radio.php
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Radio.php
@@ -25,7 +25,7 @@ class Radio extends \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Optio
     public function setValidationContainer($elementId, $containerId)
     {
         return '<script>
-            $(\'' .
+            document.getElementById(\'' .
             $elementId .
             '\').advaiceContainer = \'' .
             $containerId .
diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Select.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Select.php
index 6e428d6652c45c9db2fa9a4b34ed42ec5ddf80ad..6aa5c16c26551423cc37cad439afcc43b93973ac 100644
--- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Select.php
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Composite/Fieldset/Options/Type/Select.php
@@ -25,7 +25,7 @@ class Select extends \Magento\Bundle\Block\Catalog\Product\View\Type\Bundle\Opti
     public function setValidationContainer($elementId, $containerId)
     {
         return '<script>
-            $(\'' .
+            document.getElementById(\'' .
             $elementId .
             '\').advaiceContainer = \'' .
             $containerId .
diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php
index 10439a8fb192ffc6f578bcdde5271fd125d71dae..06367ff6da556605ad8bb04f9c941499513b17b0 100644
--- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php
@@ -74,7 +74,7 @@ class Attributes extends \Magento\Catalog\Block\Adminhtml\Product\Edit\Tab\Attri
             $tax->setAfterElementHtml(
                 '<script>' .
                 "
-                //<![CDATA[
+                require(['prototype'], function(){
                 function changeTaxClassId() {
                     if ($('price_type').value == '" .
                 \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC .
@@ -93,13 +93,11 @@ class Attributes extends \Magento\Catalog\Block\Adminhtml\Product\Edit\Tab\Attri
                     }
                 }
 
-                document.observe('dom:loaded', function() {
-                    if ($('price_type')) {
-                        $('price_type').observe('change', changeTaxClassId);
-                        changeTaxClassId();
-                    }
+                if ($('price_type')) {
+                    $('price_type').observe('change', changeTaxClassId);
+                    changeTaxClassId();
+                }
                 });
-                //]]>
                 " .
                 '</script>'
             );
diff --git a/app/code/Magento/Bundle/view/adminhtml/requirejs-config.js b/app/code/Magento/Bundle/view/adminhtml/requirejs-config.js
deleted file mode 100644
index 650ffe84e87024f379384c4dad0de8134848af68..0000000000000000000000000000000000000000
--- a/app/code/Magento/Bundle/view/adminhtml/requirejs-config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-var config = {
-    deps: [
-        'Magento_Bundle/product/validation-rules'
-    ]
-};
\ No newline at end of file
diff --git a/app/code/Magento/Bundle/view/adminhtml/templates/product/edit/bundle/option.phtml b/app/code/Magento/Bundle/view/adminhtml/templates/product/edit/bundle/option.phtml
index 2d68f15534eb43cf1b7213c52a6c6ac6456fc32d..51ef90c0baba38ebc198bacb6b3288bf5c61aa43 100644
--- a/app/code/Magento/Bundle/view/adminhtml/templates/product/edit/bundle/option.phtml
+++ b/app/code/Magento/Bundle/view/adminhtml/templates/product/edit/bundle/option.phtml
@@ -117,7 +117,7 @@
 require([
     "jquery",
     "jquery/jquery.tabs",
-    "js/theme",
+    "collapsable",
     "Magento_Bundle/js/bundle-product",
     "prototype",
     "mage/adminhtml/form"
diff --git a/app/code/Magento/Bundle/view/adminhtml/web/product/validation-rules.js b/app/code/Magento/Bundle/view/adminhtml/web/product/validation-rules.js
deleted file mode 100644
index 40608e8c8b0e9d0bc9978d03dedc5c8df37b6935..0000000000000000000000000000000000000000
--- a/app/code/Magento/Bundle/view/adminhtml/web/product/validation-rules.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/**
- * Bundle client side validation rules
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define(["jquery","mage/backend/validation"], function($){
-    $.validator.addMethod('validate-greater-zero-based-on-option', function(v, el) {
-        var optionType = $(el)
-                .closest('.form-list')
-                .prev('.fieldset-alt')
-                .find('select.select-product-option-type'),
-            optionTypeVal = optionType.val();
-        v = Number(v) || 0;
-        if (optionType && (optionTypeVal == 'checkbox' || optionTypeVal == 'multi') && v <= 0) {
-            return false;
-        }
-        return true;
-    }, 'Please enter a number greater 0 in this field.');
-});
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php
index 3696da4c41474c39ad33bd06ae4bd8421b54d98d..783a3bf00587ec154f665b9d1376938145d3a339 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php
@@ -78,8 +78,15 @@ class Form extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
                 [
                     'id' => 'save',
                     'label' => __('Save Category'),
-                    'onclick' => "categorySubmit('" . $this->getSaveUrl() . "', true)",
-                    'class' => 'save primary save-category'
+                    'class' => 'save primary save-category',
+                    'data_attribute' => [
+                        'mage-init' => [
+                            'Magento_Catalog/catalog/category/edit' => [
+                                'url' => $this->getSaveUrl(),
+                                'ajax' => true
+                            ]
+                        ]
+                    ]
                 ]
             );
         }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Pricestep.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Pricestep.php
index bc32a8f84cc6b6e8c50cb2f05f624f7fe380345b..d55631e29834cd3640d646b04c8f96541832d4bb 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Pricestep.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Pricestep.php
@@ -54,11 +54,13 @@ class Pricestep extends \Magento\Framework\Data\Form\Element\Text
 
         $html .= ' <label for="' . $htmlId . '" class="normal">' . __('Use Config Settings') . '</label>';
         $html .= '<script>' .
+            'require(["prototype"], function(){'.
             'toggleValueElements($(\'' .
             $htmlId .
             '\'), $(\'' .
             $htmlId .
             '\').parentNode);' .
+            '});'.
             '</script>';
 
         return $html;
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/Available.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/Available.php
index 11332326eff55d44dc634b5bd89a39aaca39077a..896b92743bfcff5fc8ed8190470e850f0eff7a66 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/Available.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/Available.php
@@ -51,11 +51,11 @@ class Available extends \Magento\Framework\Data\Form\Element\Multiselect
 
         $html .= ' onclick="toggleValueElements(this, this.parentNode);" class="checkbox" type="checkbox" />';
         $html .= ' <label for="' . $htmlId . '" class="normal">' . __('Use All Available Attributes') . '</label>';
-        $html .= '<script>toggleValueElements($(\'' .
+        $html .= '<script>require(["prototype"], function(){toggleValueElements($(\'' .
             $htmlId .
             '\'), $(\'' .
             $htmlId .
-            '\').parentNode);</script>';
+            '\').parentNode);});</script>';
 
         return $html;
     }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/DefaultSortby.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/DefaultSortby.php
index dd1e70a384d8081cb1d05446abd132df35ff05c6..adebefb41012605394ff806b3f9ca29be22faa95 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/DefaultSortby.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Helper/Sortby/DefaultSortby.php
@@ -51,11 +51,11 @@ class DefaultSortby extends \Magento\Framework\Data\Form\Element\Select
 
         $html .= ' onclick="toggleValueElements(this, this.parentNode);" class="checkbox" type="checkbox" />';
         $html .= ' <label for="' . $htmlId . '" class="normal">' . __('Use Config Settings') . '</label>';
-        $html .= '<script>toggleValueElements($(\'' .
+        $html .= '<script>require(["prototype"], function(){toggleValueElements($(\'' .
             $htmlId .
             '\'), $(\'' .
             $htmlId .
-            '\').parentNode);</script>';
+            '\').parentNode);});</script>';
 
         return $html;
     }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php
index 6db0db075824da391371c6ac752d79b5fa6cda58..749e52862fa44aaf1cb771b3026606565a27a15b 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php
@@ -303,12 +303,12 @@ class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
         foreach ($categories as $key => $category) {
             $categories[$key] = $this->_getNodeJson($category);
         }
-        return '<script>' . $javascriptVarName . ' = ' . $this->_jsonEncoder->encode(
+        return '<script>require(["prototype"], function(){' . $javascriptVarName . ' = ' . $this->_jsonEncoder->encode(
             $categories
         ) .
             ';' .
             ($this->canAddSubCategory() ? '$("add_subcategory_button").show();' : '$("add_subcategory_button").hide();') .
-            '</script>';
+            '});</script>';
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Config.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Config.php
index 32b085dfe69a081e4fd7eb8eebf2c8c0ab7f397b..3e157435a97f5a9407123715e1ad6ebc5d19e41a 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Config.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Config.php
@@ -33,11 +33,11 @@ class Config extends \Magento\Framework\Data\Form\Element\Select
         $html .= '<input id="' . $htmlId . '" name="product[' . $htmlId . ']" ' . $disabled . ' value="1" ' . $checked;
         $html .= ' onclick="toggleValueElements(this, this.parentNode);" class="checkbox" type="checkbox" />';
         $html .= ' <label for="' . $htmlId . '">' . __('Use Config Settings') . '</label>';
-        $html .= '<script>toggleValueElements($(\'' .
+        $html .= '<script>require(["prototype"], function(){toggleValueElements($(\'' .
             $htmlId .
             '\'), $(\'' .
             $htmlId .
-            '\').parentNode);</script>';
+            '\').parentNode);});</script>';
 
         return $html;
     }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Image.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Image.php
index 79f40ecf750816da8d2c6f0520ed4c83a8caa2ad..51e48bd61f7bc3ff2ce4d8560393140dd677422b 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Image.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Image.php
@@ -39,12 +39,13 @@ class Image extends \Magento\Framework\Data\Form\Element\Image
             } else {
                 $inputField = '<input value="%s" id="%s_hidden" type="hidden" class="required-entry" />';
                 $html .= sprintf($inputField, $this->getValue(), $this->getHtmlId());
-                $html .= '<script>
+                $html .= '<script>require(["prototype"], function(){
                     syncOnchangeValue(\'' .
                     $this->getHtmlId() .
                     '\', \'' .
                     $this->getHtmlId() .
                     '_hidden\');
+                });
                 </script>';
             }
         } else {
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml
index 75abe550ad72419fbfd69c15b5914ecc2c0f80ac..202ff06a2222cde22fff192b5687b184197c1642 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_category_edit.xml
@@ -8,7 +8,6 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
         <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
-        <link src="Magento_Catalog::js/bootstrap/category-edit.js"/>
     </head>
     <update handle="editor"/>
     <body>
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml
index 3acbce9c4bb80772c2a23664f99d47a5db9d6380..9bbf8fe2b398f1fe90b1864ea25c302d3c77a9b5 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_new.xml
@@ -10,7 +10,6 @@
         <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
         <css src="Magento_Catalog::catalog/category-selector.css"/>
         <css src="Magento_Catalog::product/product.css"/>
-        <link src="Magento_Catalog::js/bootstrap/product-new.js"/>
     </head>
     <update handle="editor"/>
     <body>
diff --git a/app/code/Magento/Catalog/view/adminhtml/requirejs-config.js b/app/code/Magento/Catalog/view/adminhtml/requirejs-config.js
index f6f6ae4ffe12ec9681b962a54f205dabde4b5865..9b1663d7553e4f89877424e06a255f1bc49537d4 100644
--- a/app/code/Magento/Catalog/view/adminhtml/requirejs-config.js
+++ b/app/code/Magento/Catalog/view/adminhtml/requirejs-config.js
@@ -11,10 +11,10 @@ var config = {
             categoryTree:       'Magento_Catalog/js/category-tree',
             productGallery:     'Magento_Catalog/js/product-gallery',
             baseImage:          'Magento_Catalog/catalog/base-image-uploader',
-            productAttributes:  'Magento_Catalog/catalog/product'
+            productAttributes:  'Magento_Catalog/catalog/product-attributes'
         }
     },
     deps: [
-        "Magento_Catalog/catalog/product"
+        'Magento_Catalog/catalog/product'
     ]
 };
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml
index 78f0314f37e1de62a26e5b3666e5bd9ef6a54901..5b2d5356cb9104c938083655f3b23eb7afcd85a6 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/checkboxes/tree.phtml
@@ -14,6 +14,7 @@
 <script>
     require([
         "prototype",
+        "extjs/ext-tree-checkbox",
         "mage/adminhtml/form"
     ], function(){
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
index 330375f2bbd380a80b7ad97ac0378bb01a2d54d6..0f26e6c0cce5b318a419150a61f6b6686b8497be 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
@@ -19,9 +19,10 @@
 <script>
 require([
     "jquery",
-    "js/theme",
+    "tinymce",
+    "loadingPopup",
     "mage/backend/floating-header"
-], function(jQuery){
+], function(jQuery, tinyMCE){
 
 //<![CDATA[
     function categoryReset(url,useAjax){
@@ -91,6 +92,7 @@ require([
                         $('.page-actions').floatingHeader({
                             'title': '.category-edit-title'
                         });
+                        $('body').trigger('contentUpdated');
                         try {
                             if (refreshTree) {
                                 window.refreshTreeArea();
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml
index 6b3e96b3019fbca83d313b27f27d679cf043d1ed..858c1e78db5fe36197cd8025b775d5d42426230e 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit/form.phtml
@@ -13,7 +13,7 @@ $categoryId = $this->getCategoryId();
 <div class="category-edit-title">
     <h3 class="title"><?php echo $this->escapeHtml($this->getHeader()) . ($this->getCategoryId() ? ' (' . __('ID: %1', $this->getCategoryId()) . ')' : '') ?></h3>
 </div>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <?php echo $this->getResetButtonHtml() ?>
     <?php if ($this->getCategoryId()): ?>
         <?php echo $this->getDeleteButtonHtml() ?>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index ab241f4cf2526362021d4fa0d51278367eaf8c65..c8a0632bfdb293717ef5ee0c3b76b565be9538e2 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -38,6 +38,7 @@ require([
     "jquery",
     "jquery/ui",
     "prototype",
+    "extjs/ext-tree-checkbox",
     "mage/adminhtml/form",
     "mage/translate"
 ], function(jQuery){
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml
index b40ac67e83969387dbadd4d8a2dbf784a44be429..0cf05f91b19f58445242a872daa4dbe768cc6f93 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/widget/tree.phtml
@@ -12,8 +12,7 @@
 <div id="<?php echo $_divId ?>" class="tree"></div>
 
 <script>
-require(['prototype'], function(){
-//<![CDATA[
+require(["prototype", "extjs/ext-tree-checkbox"], function(){
 
 var tree<?php echo $this->getId() ?>;
 
@@ -183,7 +182,6 @@ Ext.onReady(function()
     tree<?php echo $this->getId() ?>.loadTree({parameters:parameters, data:<?php echo $this->getTreeJson() ?>},true);
 
 });
-//]]>
 
 });
 </script>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
index 49733c945841ac98f9bb5bd6b4bb24615f97ddd4..5d883eb1dfb8c344541d2f9d39f2b801371640b7 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
@@ -17,7 +17,7 @@
     <input name="form_key" type="hidden" value="<?php echo $this->escapeHtml($this->getFormKey()) ?>" />
     <?php echo $this->getChildHtml('form') ?>
 </form>
-<div class="page-actions" <?php echo $this->getUiId('content-header') ?>>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions" <?php echo $this->getUiId('content-header') ?>>
     <?php echo $this->getButtonsHtml('header') ?>
 </div>
 <script>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
index 46f2599f4f4298d4a358cef9aea7afe539890919..58b6dee7081e54f680a12434012e6d7f11a085ae 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -8,9 +8,8 @@
 
 ?>
 <script>
-require(["jquery", "js/theme", "prototype"], function(jQuery){
+require(["jquery", "collapsable", "prototype"], function(jQuery){
 
-//<![CDATA[
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
         $(select).next('select').removeClassName('no-display');
@@ -325,7 +324,6 @@ window.bindAttributeInputType = bindAttributeInputType;
 window.checkOptionsPanelVisibility = checkOptionsPanelVisibility;
 window.getFrontTab = getFrontTab;
 window.toggleApplyVisibility = toggleApplyVisibility;
-//]]>
 
 });
 </script>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index b5fb8f89ebc6c80e7ef7a146ded5c532bbdd4ef6..d8eb14c72549e94a2e6db828e4c86b9c2c53fab7 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -39,7 +39,7 @@ require([
         </div>
         <div id="tree-div2" class="attribute-set-tree"></div>
             <script>
-require(['jquery'], function(jQuery){
+require(["jquery", "extjs/ext-tree-checkbox"], function(jQuery){
 
             //<![CDATA[
             var allowDragAndDrop = <?php echo($this->getIsReadOnly() ? 'false' : 'true'); ?>;
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/composite/fieldset/options/type/date.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/composite/fieldset/options/type/date.phtml
index d569edd981107bf88748453fe2a607ea1e0d672a..443eadcfc64684e6256ee81af77b628ec15a7c38 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/composite/fieldset/options/type/date.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/composite/fieldset/options/type/date.phtml
@@ -47,7 +47,7 @@ require([
     <script>
 require([
   "jquery",
-  "mage/validation"
+  "mage/backend/validation"
 ], function(jQuery){
 
     //<![CDATA[
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
index 42200afb58c0088f9096bbd8426f689ffecc0a83..5e83b5b88e5e0f351adf80243eb0ba43286c2c48 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit.phtml
@@ -64,7 +64,7 @@ require([
     "mage/mage",
     "Magento_Catalog/catalog/type-switcher",
     "mage/backend/tabs",
-    "domReady"
+    "domReady!"
 ], function($){
     var $form = $('[data-form=edit-product]');
     $form.data('typeSwitcher', new TypeSwitcher(<?php echo $this->getTypeSwitcherData();?>).bindAll());
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml
index a771230a7091c55ce745c7d80af9082baffbe500..88c42be773a5f6f18e663a557438452d896d55d0 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/action/websites.phtml
@@ -78,6 +78,9 @@
 </div>
 
 <script>
+require([
+    'prototype'
+], function () {
     var productWebsiteCheckboxes = $$('.website-checkbox');
 
     for(var i=0;i<productWebsiteCheckboxes.length;i++){
@@ -100,4 +103,5 @@
             }
         }
     }
+});
 </script>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/serializer.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/serializer.phtml
index c51ca7f6aa9e5f8bb21d1e1d3a2a67ea0152e7be..eae850e28308dc0cd59af73d9513cc3767d45a89 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/serializer.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/edit/serializer.phtml
@@ -10,7 +10,3 @@
 
 <?php $_id = 'id_' . md5(microtime()) ?>
 <input type="hidden" name="<?php echo $this->getInputElementName()?>"  value="" id="<?php echo $_id?>" />
-<script>
-// create serializer controller, that will syncronize grid checkboxes with hidden input
-new productLinksController('<?php echo $_id?>', <?php echo $this->getProductsJSON() ?>, <?php echo $this->getGridBlock()->getJsObjectName() ?>);
-</script>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
index cb5e7d11f6f382e8de4c6aeafb75fff7f3d3ecf6..321d145bd472f893c59be5c6910b11de7b3419ad 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
@@ -10,9 +10,10 @@
 <script>
 require([
     "jquery",
+    "tinymce",
     "prototype",
     "mage/adminhtml/events"
-], function(jQuery){
+], function(jQuery, tinyMCE){
 
 //<![CDATA[
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js
index ba29b7e8df72b44fac7b7a3a20a2b3c440f0aa9c..b56225bc6ea298dc8a74c20ffb87e01929806021 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/edit.js
@@ -6,11 +6,11 @@
  * Create/edit some category
  */
 define([
-    "jquery",
-    "prototype"
-], function(jQuery){
+    'jquery',
+    'prototype'
+], function (jQuery) {
 
-var categorySubmit = function (url, useAjax) {
+    var categorySubmit = function (url, useAjax) {
     var activeTab = $('active_tab_id');
     if (activeTab) {
         if (activeTab.tabsJsObject && activeTab.tabsJsObject.tabs('activeAnchor')) {
@@ -69,6 +69,10 @@ var categorySubmit = function (url, useAjax) {
     jQuery('#category_edit_form').trigger('submit');
 };
 
-window.categorySubmit = categorySubmit;
-
+    return function (config, element) {
+        config = config || {};
+        jQuery(element).on('click', function (event) {
+            categorySubmit(config.url, config.ajax);
+        });
+    };
 });
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
new file mode 100644
index 0000000000000000000000000000000000000000..3bb3a51ffaa8dc290296748d58fa9d8b7cda8f9a
--- /dev/null
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
@@ -0,0 +1,75 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'jquery/ui'
+], function ($) {
+    'use strict';
+
+    $.widget('mage.productAttributes', {
+        _create: function () {
+            this._on({
+                'click': '_showPopup'
+            });
+        },
+
+        _prepareUrl: function () {
+            var name = $('[data-role=product-attribute-search]').val();
+
+            return this.options.url +
+                (/\?/.test(this.options.url) ? '&' : '?') +
+                'set=' + $('#attribute_set_id').val() +
+                '&attribute[frontend_label]=' +
+                window.encodeURIComponent(name);
+        },
+
+        _showPopup: function (event) {
+            var wrapper,
+                iframe;
+
+            wrapper = $('<div id="create_new_attribute"/>').appendTo('body').dialog({
+                title: 'New Attribute',
+                width: 600,
+                minHeight: 650,
+                modal: true,
+                resizable: false,
+                resizeStop: function () {
+                    iframe.height($(this).outerHeight() + 'px');
+                    iframe.width($(this).outerWidth() + 'px');
+                }
+            });
+
+            iframe = $('<iframe id="create_new_attribute_container">').attr({
+                src: this._prepareUrl(event),
+                frameborder: 0,
+                style: 'position:absolute;top:58px;left:0px;right:0px;bottom:0px'
+            });
+
+            iframe.on('load', function () {
+                $(this).css({
+                    height: wrapper.outerHeight() + 'px',
+                    width: wrapper.outerWidth() + 'px'
+                });
+            });
+
+            wrapper.append(iframe);
+
+            wrapper.on('dialogclose', function () {
+                var dialog = this,
+                    doc = iframe.get(0).document;
+
+                if (doc && $.isFunction(doc.execCommand)) {
+                    //IE9 break script loading but not execution on iframe removing
+                    doc.execCommand('stop');
+                    iframe.remove();
+                }
+
+                $(dialog).remove();
+            });
+        }
+    });
+
+    return $.mage.productAttributes;
+});
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product.js
index 3f18a23e17f1f9202fc3a4472f0da31410dc5f5a..df3cc6b9694987e9e382d8e348db0fd2f95d9915 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product.js
@@ -2,128 +2,70 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([
+require([
     "jquery",
-    "jquery/ui",
     "prototype"
 ], function(jQuery){
 
-window.Product = {};
+    window.Product = {};
 
-(function ($) {
-    $.widget("mage.productAttributes", {
-        _create: function () {
-            this._on({'click':'_showPopup'});
-        },
-        _prepareUrl: function() {
-            var name = $('[data-role=product-attribute-search]').val();
-            return this.options.url +
-                (/\?/.test(this.options.url) ? '&' : '?') +
-                'set=' + $('#attribute_set_id').val() +
-                '&attribute[frontend_label]=' +
-                window.encodeURIComponent(name);
-        },
-        _showPopup: function (event) {
-            var wrapper = $('<div id="create_new_attribute"/>').appendTo('body').dialog({
-                title: 'New Attribute',
-                width: 600,
-                minHeight: 650,
-                modal: true,
-                resizable: false,
-                resizeStop: function(event, ui) {
-                    iframe.height($(this).outerHeight() + 'px');
-                    iframe.width($(this).outerWidth() + 'px');
-                }
-            });
-            var iframe = $('<iframe id="create_new_attribute_container">').attr({
-                src: this._prepareUrl(event),
-                frameborder: 0,
-                style: "position:absolute;top:58px;left:0px;right:0px;bottom:0px"
-            });
-            iframe.on('load', function () {
-                $(this).css({
-                    height:  wrapper.outerHeight() + 'px',
-                    width: wrapper.outerWidth() + 'px'
-                });
-            });
-            wrapper.append(iframe);
-
-            wrapper.on('dialogclose', function () {
-                var dialog = this;
-                var doc = iframe.get(0).document;
-                if (doc && $.isFunction(doc.execCommand)) {
-                    //IE9 break script loading but not execution on iframe removing
-                    doc.execCommand('stop');
-                    iframe.remove();
-                }
-                $(dialog).remove();
-            });
+    function toogleFieldEditMode(toogleIdentifier, fieldContainer) {
+        if ($(toogleIdentifier).checked) {
+            enableFieldEditMode(fieldContainer);
+        } else {
+            disableFieldEditMode(fieldContainer);
         }
-    });
-})(jQuery);
-
-function toogleFieldEditMode(toogleIdentifier, fieldContainer) {
-    if ($(toogleIdentifier).checked) {
-        enableFieldEditMode(fieldContainer);
-    } else {
-        disableFieldEditMode(fieldContainer);
     }
-}
 
-function disableFieldEditMode(fieldContainer) {
-    $(fieldContainer).disabled = true;
-    if ($(fieldContainer + '_hidden')) {
-        $(fieldContainer + '_hidden').disabled = true;
+    function disableFieldEditMode(fieldContainer) {
+        $(fieldContainer).disabled = true;
+        if ($(fieldContainer + '_hidden')) {
+            $(fieldContainer + '_hidden').disabled = true;
+        }
     }
-}
 
-function enableFieldEditMode(fieldContainer) {
-    $(fieldContainer).disabled = false;
-    if ($(fieldContainer + '_hidden')) {
-        $(fieldContainer + '_hidden').disabled = false;
+    function enableFieldEditMode(fieldContainer) {
+        $(fieldContainer).disabled = false;
+        if ($(fieldContainer + '_hidden')) {
+            $(fieldContainer + '_hidden').disabled = false;
+        }
     }
-}
 
-function onCompleteDisableInited() {
-    jQuery.each(jQuery('[data-disable]'), function() {
-        var item = jQuery(this).data('disable');
-        disableFieldEditMode(item);
-    });
-}
+    function onCompleteDisableInited() {
+        jQuery.each(jQuery('[data-disable]'), function () {
+            var item = jQuery(this).data('disable');
+            disableFieldEditMode(item);
+        });
+    }
 
-function onUrlkeyChanged(urlKey) {
-    urlKey = $(urlKey);
-    var hidden = urlKey.next('input[type=hidden]');
-    var chbx = urlKey.next('input[type=checkbox]');
-    var oldValue = chbx.value;
-    chbx.disabled = (oldValue == urlKey.value);
-    hidden.disabled = chbx.disabled;
-}
+    function onUrlkeyChanged(urlKey) {
+        urlKey = $(urlKey);
+        var hidden = urlKey.next('input[type=hidden]');
+        var chbx = urlKey.next('input[type=checkbox]');
+        var oldValue = chbx.value;
+        chbx.disabled = (oldValue == urlKey.value);
+        hidden.disabled = chbx.disabled;
+    }
 
-function onCustomUseParentChanged(element) {
-    var useParent = (element.value == 1) ? true : false;
-    element.up(2).select('input', 'select', 'textarea').each(function(el){
-        if (element.id != el.id) {
-            el.disabled = useParent;
-        }
-    });
-    element.up(2).select('img').each(function(el){
-        if (useParent) {
-            el.hide();
-        } else {
-            el.show();
-        }
-    });
-}
+    function onCustomUseParentChanged(element) {
+        var useParent = (element.value == 1) ? true : false;
+        element.up(2).select('input', 'select', 'textarea').each(function (el) {
+            if (element.id != el.id) {
+                el.disabled = useParent;
+            }
+        });
+        element.up(2).select('img').each(function (el) {
+            if (useParent) {
+                el.hide();
+            } else {
+                el.show();
+            }
+        });
+    }
 
-window.onCustomUseParentChanged = onCustomUseParentChanged;
-window.onUrlkeyChanged = onUrlkeyChanged;
-window.onCompleteDisableInited = onCompleteDisableInited;
-window.enableFieldEditMode = enableFieldEditMode;
-window.disableFieldEditMode = disableFieldEditMode;
-window.toogleFieldEditMode = toogleFieldEditMode;
+    window.onCustomUseParentChanged = onCustomUseParentChanged;
+    window.onUrlkeyChanged = onUrlkeyChanged;
+    window.toogleFieldEditMode = toogleFieldEditMode;
 
-Event.observe(window, 'load', onCompleteDisableInited);
-    
-return jQuery.mage.productAttributes;
+    Event.observe(window, 'load', onCompleteDisableInited);
 });
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap.js b/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap.js
deleted file mode 100644
index 59a4321db592dd97a908be7b065b00d3a10bd98e..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap/category-edit.js b/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap/category-edit.js
deleted file mode 100644
index 69ce3626f2a9e501b0ad7d1c0df0073c7ba63c7b..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap/category-edit.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require([
-    "jquery/file-uploader",
-    "Magento_Catalog/catalog/category/edit"
-]);
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap/product-new.js b/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap/product-new.js
deleted file mode 100644
index 9ff4834020d71f95b97fce8a7fc871ab0c0d252b..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/bootstrap/product-new.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-require([
-    "jquery/file-uploader"
-]);
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index fd5f9b75b4927b49b46f40a4f2152a2cca7d1cb9..613de77ab14b08c68a7f3f1d75abbdccfa2c8277 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -8,7 +8,8 @@ define([
     "jquery",
     "jquery/ui",
     "jquery/template",
-    "js/theme",
+    "useDefault",
+    "collapsable",
     "mage/translate",
     "mage/backend/validation"
 ], function($){
diff --git a/app/code/Magento/Catalog/view/frontend/web/product/view/validation.js b/app/code/Magento/Catalog/view/frontend/web/product/view/validation.js
index a19ab628f91dbc17c322ddd30aa5bd30bdd7326a..2c33dae8b99ef12e49d49402233c188d89e2f54e 100644
--- a/app/code/Magento/Catalog/view/frontend/web/product/view/validation.js
+++ b/app/code/Magento/Catalog/view/frontend/web/product/view/validation.js
@@ -7,7 +7,7 @@
         define([
             "jquery",
             "jquery/ui",
-            "mage/validation"
+            "mage/validation/validation"
         ], factory);
     } else {
         factory(jQuery);
diff --git a/app/code/Magento/CatalogRule/view/adminhtml/templates/promo/form.phtml b/app/code/Magento/CatalogRule/view/adminhtml/templates/promo/form.phtml
index ea0eb2cbfacb83b331d9f4f2131151efa7adaa59..c1691cf0ea2ec84e0348502e51d651d531ab0b1b 100644
--- a/app/code/Magento/CatalogRule/view/adminhtml/templates/promo/form.phtml
+++ b/app/code/Magento/CatalogRule/view/adminhtml/templates/promo/form.phtml
@@ -10,13 +10,4 @@
 <div class="entry-edit rule-tree">
 <?php echo $this->getFormHtml() ?>
 </div>
-<script>
-/*
-    if ($('rule_conditions_fieldset')) {
-        var conditionsForm = new VarienRulesForm('rule_conditions_fieldset', '<?php echo $this->getNewConditionChildUrl() ?>');
-    }
-    if ($('rule_actions_fieldset')) {
-        var actionsForm = new VarienRulesForm('rule_actions_fieldset', '<?php echo $this->getNewActionChildUrl() ?>');
-    }
-*/
-</script>
+
diff --git a/app/code/Magento/Checkout/view/frontend/templates/onepage.phtml b/app/code/Magento/Checkout/view/frontend/templates/onepage.phtml
index f8e5b4d5aa56d03ebecfef1595d5c79afbbfe9b2..cceca23a050483cd6c241ac253a98ac85bc50a32 100644
--- a/app/code/Magento/Checkout/view/frontend/templates/onepage.phtml
+++ b/app/code/Magento/Checkout/view/frontend/templates/onepage.phtml
@@ -27,24 +27,34 @@ $_paymentBlock = $this->getLayout()->getBlock('checkout.onepage.payment');
     </ol>
     <script>
 require([
-    "jquery",
-    "mage/mage"
-], function($){
+    "underscore",
+    "accordion",
+    "opcOrderReview",
+], function(_, accordion, opcOrderReview){
     'use strict';
 
-    $(document).ready(function() {
-        $('#checkoutSteps').mage('accordion',{
-            'collapsibleElement' : ' > li',
-            'openedState' : 'active'
-        }).mage('opcOrderReview', $.extend({
-            'checkoutAgreements': '#checkout-agreements',
-            'checkoutProgressContainer': '#checkout-progress-wrapper',
-            'methodDescription': '.items'
-            },
-            <?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode($_paymentBlock->getOptions()); ?>
-        ));
-    });
+    /**
+     * @todo refactor opcCheckoutMethod
+     *
+     * Initializiation of this components can't be moved to a data-mage-init attribute
+     * due to dependencies between instances of opcCheckoutMethod and mage.accordion.
+     * Thus initializiation has to be synchronyous.
+     */
+    var elem = document.getElementById('checkoutSteps'),
+        opcConfig;
 
+    opcConfig = _.extend({
+        'checkoutAgreements': '#checkout-agreements',
+        'checkoutProgressContainer': '#checkout-progress-wrapper',
+        'methodDescription': '.items'
+    },<?php echo $this->helper('Magento\Core\Helper\Data')->jsonEncode($_paymentBlock->getOptions()); ?>);
+
+    accordion({
+        'collapsibleElement': ' > li',
+        'openedState': 'active'
+    }, elem);
+
+    opcOrderReview(opcConfig, elem);
 });
 </script>
 </div>
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/accordion.js b/app/code/Magento/Checkout/view/frontend/web/js/accordion.js
deleted file mode 100644
index 9793d45d07a713907d7408ef80bf55369c4e9127..0000000000000000000000000000000000000000
--- a/app/code/Magento/Checkout/view/frontend/web/js/accordion.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint jquery:true browser:true*/
-define([
-    "jquery",
-    "jquery/ui"
-], function($){
-    'use strict';
-
-    // mage.accordion base functionality
-    $.widget('mage.accordion', $.ui.accordion, {
-        options: {
-            heightStyle: 'content',
-            animate: false,
-            beforeActivate: function(e, ui) {
-                // Make sure sections below current are not clickable and sections above are clickable
-                var newPanelParent = $(ui.newPanel).parent();
-                if (!newPanelParent.hasClass('allow')) {
-                    return false;
-                }
-                newPanelParent.addClass('active allow').prevAll().addClass('allow');
-                newPanelParent.nextAll().removeClass('allow');
-                $(ui.oldPanel).parent().removeClass('active');
-            }
-        },
-
-        /**
-         * Accordion creation
-         * @protected
-         */
-        _create: function() {
-            // Custom to enable section
-            this.element.on('enableSection', function(event, data) {
-                $(data.selector).addClass('allow').find('h2').trigger('click');
-            });
-            this._super();
-            $(this.options.activeSelector).addClass('allow active').find('h2').trigger('click');
-        }
-    });
-
-});
\ No newline at end of file
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
index 3eacc8103b7876f0872523a61fde3e9fff34ded7..09c2b3d679f566913ab356f527e991aa9bd78883 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
@@ -10,7 +10,6 @@ define([
     "jquery",
     "jquery/ui",
     "mage/validation/validation",
-    "Magento_Checkout/js/accordion",
     "mage/translate"
 ], function($){
     'use strict';
diff --git a/app/code/Magento/Cms/view/adminhtml/layout/cms_block_edit.xml b/app/code/Magento/Cms/view/adminhtml/layout/cms_block_edit.xml
index 03af8aeac67ac07873d6fd399e85f1c2b9dd816e..8d00302c4285be19d50cd64e961f707a19abcafb 100644
--- a/app/code/Magento/Cms/view/adminhtml/layout/cms_block_edit.xml
+++ b/app/code/Magento/Cms/view/adminhtml/layout/cms_block_edit.xml
@@ -8,7 +8,6 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
         <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
-        <link src="jquery/fileUploader/bootstrap.js"/>
     </head>
     <update handle="editor"/>
     <body>
diff --git a/app/code/Magento/Cms/view/adminhtml/layout/cms_page_edit.xml b/app/code/Magento/Cms/view/adminhtml/layout/cms_page_edit.xml
index f092cf3a9075169a59fccb4d60e8b284b58df5fc..dc56780bbdca4e0c03883c6f3e1a7161575ad15a 100644
--- a/app/code/Magento/Cms/view/adminhtml/layout/cms_page_edit.xml
+++ b/app/code/Magento/Cms/view/adminhtml/layout/cms_page_edit.xml
@@ -8,7 +8,6 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
         <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
-        <link src="jquery/fileUploader/bootstrap.js"/>
     </head>
     <update handle="editor"/>
     <body>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/attribute-template.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/attribute-template.phtml
index 88919daee9bf51da1ef87a700003988109aa95bd..4a167b16efefbf8a2a732446ee25c52b7ccffe3c 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/attribute-template.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/super/attribute-template.phtml
@@ -57,6 +57,7 @@ $id = $this->escapeHtml($attribute['attribute_id']);
                     <div class="control">
                         <input type="text" value="<?php echo $this->escapeHtml($attribute['label']); ?>"
                                name="product[configurable_attributes_data][<?php echo $id ?>][label]"
+                               data-mage-init='{"useDefault": {}}'
                                data-store-label="<?php echo $this->escapeHtml($attribute['label']); ?>"
                                class="store-label required-entry"/>
                     </div>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
index e152ac03776bc1845dda01ced8b348e22a3bf322..e723742e8f57a9b2be75c2f9e312588bd32a643e 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
@@ -9,7 +9,9 @@
 /* @var $this \Magento\ConfigurableProduct\Block\Product\Configurable\AttributeSelector */
 ?>
 <script>
-(function($){
+(function(){
+    'use strict';
+    
     var $form;
 
     require([
@@ -17,8 +19,6 @@
         "jquery/ui",
         "Magento_ConfigurableProduct/catalog/product-variation"
     ], function($){
-        'use strict';
-
         $form = $('#affected-attribute-set-form');
 
         var resetValidation = function() {
@@ -101,37 +101,43 @@
                 }
             });
     });
+    
+    require([
+        'jquery'
+    ], function ($) {
+
+        /**
+         * This fix was made in order to properly handle 'stopImmediatePropagation'.
+         */
+        $('#save-split-button .item').on('click', function(event) {
+            if ($('#new-variations-attribute-set-id').val() != '') {
+                return; // affected attribute set was already chosen
+            }
 
-    /**
-     * This fix was made in order to properly handle 'stopImmediatePropagation'.
-     */
-    $('#save-split-button .item').on('click', function(event) {
-        if ($('#new-variations-attribute-set-id').val() != '') {
-            return; // affected attribute set was already chosen
-        }
-
-        var extendingAttributes = [];
+            var extendingAttributes = [];
 
-        $.each($('#configurable-attributes-container').variationsAttributes('getAttributes'), function () {
-            if (!$('#attribute-' + this.code + '-container').length) {
-                extendingAttributes.push(this.id);
+            $.each($('#configurable-attributes-container').variationsAttributes('getAttributes'), function () {
+                if (!$('#attribute-' + this.code + '-container').length) {
+                    extendingAttributes.push(this.id);
+                }
+            });
+            if (!extendingAttributes.length) {
+                $('#new-variations-attribute-set-id').val($('#attribute_set_id').val());
+                return; // all selected configurable attributes belong to current attribute set
+            }
+            if (!$('[data-role=product-variations-matrix] [data-column=entity_id]:checked')
+                .closest('tr').has('input[name$="[name]"]').length
+            ) {
+                return; // no new simple products to save from matrix: uniting attribute set is not needed
             }
+
+            event.stopImmediatePropagation();
+
+            $form.data('target', event.target)
+                .dialog('open');
         });
-        if (!extendingAttributes.length) {
-            $('#new-variations-attribute-set-id').val($('#attribute_set_id').val());
-            return; // all selected configurable attributes belong to current attribute set
-        }
-        if (!$('[data-role=product-variations-matrix] [data-column=entity_id]:checked')
-            .closest('tr').has('input[name$="[name]"]').length
-        ) {
-            return; // no new simple products to save from matrix: uniting attribute set is not needed
-        }
-
-        event.stopImmediatePropagation();
-
-        $form.data('target', event.target)
-            .dialog('open');
+
     });
 
-})(jQuery);
+})();
 </script>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product-variation.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product-variation.js
index b78fe9de77fdd1485485f71989fb3c0a659a910e..bebd4c132fee619f599c80ce4e16b96bc8137f35 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product-variation.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product-variation.js
@@ -6,7 +6,8 @@ define([
     "jquery",
     "jquery/ui",
     "jquery/template",
-    "js/theme"
+    "useDefault",
+    "collapsable"
 ], function($){
     "use strict";
     
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product/attribute.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product/attribute.js
index c36c4e2cdf5001f6fc8bc0a0d5f2e54265a7ea73..726cf4ddfbd0ce482ea77969fe7d1d08534a5117 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product/attribute.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/catalog/product/attribute.js
@@ -3,15 +3,16 @@
  * See COPYING.txt for license details.
  */
 define([
-	"jquery",
-	"jquery/ui",
-	"Magento_Catalog/catalog/product"
-], function($){
-    "use strict";
-    
-    $.widget("mage.configurableAttribute", $.mage.productAttributes, {
-        _prepareUrl: function() {
+    'jquery',
+    'jquery/ui',
+    'Magento_Catalog/catalog/product-attributes'
+], function ($) {
+    'use strict';
+
+    $.widget('mage.configurableAttribute', $.mage.productAttributes, {
+        _prepareUrl: function () {
             var name = $('#configurable-attribute-selector').val();
+
             return this.options.url +
                 (/\?/.test(this.options.url) ? '&' : '?') +
                 'set=' + window.encodeURIComponent($('#attribute_set_id').val()) +
@@ -21,4 +22,4 @@ define([
     });
 
     return $.mage.configurableAttribute;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/Customer/view/frontend/requirejs-config.js b/app/code/Magento/Customer/view/frontend/requirejs-config.js
index 96f981792ca15ea85e9b51b7da70ee370ba9c375..db206e3a4ab1281a7cc85db30ddf89945fea3f72 100644
--- a/app/code/Magento/Customer/view/frontend/requirejs-config.js
+++ b/app/code/Magento/Customer/view/frontend/requirejs-config.js
@@ -10,8 +10,5 @@ var config = {
             address:            'Magento_Customer/address',
             setPassword:        'Magento_Customer/set-password'
         }
-    },
-    deps: [
-        'mage/validation/dob-rule'
-    ]
+    }
 };
\ No newline at end of file
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/form/renderer/composite.phtml b/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/form/renderer/composite.phtml
index a34053ec0c2740c11d36c03fbf7e3fa529e9939e..e947befe7f23f5bb0e52ba8e66b3e50f2958f1c2 100644
--- a/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/form/renderer/composite.phtml
+++ b/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/form/renderer/composite.phtml
@@ -54,7 +54,7 @@ $advancedAfter = $element->getAdvancedPosition() == 'after'; // To place advance
 
         <?php if ($element->hasAdvanced() && !$isField): ?>
             <?php echo(!$element->getNoContainer() && $advancedAfter)  ? '</fieldset>' : ''?>
-            <details class="details" id="details<?php echo $id ?>">
+            <details data-mage-init='{"details": {}}' class="details" id="details<?php echo $id ?>">
                 <summary class="details-summary" id="details-summary<?php echo $id ?>">
                     <span><?php echo $element->getAdvancedLabel() ?></span>
                 </summary>
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/tools/files/tree.phtml b/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/tools/files/tree.phtml
index e9e1812bab50901beed54065b479bd736e2e9056..8357022aa95b11f752cd72ed74c4d34ff6ad5003 100644
--- a/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/tools/files/tree.phtml
+++ b/app/code/Magento/DesignEditor/view/adminhtml/templates/editor/tools/files/tree.phtml
@@ -32,6 +32,7 @@
 <script>
 require([
     'jquery',
+    "extjs/ext-tree-checkbox",
     'Magento_DesignEditor/js/tools-files'
 ], function(jQuery){
 
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/js/quick-style-uploader.js b/app/code/Magento/DesignEditor/view/adminhtml/web/js/quick-style-uploader.js
index f947ab8094df7e7236e281e38dcbcaf0847504f3..b14f9c05dfb502233766611b54051c672171bbce 100644
--- a/app/code/Magento/DesignEditor/view/adminhtml/web/js/quick-style-uploader.js
+++ b/app/code/Magento/DesignEditor/view/adminhtml/web/js/quick-style-uploader.js
@@ -6,6 +6,7 @@
 define([
     "jquery",
     "jquery/ui",
+    "loadingPopup",
     "mage/translate",
     "jquery/file-uploader"
 ], function($){
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-delete.js b/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-delete.js
index 966f82e67a21f02afe9baa6d71508ecfc8a3418d..27cc9306eb3d40ab24b7692091a6847cf0c5e58e 100644
--- a/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-delete.js
+++ b/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-delete.js
@@ -6,6 +6,7 @@
 define([
     "jquery",
     "jquery/ui",
+    "loadingPopup",
     "mage/translate",
     "jquery/template",
     "Magento_DesignEditor/js/dialog"
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-selector.js b/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-selector.js
index 4d3fecaca988a67a9da50211093fef35aa408047..f59b25065634b691e5c900292c1559513b08df88 100644
--- a/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-selector.js
+++ b/app/code/Magento/DesignEditor/view/adminhtml/web/js/theme-selector.js
@@ -6,6 +6,7 @@ define([
     "jquery",
     "jquery/ui",
     "mage/translate",
+    "loadingPopup",
     "Magento_DesignEditor/js/dialog"
 ], function($){
 
diff --git a/app/code/Magento/DesignEditor/view/adminhtml/web/js/tools-files.js b/app/code/Magento/DesignEditor/view/adminhtml/web/js/tools-files.js
index 778a9c31892b3ecdb8ed4f09418c5b40d27d4e32..303f14a1655b1fbf8a59c0df0ff0384f88da1399 100644
--- a/app/code/Magento/DesignEditor/view/adminhtml/web/js/tools-files.js
+++ b/app/code/Magento/DesignEditor/view/adminhtml/web/js/tools-files.js
@@ -4,13 +4,15 @@
  */
 define([
     "jquery",
+    "tinymce",
     "jquery/ui",
     "Magento_DesignEditor/js/dialog",
-    "js/theme",
+    "loadingPopup",
     "mage/translate",
     "prototype",
+    "extjs/ext-tree-checkbox",
     "mage/adminhtml/events"
-], function(jQuery){
+], function(jQuery, tinyMCE){
 
     window.MediabrowserUtility = {
         getMaxZIndex: function() {
diff --git a/app/code/Magento/Downloadable/view/adminhtml/requirejs-config.js b/app/code/Magento/Downloadable/view/adminhtml/requirejs-config.js
deleted file mode 100644
index 9a1c74b7db537f745b173702514cdbd28cfde7a3..0000000000000000000000000000000000000000
--- a/app/code/Magento/Downloadable/view/adminhtml/requirejs-config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-var config = {
-    deps: [
-        'Magento_Downloadable/product/validation-rules'
-    ]
-};
\ No newline at end of file
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index 63e1d5dd1a39ea67eae20fbe854e8e070c891485..23a7b83b384a9758a2d4238576a1a242f7c4678c 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -74,8 +74,7 @@ require([
     'Magento_Ui/js/lib/registry/registry',
     'jquery/file-uploader',
     'mage/mage',
-    'prototype',
-
+    'prototype'
 ], function(jQuery, registry){
     registry.get('downloadable', function (Downloadable) {
         var linkTemplate = '<tr>'+
diff --git a/app/code/Magento/Downloadable/view/adminhtml/web/product/validation-rules.js b/app/code/Magento/Downloadable/view/adminhtml/web/product/validation-rules.js
deleted file mode 100644
index 1475edbe7627b02bf1cdfa6350cf38bb7a46e5b7..0000000000000000000000000000000000000000
--- a/app/code/Magento/Downloadable/view/adminhtml/web/product/validation-rules.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Downloadable client side validation rules
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*global newFileContainer:true, alertAlreadyDisplayed:true, alert:true, linkType:true*/
-define([
-    "jquery",
-    "mage/validation",
-    "mage/translate"
-], function($){
-
-    $.validator.addMethod('validate-downloadable-file', function (v, element) {
-        var elmParent = $(element).parent(),
-            linkType = elmParent.find('input[value="file"]');
-        if (linkType.is(':checked') && (v === '' || v === '[]')) {
-            newFileContainer = elmParent.find('.new-file');
-            if (!alertAlreadyDisplayed && (newFileContainer.empty() || newFileContainer.is(':visible'))) {
-                alertAlreadyDisplayed = true;
-                alert($.mage.__('There are files that were selected but not uploaded yet. ' +
-                    'Please upload or remove them first')
-                );
-            }
-            return false;
-        }
-        return true;
-    }, 'Please upload a file.');
-    $.validator.addMethod('validate-downloadable-url', function (v, element) {
-        linkType = $(element).parent().find('input[value="url"]');
-        if (linkType.is(':checked') && v === '') {
-            return false;
-        }
-        return true;
-    }, 'Please specify Url.');
-
-});
\ No newline at end of file
diff --git a/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_edit.xml b/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_edit.xml
deleted file mode 100644
index 8d9dba4423b6553b94915817937214c84c14315e..0000000000000000000000000000000000000000
--- a/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_edit.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0"?>
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
-    <head>
-        <link src="Magento_Email::js/bootstrap.js"/>
-    </head>
-    <body/>
-</page>
diff --git a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
index 5c1ae09ee32b085bb7ad06d7bd918abfcf8fd427..1c34ee1cdc08371e964db018c8b0bf30788af981 100644
--- a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
@@ -55,9 +55,10 @@
 <script>
 require([
     "jquery",
+    "tinymce",
     "mage/mage",
     "Magento_Backend/variables"
-], function(jQuery){
+], function(jQuery, tinyMCE){
 
 //<![CDATA[
     jQuery('#email_template_edit_form').mage('form').mage('validation');
diff --git a/app/code/Magento/Email/view/adminhtml/templates/template/list.phtml b/app/code/Magento/Email/view/adminhtml/templates/template/list.phtml
index 0f136e1bfbc4819a3c3f24b08a921917ff04e1bb..4c89bd3f39005a65fc6adb54a26e4f9fc0449fcb 100644
--- a/app/code/Magento/Email/view/adminhtml/templates/template/list.phtml
+++ b/app/code/Magento/Email/view/adminhtml/templates/template/list.phtml
@@ -7,5 +7,5 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="page-actions"><?php echo $this->getChildHtml('add_button') ?></div>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getChildHtml('add_button') ?></div>
 <?php echo $this->getChildHtml('grid') ?>
diff --git a/app/code/Magento/Email/view/adminhtml/web/js/bootstrap.js b/app/code/Magento/Email/view/adminhtml/web/js/bootstrap.js
deleted file mode 100644
index abce180320179331fc97b86f337d364a281a1a87..0000000000000000000000000000000000000000
--- a/app/code/Magento/Email/view/adminhtml/web/js/bootstrap.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-require([
-    'Magento_Backend/variables'
-]);
\ No newline at end of file
diff --git a/app/code/Magento/GoogleShopping/view/adminhtml/layout/adminhtml_googleshopping_items_index.xml b/app/code/Magento/GoogleShopping/view/adminhtml/layout/adminhtml_googleshopping_items_index.xml
index acc2689a5954921a99ec52926fa831e912952dcb..068c8ec6a74270a13644c4f7e1b74c4168f1e451 100644
--- a/app/code/Magento/GoogleShopping/view/adminhtml/layout/adminhtml_googleshopping_items_index.xml
+++ b/app/code/Magento/GoogleShopping/view/adminhtml/layout/adminhtml_googleshopping_items_index.xml
@@ -6,9 +6,6 @@
  */
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
-    <head>
-        <link src="Magento_GoogleShopping::js/bootstrap.js"/>
-    </head>
     <body>
         <referenceContainer name="page.main.actions">
             <block class="Magento\Backend\Block\Store\Switcher" name="store_switcher" template="Magento_Backend::store/switcher.phtml"/>
diff --git a/app/code/Magento/GoogleShopping/view/adminhtml/templates/items.phtml b/app/code/Magento/GoogleShopping/view/adminhtml/templates/items.phtml
index 15de0a51f35684c4111ee873df9ed4edb52c1962..e68c4187250388c0554de5f697502b92a2d16e35 100644
--- a/app/code/Magento/GoogleShopping/view/adminhtml/templates/items.phtml
+++ b/app/code/Magento/GoogleShopping/view/adminhtml/templates/items.phtml
@@ -15,7 +15,7 @@
 </div>
 
 <div class="grid-title">
-    <div class="page-actions"><?php echo $this->getAddButtonHtml() ?></div>
+    <div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getAddButtonHtml() ?></div>
     <span class="title"><?php echo __('Available Products') ?></span>
 </div>
 <div data-mage-init='{"loader": {}}' data-container="products" class="available-products">
diff --git a/app/code/Magento/GoogleShopping/view/adminhtml/web/js/bootstrap.js b/app/code/Magento/GoogleShopping/view/adminhtml/web/js/bootstrap.js
deleted file mode 100644
index caebbd508b0392846fea0174e5326d41ab41334c..0000000000000000000000000000000000000000
--- a/app/code/Magento/GoogleShopping/view/adminhtml/web/js/bootstrap.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
- require([
-    "Magento_GoogleShopping/googleshopping"
- ]);
\ No newline at end of file
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/filter/after.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/filter/after.phtml
index 08f4d9c572593d2eb56605ba710ba83943f49d69..996f60380e526c00494bc92b982533f6f2f12532 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/filter/after.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/filter/after.phtml
@@ -5,13 +5,16 @@
  */
 ?>
 <script>
-//<![CDATA[
-if (window['export_filter_gridJsObject'] != undefined) {
-    export_filter_gridJsObject.resetFilter = function () {
-        return varienGrid.prototype.resetFilter.call(this, varienExport.modifyFilterGrid);
-    };
-    export_filter_gridJsObject.doFilter = function () {
-        return varienGrid.prototype.doFilter.call(this, varienExport.modifyFilterGrid);
-    };
-}
+require([
+    'mage/adminhtml/grid'
+], function(){
+    if (window['export_filter_gridJsObject'] != undefined) {
+        export_filter_gridJsObject.resetFilter = function () {
+            return varienGrid.prototype.resetFilter.call(this, varienExport.modifyFilterGrid);
+        };
+        export_filter_gridJsObject.doFilter = function () {
+            return varienGrid.prototype.doFilter.call(this, varienExport.modifyFilterGrid);
+        };
+    }
+});
 </script>
diff --git a/app/code/Magento/Msrp/Plugin/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php b/app/code/Magento/Msrp/Plugin/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php
index 78f19112ba19bbfc81b9602acf18f917c280f115..c91e6cdf0c80e519b6109cf6a8845a24774ad696 100644
--- a/app/code/Magento/Msrp/Plugin/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php
+++ b/app/code/Magento/Msrp/Plugin/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Attributes.php
@@ -23,6 +23,7 @@ class Attributes
             $mapEnabled->setAfterElementHtml(
                 '<script>' .
                 "
+                require(['prototype'], function(){
                 function changePriceTypeMap() {
                     if ($('price_type').value == " . \Magento\Bundle\Model\Product\Price::PRICE_TYPE_DYNAMIC . ") {
                         $('msrp_display_actual_price_type').setValue(" . Price::TYPE_USE_CONFIG . ");
@@ -34,9 +35,10 @@ class Attributes
                         $('msrp').enable();
                     }
                 }
-                document.observe('dom:loaded', function() {
-                    $('price_type').observe('change', changePriceTypeMap);
-                    changePriceTypeMap();
+                
+                $('price_type').observe('change', changePriceTypeMap);
+                changePriceTypeMap();
+
                 });
                 " .
                 '</script>'
diff --git a/app/code/Magento/Newsletter/composer.json b/app/code/Magento/Newsletter/composer.json
index 6a42aa3339296263f34ebd10ab3fa75a484afbc2..f6d1c6ad2181408810ccf36514ecff9e2b6a932e 100644
--- a/app/code/Magento/Newsletter/composer.json
+++ b/app/code/Magento/Newsletter/composer.json
@@ -12,6 +12,7 @@
         "magento/module-email": "0.42.0-beta5",
         "magento/module-cron": "0.42.0-beta5",
         "magento/module-eav": "0.42.0-beta5",
+        "magento/module-require-js": "0.42.0-beta5",
         "magento/framework": "0.42.0-beta5",
         "magento/magento-composer-installer": "*"
     },
diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_edit.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_edit.xml
index 48d3a040809e562a52516db66c5a3c3ce6bd6232..d56d1d79a1a2c149854274d47ca463cfd69db481 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_edit.xml
+++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_edit.xml
@@ -8,7 +8,6 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
         <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
-        <link src="jquery/fileUploader/bootstrap.js"/>
     </head>
     <update handle="editor"/>
     <body>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_edit.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_edit.xml
index 6a812bb21cc5d6c728c41749ff202632ac773371..8c236ed2b11bea5f999cab9c08db6ab3951ac387 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_edit.xml
+++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_edit.xml
@@ -8,7 +8,6 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <head>
         <css src="jquery/fileUploader/css/jquery.fileupload-ui.css"/>
-        <link src="jquery/fileUploader/bootstrap.js"/>
     </head>
     <update handle="editor"/>
     <body>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml
index 76f9bc780ae851137224db1eb268a84b8c8cfdcc..cb7ac6cb26d428cbe1f5c7d4ee00f0e943364286 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml
+++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_template_preview.xml
@@ -15,6 +15,7 @@
                 <block class="Magento\Newsletter\Block\Adminhtml\Queue\Preview\Form" name="preview_form"/>
                 <block class="Magento\Backend\Block\Store\Switcher" name="store_switcher" template="Magento_Backend::store/switcher.phtml"/>
             </block>
+            <block class="Magento\RequireJs\Block\Html\Head\Config" name="requirejs-config"/>
         </referenceContainer>
     </body>
 </page>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/preview/iframeswitcher.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/preview/iframeswitcher.phtml
index cf09d83f1df88cfaeb3d991ba09c4f30ff5fe579..9381067e1cd0512a98548be81413d6e02de6c09b 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/preview/iframeswitcher.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/preview/iframeswitcher.phtml
@@ -20,7 +20,7 @@
 </div>
 
 <script>
-require(['jquery', 'js/theme', 'prototype'], function(jQuery){
+require(['jquery', 'loadingPopup', 'prototype'], function(jQuery){
 
 //<![CDATA[
 var previewForm = $('preview_form');
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/queue/edit.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/queue/edit.phtml
index bfb2eb9c81c064a57b703612312098eb584097b1..e7899c94eac678b5dfd82157d004c5d4cdf5d696 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/queue/edit.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/queue/edit.phtml
@@ -8,7 +8,7 @@
 
 /* @var $this \Magento\Newsletter\Block\Adminhtml\Queue\Edit */
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <?php echo $this->getBackButtonHtml() ?>
     <?php echo $this->getPreviewButtonHtml(); ?>
     <?php if (!$this->getIsPreview()): ?>
@@ -34,7 +34,12 @@
     </div>
 </form>
 <script>
-require(['jquery', 'mage/mage', 'prototype'], function(jQuery){
+require([
+    'jquery',
+    'tinymce',
+    'mage/mage',
+    'prototype'
+], function(jQuery, tinyMCE){
 
 //<![CDATA[
 jQuery('#queue_edit_form').mage('form').mage('validation');
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
index f4d7f8f1d5a14bc64c21f8f3decd727002347c4d..02e41d7e26fe995b683508dc71b1349c64bd5b20 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
@@ -26,7 +26,12 @@
     </div>
 </form>
 <script>
-require(['jquery', 'mage/mage', 'prototype'], function(jQuery){
+require([
+    'jquery',
+    'tinymce',
+    'mage/mage',
+    'prototype'
+], function(jQuery, tinyMCE){
 
 //<![CDATA[
     jQuery('#newsletter_template_edit_form').mage('form').mage('validation');
diff --git a/app/code/Magento/Newsletter/view/frontend/requirejs-config.js b/app/code/Magento/Newsletter/view/frontend/requirejs-config.js
deleted file mode 100644
index 7baa7c9c7f41e9c917416752a7959352f5f3ac3d..0000000000000000000000000000000000000000
--- a/app/code/Magento/Newsletter/view/frontend/requirejs-config.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-var config = {
-    map: {
-        '*': {
-            newsletter: 'Magento_Newsletter/newsletter'
-        }
-    }
-};
\ No newline at end of file
diff --git a/app/code/Magento/Newsletter/view/frontend/templates/subscribe.phtml b/app/code/Magento/Newsletter/view/frontend/templates/subscribe.phtml
index b98b69a605794e4836b217d7cb9660d1ef0f4e1a..cfbee2042d35b62ad147b2545425bfbefc1b068d 100644
--- a/app/code/Magento/Newsletter/view/frontend/templates/subscribe.phtml
+++ b/app/code/Magento/Newsletter/view/frontend/templates/subscribe.phtml
@@ -10,14 +10,18 @@
 <div class="block newsletter">
     <div class="title"><strong>Newsletter</strong></div>
     <div class="content">
-        <form class="form subscribe" action="<?php echo $this->getFormActionUrl() ?>" method="post" id="newsletter-validate-detail">
+        <form class="form subscribe"
+            novalidate
+            action="<?php echo $this->getFormActionUrl() ?>"
+            method="post"
+            data-mage-init='{"validation": {"errorClass": "mage-error"}}'
+            id="newsletter-validate-detail">
             <div class="field newsletter">
                 <label class="label" for="newsletter"><span><?php echo __('Sign Up for Our Newsletter:') ?></span></label>
                 <div class="control">
                     <input name="email" type="email" id="newsletter"
-                                  placeholder="<?php echo __('Enter your email address') ?>"
-                                  data-mage-init='{"newsletter":{"formSelector": "#newsletter-validate-detail", "placeholder": "<?php echo __('Enter your email address') ?>"}}'
-                                  data-validate="{required:true, 'validate-email':true}"/>
+                                placeholder="<?php echo __('Enter your email address') ?>"
+                                data-validate="{required:true, 'validate-email':true}"/>
                 </div>
             </div>
             <div class="actions">
diff --git a/app/code/Magento/Newsletter/view/frontend/web/newsletter.js b/app/code/Magento/Newsletter/view/frontend/web/newsletter.js
deleted file mode 100644
index 7440e2c1a79921d2c690e1c5e4c93e48f8780835..0000000000000000000000000000000000000000
--- a/app/code/Magento/Newsletter/view/frontend/web/newsletter.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true*/
-define([
-    "jquery",
-    "jquery/ui",
-    "mage/validation/validation"
-], function($){
-    "use strict";
-    
-    $.widget('mage.newsletter', {
-        options: {
-            errorClass: 'mage-error'
-        },
-        _create: function() {
-            $(this.options.formSelector)
-                .validation({errorClass: this.options.errorClass});
-            this.element.on('click', $.proxy(function(e) {
-               if ($(e.target).val() === this.options.placeholder) {
-                   $(e.target).val('');
-               }
-            }, this)).on('focusout', $.proxy(function(e) {
-                setTimeout($.proxy(function() {
-                    if ($.trim($(e.target).val()) === '') {
-                        $(e.target).val(this.options.placeholder);
-                    }
-                }, this), 100);
-            }, this));
-        }
-    });
-
-    return $.mage.newsletter;
-});
\ No newline at end of file
diff --git a/app/code/Magento/OfflineShipping/Block/Adminhtml/Form/Field/Import.php b/app/code/Magento/OfflineShipping/Block/Adminhtml/Form/Field/Import.php
index b646ccf5bfdb3eacda4fa7683595a974483f7a69..a8d8102d57ca06fe44d9eb1406070cb59a41b9a4 100644
--- a/app/code/Magento/OfflineShipping/Block/Adminhtml/Form/Field/Import.php
+++ b/app/code/Magento/OfflineShipping/Block/Adminhtml/Form/Field/Import.php
@@ -34,6 +34,7 @@ class Import extends \Magento\Framework\Data\Form\Element\AbstractElement
 
         $html .= <<<EndHTML
         <script>
+        require(['prototype'], function(){
         Event.observe($('carriers_tablerate_condition_name'), 'change', checkConditionName.bind(this));
         function checkConditionName(event)
         {
@@ -42,6 +43,7 @@ class Import extends \Magento\Framework\Data\Form\Element\AbstractElement
                 $('time_condition').value = '_' + conditionNameElement.value + '/' + Math.random();
             }
         }
+        });
         </script>
 EndHTML;
 
diff --git a/app/code/Magento/PageCache/view/frontend/requirejs-config.js b/app/code/Magento/PageCache/view/frontend/requirejs-config.js
index 3bbfd7563f4eb18d657a38123d6057febccddaeb..ee4f512e0b7800ed5f71c7e568d7b1e41f798612 100644
--- a/app/code/Magento/PageCache/view/frontend/requirejs-config.js
+++ b/app/code/Magento/PageCache/view/frontend/requirejs-config.js
@@ -6,12 +6,7 @@
 var config = {
     map: {
         '*': {
-            formKey:    'Magento_PageCache/js/form-key',
             pageCache:  'Magento_PageCache/js/page-cache'
         }
-    },
-    deps: [
-        'Magento_PageCache/js/form-key',
-        'Magento_PageCache/js/msg-box'
-    ]
-};
\ No newline at end of file
+    }
+};
diff --git a/app/code/Magento/PageCache/view/frontend/templates/javascript.phtml b/app/code/Magento/PageCache/view/frontend/templates/javascript.phtml
index 2a3100b1acee5ff75c8e48ddff4086f8d589668e..25502193ff8ecd7271750666c9d1764ce3775fe6 100644
--- a/app/code/Magento/PageCache/view/frontend/templates/javascript.phtml
+++ b/app/code/Magento/PageCache/view/frontend/templates/javascript.phtml
@@ -7,15 +7,12 @@
 <?php /** @var \Magento\PageCache\Block\Javascript $this */ ?>
 <script>
 require([
-	"jquery",
-	"mage/mage"
-], function(jQuery){
-
-    //<![CDATA[
-    jQuery(function () {
-        jQuery('body').mage('pageCache', <?php echo $this->getScriptOptions(); ?>);
-    });
-    //]]>
+    'jquery',
+    'pageCache',
+    'domReady!'
+], function($){
+    'use strict';
 
+    $('body').pageCache(<?php echo $this->getScriptOptions(); ?>);
 });
 </script>
diff --git a/app/code/Magento/PageCache/view/frontend/web/js/comments.js b/app/code/Magento/PageCache/view/frontend/web/js/comments.js
deleted file mode 100644
index 2a2522e5ccabc46f58bbe1b4863595fd1c46a27b..0000000000000000000000000000000000000000
--- a/app/code/Magento/PageCache/view/frontend/web/js/comments.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Finds all comment elements
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true expr:true*/
-define([
-    "jquery"
-], function($){
-    "use strict";
-    $.fn.comments = function () {
-        var elements = [];
-        var lookup = function (el) {
-            if (el.is('iframe')) {
-                var hostName = window.location.hostname,
-                    iFrameHostName = $('<a>').prop('href', el.prop('src')).prop('hostname');
-                if (hostName != iFrameHostName) {
-                    return elements;
-                }
-            }
-            el.contents().each(function (i, el) {
-                if (el.nodeType == 8) {
-                    elements.push(el);
-                } else if (el.nodeType == 1) {
-                    lookup($(el));
-                }
-            });
-        };
-        lookup(this);
-        return elements;
-    };
-
-});
\ No newline at end of file
diff --git a/app/code/Magento/PageCache/view/frontend/web/js/form-key.js b/app/code/Magento/PageCache/view/frontend/web/js/form-key.js
deleted file mode 100644
index d40f48c5a5ffb91b12fd5f5393578c1299ce8116..0000000000000000000000000000000000000000
--- a/app/code/Magento/PageCache/view/frontend/web/js/form-key.js
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    "jquery",
-    "jquery/ui",
-    "mage/cookies"
-], function($){
-    "use strict";
-    
-    /**
-     * FormKey Widget - this widget is generating from key, saves it to cookie and
-     */
-    $.widget('mage.formKey', {
-
-        options: {
-            inputSelector: 'input[name="form_key"]',
-            allowedCharacters: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
-            length: 16
-        },
-
-        _create: function() {
-            var formKey = $.mage.cookies.get('form_key');
-            if (!formKey) {
-                formKey = this._generate(this.options.allowedCharacters, this.options.length);
-                var date = new Date();
-                date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));
-                $.mage.cookies.set('form_key', formKey, {expires: date, path: '/'});
-            }
-            $(this.options.inputSelector).val(formKey);
-        },
-
-        _generate: function(chars, length) {
-            var result = '';
-            for (var i = length; i > 0; --i) result += chars[Math.round(Math.random() * (chars.length - 1))];
-            return result;
-        }
-    });
-
-    $(function() {
-        $('body').formKey();
-    });
-
-    return $.mage.formKey;
-});
\ No newline at end of file
diff --git a/app/code/Magento/PageCache/view/frontend/web/js/msg-box.js b/app/code/Magento/PageCache/view/frontend/web/js/msg-box.js
deleted file mode 100644
index 8c107b6b2a27f29dfd2bcf286eb57d864ff160d7..0000000000000000000000000000000000000000
--- a/app/code/Magento/PageCache/view/frontend/web/js/msg-box.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true expr:true*/
-define([
-    "jquery",
-    "jquery/ui",
-    "mage/cookies"
-], function($){
-     "use strict";
-    
-    /**
-     * MsgBox Widget checks if message box is displayed and sets cookie
-     */
-    $.widget('mage.msgBox', {
-        options: {
-            msgBoxCookieName: 'message_box_display',
-            msgBoxSelector: '.main div.messages'
-        },
-        _create: function() {
-            if ($.mage.cookies.get(this.options.msgBoxCookieName)) {
-                $.mage.cookies.set(this.options.msgBoxCookieName, null, {expires: new Date(), path: "/"});
-            } else {
-                $(this.options.msgBoxSelector).hide();
-            }
-        }
-    });
-
-    $(document).ready(function($){
-        $('body').msgBox();
-    });
-
-});
\ No newline at end of file
diff --git a/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js b/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js
index b5106032d00444ec20e831de901ab19b606b5c5f..bc7708cf4dc88c424b67f4d1a33cf329342feb50 100644
--- a/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js
+++ b/app/code/Magento/PageCache/view/frontend/web/js/page-cache.js
@@ -4,15 +4,109 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-/*jshint browser:true jquery:true expr:true*/
+
 define([
-    "jquery",
-    "jquery/ui",
-    "mage/cookies",
-    "Magento_PageCache/js/comments"
-], function($){
-    "use strict";
-    
+    'jquery',
+    'domReady',
+    'jquery/ui',
+    'mage/cookies'
+], function ($, domReady) {
+    'use strict';
+
+    /**
+     * Nodes tree to flat list converter
+     * @returns {Array}
+     */
+    $.fn.comments = function () {
+        var elements = [];
+
+        /**
+         * @param {jQuery} element - Comment holder
+         */
+        (function lookup(element) {
+            $(element).contents().each(function (index, el) {
+                switch (el.nodeType) {
+                    case 1: // ELEMENT_NODE
+                        lookup(el);
+                        break;
+
+                    case 8: // COMMENT_NODE
+                        elements.push(el);
+                        break;
+
+                    case 9: // DOCUMENT_NODE
+                        var hostName = window.location.hostname,
+                            iFrameHostName = $('<a>')
+                                .prop('href', element.prop('src'))
+                                .prop('hostname');
+
+                        if (hostName === iFrameHostName) {
+                            lookup($(el).find('body'));
+                        }
+                        break;
+                }
+            });
+        })(this);
+
+        return elements;
+    };
+
+    /**
+     * MsgBox Widget checks if message box is displayed and sets cookie
+     */
+    $.widget('mage.msgBox', {
+        options: {
+            msgBoxCookieName: 'message_box_display',
+            msgBoxSelector: '.main div.messages'
+        },
+
+        /**
+         * Creates widget 'mage.msgBox'
+         * @private
+         */
+        _create: function () {
+            if ($.mage.cookies.get(this.options.msgBoxCookieName)) {
+                $.mage.cookies.clear(this.options.msgBoxCookieName);
+            } else {
+                $(this.options.msgBoxSelector).hide();
+            }
+        }
+    });
+
+    /**
+     * FormKey Widget - this widget is generating from key, saves it to cookie and
+     */
+    $.widget('mage.formKey', {
+        options: {
+            inputSelector: 'input[name="form_key"]',
+            allowedCharacters: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',
+            length: 16
+        },
+
+        /**
+         * Creates widget 'mage.formKey'
+         * @private
+         */
+        _create: function () {
+            var date,
+                formKey = $.mage.cookies.get('form_key');
+
+            if (!formKey) {
+                formKey = generateRandomString(this.options.allowedCharacters, this.options.length);
+                date = new Date();
+                date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));
+                $.mage.cookies.set('form_key', formKey, {
+                    expires: date,
+                    path: '/'
+                });
+            }
+            $(this.options.inputSelector).val(formKey);
+        }
+    });
+
+    /**
+     * PageCache Widget
+     */
     $.widget('mage.pageCache', {
         options: {
             url: '/',
@@ -21,26 +115,46 @@ define([
             versionCookieName: 'private_content_version',
             handles: []
         },
+
+        /**
+         * Creates widget 'mage.pageCache'
+         * @private
+         */
         _create: function () {
-            var version = $.mage.cookies.get(this.options.versionCookieName);
+            var placeholders,
+                version = $.mage.cookies.get(this.options.versionCookieName);
+
             if (!version) {
-                return ;
+                return;
             }
-            var placeholders = this._searchPlaceholders(this.element.comments());
-            if (placeholders.length) {
+            placeholders = this._searchPlaceholders(this.element.comments());
+
+            if (placeholders && placeholders.length) {
                 this._ajax(placeholders, version);
             }
         },
+
+        /**
+         * Parse page for placeholders.
+         * @param {Array} elements
+         * @returns {Array}
+         * @private
+         */
         _searchPlaceholders: function (elements) {
             var placeholders = [],
-                tmp = {};
-            if (!elements.length) {
+                tmp = {},
+                ii,
+                len,
+                el, matches, name;
+
+            if (!(elements && elements.length)) {
                 return placeholders;
             }
-            for (var i = 0; i < elements.length; i++) {
-                var el = elements[i],
-                    matches = this.options.patternPlaceholderOpen.exec(el.nodeValue),
-                    name = null;
+
+            for (ii = 0, len = elements.length; ii < len; ii++) {
+                el = elements[ii];
+                matches = this.options.patternPlaceholderOpen.exec(el.nodeValue);
+                name = null;
 
                 if (matches) {
                     name = matches[1];
@@ -50,8 +164,10 @@ define([
                     };
                 } else {
                     matches = this.options.patternPlaceholderClose.exec(el.nodeValue);
+
                     if (matches) {
                         name = matches[1];
+
                         if (tmp[name]) {
                             tmp[name].closeElement = el;
                             placeholders.push(tmp[name]);
@@ -60,44 +176,74 @@ define([
                     }
                 }
             }
+
             return placeholders;
         },
-        _replacePlaceholder: function(placeholder, html) {
+
+        /**
+         * Parse for page and replace placeholders
+         * @param {Object} placeholder
+         * @param {Object} html
+         * @protected
+         */
+        _replacePlaceholder: function (placeholder, html) {
+            if (!placeholder || !html) {
+                return;
+            }
+
             var parent = $(placeholder.openElement).parent(),
                 contents = parent.contents(),
                 startReplacing = false,
-                prevSibling = null;
-            for (var y = 0; y < contents.length; y++) {
-                var element = contents[y];
+                prevSibling = null,
+                yy,
+                len,
+                element;
+
+            for (yy = 0, len = contents.length; yy < len; yy++) {
+                element = contents[yy];
+
                 if (element == placeholder.openElement) {
                     startReplacing = true;
                 }
+
                 if (startReplacing) {
                     $(element).remove();
                 } else if (element.nodeType != 8) {
                     //due to comment tag doesn't have siblings we try to find it manually
                     prevSibling = element;
                 }
+
                 if (element == placeholder.closeElement) {
                     break;
                 }
             }
+
             if (prevSibling) {
                 $(prevSibling).after(html);
             } else {
                 $(parent).prepend(html);
             }
+
             // trigger event to use mage-data-init attribute
             $(parent).trigger('contentUpdated');
         },
+
+        /**
+         * AJAX helper
+         * @param {Object} placeholders
+         * @param {String} version
+         * @private
+         */
         _ajax: function (placeholders, version) {
-            var data = {
-                blocks: [],
-                handles: this.options.handles,
-                version: version
-            };
-            for (var i = 0; i < placeholders.length; i++) {
-                data.blocks.push(placeholders[i].name);
+            var ii,
+                data = {
+                    blocks: [],
+                    handles: this.options.handles,
+                    version: version
+                };
+
+            for (ii = 0; ii < placeholders.length; ii++) {
+                data.blocks.push(placeholders[ii].name);
             }
             data.blocks = JSON.stringify(data.blocks.sort());
             data.handles = JSON.stringify(data.handles);
@@ -108,18 +254,53 @@ define([
                 cache: true,
                 dataType: 'json',
                 context: this,
+
+                /**
+                 * Response handler
+                 * @param {Object} response
+                 */
                 success: function (response) {
-                    for (var i = 0; i < placeholders.length; i++) {
-                        var placeholder = placeholders[i];
-                        if (!response.hasOwnProperty(placeholder.name)) {
-                            continue;
+                    var placeholder, i;
+
+                    for (i = 0; i < placeholders.length; i++) {
+                        placeholder = placeholders[i];
+
+                        if (response.hasOwnProperty(placeholder.name)) {
+                            this._replacePlaceholder(placeholder, response[placeholder.name]);
                         }
-                        this._replacePlaceholder(placeholder, response[placeholder.name]);
                     }
                 }
             });
         }
     });
-    
-    return $.mage.pageCache;
+
+    domReady(function () {
+        $('body')
+            .msgBox()
+            .formKey();
+    });
+
+    return {
+        'pageCache': $.mage.pageCache,
+        'formKey': $.mage.formKey,
+        'msgBox': $.mage.msgBox
+    };
+
+    /**
+     * Helper. Generate random string
+     * TODO: Merge with mage/utils
+     * @param {String} chars - list of symbols
+     * @param {Number} length - length for need string
+     * @returns {String}
+     */
+    function generateRandomString(chars, length) {
+        var result = '';
+        length = length > 0 ? length : 1;
+
+        while (length--) {
+            result += chars[Math.round(Math.random() * (chars.length - 1))];
+        }
+
+        return result;
+    }
 });
diff --git a/app/code/Magento/Reports/view/adminhtml/templates/report/refresh/statistics.phtml b/app/code/Magento/Reports/view/adminhtml/templates/report/refresh/statistics.phtml
index 476eb5940c95c5eca090a4f04459bfd204a56abe..49c0d645a0b32e10d1340d549362a485f1a55f64 100644
--- a/app/code/Magento/Reports/view/adminhtml/templates/report/refresh/statistics.phtml
+++ b/app/code/Magento/Reports/view/adminhtml/templates/report/refresh/statistics.phtml
@@ -7,5 +7,5 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
 <?php echo $this->getChildHtml('grid') ?>
diff --git a/app/code/Magento/Review/Block/Adminhtml/Add.php b/app/code/Magento/Review/Block/Adminhtml/Add.php
index ce58795f990a07583fd59ebe119649066a5a23a9..d2eae2be459bfea0a49a03f171c17c8f40c6bda1 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Add.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Add.php
@@ -40,8 +40,8 @@ class Add extends \Magento\Backend\Block\Widget\Form\Container
         ';
 
         $this->_formInitScripts[] = '
-            //<![CDATA[
-            var review = function() {
+            require(["jquery","prototype"], function(jQuery){
+            window.review = function() {
                 return {
                     productInfoUrl : null,
                     formHidden : true,
@@ -56,7 +56,16 @@ class Add extends \Magento\Backend\Block\Widget\Form\Container
                     },
 
                     loadProductData : function() {
-                        var con = new Ext.lib.Ajax.request(\'POST\', review.productInfoUrl, {success:review.reqSuccess,failure:review.reqFailure}, {form_key:FORM_KEY});
+                        jQuery.ajax({
+                            type: "POST",
+                            url: review.productInfoUrl,
+                            data: {
+                                form_key: FORM_KEY
+                            },
+                            showLoader: true,
+                            success: review.reqSuccess,
+                            error: review.reqFailure
+                        });
                     },
 
                     showForm : function() {
@@ -83,8 +92,7 @@ class Add extends \Magento\Backend\Block\Widget\Form\Container
             '", {parameters:params, evalScripts: true,  onComplete:function(){ $(\'save_button\').disabled = false; } });
                     },
 
-                    reqSuccess :function(o) {
-                        var response = Ext.util.JSON.decode(o.responseText);
+                    reqSuccess :function(response) {
                         if( response.error ) {
                             alert(response.message);
                         } else if( response.id ){
@@ -102,11 +110,12 @@ class Add extends \Magento\Backend\Block\Widget\Form\Container
                 }
             }();
 
-             Event.observe(window, \'load\', function(){
+            Event.observe(window, \'load\', function(){
                  if ($("select_stores")) {
                      Event.observe($("select_stores"), \'change\', review.updateRating);
                  }
-           });
+            });
+            });
            //]]>
         ';
     }
diff --git a/app/code/Magento/Review/view/adminhtml/requirejs-config.js b/app/code/Magento/Review/view/adminhtml/requirejs-config.js
deleted file mode 100644
index 3c9c2a068876ebfc1899dcec95e51eaebc76cb73..0000000000000000000000000000000000000000
--- a/app/code/Magento/Review/view/adminhtml/requirejs-config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-var config = {
-    deps: [
-        'Magento_Review/rating/validation-rules'
-    ]
-};
\ No newline at end of file
diff --git a/app/code/Magento/Review/view/adminhtml/templates/add.phtml b/app/code/Magento/Review/view/adminhtml/templates/add.phtml
index 5ccafd39f0f051294648d0f8f2d3455df38e05a8..783158b931fb87529ffcdd42dda93e64e524612d 100644
--- a/app/code/Magento/Review/view/adminhtml/templates/add.phtml
+++ b/app/code/Magento/Review/view/adminhtml/templates/add.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <?php echo $this->getBackButtonHtml() ?>
     <?php echo $this->getResetButtonHtml() ?>
     <span class="hidden" id="formButtons">
diff --git a/app/code/Magento/Review/view/adminhtml/web/rating/validation-rules.js b/app/code/Magento/Review/view/adminhtml/web/rating/validation-rules.js
deleted file mode 100644
index 3b2742d24c64fc10c03263d9787c072605f491e9..0000000000000000000000000000000000000000
--- a/app/code/Magento/Review/view/adminhtml/web/rating/validation-rules.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Rating validation rules
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    "jquery",
-    "mage/validation"
-], function($){
-
-    $.validator.addMethod(
-        'validate-rating',
-        function () {
-            var ratings = $('#detailed_rating').find('.field-rating'),
-                noError = true;
-
-            ratings.each(function (index, rating) {
-                noError = noError && $(rating).find('input:checked').length > 0;
-            });
-            return noError;
-        },
-        'Please select one of each ratings above.');
-
-});
\ No newline at end of file
diff --git a/app/code/Magento/Review/view/frontend/templates/review.phtml b/app/code/Magento/Review/view/frontend/templates/review.phtml
index 94453714fdf058b99201902dfaf8da1adbf319dc..deca6df9232fb3b0979e6f933a7f62abc9e731cf 100644
--- a/app/code/Magento/Review/view/frontend/templates/review.phtml
+++ b/app/code/Magento/Review/view/frontend/templates/review.phtml
@@ -9,45 +9,47 @@
 <?php echo $this->getChildHtml(); ?>
 
 <script>
-//<![CDATA[
-function processReviews(url,fromPages) {
-(function($) {
-    $.ajax({
-        url: url,
-        dataType: 'html'
-    }).done(function(data) {
-        $('#product-review-container').html(data);
-        $('.pages a').each(function(index, element) {
-            $(element).click(function(event) {
-                processReviews($(element).attr('href'), true);
-                event.preventDefault();
+    require([
+        'jquery'
+    ], function ($) {
+
+        function processReviews(url, fromPages) {
+            $.ajax({
+                url: url,
+                dataType: 'html'
+            }).done(function (data) {
+                $('#product-review-container').html(data);
+                $('.pages a').each(function (index, element) {
+                    $(element).click(function (event) {
+                        processReviews($(element).attr('href'), true);
+                        event.preventDefault();
+                    });
+                });
+            }).complete(function () {
+                if (fromPages == true) {
+                    $('html, body').animate({
+                        scrollTop: $('#reviews').offset().top - 50
+                    }, 300);
+                }
             });
-        });
-    }).complete(function(){
-        if (fromPages == true) {
-            $('html, body').animate({
-                scrollTop: $('#reviews').offset().top - 50
-            }, 300);
         }
-    });
-})(jQuery);
-}
-processReviews('<?php echo $this->getProductReviewUrl();?>');
 
-jQuery(function() {
-    jQuery('.product-info-main .reviews-actions a').click(function(event) {
-        event.preventDefault();
-        var acnchor = jQuery(this).attr('href').replace(/^.*?(#|$)/,'');
-        jQuery(".product.data.items [data-role='content']").each(function(index){
-            if(this.id == "reviews") {
-                jQuery(".product.data.items").tabs('activate',index);
-                jQuery('html, body').animate({
-                    scrollTop: jQuery('#' + acnchor).offset().top - 50
-                }, 300);
-            }
-        })
-    })
-});
+        processReviews('<?php echo $this->getProductReviewUrl();?>');
 
-//]]>
-</script>
+        $(function () {
+            $('.product-info-main .reviews-actions a').click(function (event) {
+                event.preventDefault();
+                var acnchor = $(this).attr('href').replace(/^.*?(#|$)/, '');
+                $(".product.data.items [data-role='content']").each(function(index){
+                    if (this.id == 'reviews') {
+                        $('.product.data.items').tabs('activate', index);
+                        $('html, body').animate({
+                            scrollTop: $('#' + acnchor).offset().top - 50
+                        }, 300);
+                    }
+                });
+            });
+        });
+
+    });
+</script>
\ No newline at end of file
diff --git a/app/code/Magento/Sales/view/adminhtml/templates/transactions/detail.phtml b/app/code/Magento/Sales/view/adminhtml/templates/transactions/detail.phtml
index 7d3564c822b40227d1ddf4481f582d492b218b02..56dc4bd3507793c36ec82ba9878a0f9e71210893 100644
--- a/app/code/Magento/Sales/view/adminhtml/templates/transactions/detail.phtml
+++ b/app/code/Magento/Sales/view/adminhtml/templates/transactions/detail.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions"><?php echo $this->getButtonsHtml() ?></div>
 <div class="fieldset-wrapper">
     <div class="fieldset-wrapper-title">
         <span class="title"><?php echo __('Transaction Data'); ?></span>
diff --git a/app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-create-index.js b/app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-create-index.js
index 41653616c434370e0aa99335f3c9407e6c4a6a4e..57cedc091591584ebc4c79a686d5152e6716a6d7 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-create-index.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-create-index.js
@@ -4,7 +4,5 @@
  */
 
 require([
-    // From Magento_Sales::sales_order_create_index.xml
-    "Magento_Sales/order/create/giftmessage",
-    "Magento_Sales/order/giftoptions_tooltip"
+    "Magento_Sales/order/create/giftmessage"
 ]);
\ No newline at end of file
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/giftoptions_tooltip.js b/app/code/Magento/Sales/view/adminhtml/web/order/giftoptions_tooltip.js
index 9286de955f4861b23e83515822875bdd7cf1e655..1f4c5002b98d9fe538b955e33e740b7a8e73d57d 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/giftoptions_tooltip.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/giftoptions_tooltip.js
@@ -9,8 +9,8 @@
  */
 define(["prototype"], function(){
 
+var GiftOptionsTooltip = Class.create();
 
-window.GiftOptionsTooltip = Class.create();
 GiftOptionsTooltip.prototype = {
     _tooltipLines: [],
     _tooltipWindow: null,
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml
index 0687d7fec5198b34d000590ee59f46d5471a9fc3..f9d1098da35bb2fcb3de4a0809b32c032b18b881 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/class/page/edit.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <?php echo $this->getBackButtonHtml(); ?>
     <?php echo $this->getResetButtonHtml(); ?>
     <?php echo $this->getDeleteButtonHtml(); ?>
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/add.phtml b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/add.phtml
index eb37ee69af5d0eb084f0de56efb76132a03da3ff..154baa06c34587e372b18b3aa4fcea13a053e828 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/add.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/add.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <button onclick="window.location.href='<?php echo $createUrl ?>'">
         <?php echo __('Add New Class') ?>
     </button>
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/save.phtml b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/save.phtml
index 611cc27fa33acef904fbf4d03b8d514b96b92ee6..d67af60be8cd0fe8722c00d5a7cd9087bae86659 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/save.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/class/save.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <?php echo $this->getBackButtonHtml() ?>
     <?php echo $this->getResetButtonHtml() ?>
     <?php echo $this->getSaveButtonHtml() ?>
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/add.phtml b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/add.phtml
index 61346078bf068a98ae8a43059f61dac95dc71654..c39cc32bb3109e862e7664ec920a3673acc1fd8a 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/add.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/add.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <button onclick="window.location.href='<?php echo $createUrl ?>'">
         <?php echo __('Add New Tax Rule') ?>
     </button>
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/save.phtml b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/save.phtml
index 6601a6fee7a8fa0326abc62791df4e274a438e7e..c1585d0f1aa8c372fadc852d0dab03cf578544ec 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/save.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/toolbar/rule/save.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div class="page-actions">
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions">
     <?php echo $this->getBackButtonHtml(); ?>
     <?php echo $this->getResetButtonHtml(); ?>
     <?php echo $this->getSaveButtonHtml(); ?>
diff --git a/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml b/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml
index fb5fc443fe42ff4a594b6e78df2c2b1bb2296be0..5bfaf3e8aacc97247bfcdd53e65ac5dc8fb5b931 100644
--- a/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml
+++ b/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml
@@ -23,7 +23,7 @@
         </form>
         <?php endif; ?>
         <script>
-require(['jquery', "mage/mage", "js/theme"], function(jQuery){
+require(['jquery', "mage/mage", "loadingPopup"], function(jQuery){
 
     jQuery('#import-form').mage('form').mage('validation');
     (function ($) {
diff --git a/app/code/Magento/Theme/view/adminhtml/requirejs-config.js b/app/code/Magento/Theme/view/adminhtml/requirejs-config.js
new file mode 100644
index 0000000000000000000000000000000000000000..13f4b8a4228eab61c52d84d5cec7658cad328c26
--- /dev/null
+++ b/app/code/Magento/Theme/view/adminhtml/requirejs-config.js
@@ -0,0 +1,58 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+var config = {
+    "shim": {
+        "extjs/ext-tree-checkbox": [
+            "extjs/ext-tree",
+            "extjs/defaults"
+        ]
+    },
+    "bundles": {
+        "js/theme": [
+            "globalNavigation",
+            "globalSearch",
+            "modalPopup",
+            "useDefault",
+            "loadingPopup",
+            "collapsable"
+        ]
+    },
+    "map": {
+        "*": {
+            "translateInline":      "mage/translate-inline",
+            "form":                 "mage/backend/form",
+            "button":               "mage/backend/button",
+            "accordion":            "mage/accordion",
+            "actionLink":           "mage/backend/action-link",
+            "validation":           "mage/backend/validation",
+            "notification":         "mage/backend/notification",
+            "loader":               "mage/loader_old",
+            "loaderAjax":           "mage/loader_old",
+            "floatingHeader":       "mage/backend/floating-header",
+            "suggest":              "mage/backend/suggest",
+            "mediabrowser":         "jquery/jstree/jquery.jstree",
+            "tabs":                 "mage/backend/tabs",
+            "treeSuggest":          "mage/backend/tree-suggest",
+            "calendar":             "mage/calendar",
+            "dropdown":             "mage/dropdown_old",
+            "collapsible":          "mage/collapsible",
+            "menu":                 "mage/backend/menu",
+            "jstree":               "jquery/jstree/jquery.jstree",
+            "details":              "jquery/jquery.details"
+        }
+    },
+    "deps": [
+        "js/theme",
+        "mage/backend/bootstrap"
+    ],
+    "paths": {
+        "jquery/ui": "jquery/jquery-ui-1.9.2"
+    }
+};
+
+require(['jquery'], function (jQuery) {
+    jQuery.noConflict();
+});
\ No newline at end of file
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/fieldset/js.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/fieldset/js.phtml
index bb3d55c4c9e7b71f24d2e0fb23047b3d4810575f..6f81ceb18656b1f8125d8f3d08e606d224917dee 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/fieldset/js.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/fieldset/js.phtml
@@ -42,6 +42,7 @@
 require([
     "jquery",
     "jquery/ui",
+    "Magento_Theme/js/sortable",
     "Magento_Theme/js/custom-js-list"
 ], function(jQuery){
 
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
index d7652b782a6ada0450e9babd7262f031fd3a9f85..0b64d8d1a4c7d5ef646f50c7e198fca36e7cdd61 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
@@ -11,6 +11,7 @@
 require([
     "jquery",
     "jquery/file-uploader",
+    "Magento_Theme/js/sortable",
     "mage/translate"
 ], function($){
 
diff --git a/app/code/Magento/Theme/view/adminhtml/web/js/bootstrap.js b/app/code/Magento/Theme/view/adminhtml/web/js/bootstrap.js
index fa5168eacb1ca187ab7c5e71c634ec00d3a26067..1087a962aca5b8c4dc583073e9c83060cd29646d 100644
--- a/app/code/Magento/Theme/view/adminhtml/web/js/bootstrap.js
+++ b/app/code/Magento/Theme/view/adminhtml/web/js/bootstrap.js
@@ -6,6 +6,5 @@
 require([
     "jquery/fileUploader/jquery.fileupload-ui",
     "mage/adminhtml/browser",
-    "Magento_Theme/js/form",
-    "Magento_Theme/js/sortable"
+    "Magento_Theme/js/form"
 ]);
\ No newline at end of file
diff --git a/app/code/Magento/Theme/view/adminhtml/web/js/sortable.js b/app/code/Magento/Theme/view/adminhtml/web/js/sortable.js
index 13047196ba0082648b9f83f9ea1c3610aafade94..2e33d96bbde5fcf72410e958ddbf534da5ebef15 100644
--- a/app/code/Magento/Theme/view/adminhtml/web/js/sortable.js
+++ b/app/code/Magento/Theme/view/adminhtml/web/js/sortable.js
@@ -44,6 +44,6 @@ define([
             data.item.insertAfter(data.item.next());
         }
     });
-    
+
     return $.mage.sortable;
 });
\ No newline at end of file
diff --git a/app/code/Magento/Theme/view/base/requirejs-config.js b/app/code/Magento/Theme/view/base/requirejs-config.js
new file mode 100644
index 0000000000000000000000000000000000000000..963f164eda16cf83e4d1b3c98b8657cba1ccc721
--- /dev/null
+++ b/app/code/Magento/Theme/view/base/requirejs-config.js
@@ -0,0 +1,50 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+var config = {
+    "waitSeconds": 0,
+    "shim": {
+        "jquery/jquery-migrate": ["jquery"],
+        "jquery/jquery.hashchange": ["jquery"],
+        "jquery/jstree/jquery.hotkeys": ["jquery"],
+        "jquery/hover-intent": ["jquery"],
+        "mage/adminhtml/backup": ["prototype"],
+        "mage/adminhtml/tools": ["prototype"],
+        "mage/adminhtml/varienLoader": ["prototype"],
+        "mage/captcha": ["prototype"],
+        "mage/common": ["jquery"],
+        "mage/requirejs/plugin/id-normalizer": ["jquery"],
+        "mage/webapi": ["jquery"],
+        "jquery/ui": ["jquery"],
+        "tinymce": {
+            "exports": "tinymce"
+        },
+        "ko": {
+            "exports": "ko"
+        },
+        "moment": {
+            "exports": "moment"
+        },
+        "matchMedia": {
+            "exports": "mediaCheck"
+        }
+    },
+    "paths": {
+        "jquery/validate": "jquery/jquery.validate",
+        "jquery/hover-intent": "jquery/jquery.hoverIntent",
+        "jquery/template": "jquery/jquery.tmpl.min",
+        "jquery/file-uploader": "jquery/fileUploader/jquery.fileupload-fp",
+        "handlebars": "jquery/handlebars/handlebars-v1.3.0",
+        "jquery/jquery.hashchange": "jquery/jquery.ba-hashchange.min",
+        "prototype": "prototype/prototype-amd",
+        "text": "requirejs/text",
+        "domReady": "requirejs/domReady",
+        "ko": "ko/ko",
+        "tinymce": "tiny_mce/tiny_mce"
+    },
+    "deps": [
+        "jquery/jquery-migrate"
+    ]
+};
\ No newline at end of file
diff --git a/app/code/Magento/Theme/view/frontend/layout/default.xml b/app/code/Magento/Theme/view/frontend/layout/default.xml
index b0f2b06196e0228ba337ba317b88c2e8ddf53338..c6769c7cfe7cf3ede4c0c39487378c4e8eb48649 100644
--- a/app/code/Magento/Theme/view/frontend/layout/default.xml
+++ b/app/code/Magento/Theme/view/frontend/layout/default.xml
@@ -8,8 +8,6 @@
 <page layout="3columns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
     <update handle="default_head_blocks"/>
     <body>
-        <!-- Temporary solution -->
-        <block name="require.js" class="Magento\Framework\View\Element\Template" template="Magento_Theme::js/require_js.phtml" />
         <referenceContainer name="after.body.start">
             <block class="Magento\RequireJs\Block\Html\Head\Config" name="requirejs-config"/>
             <block class="Magento\Translation\Block\Js" name="translate" template="Magento_Translation::translate.phtml"/>
diff --git a/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml b/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml
index c62eb0ab85c6ef421939307332259f2567a0798d..0dc044355c5f45155901108ef05ee06e093d097d 100644
--- a/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml
+++ b/app/code/Magento/Theme/view/frontend/layout/default_head_blocks.xml
@@ -11,12 +11,6 @@
         <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"/>
         <css src="mage/calendar.css"/>
         <script src="requirejs/require.js"/>
-        <!-- /**
-        TODO: remove jQuery. jQuery could be loaded through RequireJS. But only in case ALL MODULES ARE AMD MODULES.
-        Detail: http://requirejs.org/docs/jquery.html#noconflictmap
-        */ -->
-        <script src="jquery/jquery.js"/>
-        <script src="app-config.js"/>
     </head>
     <body>
         <referenceContainer name="after.body.start">
diff --git a/app/code/Magento/Theme/view/frontend/requirejs-config.js b/app/code/Magento/Theme/view/frontend/requirejs-config.js
index 54705fb5abca08b5cd2027e7198eb8cf78778d11..f984999b783288823be273cf35aaa559da930235 100644
--- a/app/code/Magento/Theme/view/frontend/requirejs-config.js
+++ b/app/code/Magento/Theme/view/frontend/requirejs-config.js
@@ -5,45 +5,42 @@
 
 var config = {
     map: {
-        '*': {
-            cookieBlock:            'Magento_Theme/js/notices',
-            rowBuilder:             'Magento_Theme/js/row-builder',
-            toggleAdvanced:         'mage/toggle',
-            translateInline:        'mage/translate-inline',
-            sticky:                 'mage/sticky',
-            tabs:                   'mage/tabs',
-            zoom:                   'mage/zoom',
-            gallery:                'mage/gallery',
-            galleryFullScreen:      'mage/gallery-fullscreen',                
-            collapsible:            'mage/collapsible',
-            dropdownDialog:         'mage/dropdown',
-            dropdown:               'mage/dropdowns',
-            accordion:              'mage/accordion',
-            loader:                 'mage/loader',
-            tooltip:                'mage/tooltip',
-            deletableItem:          'mage/deletable-item',
-            itemTable:              'mage/item-table',
-            fieldsetControls:       'mage/fieldset-controls',
-            fieldsetResetControl:   'mage/fieldset-controls',
-            redirectUrl:            'mage/redirect-url',
-            loaderAjax:             'mage/loader',
-            menu:                   'mage/menu',
-            popupWindow:            'mage/popup-window',
-            validation:             'mage/validation/validation'
+        "*": {
+            "cookieBlock":            "Magento_Theme/js/notices",
+            "rowBuilder":             "Magento_Theme/js/row-builder",
+            "toggleAdvanced":         "mage/toggle",
+            "translateInline":        "mage/translate-inline",
+            "sticky":                 "mage/sticky",
+            "tabs":                   "mage/tabs",
+            "zoom":                   "mage/zoom",
+            "gallery":                "mage/gallery",
+            "galleryFullScreen":      "mage/gallery-fullscreen",
+            "collapsible":            "mage/collapsible",
+            "dropdownDialog":         "mage/dropdown",
+            "dropdown":               "mage/dropdowns",
+            "accordion":              "mage/accordion",
+            "loader":                 "mage/loader",
+            "tooltip":                "mage/tooltip",
+            "deletableItem":          "mage/deletable-item",
+            "itemTable":              "mage/item-table",
+            "fieldsetControls":       "mage/fieldset-controls",
+            "fieldsetResetControl":   "mage/fieldset-controls",
+            "redirectUrl":            "mage/redirect-url",
+            "loaderAjax":             "mage/loader",
+            "menu":                   "mage/menu",
+            "popupWindow":            "mage/popup-window",
+            "validation":             "mage/validation/validation"
         }
     },
     paths: {
-        'jquery/ui': 'jquery/jquery-ui'
+        "jquery/ui": "jquery/jquery-ui"
     },
     deps: [
-        'jquery',
-        'jquery/jquery-migrate',
-        'jquery/jquery.mobile.custom',
-        'js/responsive',
-        'mage/common',
-        'mage/dataPost',
-        'js/theme',
-        'mage/terms',
-        'mage/bootstrap'
+        "jquery/jquery.mobile.custom",
+        "js/responsive",
+        "mage/common",
+        "mage/dataPost",
+        "js/theme",
+        "mage/bootstrap"
     ]
 };
\ No newline at end of file
diff --git a/app/code/Magento/Theme/view/frontend/templates/js/require_js.phtml b/app/code/Magento/Theme/view/frontend/templates/js/require_js.phtml
deleted file mode 100644
index 97d0888128561b583f446883da74c1857841846a..0000000000000000000000000000000000000000
--- a/app/code/Magento/Theme/view/frontend/templates/js/require_js.phtml
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-?>
-<script>
-    var require = {
-        "baseUrl": "<?php echo $this->getViewFileUrl('/') ?>"
-    };
-</script>
diff --git a/app/code/Magento/Ui/view/base/layout/ui_components.xml b/app/code/Magento/Ui/view/base/layout/ui_components.xml
index 411aa482d005c918da68508329d9c6a4c1f51091..0a2a85b793f16b58fe5b21a4fc5dc3b96be55686 100644
--- a/app/code/Magento/Ui/view/base/layout/ui_components.xml
+++ b/app/code/Magento/Ui/view/base/layout/ui_components.xml
@@ -132,6 +132,7 @@
         <arguments>
             <argument name="js_config" xsi:type="array">
                 <item name="extends" xsi:type="string">input</item>
+                <item name="component" xsi:type="string">Magento_Ui/js/form/element/date</item>
                 <item name="config" xsi:type="array">
                     <item name="input_type" xsi:type="string">date</item>
                 </item>
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/date.js b/app/code/Magento/Ui/view/base/web/js/form/element/date.js
new file mode 100644
index 0000000000000000000000000000000000000000..6e53005137b69fac101db602d58b930d24c24473
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/date.js
@@ -0,0 +1,31 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'moment',
+    './abstract'
+], function (moment, Abstract) {
+    'use strict';
+
+    return Abstract.extend({
+        defaults: {
+            dateFormat: 'MM/DD/YYYY'
+        },
+
+        /**
+         * Converts initial value to the specified date format.
+         *
+         * @returns {String}
+         */
+        getInititalValue: function () {
+            var value = this._super();
+
+            if (value) {
+                value = moment(value).format(this.dateFormat);
+            }
+
+            return value;
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/templates/pageactions.html b/app/code/Magento/Ui/view/base/web/templates/pageactions.html
index a6496f30d95ad62e6b13c126ecccd2d36342cf07..caf4d917fadfaaa6827f1a25cbd45682bbfa747d 100644
--- a/app/code/Magento/Ui/view/base/web/templates/pageactions.html
+++ b/app/code/Magento/Ui/view/base/web/templates/pageactions.html
@@ -6,7 +6,7 @@
 -->
 <div class="page-main-actions">
     <div class="page-actions-placeholder"></div>
-    <div class="page-actions" data-ui-id="page-actions-toolbar-content-header">
+    <div data-mage-init='{"floatingHeader": {}}' class="page-actions" data-ui-id="page-actions-toolbar-content-header">
         <div class="page-actions-inner" data-title="Pages">
             <div class="page-actions-buttons">
                 <!-- ko foreach: actions -->
diff --git a/app/code/Magento/User/view/adminhtml/templates/admin/forgotpassword.phtml b/app/code/Magento/User/view/adminhtml/templates/admin/forgotpassword.phtml
index 5657758c199dcf23d740cc4ce27ca908822cd5f0..fa7e1060551dcf69fd4bd64175d5667efb7c7f9f 100644
--- a/app/code/Magento/User/view/adminhtml/templates/admin/forgotpassword.phtml
+++ b/app/code/Magento/User/view/adminhtml/templates/admin/forgotpassword.phtml
@@ -28,9 +28,8 @@
     <script src="<?php echo $this->getViewFileUrl('mage/captcha.js') ?>"></script>
 
     <script src="<?php echo $this->getViewFileUrl('requirejs/require.js') ?>"></script>
-    <script src="<?php echo $this->getViewFileUrl('jquery/jquery.js') ?>"></script>
-    <script src="<?php echo $this->getViewFileUrl('mage/jquery-no-conflict.js') ?>"></script>
-    <script src="<?php echo $this->getViewFileUrl('app-config.js') ?>"></script>
+    <script src="<?php echo $this->getViewFileUrl('jquery.js') ?>"></script>
+    <script src="<?php echo $this->getViewFileUrl('Magento_User::app-config.js') ?>"></script>
     <?php echo $this->getChildHtml('requirejs-config');?>
 
 <body id="page-login" class="page-login page-forgotpassword">
diff --git a/app/code/Magento/User/view/adminhtml/templates/admin/resetforgottenpassword.phtml b/app/code/Magento/User/view/adminhtml/templates/admin/resetforgottenpassword.phtml
index d2c97581ce3394e6c5d579b43d1701433aeab4eb..4e0906e29196deae2003f82a3d56200f5a0f304c 100644
--- a/app/code/Magento/User/view/adminhtml/templates/admin/resetforgottenpassword.phtml
+++ b/app/code/Magento/User/view/adminhtml/templates/admin/resetforgottenpassword.phtml
@@ -27,9 +27,9 @@
     <script src="<?php echo $this->getViewFileUrl('mage/captcha.js') ?>"></script>
 
     <script src="<?php echo $this->getViewFileUrl('requirejs/require.js') ?>"></script>
-    <script src="<?php echo $this->getViewFileUrl('jquery/jquery.js') ?>"></script>
-    <script src="<?php echo $this->getViewFileUrl('mage/jquery-no-conflict.js') ?>"></script>
-    <script src="<?php echo $this->getViewFileUrl('app-config.js') ?>"></script>
+    <script src="<?php echo $this->getViewFileUrl('jquery.js') ?>"></script>
+    <script src="<?php echo $this->getViewFileUrl('Magento_User::app-config.js') ?>"></script>
+    <?php echo $this->getChildHtml('requirejs-config');?>
 
 <body id="page-login" class="page-login page-resetpass">
     <div class="wrapper">
diff --git a/lib/web/app-config.js b/app/code/Magento/User/view/adminhtml/web/app-config.js
similarity index 81%
rename from lib/web/app-config.js
rename to app/code/Magento/User/view/adminhtml/web/app-config.js
index eac841d94392fc32b8df074d78bed427c0594f50..3d547aa5ade899e09bf57662e24fd5f25a613d1a 100644
--- a/lib/web/app-config.js
+++ b/app/code/Magento/User/view/adminhtml/web/app-config.js
@@ -3,11 +3,9 @@
  * See COPYING.txt for license details.
  */
 require.config({
-    "waitSeconds":"0",
+    "waitSeconds": 0,
     "shim": {
         "jquery/jquery.hashchange": ["jquery"],
-        "jquery/jquery.mousewheel": ["jquery"],
-        "jquery/jquery.popups": ["jquery"],
         "jquery/jstree/jquery.hotkeys": ["jquery"],
         "jquery/hover-intent": ["jquery"],
         "mage/adminhtml/backup": ["prototype"],
@@ -15,18 +13,16 @@ require.config({
         "mage/adminhtml/varienLoader": ["prototype"],
         "mage/captcha": ["prototype"],
         "mage/common": ["jquery"],
-        "mage/jquery-no-conflict": ["jquery"],
         "mage/requirejs/plugin/id-normalizer": ["jquery"],
         "mage/webapi": ["jquery"],
         "ko": { exports: "ko" },
         "moment": { exports: "moment" }
     },
     "paths":{
-        'jquery/ui': 'jquery/jquery-ui-1.9.2',
+        "jquery/ui": "jquery/jquery-ui-1.9.2",
         "jquery/validate": "jquery/jquery.validate",
         "jquery/hover-intent": "jquery/jquery.hoverIntent",
         "jquery/template": "jquery/jquery.tmpl.min",
-        "jquery/farbtastic": "jquery/farbtastic/jquery.farbtastic",
         "jquery/file-uploader": "jquery/fileUploader/jquery.fileupload-fp",
         "handlebars": "jquery/handlebars/handlebars-v1.3.0",
         "jquery/jquery.hashchange": "jquery/jquery.ba-hashchange.min",
@@ -36,3 +32,7 @@ require.config({
         "ko": "ko/ko"
     }
 });
+
+require(['jquery'], function(jQuery){
+    jQuery.noConflict();
+});
diff --git a/app/code/Magento/Weee/view/frontend/requirejs-config.js b/app/code/Magento/Weee/view/frontend/requirejs-config.js
index 34cefb64a590fdb4c27c032edf44ba1e30656699..2dbcc0ab7c33d6df0ffdf89f75f057071ca99997 100644
--- a/app/code/Magento/Weee/view/frontend/requirejs-config.js
+++ b/app/code/Magento/Weee/view/frontend/requirejs-config.js
@@ -4,7 +4,9 @@
  */
 
 var config = {
-    deps: [
-        'Magento_Weee/tax-toggle'
-    ]
-};
\ No newline at end of file
+    map: {
+        "*": {
+            "taxToggle": "Magento_Weee/tax-toggle"
+        }
+    }
+};
diff --git a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_excl_tax.phtml b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_excl_tax.phtml
index 1fae6dfcbf3efe2df2599f33e8c1b9e0df9916b8..48e73f2a3433345021c3a98d62c7246a4660e381 100644
--- a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_excl_tax.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_excl_tax.phtml
@@ -11,7 +11,7 @@
 $_item = $this->getItem();
 ?>
 <?php if ($this->displayPriceWithWeeeDetails()): ?>
-    <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'>
+    <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}}'>
 <?php else: ?>
     <span class="cart-price">
 <?php endif; ?>
@@ -28,7 +28,7 @@ $_item = $this->getItem();
     </span>
 
     <?php if ($this->displayFinalPrice()): ?>
-        <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}'>
+        <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#esubtotal-item-tax-details<?php echo $_item->getId(); ?>"}}'>
             <span class="weee" data-label="<?php echo __('Total'); ?>">
                 <?php echo $this->formatPrice($this->getFinalRowDisplayPriceExclTax()); ?>
             </span>
diff --git a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_incl_tax.phtml b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_incl_tax.phtml
index 5782357df3b224145e62b3b5321a3d5af34671bc..d63257b9dc09ca6625703840b11b271fb5deee49 100644
--- a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_incl_tax.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/row_incl_tax.phtml
@@ -14,7 +14,7 @@ $_weeeHelper = $this->helper('Magento\Weee\Helper\Data');
 ?>
 <?php $_incl = $_item->getRowTotalInclTax(); ?>
 <?php if ($this->displayPriceWithWeeeDetails()): ?>
-    <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'>
+    <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}}'>
 <?php else: ?>
     <span class="cart-price">
 <?php endif; ?>
@@ -31,7 +31,7 @@ $_weeeHelper = $this->helper('Magento\Weee\Helper\Data');
     </span>
 
     <?php if ($this->displayFinalPrice()): ?>
-        <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}'>
+        <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#subtotal-item-tax-details<?php echo $_item->getId(); ?>"}}'>
             <span class="weee" data-label="<?php echo __('Total incl. tax'); ?>">
                 <?php echo $this->formatPrice($this->getFinalRowDisplayPriceInclTax()); ?>
             </span>
diff --git a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_excl_tax.phtml b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_excl_tax.phtml
index 5ed7782e839206497d516eb575bf2f0474550f33..4208b0f997e565357552f5af715f81f1c3bf273d 100644
--- a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_excl_tax.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_excl_tax.phtml
@@ -11,7 +11,7 @@
 $_item = $this->getItem();
 ?>
 <?php if ($this->displayPriceWithWeeeDetails()): ?>
-    <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'>
+    <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}}'>
 <?php else: ?>
     <span class="cart-price">
 <?php endif; ?>
@@ -29,7 +29,7 @@ $_item = $this->getItem();
     </span>
 
     <?php if ($this->displayFinalPrice()): ?>
-        <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}'>
+        <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#eunit-item-tax-details<?php echo $_item->getId(); ?>"}}'>
             <span class="weee" data-label="<?php echo __('Total'); ?>">
                 <?php echo $this->formatPrice($this->getFinalUnitDisplayPriceExclTax()); ?>
             </span>
diff --git a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_incl_tax.phtml b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_incl_tax.phtml
index a3bdf78bc3c405ccb1c726d63039e17369d85861..8d36c80c9e78a0f33dce0996679d0778c761d717 100644
--- a/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_incl_tax.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/checkout/onepage/review/item/price/unit_incl_tax.phtml
@@ -14,7 +14,7 @@ $_weeeHelper = $this->helper('Magento\Weee\Helper\Data');
 ?>
 <?php $_incl = $_item->getPriceInclTax(); ?>
 <?php if ($this->displayPriceWithWeeeDetails()): ?>
-    <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'>
+    <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}}'>
 <?php else: ?>
     <span class="cart-price">
 <?php endif; ?>
@@ -32,7 +32,7 @@ $_weeeHelper = $this->helper('Magento\Weee\Helper\Data');
     </span>
 
     <?php if ($this->displayFinalPrice()): ?>
-        <span class="cart-tax-total" data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}'>
+        <span class="cart-tax-total" data-mage-init='{"taxtToggle": {"itemTaxId" : "#unit-item-tax-details<?php echo $_item->getId(); ?>"}}'>
             <span class="weee" data-label="<?php echo __('Total incl. tax'); ?>">
                 <?php echo $this->formatPrice($this->getFinalUnitDisplayPriceInclTax()); ?>
             </span>
diff --git a/app/code/Magento/Weee/view/frontend/templates/item/price/row.phtml b/app/code/Magento/Weee/view/frontend/templates/item/price/row.phtml
index c5df85d313ce185b20fa788ac0d9b2b967d3f4f0..9fe1b48b7125d974a098c577d1227eadf4969ed1 100644
--- a/app/code/Magento/Weee/view/frontend/templates/item/price/row.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/item/price/row.phtml
@@ -14,7 +14,7 @@ $item = $this->getItem();
     <span class="price-including-tax" data-label="<?php echo $this->escapeHtml(__('Incl. Tax')); ?>">
         <?php if ($this->displayPriceWithWeeeDetails()): ?>
             <span class="cart-tax-total"
-                data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $item->getId(); ?>"}'>
+                data-mage-init='{"taxtToggle": {"itemTaxId" : "#subtotal-item-tax-details<?php echo $item->getId(); ?>"}}'>
         <?php else: ?>
             <span class="cart-price">
         <?php endif; ?>
@@ -32,7 +32,7 @@ $item = $this->getItem();
 
             <?php if ($this->displayFinalPrice()): ?>
                 <span class="cart-tax-total"
-                    data-tax-toggle='{"itemTaxId" : "#subtotal-item-tax-details<?php echo $item->getId(); ?>"}'>
+                    data-mage-init='{"taxtToggle": {"itemTaxId" : "#subtotal-item-tax-details<?php echo $item->getId(); ?>"}}'>
                     <span class="weee" data-label="<?php echo $this->escapeHtml(__('Total incl. tax')); ?>">
                         <?php echo $this->formatPrice($this->getFinalRowDisplayPriceInclTax()); ?>
                     </span>
@@ -46,7 +46,7 @@ $item = $this->getItem();
     <span class="price-excluding-tax" data-label="<?php echo $this->escapeHtml(__('Excl. Tax')); ?>">
         <?php if ($this->displayPriceWithWeeeDetails()): ?>
             <span class="cart-tax-total"
-                data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $item->getId(); ?>"}'>
+                data-mage-init='{"taxtToggle": {"itemTaxId" : "#esubtotal-item-tax-details<?php echo $item->getId(); ?>"}}'>
         <?php else: ?>
             <span class="cart-price">
         <?php endif; ?>
@@ -65,7 +65,7 @@ $item = $this->getItem();
 
             <?php if ($this->displayFinalPrice()): ?>
                 <span class="cart-tax-total"
-                    data-tax-toggle='{"itemTaxId" : "#esubtotal-item-tax-details<?php echo $item->getId(); ?>"}'>
+                    data-mage-init='{"taxtToggle": {"itemTaxId" : "#esubtotal-item-tax-details<?php echo $item->getId(); ?>"}}'>
                     <span class="weee" data-label="<?php echo $this->escapeHtml(__('Total')); ?>">
                         <?php echo $this->formatPrice($this->getFinalRowDisplayPriceExclTax()); ?>
                     </span>
diff --git a/app/code/Magento/Weee/view/frontend/templates/item/price/unit.phtml b/app/code/Magento/Weee/view/frontend/templates/item/price/unit.phtml
index 1d5a0f621ee7883ab3733b2dc820f44db29d840b..dd499e0e13bd327db6157564a069ed60f7e9390b 100644
--- a/app/code/Magento/Weee/view/frontend/templates/item/price/unit.phtml
+++ b/app/code/Magento/Weee/view/frontend/templates/item/price/unit.phtml
@@ -14,7 +14,7 @@ $item = $this->getItem();
     <span class="price-including-tax" data-label="<?php echo $this->escapeHtml(__('Incl. Tax')); ?>">
         <?php if ($this->displayPriceWithWeeeDetails()): ?>
             <span class="cart-tax-total"
-                data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $item->getId(); ?>"}'>
+                data-mage-init='{"taxtToggle": {"itemTaxId" : "#unit-item-tax-details<?php echo $item->getId(); ?>"}}'>
         <?php else: ?>
             <span class="cart-price">
         <?php endif; ?>
@@ -32,7 +32,7 @@ $item = $this->getItem();
 
             <?php if ($this->displayFinalPrice()): ?>
                 <span class="cart-tax-total"
-                    data-tax-toggle='{"itemTaxId" : "#unit-item-tax-details<?php echo $item->getId(); ?>"}'>
+                    data-mage-init='{"taxtToggle": {"itemTaxId" : "#unit-item-tax-details<?php echo $item->getId(); ?>"}}'>
                     <span class="weee" data-label="<?php echo $this->escapeHtml(__('Total incl. tax')); ?>">
                         <?php echo $this->formatPrice($this->getFinalUnitDisplayPriceInclTax()); ?>
                     </span>
@@ -46,7 +46,7 @@ $item = $this->getItem();
     <span class="price-excluding-tax" data-label="<?php echo $this->escapeHtml(__('Excl. Tax')); ?>">
         <?php if ($this->displayPriceWithWeeeDetails()): ?>
             <span class="cart-tax-total"
-                data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $item->getId(); ?>"}'>
+                data-mage-init='{"taxtToggle": {"itemTaxId" : "#eunit-item-tax-details<?php echo $item->getId(); ?>"}}'>
         <?php else: ?>
             <span class="cart-price">
         <?php endif; ?>
@@ -65,7 +65,7 @@ $item = $this->getItem();
 
             <?php if ($this->displayFinalPrice()): ?>
                 <span class="cart-tax-total"
-                    data-tax-toggle='{"itemTaxId" : "#eunit-item-tax-details<?php echo $item->getId(); ?>"}'>
+                    data-mage-init='{"taxtToggle": {"itemTaxId" : "#eunit-item-tax-details<?php echo $item->getId(); ?>"}}'>
                     <span class="weee" data-label="<?php echo $this->escapeHtml(__('Total')); ?>">
                         <?php echo $this->formatPrice($this->getFinalUnitDisplayPriceExclTax()); ?>
                     </span>
diff --git a/app/code/Magento/Weee/view/frontend/web/tax-toggle.js b/app/code/Magento/Weee/view/frontend/web/tax-toggle.js
index 8edf1eb3ad8e7418d380675f3deb42ab99a3ea6d..3d3dc9c140b363c7796301ebc9ce959710899bfa 100644
--- a/app/code/Magento/Weee/view/frontend/web/tax-toggle.js
+++ b/app/code/Magento/Weee/view/frontend/web/tax-toggle.js
@@ -3,17 +3,21 @@
  * See COPYING.txt for license details.
  */
 /*jshint browser:true jquery:true*/
-define(["jquery"], function($){
-    "use strict";
-    
-    $(function() {
-        $('body').on('click', '[data-tax-toggle]', function() {
-            var currElem = $(this),
-                args = currElem.data("tax-toggle"),
-                expandedClassName = args.expandedClassName ? args.expandedClassName : 'cart-tax-total-expanded';
-            currElem.toggleClass(expandedClassName);
-            $(args.itemTaxId).toggle();
-        });
-    });
+define([
+    'jquery'
+], function ($) {
+    'use strict';
 
-});
\ No newline at end of file
+    function onToggle(config, e) {
+        var elem = $(e.currentTarget),
+            expandedClassName = config.expandedClassName || 'cart-tax-total-expanded';
+
+        elem.toggleClass(expandedClassName);
+
+        $(config.itemTaxId).toggle();
+    }
+
+    return function (data, el) {
+        $(el).on('click', onToggle.bind(null, data));
+    };
+});
diff --git a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
index ccd04fb7a617b2f6f9b7361036b40d5f5ab077d0..8e83ef8894fa64cdd0835ee226f205cdeed38102 100644
--- a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
+++ b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
@@ -16,7 +16,7 @@
     </div>
 </fieldset>
 <script>
-require(['prototype'], function(){
+require(["prototype", "extjs/ext-tree-checkbox"], function(){
 
 //<![CDATA[
 
diff --git a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml
index 58ddcc5a0985fda2bd54e9b67c8e1d9b7f402819..5929c0bbc0a355ddb6f4b1e72789fed975a8fc59 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml
+++ b/app/design/adminhtml/Magento/backend/Magento_Backend/layout/default.xml
@@ -15,7 +15,6 @@
         <css src="css/admin.css"/>
         <css src="css/pages.css"/>
         <css src="css/styles.css"/>
-        <css src="jquery/farbtastic/css/farbtastic.css"/>
         <css src="mui/utils.css"/>
         <css src="Magento_Core::prototype/magento.css"/>
         <css src="mui/print.css" media="print"/>
diff --git a/app/design/adminhtml/Magento/backend/web/js/theme.js b/app/design/adminhtml/Magento/backend/web/js/theme.js
index 8b36f4fc21f335d78750174053950122dd15332d..0a5b8f4ab0dfd4a6c1ff96314f346a147985397b 100644
--- a/app/design/adminhtml/Magento/backend/web/js/theme.js
+++ b/app/design/adminhtml/Magento/backend/web/js/theme.js
@@ -3,47 +3,13 @@
  * See COPYING.txt for license details.
  */
 
-define([
-    "jquery",
-    'mage/smart-keyboard-handler',
-    "mage/backend/floating-header",
-    'mage/ie-class-fixer',
-    "jquery/ui",
-    "jquery/hover-intent",
-    "jquery/jquery.details",
-    "jquery/jquery.tabs",
-    "jquery/farbtastic"  // $(..).farbtastic()
-],function($, keyboardHandler) {
+define('globalNavigation', [
+    'jquery',
+    'jquery/ui',
+    'jquery/hover-intent'
+], function ($) {
     'use strict';
 
-    $.widget('mage.globalSearch', {
-        options: {
-            field: '.search-global-field',
-            fieldActiveClass: 'active',
-            input: '#search-global'
-        },
-
-        _create: function() {
-            this.field = $(this.options.field);
-            this.input = $(this.options.input);
-            this._events();
-        },
-
-        _events: function() {
-            var self = this;
-            this.input
-                .on('blur.resetGlobalSearchForm', function() {
-                    if (!self.input.val()) {
-                        self.field.removeClass(self.options.fieldActiveClass)
-                    }
-                });
-            this.input
-                .on('focus.activateGlobalSearchForm', function() {
-                        self.field.addClass(self.options.fieldActiveClass)
-                });
-        }
-    });
-
     $.widget('mage.globalNavigation', {
         options: {
             menuCategory: '.level-0',
@@ -52,35 +18,45 @@ define([
             hoverIntentConfig: {
                 interval: 100,
                 timeout: 500 // number = milliseconds delay before onMouseOut
+            },
+            categoriesConfig: {
+                '[data-ui-id="menu-mage-adminhtml-system"]': {
+                    open: 'click'
+                },
+                '[data-ui-id="menu-mage-adminhtml-stores"]': {
+                    open: 'click'
+                }
             }
         },
 
-        _create: function() {
+        _create: function () {
             this.menu = this.element;
             this.menuCategory = $(this.options.menuCategory, this.menu);
             this.menuLinks = $(this.options.menuLinks, this.menuCategory);
             this._bind();
         },
 
-        _menuCategoryBind: function(category, config) {
+        _menuCategoryBind: function (category, config) {
             category
                 .hoverIntent($.extend({}, this.options.hoverIntentConfig, {
                     over: !config.open ? this._hoverEffects : $.noop,
                     out: !config.close ? this._leaveEffects : $.noop
                 }));
+            
             if (config.open) {
                 category.on(config.open, this._hoverEffects);
             }
+
             if (config.close) {
                 category.on(config.close, this._leaveEffects);
             }
         },
 
-        _menuCategoryEvents: function() {
-            this.menuCategory.each($.proxy(function(i, category) {
+        _menuCategoryEvents: function () {
+            this.menuCategory.each($.proxy(function (i, category) {
                 var itemConfig = {};
                 if (this.options.categoriesConfig) {
-                    $.each(this.options.categoriesConfig, $.proxy(function(selector, conf) {
+                    $.each(this.options.categoriesConfig, $.proxy(function (selector, conf) {
                         if ($(category).is(selector)) {
                             itemConfig = conf;
                         }
@@ -90,13 +66,13 @@ define([
             }, this));
         },
 
-        _bind: function() {
+        _bind: function () {
             this._menuCategoryEvents();
             this.menuLinks
-                .on('focus.tabFocus', function(e) {
+                .on('focus.tabFocus', function (e) {
                     $(e.target).trigger('mouseenter');
                 })
-                .on('blur.tabFocus', function(e) {
+                .on('blur.tabFocus', function (e) {
                     $(e.target).trigger('mouseleave');
                 });
         },
@@ -104,14 +80,14 @@ define([
         _hoverEffects: function (e) {
             $(this)
                 .addClass('hover recent')
-                .siblings('.level-0').each(function() {
-                     clearTimeout($(this).prop('hoverIntent_t'));
+                .siblings('.level-0').each(function () {
+                    clearTimeout($(this).prop('hoverIntent_t'));
                     $(this).prop('hoverIntent_s', 0);
                     $(this).removeClass('recent hover');
                 });
 
             var targetSubmenu = $(e.target).closest('.submenu');
-            if(targetSubmenu.length && targetSubmenu.is(':visible')) {
+            if (targetSubmenu.length && targetSubmenu.is(':visible')) {
                 return;
             }
             var availableWidth = parseInt($(this).parent().css('width')) - $(this).position().left,
@@ -120,11 +96,11 @@ define([
 
             submenu.show();
 
-            $.each($('> .submenu > ul li.column', this), function() {
+            $.each($('> .submenu > ul li.column', this), function () {
                 colsWidth = colsWidth + parseInt($(this).css('width'));
             });
 
-            var containerPaddings =  parseInt(submenu.css('padding-left')) + parseInt(submenu.css('padding-right'));
+            var containerPaddings = parseInt(submenu.css('padding-left')) + parseInt(submenu.css('padding-right'));
 
             $(this).toggleClass('reverse', (containerPaddings + colsWidth) > availableWidth);
 
@@ -135,15 +111,15 @@ define([
 
         _leaveEffects: function (e) {
             var targetSubmenu = $(e.target).closest('.submenu'),
-            self = $(this),
-            submenu = $('> .submenu', this);
+                self = $(this),
+                submenu = $('> .submenu', this);
 
-            if(targetSubmenu.length && targetSubmenu.is(':hidden')) {
+            if (targetSubmenu.length && targetSubmenu.is(':hidden')) {
                 return;
             }
 
-            if(submenu.length) {
-                submenu.slideUp('fast', function() {
+            if (submenu.length) {
+                submenu.slideUp('fast', function () {
                     self.removeClass('hover');
                 });
             } else {
@@ -153,6 +129,54 @@ define([
         }
     });
 
+    return $.mage.globalNavigation;
+});
+
+define('globalSearch', [
+    'jquery',
+    'jquery/ui'
+], function ($) {
+    'use strict';
+
+    $.widget('mage.globalSearch', {
+        options: {
+            field: '.search-global-field',
+            fieldActiveClass: 'active',
+            input: '#search-global'
+        },
+
+        _create: function () {
+            this.field = $(this.options.field);
+            this.input = $(this.options.input);
+            this._events();
+        },
+
+        _events: function () {
+            var self = this;
+
+            this.input
+                .on('blur.resetGlobalSearchForm', function () {
+                    if (!self.input.val()) {
+                        self.field.removeClass(self.options.fieldActiveClass)
+                    }
+                });
+
+            this.input
+                .on('focus.activateGlobalSearchForm', function () {
+                    self.field.addClass(self.options.fieldActiveClass)
+                });
+        }
+    });
+
+    return $.mage.globalSearch;
+});
+
+define('modalPopup', [
+    'jquery',
+    'jquery/ui'
+], function ($) {
+    'use strict';
+
     $.widget('mage.modalPopup', {
         options: {
             popup: '.popup',
@@ -160,7 +184,7 @@ define([
             btnHide: '[data-hide="popup"]'
         },
 
-        _create: function() {
+        _create: function () {
             this.fade = this.element;
             this.popup = $(this.options.popup, this.fade);
             this.btnDismiss = $(this.options.btnDismiss, this.popup);
@@ -169,77 +193,29 @@ define([
             this._events();
         },
 
-        _events: function() {
+        _events: function () {
             var self = this;
 
             this.btnDismiss
-                .on('click.dismissModalPopup', function() {
+                .on('click.dismissModalPopup', function () {
                     self.fade.remove();
                 });
 
             this.btnHide
-                .on('click.hideModalPopup', function() {
+                .on('click.hideModalPopup', function () {
                     self.fade.hide();
                 });
         }
     });
 
-    $.widget('mage.loadingPopup', {
-        options: {
-            message: 'Please wait...',
-            timeout: 5000,
-            timeoutId: null,
-            callback: null,
-            template: null
-        },
-
-        _create: function() {
-            this.template =
-                '<div class="popup popup-loading">' +
-                    '<div class="popup-inner">' + this.options.message + '</div>' +
-                '</div>';
-
-            this.popup = $(this.template);
-
-            this._show();
-            this._events();
-        },
-
-        _events: function() {
-            var self = this;
-
-            this.element
-                .on('showLoadingPopup', function() {
-                    self._show();
-                })
-                .on('hideLoadingPopup', function() {
-                    self._hide();
-                });
-        },
-
-        _show: function() {
-            var options = this.options,
-                timeout = options.timeout;
-
-            $('body').trigger('processStart');
-
-            if (timeout) {
-                options.timeoutId = setTimeout( this._delayedHide.bind(this), timeout);
-            }
-        },
-
-        _hide: function() {
-            $('body').trigger('processStop');
-        },
-
-        _delayedHide: function(){
-            this._hide();
-
-            this.options.callback && this.options.callback();
+    return $.mage.modalPopup;
+});
 
-            this.options.timeoutId && clearTimeout(this.options.timeoutId);
-        }
-    });
+define('useDefault', [
+    'jquery',
+    'jquery/ui'
+], function ($) {
+    'use strict';
 
     $.widget('mage.useDefault', {
         options: {
@@ -249,7 +225,7 @@ define([
             label: '.use-default-label'
         },
 
-        _create: function() {
+        _create: function () {
             this.el = this.element;
             this.field = $(this.el).closest(this.options.field);
             this.useDefault = $(this.options.useDefault, this.field);
@@ -260,7 +236,7 @@ define([
             this._events();
         },
 
-        _events: function() {
+        _events: function () {
             var self = this;
 
             this.el
@@ -268,7 +244,7 @@ define([
                 .trigger('change.toggleUseDefaultVisibility');
 
             this.checkbox
-                .on('change.setOrigValue', function() {
+                .on('change.setOrigValue', function () {
                     if ($(this).prop('checked')) {
                         self.el
                             .val(self.origValue)
@@ -279,22 +255,98 @@ define([
                 });
         },
 
-        _toggleUseDefaultVisibility: function() {
+        _toggleUseDefaultVisibility: function () {
             var curValue = this.el.val(),
                 origValue = this.origValue;
 
             this[curValue != origValue ? '_show' : '_hide']();
         },
 
-        _show: function() {
+        _show: function () {
             this.useDefault.show();
         },
 
-        _hide: function() {
+        _hide: function () {
             this.useDefault.hide();
         }
     });
 
+    return $.mage.useDefault;
+});
+
+define('loadingPopup', [
+    'jquery',
+    'jquery/ui'
+], function ($) {
+    'use strict';
+
+    $.widget('mage.loadingPopup', {
+        options: {
+            message: 'Please wait...',
+            timeout: 5000,
+            timeoutId: null,
+            callback: null,
+            template: null
+        },
+
+        _create: function () {
+            this.template =
+                '<div class="popup popup-loading">' +
+                '<div class="popup-inner">' + this.options.message + '</div>' +
+                '</div>';
+
+            this.popup = $(this.template);
+
+            this._show();
+            this._events();
+        },
+
+        _events: function () {
+            var self = this;
+
+            this.element
+                .on('showLoadingPopup', function () {
+                    self._show();
+                })
+                .on('hideLoadingPopup', function () {
+                    self._hide();
+                });
+        },
+
+        _show: function () {
+            var options = this.options,
+                timeout = options.timeout;
+
+            $('body').trigger('processStart');
+
+            if (timeout) {
+                options.timeoutId = setTimeout(this._delayedHide.bind(this), timeout);
+            }
+        },
+
+        _hide: function () {
+            $('body').trigger('processStop');
+        },
+
+        _delayedHide: function () {
+            this._hide();
+
+            this.options.callback && this.options.callback();
+
+            this.options.timeoutId && clearTimeout(this.options.timeoutId);
+        }
+    });
+
+    return $.mage.loadingPopup;
+});
+
+define('collapsable', [
+    'jquery',
+    'jquery/ui',
+    'jquery/jquery.tabs'
+], function ($) {
+    'use strict';
+
     $.widget('mage.collapsable', {
         options: {
             parent: null,
@@ -302,11 +354,11 @@ define([
             wrapper: '.fieldset-wrapper'
         },
 
-        _create: function() {
+        _create: function () {
             this._events();
         },
 
-        _events: function() {
+        _events: function () {
             var self = this;
 
             this.element
@@ -325,99 +377,26 @@ define([
         }
     });
 
-    var updateColorPickerValues = function() {
-        $('.element-color-picker').each(function(){
-            var _this = $(this);
-            _this.find('.color-box.active').removeClass('active');
-            if (_this.find('.farbtastic').is(':visible')) {
-                _this
-                    .find('.farbtastic').hide()
-                    .end()
-                    .find('input').trigger('change.quickStyleElement');
-            }
-        });
-    };
-
-    var toggleColorPickerPosition = function () {
-        var colorPicker = $('.farbtastic:visible'),
-            colorPickerWidth = 350;
-
-        colorPicker.offset() && colorPicker.toggleClass('vertical', parseInt(colorPicker.offset().left, 10) + colorPickerWidth > $(window).width());
-    };
-
-    $(document).ready(function() {
-        $('.search-global.miniform').globalSearch();
-        $('.navigation').globalNavigation({
-            categoriesConfig: {
-                '[data-ui-id="menu-mage-adminhtml-system"]': {
-                    open: 'click'
-                },
-                '[data-ui-id="menu-mage-adminhtml-stores"]': {
-                    open: 'click'
-                }
-            }
-        });
-        $('.fade').modalPopup();
-        $('details').details();
-        $('.page-actions').floatingHeader();
-        $('[data-store-label]').useDefault();
-
-        /* @TODO refactor collapsable as widget and avoid logic binding with such a general selectors */
-        $('.collapse').collapsable();
-        $.each($('.entry-edit'), function(i, entry) {
-            $('.collapse:first', entry).filter(function(){
-                return $(this).data('collapsed') !== true;    
-            }).collapse('show');
-        });
-
-        // TODO: Move to VDE js widjets
-        $.each($('.color-box'), function(index, elem) {
-            $(elem).farbtastic(function(color) {
-                $(elem).css({
-                    'backgroundColor': color
-                });
-                $(elem).siblings('input').val(color);
-            });
-        });
+    return $.mage.collapsable;
+});
 
-        $(document).on('click', function(e) {
-            var target = $(e.target);
-            if (target.closest('.control').find('.color-box').length < 1) {
-                updateColorPickerValues();
-            }
-        });
-        $(window)
-            .on('resize.vdeColorPicker', function () {
-                this.vdeColorPickerTimeoutId && clearTimeout(this.vdeColorPickerTimeoutId);
-
-                this.vdeColorPickerTimeoutId = setTimeout(function() {
-                    toggleColorPickerPosition();
-                }, 500);
-            });
+define('js/theme', [
+    'jquery',
+    'mage/smart-keyboard-handler',
+    'mage/ie-class-fixer',
+    'collapsable',
+    'domReady!'
+], function ($, keyboardHandler) {
+    'use strict';
 
-        $('.color-box')
-            .on('click.showColorPicker', function() {
-                updateColorPickerValues();  // Update values is other color picker is not closed yet
-                $(this)
-                    .addClass('active')
-                    .siblings('input').trigger('focus.quickStyleElement')
-                    .end()
-                    .find('.farbtastic').show();
-                toggleColorPickerPosition();
-            });
-        keyboardHandler.apply();
-    });
+    /* @TODO refactor collapsable as widget and avoid logic binding with such a general selectors */
+    $('.collapse').collapsable();
 
-    $(document).on('ajaxComplete', function() {
-        $('details').details();
+    $.each($('.entry-edit'), function (i, entry) {
+        $('.collapse:first', entry).filter(function () {
+            return $(this).data('collapsed') !== true;
+        }).collapse('show');
     });
 
-    return {
-        collapsable:        $.mage.collapsable,
-        useDefault:         $.mage.useDefault,
-        loadingPopup:       $.mage.loadingPopup,
-        modalPopup:         $.mage.modalPopup,
-        globalNavigation:   $.mage.globalNavigation,
-        globalSearch:       $.mage.globalSearch
-    };
+    keyboardHandler.apply();
 });
diff --git a/app/design/frontend/Magento/blank/web/js/navigation-menu.js b/app/design/frontend/Magento/blank/web/js/navigation-menu.js
index 5717d9bea015b2bac78174c7f952491b9f236aed..472e7a658c5b8d1ab8e16e8c3073633b353150f1 100644
--- a/app/design/frontend/Magento/blank/web/js/navigation-menu.js
+++ b/app/design/frontend/Magento/blank/web/js/navigation-menu.js
@@ -6,11 +6,11 @@
 
 define([
     "jquery",
-    "jquery/template",
     "matchMedia",
+    "jquery/template",
     "mage/dropdowns",
     "mage/terms"
-],function($) {
+],function($, mediaCheck) {
     'use strict';
 
     $.widget('mage.navigationMenu', {
diff --git a/app/design/frontend/Magento/blank/web/js/responsive.js b/app/design/frontend/Magento/blank/web/js/responsive.js
index 4bbaeae0ccff497ff319e509bf3bf1e9342ff4bb..d670ea1e4d41242820412bf660af230de444f543 100644
--- a/app/design/frontend/Magento/blank/web/js/responsive.js
+++ b/app/design/frontend/Magento/blank/web/js/responsive.js
@@ -4,79 +4,78 @@
  */
 
 define([
-    "jquery",
-    "matchMedia",
-    "mage/zoom",
-    "mage/gallery",
-    "mage/tabs"
-],function($) {
+    'jquery',
+    'matchMedia',
+    'mage/tabs',
+    'domReady!'
+], function ($, mediaCheck) {
     'use strict';
 
-    $(function(){
-        mediaCheck({
-            media: '(min-width: 768px)',
-            // Switch to Desktop Version
-            entry: function() {
-                (function() {
+    mediaCheck({
+        media: '(min-width: 768px)',
+        // Switch to Desktop Version
+        entry: function () {
+            (function () {
 
-                    var productInfoMain = $('.product-info-main'),
-                        productInfoAdditional = $("#product-info-additional");
+                var productInfoMain = $('.product-info-main'),
+                    productInfoAdditional = $('#product-info-additional');
 
-                    if(productInfoAdditional.length) {
-                        productInfoAdditional.addClass("hidden");
-                        productInfoMain.removeClass("responsive");
-                    }
+                if (productInfoAdditional.length) {
+                    productInfoAdditional.addClass('hidden');
+                    productInfoMain.removeClass('responsive');
+                }
 
-                })();
+            })();
 
-                var galleryElement = $('[data-role=media-gallery]');
-                if (galleryElement.length && galleryElement.data('mageZoom')) {
-                    galleryElement.zoom('enable');
-                }
-                if (galleryElement.length && galleryElement.data('mageGallery')) {
-                    galleryElement.gallery("option","disableLinks",true);
-                    galleryElement.gallery("option","showNav",false);
-                    galleryElement.gallery("option","showThumbs",true);
-                }
+            var galleryElement = $('[data-role=media-gallery]');
+
+            if (galleryElement.length && galleryElement.data('mageZoom')) {
+                galleryElement.zoom('enable');
+            }
 
-                setTimeout(function(){
-                    $(".product.data.items").tabs("option","openOnFocus",true);
-                }, 500);
-            },
-            // Switch to Mobile Version
-            exit: function() {
-                $('.action.toggle.checkout.progress')
-                    .on('click.gotoCheckoutProgress', function(e){
-                        var myWrapper = '#checkout-progress-wrapper';
-                        scrollTo(myWrapper + ' .title');
-                        $(myWrapper + ' .title').addClass('active');
-                        $(myWrapper + ' .content').show();
-                    });
+            if (galleryElement.length && galleryElement.data('mageGallery')) {
+                galleryElement.gallery('option', 'disableLinks', true);
+                galleryElement.gallery('option', 'showNav', false);
+                galleryElement.gallery('option', 'showThumbs', true);
+            }
 
-                $('body')
-                    .on('click.checkoutProgress', '#checkout-progress-wrapper .title', function(e){
-                        $(this).toggleClass('active');
-                        $('#checkout-progress-wrapper .content').toggle();
-                    });
+            setTimeout(function () {
+                $('.product.data.items').tabs('option', 'openOnFocus', true);
+            }, 500);
+        },
+        // Switch to Mobile Version
+        exit: function () {
+            $('.action.toggle.checkout.progress')
+                .on('click.gotoCheckoutProgress', function () {
+                    var myWrapper = '#checkout-progress-wrapper';
+                    scrollTo(myWrapper + ' .title');
+                    $(myWrapper + ' .title').addClass('active');
+                    $(myWrapper + ' .content').show();
+                });
 
-                var galleryElement = $('[data-role=media-gallery]');
-                setTimeout(function(){
-                    if (galleryElement.length && galleryElement.data('mageZoom')) {
-                        galleryElement.zoom('disable');
-                    }
-                    if (galleryElement.length && galleryElement.data('mageGallery')) {
-                        galleryElement.gallery("option","disableLinks",false);
-                        galleryElement.gallery("option","showNav",true);
-                        galleryElement.gallery("option","showThumbs",false);
-                    }
-                }, 2000);
+            $('body')
+                .on('click.checkoutProgress', '#checkout-progress-wrapper .title', function () {
+                    $(this).toggleClass('active');
+                    $('#checkout-progress-wrapper .content').toggle();
+                });
 
-                setTimeout(function(){
-                        $(".product.data.items").tabs("option","openOnFocus",false);
-                }, 500);
+            var galleryElement = $('[data-role=media-gallery]');
 
-            }
+            setTimeout(function () {
+                if (galleryElement.length && galleryElement.data('mageZoom')) {
+                    galleryElement.zoom('disable');
+                }
+
+                if (galleryElement.length && galleryElement.data('mageGallery')) {
+                    galleryElement.gallery('option', 'disableLinks', false);
+                    galleryElement.gallery('option', 'showNav', true);
+                    galleryElement.gallery('option', 'showThumbs', false);
+                }
+            }, 2000);
 
-        });
+            setTimeout(function () {
+                $('.product.data.items').tabs('option', 'openOnFocus', false);
+            }, 500);
+        }
     });
 });
diff --git a/app/design/frontend/Magento/blank/web/js/theme.js b/app/design/frontend/Magento/blank/web/js/theme.js
index 863502cd891682c40d1fffe514f83bdadd971e12..4e335b7f56b1982176d4fea01991c5419659f21b 100644
--- a/app/design/frontend/Magento/blank/web/js/theme.js
+++ b/app/design/frontend/Magento/blank/web/js/theme.js
@@ -6,29 +6,24 @@ define([
     'jquery',
     'mage/smart-keyboard-handler',
     'mage/mage',
-    'mage/collapsible',
     'mage/ie-class-fixer',
-    'jquery/ui'
-],function($, keyboardHandler) {
+    'domReady!'
+], function ($, keyboardHandler) {
     'use strict';
 
-    $(function() {
-
-        if ($('body').hasClass('checkout-cart-index')) {
-            if ($('#co-shipping-method-form .fieldset.rates').length > 0 && $('#co-shipping-method-form .fieldset.rates :checked').length === 0 ) {
-                $('#block-shipping').on('collapsiblecreate' ,function() {
-                    $('#block-shipping').collapsible('forceActivate');
-                });
-            }
+    if ($('body').hasClass('checkout-cart-index')) {
+        if ($('#co-shipping-method-form .fieldset.rates').length > 0 && $('#co-shipping-method-form .fieldset.rates :checked').length === 0) {
+            $('#block-shipping').on('collapsiblecreate', function () {
+                $('#block-shipping').collapsible('forceActivate');
+            });
         }
+    }
 
-        $('.cart-summary').mage('sticky', {
-            container: '#maincontent'
-        });
-
-        $('.panel.header > .header.links').clone().appendTo('#store\\.links');
-
-        keyboardHandler.apply();
+    $('.cart-summary').mage('sticky', {
+        container: '#maincontent'
     });
 
+    $('.panel.header > .header.links').clone().appendTo('#store\\.links');
+
+    keyboardHandler.apply();
 });
diff --git a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/templates/layer/view.phtml b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/templates/layer/view.phtml
index e20e7a5022c44455f2adf228471e2f86c20ceedd..e26fbc28211b9ed0d0d49d432b5bd8e551568adb 100644
--- a/app/design/frontend/Magento/luma/Magento_LayeredNavigation/templates/layer/view.phtml
+++ b/app/design/frontend/Magento/luma/Magento_LayeredNavigation/templates/layer/view.phtml
@@ -43,7 +43,11 @@
                 </div>
             <?php else: ?>
                 <script>
-                    jQuery('#layered-filter-block').addClass('filter-no-options');
+                    require([
+                        'jquery'
+                    ], function ($) {
+                        $('#layered-filter-block').addClass('filter-no-options');
+                    });
                 </script>
             <?php endif; ?>
         </div>
diff --git a/composer.json b/composer.json
index 6de5bd137c7ec9937e0f137b62027bf6496c74f2..335239646a24341af693099f5920637c504d5935 100644
--- a/composer.json
+++ b/composer.json
@@ -166,7 +166,7 @@
             "linkorb/jsmin-php": "lib/internal/JSMin",
             "phpseclib/phpseclib": "lib/internal/phpseclib",
             "components/jquery": [
-                "lib/web/jquery/jquery.js",
+                "lib/web/jquery.js",
                 "lib/web/jquery/jquery.min.js",
                 "lib/web/jquery/jquery-migrate.js",
                 "lib/web/jquery/jquery-migrate.min.js"
@@ -177,8 +177,7 @@
                 "lib/web/jquery/jquery-ui.min.js"
             ],
             "twbs/bootstrap": [
-                "lib/web/jquery/jquery.tabs.js",
-                "lib/web/jquery/jquery.popups.js"
+                "lib/web/jquery/jquery.tabs.js"
             ],
             "tinymce/tinymce": "lib/web/tiny_mce"
         }
diff --git a/composer.lock b/composer.lock
index ea9bad3526069363200decb3a1acf7fcbc66f512..468bb76ee6930d0827d24fe62177a0a2c0b0780e 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "e24c7a4c699d06b73cd408289bb4f2d2",
+    "hash": "bf5c9bfea7230f2f1647df81ce568d5c",
     "packages": [
         {
             "name": "composer/composer",
@@ -2024,29 +2024,32 @@
         },
         {
             "name": "phpmd/phpmd",
-            "version": "2.1.3",
+            "version": "2.2.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/phpmd/phpmd.git",
-                "reference": "1a485d9db869137af5e9678bd844568c92998b25"
+                "reference": "580e6ca75b472a844389ab8df7a0b412901d0d91"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpmd/phpmd/zipball/1a485d9db869137af5e9678bd844568c92998b25",
-                "reference": "1a485d9db869137af5e9678bd844568c92998b25",
+                "url": "https://api.github.com/repos/phpmd/phpmd/zipball/580e6ca75b472a844389ab8df7a0b412901d0d91",
+                "reference": "580e6ca75b472a844389ab8df7a0b412901d0d91",
                 "shasum": ""
             },
             "require": {
                 "pdepend/pdepend": "2.0.*",
                 "php": ">=5.3.0",
-                "symfony/config": "2.5.*",
-                "symfony/dependency-injection": "2.5.*",
-                "symfony/filesystem": "2.5.*"
+                "symfony/config": ">=2.4",
+                "symfony/dependency-injection": ">=2.4",
+                "symfony/filesystem": ">=2.4"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "*"
             },
             "bin": [
                 "src/bin/phpmd"
             ],
-            "type": "library",
+            "type": "project",
             "autoload": {
                 "psr-0": {
                     "PHPMD\\": "src/main/php"
@@ -2056,21 +2059,42 @@
             "license": [
                 "BSD-3-Clause"
             ],
-            "description": "Official version of PHPMD handled with Composer.",
-            "time": "2014-09-25 15:56:22"
+            "authors": [
+                {
+                    "name": "Manuel Pichler",
+                    "email": "github@manuel-pichler.de",
+                    "homepage": "https://github.com/manuelpichler",
+                    "role": "Project founder"
+                },
+                {
+                    "name": "Other contributors",
+                    "homepage": "https://github.com/phpmd/phpmd/graphs/contributors",
+                    "role": "Contributors"
+                }
+            ],
+            "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
+            "homepage": "http://phpmd.org/",
+            "keywords": [
+                "mess detection",
+                "mess detector",
+                "pdepend",
+                "phpmd",
+                "pmd"
+            ],
+            "time": "2015-01-25 13:46:59"
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "2.0.14",
+            "version": "2.0.15",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94"
+                "reference": "34cc484af1ca149188d0d9e91412191e398e0b67"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca158276c1200cc27f5409a5e338486bc0b4fc94",
-                "reference": "ca158276c1200cc27f5409a5e338486bc0b4fc94",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/34cc484af1ca149188d0d9e91412191e398e0b67",
+                "reference": "34cc484af1ca149188d0d9e91412191e398e0b67",
                 "shasum": ""
             },
             "require": {
@@ -2083,7 +2107,7 @@
             },
             "require-dev": {
                 "ext-xdebug": ">=2.1.4",
-                "phpunit/phpunit": "~4.1"
+                "phpunit/phpunit": "~4"
             },
             "suggest": {
                 "ext-dom": "*",
@@ -2102,9 +2126,6 @@
                 ]
             },
             "notification-url": "https://packagist.org/downloads/",
-            "include-path": [
-                ""
-            ],
             "license": [
                 "BSD-3-Clause"
             ],
@@ -2122,7 +2143,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2014-12-26 13:28:33"
+            "time": "2015-01-24 10:06:35"
         },
         {
             "name": "phpunit/php-file-iterator",
@@ -2603,28 +2624,29 @@
         },
         {
             "name": "sebastian/exporter",
-            "version": "1.0.2",
+            "version": "1.1.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/exporter.git",
-                "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0"
+                "reference": "35ab8d385eef068186c83e23ae83c96b0288b3ee"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
-                "reference": "c7d59948d6e82818e1bdff7cadb6c34710eb7dc0",
+                "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/35ab8d385eef068186c83e23ae83c96b0288b3ee",
+                "reference": "35ab8d385eef068186c83e23ae83c96b0288b3ee",
                 "shasum": ""
             },
             "require": {
-                "php": ">=5.3.3"
+                "php": ">=5.3.3",
+                "sebastian/recursion-context": "~1.0"
             },
             "require-dev": {
-                "phpunit/phpunit": "~4.0"
+                "phpunit/phpunit": "~4.4"
             },
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.0.x-dev"
+                    "dev-master": "1.1.x-dev"
                 }
             },
             "autoload": {
@@ -2664,7 +2686,60 @@
                 "export",
                 "exporter"
             ],
-            "time": "2014-09-10 00:51:36"
+            "time": "2015-01-24 09:57:24"
+        },
+        {
+            "name": "sebastian/recursion-context",
+            "version": "1.0.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/sebastianbergmann/recursion-context.git",
+                "reference": "3989662bbb30a29d20d9faa04a846af79b276252"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/3989662bbb30a29d20d9faa04a846af79b276252",
+                "reference": "3989662bbb30a29d20d9faa04a846af79b276252",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.3.3"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "~4.4"
+            },
+            "type": "library",
+            "extra": {
+                "branch-alias": {
+                    "dev-master": "1.0.x-dev"
+                }
+            },
+            "autoload": {
+                "classmap": [
+                    "src/"
+                ]
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "BSD-3-Clause"
+            ],
+            "authors": [
+                {
+                    "name": "Jeff Welch",
+                    "email": "whatthejeff@gmail.com"
+                },
+                {
+                    "name": "Sebastian Bergmann",
+                    "email": "sebastian@phpunit.de"
+                },
+                {
+                    "name": "Adam Harvey",
+                    "email": "aharvey@php.net"
+                }
+            ],
+            "description": "Provides functionality to recursively process PHP variables",
+            "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+            "time": "2015-01-24 09:48:32"
         },
         {
             "name": "sebastian/version",
@@ -2831,17 +2906,17 @@
         },
         {
             "name": "symfony/config",
-            "version": "v2.5.9",
+            "version": "v2.6.3",
             "target-dir": "Symfony/Component/Config",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Config.git",
-                "reference": "c7309e33b719433d5cf3845d0b5b9608609d8c8e"
+                "reference": "d94f222eff99a22ce313555b78642b4873418d56"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Config/zipball/c7309e33b719433d5cf3845d0b5b9608609d8c8e",
-                "reference": "c7309e33b719433d5cf3845d0b5b9608609d8c8e",
+                "url": "https://api.github.com/repos/symfony/Config/zipball/d94f222eff99a22ce313555b78642b4873418d56",
+                "reference": "d94f222eff99a22ce313555b78642b4873418d56",
                 "shasum": ""
             },
             "require": {
@@ -2851,7 +2926,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -2875,29 +2950,32 @@
             ],
             "description": "Symfony Config Component",
             "homepage": "http://symfony.com",
-            "time": "2015-01-03 08:01:13"
+            "time": "2015-01-03 08:01:59"
         },
         {
             "name": "symfony/dependency-injection",
-            "version": "v2.5.9",
+            "version": "v2.6.3",
             "target-dir": "Symfony/Component/DependencyInjection",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/DependencyInjection.git",
-                "reference": "b04e6782962f8e3312274fd16fb6b37a8210a1c3"
+                "reference": "72db9adf2f6c42e773108038bcdaff263f325b4e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/b04e6782962f8e3312274fd16fb6b37a8210a1c3",
-                "reference": "b04e6782962f8e3312274fd16fb6b37a8210a1c3",
+                "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/72db9adf2f6c42e773108038bcdaff263f325b4e",
+                "reference": "72db9adf2f6c42e773108038bcdaff263f325b4e",
                 "shasum": ""
             },
             "require": {
                 "php": ">=5.3.3"
             },
+            "conflict": {
+                "symfony/expression-language": "<2.6"
+            },
             "require-dev": {
                 "symfony/config": "~2.2",
-                "symfony/expression-language": "~2.4,>=2.4.10",
+                "symfony/expression-language": "~2.6",
                 "symfony/yaml": "~2.1"
             },
             "suggest": {
@@ -2908,7 +2986,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -2932,7 +3010,7 @@
             ],
             "description": "Symfony DependencyInjection Component",
             "homepage": "http://symfony.com",
-            "time": "2015-01-05 08:51:41"
+            "time": "2015-01-05 17:41:06"
         },
         {
             "name": "symfony/event-dispatcher",
@@ -2994,17 +3072,17 @@
         },
         {
             "name": "symfony/filesystem",
-            "version": "v2.5.9",
+            "version": "v2.6.3",
             "target-dir": "Symfony/Component/Filesystem",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Filesystem.git",
-                "reference": "d3c24d7d6e9c342008d8421b2fade460311647ea"
+                "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/d3c24d7d6e9c342008d8421b2fade460311647ea",
-                "reference": "d3c24d7d6e9c342008d8421b2fade460311647ea",
+                "url": "https://api.github.com/repos/symfony/Filesystem/zipball/a1f566d1f92e142fa1593f4555d6d89e3044a9b7",
+                "reference": "a1f566d1f92e142fa1593f4555d6d89e3044a9b7",
                 "shasum": ""
             },
             "require": {
@@ -3013,7 +3091,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -3037,7 +3115,7 @@
             ],
             "description": "Symfony Filesystem Component",
             "homepage": "http://symfony.com",
-            "time": "2015-01-03 21:04:44"
+            "time": "2015-01-03 21:13:09"
         },
         {
             "name": "symfony/stopwatch",
diff --git a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/VariableTest.php b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/VariableTest.php
index b10e7eaabca6b153c1f7fae0bef80ee1d65b9989..663d72757afa209bedd29491f43e297bf50c9d8f 100644
--- a/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/VariableTest.php
+++ b/dev/tests/integration/testsuite/Magento/Backend/Controller/Adminhtml/System/VariableTest.php
@@ -17,6 +17,6 @@ class VariableTest extends \Magento\Backend\Utility\Controller
     {
         $this->dispatch('backend/admin/system_variable/edit');
         $body = $this->getResponse()->getBody();
-        $this->assertContains('function toggleValueElement(element) {', $body);
+        $this->assertContains('window.toggleValueElement = function(element) {', $body);
     }
 }
diff --git a/dev/tests/js/jsTestDriverOrder.php b/dev/tests/js/jsTestDriverOrder.php
index 70f17d874e5aa74055595d025bedee24b82917ff..221a4c40d0e1c57f6c0615852eba8acfc2dce8de 100644
--- a/dev/tests/js/jsTestDriverOrder.php
+++ b/dev/tests/js/jsTestDriverOrder.php
@@ -9,7 +9,7 @@
  * @return array
  */
 return [
-    '/lib/web/jquery/jquery.js',
+    '/lib/web/jquery.js',
     '/lib/web/jquery/jquery-migrate.js',
     '/lib/web/jquery/jquery-ui-1.9.2.js',
     '/dev/tests/js/framework/requirejs-util.js',
diff --git a/dev/tests/js/spec/integration/Magento/PageCache/frontend/js/pageCacheSpec.js b/dev/tests/js/spec/integration/Magento/PageCache/frontend/js/pageCacheSpec.js
new file mode 100644
index 0000000000000000000000000000000000000000..a1c8a63fab3f1ad8a09b036c5a5c5898afc8dee3
--- /dev/null
+++ b/dev/tests/js/spec/integration/Magento/PageCache/frontend/js/pageCacheSpec.js
@@ -0,0 +1,340 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/*global describe*/
+/*global beforeEach*/
+/*global afterEach*/
+/*global it*/
+/*global expect*/
+/*global jasmine*/
+/*global spyOn*/
+define([
+    'jquery',
+    'Magento_PageCache/js/page-cache'
+], function ($) {
+    'use strict';
+
+    if (!Function.prototype.bind) {
+        /**
+         * @param   {Object} bind
+         * @returns {Function}
+         */
+        Function.prototype.bind = function (bind) {
+            var self = this;
+
+            /**
+             * @returns {Function}
+             */
+            return function () {
+                var args = Array.prototype.slice.call(arguments);
+
+                return self.apply(bind || null, args);
+            };
+        };
+    }
+
+    describe('Testing html-comments-parser $.fn.comments behavior', function () {
+        var element,
+            iframe,
+            comment,
+            host;
+
+        beforeEach(function () {
+            element = $('<div />');
+            iframe = $('<iframe />');
+            comment = '<!--COMMENT CONTENT-->';
+            host = window.location.hostname;
+
+            $('body')
+                .append(element)
+                .append(iframe);
+        });
+
+        afterEach(function () {
+            $(element).remove();
+            $(iframe).remove();
+        });
+
+        it('comments fn exists', function () {
+            expect($.fn.comments).toBeDefined();
+            expect($.fn.comments()).toEqual([]);
+        });
+
+        it('on empty node comments() returns empty Array', function () {
+            expect($(element).comments()).toEqual([]);
+            expect($(iframe).insertAfter('body').comments()).toEqual([]);
+        });
+
+        it('on non-empty node comments() returns empty Array with nodes', function () {
+            element.html(comment);
+            expect($(element).comments().length).toEqual(1);
+            expect($(element).comments()[0].nodeType).toEqual(8);
+            expect($(element).comments()[0].nodeValue).toEqual('COMMENT CONTENT');
+        });
+
+        it('on iframe from same host returns Array with nodes', function () {
+            iframe.contents().find('body').html(comment);
+            iframe.attr('src', '//' + host + '/');
+
+            expect(iframe.comments().length).toEqual(1);
+            expect(iframe.comments()[0].nodeType).toEqual(8);
+            expect(iframe.comments()[0].nodeValue).toEqual('COMMENT CONTENT');
+        });
+
+        it('on iframe from other host returns empty Array', function () {
+            iframe.contents().find('body').html(comment);
+            iframe.attr('src', '//' + host + '.otherHost/');
+
+            expect(iframe.comments().length).toEqual(0);
+        });
+    });
+
+    describe('Testing msgBox Widget', function () {
+        var wdContainer,
+            msgCookieName,
+            msgContainer;
+
+        beforeEach(function () {
+            wdContainer = $('<div />');
+            msgContainer = $('<div />');
+            msgCookieName = 'FAKE_COOKIE';
+        });
+
+        afterEach(function () {
+            $(wdContainer).remove();
+            $(msgContainer).remove();
+        });
+
+        it('widget extends jQuery object', function () {
+            expect($.fn.msgBox).toBeDefined();
+        });
+
+        it('widget gets options', function () {
+            wdContainer.msgBox({
+                'msgBoxCookieName': msgCookieName
+            });
+            expect(wdContainer.msgBox('option', 'msgBoxCookieName')).toBe('FAKE_COOKIE');
+        });
+
+        it('widget disables cookie if it exist', function () {
+            spyOn($.mage.cookies, 'get').and.returnValue('FAKE_MAGE_COOKIE');
+            spyOn($.mage.cookies, 'clear');
+
+            wdContainer.msgBox({
+                'msgBoxSelector': msgContainer
+            });
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect($.mage.cookies.clear).toHaveBeenCalled();
+        });
+
+        it('widget disables messageBox if cookie not exist', function () {
+            spyOn($.mage.cookies, 'get');
+
+            wdContainer.msgBox({
+                'msgBoxSelector': msgContainer
+            });
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect(msgContainer.is(':hidden')).toBeTruthy();
+        });
+
+        it('widget exist on load on body', function (done) {
+            $(function () {
+                expect($('body').data('mageMsgBox')).toBeDefined();
+                done();
+            });
+        });
+    });
+
+    describe('Testing FormKey Widget', function () {
+        var wdContainer,
+            msgCookieName,
+            inputContainer;
+
+        beforeEach(function () {
+            wdContainer = $('<div />');
+            inputContainer = $('<input />');
+            msgCookieName = 'FAKE_COOKIE';
+        });
+
+        afterEach(function () {
+            $(wdContainer).remove();
+            $(inputContainer).remove();
+        });
+
+        it('widget extends jQuery object', function () {
+            expect($.fn.formKey).toBeDefined();
+        });
+
+        it('widget set value to input[form_key]', function () {
+            spyOn($.mage.cookies, 'get').and.returnValue('FAKE_COOKIE');
+
+            wdContainer.formKey({
+                'inputSelector': inputContainer
+            });
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect(inputContainer.val()).toBe('FAKE_COOKIE');
+        });
+
+        it('widget set value to input[form_key]', function () {
+            spyOn($.mage.cookies, 'set');
+            spyOn($.mage.cookies, 'get');
+
+            wdContainer.formKey({
+                'inputSelector': inputContainer
+            });
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect($.mage.cookies.set).toHaveBeenCalled();
+            expect(inputContainer.val()).toEqual(jasmine.any(String));
+        });
+
+        it('widget exist on load on body', function (done) {
+            $(function () {
+                expect($('body').data('mageFormKey')).toBeDefined();
+                done();
+            });
+        });
+    });
+
+    describe('Testing PageCache Widget', function () {
+        var wdContainer,
+            versionCookieName,
+            pageBlockContainer;
+
+        beforeEach(function () {
+            wdContainer = $('<div />');
+            pageBlockContainer = $('<div />');
+            versionCookieName = 'FAKE_COOKIE';
+        });
+
+        afterEach(function () {
+            $(wdContainer).remove();
+            $(pageBlockContainer).remove();
+        });
+
+        it('widget extends jQuery object', function () {
+            expect($.fn.pageCache).toBeDefined();
+        });
+
+        it('widget breaks if no private_content_version cookie', function () {
+            spyOn($.mage.cookies, 'get');
+            spyOn($.fn, 'comments');
+
+            wdContainer.pageCache();
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect($.fn.comments).not.toHaveBeenCalled();
+        });
+
+        it('_searchPlaceholders called only when HTML_COMMENTS', function () {
+            var nodes;
+            spyOn($.mage.cookies, 'get').and.returnValue('FAKE_VERSION_COOKIE');
+            spyOn($.mage.pageCache.prototype, '_searchPlaceholders');
+
+            wdContainer
+                .html('<!-- BLOCK FAKE_BLOCK -->FAKE_TEXT<!-- /BLOCK FAKE_BLOCK -->')
+                .pageCache();
+
+            nodes = wdContainer.comments();
+            expect(nodes.length).toEqual(2);
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect($.mage.pageCache.prototype._searchPlaceholders).toHaveBeenCalled();
+            expect($.mage.pageCache.prototype._searchPlaceholders).toHaveBeenCalledWith(nodes);
+        });
+
+        it('_searchPlaceholders return Array of blocks', function () {
+            var nodes,
+                searches;
+            spyOn($.mage.cookies, 'get').and.returnValue('FAKE_VERSION_COOKIE');
+
+            wdContainer
+                .html('<!-- BLOCK FAKE_BLOCK -->FAKE_TEXT<!-- /BLOCK FAKE_BLOCK -->')
+                .pageCache();
+
+            nodes = wdContainer.comments();
+            searches = wdContainer.data('pageCache')._searchPlaceholders(nodes);
+            expect(wdContainer.data('pageCache')._searchPlaceholders()).toEqual([]);
+            expect(searches[0]).toEqual(jasmine.objectContaining({
+                name: 'FAKE_BLOCK'
+            }));
+            expect(searches[0].openElement.nodeType).toBeDefined();
+            expect(searches[0].closeElement.nodeType).toBeDefined();
+        });
+
+        it('_searchPlaceholders called only when HTML_COMMENTS', function () {
+            var nodes;
+            spyOn($.mage.cookies, 'get').and.returnValue('FAKE_VERSION_COOKIE');
+            spyOn($.mage.pageCache.prototype, '_searchPlaceholders');
+
+            wdContainer
+                .html('<!-- BLOCK FAKE_BLOCK -->FAKE_TEXT<!-- /BLOCK FAKE_BLOCK -->')
+                .pageCache();
+
+            nodes = wdContainer.comments();
+            expect(nodes.length).toEqual(2);
+
+            expect($.mage.cookies.get).toHaveBeenCalled();
+            expect($.mage.pageCache.prototype._searchPlaceholders).toHaveBeenCalled();
+            expect($.mage.pageCache.prototype._searchPlaceholders).toHaveBeenCalledWith(nodes);
+        });
+
+        it('_replacePlaceholder append HTML after sibling node', function () {
+            var replacer,
+                searcher,
+                placeholders,
+                context;
+
+            context = {
+                options: {
+                    patternPlaceholderOpen: /^ BLOCK (.+) $/,
+                    patternPlaceholderClose: /^ \/BLOCK (.+) $/
+                }
+            };
+            replacer = $.mage.pageCache.prototype._replacePlaceholder.bind(context);
+            searcher = $.mage.pageCache.prototype._searchPlaceholders.bind(context);
+
+            wdContainer
+                .html('<span></span><!-- BLOCK FAKE_BLOCK -->FAKE_TEXT<!-- /BLOCK FAKE_BLOCK -->');
+            placeholders = searcher(wdContainer.comments());
+            replacer(placeholders[0], '<span>FAKE_HTML</span>');
+
+            expect(wdContainer.html()).toEqual('<span></span><span>FAKE_HTML</span>');
+        });
+
+        it('_replacePlaceholder prepend HTML if no sibling', function () {
+            var replacer,
+                searcher,
+                placeholders,
+                context;
+
+            context = {
+                options: {
+                    patternPlaceholderOpen: /^ BLOCK (.+) $/,
+                    patternPlaceholderClose: /^ \/BLOCK (.+) $/
+                }
+            };
+            replacer = $.mage.pageCache.prototype._replacePlaceholder.bind(context);
+            searcher = $.mage.pageCache.prototype._searchPlaceholders.bind(context);
+
+            wdContainer
+                .html('<!-- BLOCK FAKE_BLOCK -->FAKE_TEXT<!-- /BLOCK FAKE_BLOCK -->');
+            placeholders = searcher(wdContainer.comments());
+            replacer(placeholders[0], '<span>FAKE_HTML</span>');
+
+            expect(wdContainer.html()).toEqual('<span>FAKE_HTML</span>');
+        });
+
+        it('widget exist on load on body', function (done) {
+            $(function () {
+                expect($('body').data('magePageCache')).toBeDefined();
+                done();
+            });
+        });
+    });
+});
diff --git a/dev/tests/js/testsuite/lib/ko/datepicker/index.html b/dev/tests/js/testsuite/lib/ko/datepicker/index.html
index 91a9d8696837cd4fcd44707875e34e555c3bedce..40dd387ffff3019885817bf388f47bdd74875a80 100644
--- a/dev/tests/js/testsuite/lib/ko/datepicker/index.html
+++ b/dev/tests/js/testsuite/lib/ko/datepicker/index.html
@@ -14,7 +14,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../pub/lib/jquery/jquery.js"></script>
+    <script src="../../../pub/lib/jquery.js"></script>
     <script src="../../../pub/moment.js"></script>
     <script src="../../../pub/lib/ko/ko.js"></script>
     <script type="text/javascript" src="testsuite/lib/ko/datepicker/datepicker.js"></script>
diff --git a/dev/tests/js/testsuite/lib/storage/index.html b/dev/tests/js/testsuite/lib/storage/index.html
index 815fdc1b2d39bd2cd555b34277bb595f589ede05..d8a724c4239dd21da2409f88825a6f489e5eef30 100644
--- a/dev/tests/js/testsuite/lib/storage/index.html
+++ b/dev/tests/js/testsuite/lib/storage/index.html
@@ -14,7 +14,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../pub/lib/jquery/jquery.js"></script>
+    <script src="../../../pub/lib/jquery.js"></script>
     <script src="../../../pub/lib/jquery/jquery-ui.js"></script>
     <script src="../../../pub/lib/jquery/jquery.cookie.js"></script>
     <script src="../../../pub/lib/lib/storage.js"></script>
diff --git a/dev/tests/js/testsuite/mage/accordion/index.html b/dev/tests/js/testsuite/mage/accordion/index.html
index caf0d37ac7f17ff02f810936a85735eb858f55ad..0a06f9508838afcf231f0b64c8e58ff168ca90b2 100644
--- a/dev/tests/js/testsuite/mage/accordion/index.html
+++ b/dev/tests/js/testsuite/mage/accordion/index.html
@@ -14,7 +14,7 @@
     <title>Accordion Widget: QUnit Tests </title>
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
-    <script type="text/javascript" src="../../../pub/lib/jquery/jquery.js"></script>
+    <script type="text/javascript" src="../../../pub/lib/jquery.js"></script>
     <script type="text/javascript" src="../../../pub/lib/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/mage.js"></script>
diff --git a/dev/tests/js/testsuite/mage/calendar/calendar.html b/dev/tests/js/testsuite/mage/calendar/calendar.html
index 815dcd1e5cdb9f358ec40a6ffb769094d27fbb83..cde85a37fb06198ba3f162a2e2df712ec9ec8183 100644
--- a/dev/tests/js/testsuite/mage/calendar/calendar.html
+++ b/dev/tests/js/testsuite/mage/calendar/calendar.html
@@ -14,7 +14,7 @@
   <title>Calendar Widget: QUnit Tests </title>
 	<base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
-    <script type="text/javascript" src="../../../lib/web/jquery/jquery.js"></script>
+    <script type="text/javascript" src="../../../lib/web/jquery.js"></script>
     <script type="text/javascript" src="../../../lib/web/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="../../../lib/web/jquery/jquery-ui-timepicker-addon.js"></script>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
diff --git a/dev/tests/js/testsuite/mage/collapsible/index.html b/dev/tests/js/testsuite/mage/collapsible/index.html
index 84a1c8b23deb049f686a928ee78c6067fd9b766b..f24d1a6421b77725a4d5bfe9a39fdb108ef9aa62 100644
--- a/dev/tests/js/testsuite/mage/collapsible/index.html
+++ b/dev/tests/js/testsuite/mage/collapsible/index.html
@@ -15,7 +15,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../pub/lib/jquery/jquery.js"></script>
+    <script src="../../../pub/lib/jquery.js"></script>
     <script src="../../../pub/lib/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/mage.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/collapsible.js"></script>
diff --git a/dev/tests/js/testsuite/mage/dropdown/index.html b/dev/tests/js/testsuite/mage/dropdown/index.html
index a973c94d95c923f3b2432e7e48123946c05a70b2..ef696958453e56a45fcdf9fb333a342805e51e8b 100644
--- a/dev/tests/js/testsuite/mage/dropdown/index.html
+++ b/dev/tests/js/testsuite/mage/dropdown/index.html
@@ -14,7 +14,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../lib/web/jquery/jquery.js"></script>
+    <script src="../../../lib/web/jquery.js"></script>
     <script src="../../../lib/web/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="../../../lib/web/mage/mage.js"></script>
     <script type="text/javascript" src="../../../lib/web/mage/dropdown.js"></script>
diff --git a/dev/tests/js/testsuite/mage/list/index.html b/dev/tests/js/testsuite/mage/list/index.html
index ed7e4132bdd3dab2b4c820d84779411f4bd2e0e7..4080d6b6816c0fbbb825fa87fe1c6c03fe3721de 100644
--- a/dev/tests/js/testsuite/mage/list/index.html
+++ b/dev/tests/js/testsuite/mage/list/index.html
@@ -11,7 +11,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../pub/lib/jquery/jquery.js"></script>
+    <script src="../../../pub/lib/jquery.js"></script>
     <script src="../../../pub/lib/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/mage.js"></script>
     <script type="text/javascript" src="../../../pub/lib/jquery/handlebars/handlebars-v1.3.0.js"></script>
diff --git a/dev/tests/js/testsuite/mage/loader/loader.html b/dev/tests/js/testsuite/mage/loader/loader.html
index 5565cc09846eecbb3b50183ba4c2b336eee22745..720538b191dc4da1616a5f35a2dc3f31cc6951c8 100644
--- a/dev/tests/js/testsuite/mage/loader/loader.html
+++ b/dev/tests/js/testsuite/mage/loader/loader.html
@@ -10,7 +10,7 @@
     <title>Unit test</title>
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
-    <script src="../../../lib/web/jquery/jquery.js"></script>
+    <script src="../../../lib/web/jquery.js"></script>
     <script src="../../../lib/web/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
     <script type="text/javascript" src="../../../lib/web/mage/mage.js"></script>
diff --git a/dev/tests/js/testsuite/mage/menu/index.html b/dev/tests/js/testsuite/mage/menu/index.html
index 9c53b679a867dab920cec3fb9ac2f833922180b7..3b012485dd3133b7ff85d9b8cc38cceb97562a01 100644
--- a/dev/tests/js/testsuite/mage/menu/index.html
+++ b/dev/tests/js/testsuite/mage/menu/index.html
@@ -14,7 +14,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../pub/lib/jquery/jquery.js"></script>
+    <script src="../../../pub/lib/jquery.js"></script>
     <script src="../../../pub/lib/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/mage.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/menu.js"></script>
diff --git a/dev/tests/js/testsuite/mage/tabs/index.html b/dev/tests/js/testsuite/mage/tabs/index.html
index 10350f0decb0f2d29998e0013d08d9548aaf4d67..26eaba784c16956776067c3cae90f39fb575be01 100644
--- a/dev/tests/js/testsuite/mage/tabs/index.html
+++ b/dev/tests/js/testsuite/mage/tabs/index.html
@@ -11,7 +11,7 @@
     <title>Tabs Widget: QUnit Tests </title>
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
-    <script type="text/javascript" src="../../../pub/lib/jquery/jquery.js"></script>
+    <script type="text/javascript" src="../../../pub/lib/jquery.js"></script>
     <script type="text/javascript" src="../../../pub/lib/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
     <script type="text/javascript" src="../../../pub/lib/mage/mage.js"></script>
diff --git a/dev/tests/js/testsuite/mage/validation/index.html b/dev/tests/js/testsuite/mage/validation/index.html
index 844402236cd82ceec69416b0284d482dcd8bc8d2..c04e5e7203f8246a04e0f4603480a180e1573d3c 100644
--- a/dev/tests/js/testsuite/mage/validation/index.html
+++ b/dev/tests/js/testsuite/mage/validation/index.html
@@ -14,7 +14,7 @@
     <base href="../../../"/>
     <link type="text/css" rel="stylesheet" href="framework/qunit/qunit-1.14.0.css"/>
     <script type="text/javascript" src="framework/qunit/qunit-1.14.0.js"></script>
-    <script src="../../../lib/web/jquery/jquery.js"></script>
+    <script src="../../../lib/web/jquery.js"></script>
 
     <script src="../../../lib/web/jquery/jquery-ui.js"></script>
     <script type="text/javascript" src="../../../lib/web/mage/mage.js"></script>
diff --git a/dev/tests/static/framework/Magento/TestFramework/Inspection/WordsFinder.php b/dev/tests/static/framework/Magento/TestFramework/Inspection/WordsFinder.php
index c54d302515b5643cd4b0b208249595b703572466..9c13e8ef8bce9db5141f762b0697e520b719371c 100644
--- a/dev/tests/static/framework/Magento/TestFramework/Inspection/WordsFinder.php
+++ b/dev/tests/static/framework/Magento/TestFramework/Inspection/WordsFinder.php
@@ -47,7 +47,9 @@ class WordsFinder
      *
      * @var array
      */
-    protected $copyrightSkipList = [];
+    protected $copyrightSkipList = [
+        'lib/web/legacy-build.min.js'
+    ];
 
     /**
      * Whether copyright presence should be checked or not
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt
index 33b5663b5752f3eb89c6994adcf3d97e9a6e9d39..6b402dd89cf7b8ce346523b86fc8aff952d2e1fd 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/core.txt
@@ -16,4 +16,4 @@ dev/tests/js/testsuite/mage/translate_inline_vde/translate-inline-vde-test.js
 dev/tests/js/framework/qunit
 lib/web/mage/adminhtml
 lib/web/mage/captcha.js
-lib/web/mage/jquery-no-conflict.js
+lib/web/legacy-build.min.js
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml
index bbd9e15d86aec857d5823644aa910d62a8a11fdf..788ac1f5f0eae5a3087471f022d6b6e0ea74af17 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/words_ce.xml
@@ -66,29 +66,5 @@
             <path>dev/tests/api-functional/testsuite/Magento/Webapi/Routing/RequestIdOverrideTest.php</path>
             <word>overriden</word>
         </item>
-        <item>
-            <path>app/code/Magento/Bundle/view/adminhtml/templates/product/edit/bundle.phtml</path>
-            <word>head.js</word>
-        </item>
-        <item>
-            <path>app/code/Magento/Webapi/view/adminhtml/templates/integration/activate/permissions/tab/webapi.phtml</path>
-            <word>head.js</word>
-        </item>
-        <item>
-            <path>app/code/Magento/GiftCard/view/adminhtml/templates/catalog/product/composite/fieldset/giftcard.phtml</path>
-            <word>head.js</word>
-        </item>
-        <item>
-            <path>app/code/Magento/GiftRegistry/view/adminhtml/templates/edit/attributes.phtml</path>
-            <word>head.js</word>
-        </item>
-        <item>
-            <path>app/code/Magento/GiftRegistry/view/adminhtml/templates/edit/type/select.phtml</path>
-            <word>head.js</word>
-        </item>
-        <item>
-            <path>lib/web/mage/mage.js</path>
-            <word>head.js</word>
-        </item>
     </whitelist>
 </config>
diff --git a/dev/tests/unit/testsuite/Magento/Framework/View/Page/Config/_files/template_head.xml b/dev/tests/unit/testsuite/Magento/Framework/View/Page/Config/_files/template_head.xml
index 50eefe25da2614aece9e49b34e10c1ea7dd58b15..1e9db0ed75e382d6db14e1b44e7535307217faee 100644
--- a/dev/tests/unit/testsuite/Magento/Framework/View/Page/Config/_files/template_head.xml
+++ b/dev/tests/unit/testsuite/Magento/Framework/View/Page/Config/_files/template_head.xml
@@ -10,7 +10,6 @@
         <title>Test title</title>
         <meta name="meta_name" content="meta_content"/>
         <css src="path/file.css" media="all" />
-        <link src="mage/jquery-no-conflict.js" ie_condition="lt IE 7" />
         <script src="path/file.js" defer="defer"/>
         <remove src="path/remove/file.css"/>
         <attribute name="head_attribute_name" value="head_attribute_value"/>
diff --git a/dev/tools/grunt/tasks/mage-minify.js b/dev/tools/grunt/tasks/mage-minify.js
new file mode 100644
index 0000000000000000000000000000000000000000..296134954887593009c566fca50bb0ea27c11bb3
--- /dev/null
+++ b/dev/tools/grunt/tasks/mage-minify.js
@@ -0,0 +1,48 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+module.exports = function (grunt) {
+    'use strict';
+
+    var compressor  = require('node-minify'),
+        _           = require('underscore');
+
+    /**
+     * Helper function used to create config object for compressor.
+     *
+     * @param {Object} options - Options object for a current task.
+     * @param {Object} file - File object with 'sorce' and 'destination' properties.
+     * @return {Object} Config object for compressor.
+     */
+    function getConfig(options, file) {
+        return _.extend({
+            fileIn: file.src,
+            fileOut: file.dest
+        }, options);
+    }
+
+    grunt.registerMultiTask('mage-minify', 'Minify files with a various compressor engines', function () {
+        var done = this.async(),
+            files = this.files,
+            total = files.length,
+            options = this.options();
+
+        this.files.forEach(function (file, i) {
+            var config = getConfig(options, file);
+
+            /**
+             * Callback function.
+             */
+            config.callback = function (err) {
+                if (err) {
+                    done(false);
+                } else if (i === total - 1) {
+                    done();
+                }
+            };
+
+            new compressor.minify(config);
+        });
+    });
+};
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
index c8e58d064926d4e0aff3ec2aea9aba1f4c911f94..2afcaf9f3f01d9fb72c52183b92e883654feb28d 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
@@ -115,7 +115,7 @@ class Editor extends Textarea
                 '
                 <script type="text/javascript">
                 //<![CDATA[
-                require(["jquery", "mage/translate", "mage/adminhtml/events", "mage/adminhtml/wysiwyg/tiny_mce/setup"], function(jQuery){' .
+                require(["jquery", "mage/translate", "mage/adminhtml/events", "mage/adminhtml/wysiwyg/tiny_mce/setup", "mage/adminhtml/wysiwyg/widget"], function(jQuery){' .
                 "\n" .
                 '(function($) {$.mage.translate.add(' .
                 \Zend_Json::encode(
diff --git a/lib/web/bootstrap.js b/lib/web/bootstrap.js
deleted file mode 100644
index 99d33f997292477858e0e350a1e4d555db755e12..0000000000000000000000000000000000000000
--- a/lib/web/bootstrap.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- *
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
\ No newline at end of file
diff --git a/lib/web/dnd.js b/lib/web/dnd.js
deleted file mode 100644
index 1e1c5386cb0c8cc8d8c3bccf43d3caad95dc0401..0000000000000000000000000000000000000000
--- a/lib/web/dnd.js
+++ /dev/null
@@ -1,664 +0,0 @@
-// webkitdragdrop.js v1.0, Mon May 15 2010
-//
-// Copyright (c) 2010 Tommaso Buvoli (http://www.tommasobuvoli.com)
-// No Extra Libraries are required, simply download this file, add it to your pages!
-//
-// To See this library in action, grab an ipad and head over to http://www.gotproject.com
-// webkitdragdrop is freely distributable under the terms of an MIT-style license.
-
-
-//Description
-// Because this library was designed to run without requiring any other libraries, several basic helper functions were implemented
-// 6 helper functions in this webkit_tools class have been taked directly from Prototype 1.6.1 (http://prototypejs.org/) (c) 2005-2009 Sam Stephenson
-
-var webkit_tools =
-{
-    //$ function - simply a more robust getElementById
-
-    $:function(e)
-    {
-        if(typeof(e) == 'string')
-        {
-            return document.getElementById(e);
-        }
-        return e;
-    },
-
-    //extend function - copies the values of b into a (Shallow copy)
-
-    extend:function(a,b)
-    {
-        for (var key in b)
-        {
-            a[key] = b[key];
-        }
-        return a;
-    },
-
-    //empty function - used as defaut for events
-
-    empty:function()
-    {
-
-    },
-
-    //remove null values from an array
-
-    compact:function(a)
-    {
-        var b = []
-        var l = a.length;
-        for(var i = 0; i < l; i ++)
-        {
-            if(a[i] !== null)
-            {
-                b.push(a[i]);
-            }
-        }
-        return b;
-    },
-
-    //DESCRIPTION
-    //    This function was taken from the internet (http://robertnyman.com/2006/04/24/get-the-rendered-style-of-an-element/) and returns
-    //    the computed style of an element independently from the browser
-    //INPUT
-    //    oELM (DOM ELEMENT) element whose style should be extracted
-    //    strCssRule element
-
-    getCalculatedStyle:function(oElm, strCssRule)
-    {
-        var strValue = "";
-        if(document.defaultView && document.defaultView.getComputedStyle){
-            strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
-        }
-        else if(oElm.currentStyle){
-            strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
-                return p1.toUpperCase();
-            });
-            strValue = oElm.currentStyle[strCssRule];
-        }
-        return strValue;
-    },
-
-    //bindAsEventListener function - used to bind events
-
-    bindAsEventListener:function(f,object)
-    {
-        var __method = f;
-        return function(event) {
-            __method.call(object, event || window.event);
-        };
-    },
-
-    //cumulative offset - courtesy of Prototype (http://www.prototypejs.org)
-
-    cumulativeOffset:function(element)
-    {
-        var valueT = 0, valueL = 0;
-        do {
-          valueT += element.offsetTop  || 0;
-          valueL += element.offsetLeft || 0;
-          if (element.offsetParent == document.body)
-            if (element.style.position == 'absolute') break;
-
-          element = element.offsetParent;
-        } while (element);
-
-        return {left : valueL, top : valueT};
-      },
-
-      //getDimensions - courtesy of Prototype (http://www.prototypejs.org)
-
-    getDimensions: function(element)
-    {
-        var display = element.style.display;
-        if (display != 'none' && display != null) // Safari bug
-          return {width: element.offsetWidth, height: element.offsetHeight};
-
-        var els = element.style;
-        var originalVisibility = els.visibility;
-        var originalPosition = els.position;
-        var originalDisplay = els.display;
-        els.visibility = 'hidden';
-        if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
-          els.position = 'absolute';
-        els.display = 'block';
-        var originalWidth = element.clientWidth;
-        var originalHeight = element.clientHeight;
-        els.display = originalDisplay;
-        els.position = originalPosition;
-        els.visibility = originalVisibility;
-        return {width: originalWidth, height: originalHeight};
-    },
-
-    //hasClassName - courtesy of Prototype (http://www.prototypejs.org)
-
-    hasClassName: function(element, className)
-    {
-        var elementClassName = element.className;
-        return (elementClassName.length > 0 && (elementClassName == className ||
-        new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
-      },
-
-    //addClassName - courtesy of Prototype (http://www.prototypejs.org)
-
-    addClassName: function(element, className)
-    {
-        if (!this.hasClassName(element, className))
-            element.className += (element.className ? ' ' : '') + className;
-        return element;
-    },
-
-    //removeClassName - courtesy of Prototype (http://www.prototypejs.org)
-
-    removeClassName: function(element, className)
-    {
-        element.className = this.strip(element.className.replace(new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' '));
-        return element;
-    },
-
-    //strip - courtesy of Prototype (http://www.prototypejs.org)
-
-    strip:function(s)
-    {
-        return s.replace(/^\s+/, '').replace(/\s+$/, '');
-    }
-
-}
-
-//Description
-// Droppable fire events when a draggable is dropped on them
-
-var webkit_droppables = function()
-{
-    this.initialize = function()
-    {
-        this.droppables = [];
-        this.droppableRegions = [];
-    }
-
-    this.add = function(root, instance_props)
-    {
-        root = webkit_tools.$(root);
-        var default_props = {accept : [], hoverClass : null, onDrop : webkit_tools.empty, onOver : webkit_tools.empty, onOut : webkit_tools.empty};
-        default_props = webkit_tools.extend(default_props, instance_props || {});
-        this.droppables.push({r : root, p : default_props});
-    }
-
-    this.remove = function(root)
-    {
-        root = webkit_tools.$(root);
-        var d = this.droppables;
-        var i = d.length;
-        while(i--)
-        {
-            if(d[i].r == root)
-            {
-                d[i] = null;
-                this.droppables = webkit_tools.compact(d);
-                return true;
-            }
-        }
-        return false;
-    }
-
-    //calculate position and size of all droppables
-
-    this.prepare = function()
-    {
-        var d = this.droppables;
-        var i = d.length;
-        var dR = [];
-        var r = null;
-
-        while(i--)
-        {
-            r = d[i].r;
-            if(r.style.display != 'none')
-            {
-                dR.push({i : i, size : webkit_tools.getDimensions(r), offset : webkit_tools.cumulativeOffset(r)})
-            }
-        }
-
-        this.droppableRegions = dR;
-    }
-
-    this.finalize = function(x,y,r,e)
-    {
-        var indices = this.isOver(x,y);
-        var index = this.maxZIndex(indices);
-        var over = this.process(index,r);
-        if(over)
-        {
-            this.drop(index, r,e);
-        }
-        this.process(-1,r);
-        return over;
-    }
-
-    this.check = function(x,y,r,e)
-    {
-        var indices = this.isOver(x,y);
-        var index = this.maxZIndex(indices);
-        return this.process(index,r, e);
-    }
-
-    this.isOver = function(x, y)
-    {
-        var dR = this.droppableRegions;
-        var i = dR.length;
-        var active = [];
-        var r = 0;
-        var maxX = 0;
-        var minX = 0;
-        var maxY = 0;
-        var minY = 0;
-
-        while(i--)
-        {
-            r = dR[i];
-
-            minY = r.offset.top;
-            maxY = minY + r.size.height;
-
-            if((y > minY) && (y < maxY))
-            {
-                minX = r.offset.left;
-                maxX = minX + r.size.width;
-
-                if((x > minX) && (x < maxX))
-                {
-                    active.push(r.i);
-                }
-            }
-        }
-
-        return active;
-    }
-
-    this.maxZIndex = function(indices)
-    {
-        var d = this.droppables;
-        var l = indices.length;
-        var index = -1;
-
-        var maxZ = -100000000;
-        var curZ = 0;
-
-        while(l--)
-        {
-            curZ = parseInt(d[indices[l]].r.style.zIndex || 0);
-            if(curZ > maxZ)
-            {
-                maxZ = curZ;
-                index = indices[l];
-            }
-        }
-
-        return index;
-    }
-
-    this.process = function(index, draggableRoot, e)
-    {
-        //only perform update if a change has occurred
-        if(this.lastIndex != index)
-        {
-            //remove previous
-            if(this.lastIndex != null)
-            {
-                var d = this.droppables[this.lastIndex]
-                var p = d.p;
-                var r = d.r;
-
-                if(p.hoverClass)
-                {
-                    webkit_tools.removeClassName(r,p.hoverClass);
-                }
-                p.onOut(draggableRoot, e);
-                this.lastIndex = null;
-                this.lastOutput = false;
-            }
-
-            //add new
-            if(index != -1)
-            {
-                var d = this.droppables[index]
-                var p = d.p;
-                var r = d.r;
-
-                if(this.hasClassNames(draggableRoot, p.accept))
-                {
-                    if(p.hoverClass)
-                    {
-                        webkit_tools.addClassName(r,p.hoverClass);
-                    }
-                    p.onOver(draggableRoot, e);
-                    this.lastIndex = index;
-                    this.lastOutput = true;
-                }
-            }
-        }
-        return this.lastOutput;
-    }
-
-    this.drop = function(index, r, e)
-    {
-        if(index != -1)
-        {
-            this.droppables[index].p.onDrop(r,e);
-        }
-    }
-
-    this.hasClassNames = function(r, names)
-    {
-        var l = names.length;
-        if(l == 0){return true}
-        while(l--)
-        {
-            if(webkit_tools.hasClassName(r,names[l]))
-            {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    this.initialize();
-}
-
-webkit_drop = new webkit_droppables();
-
-//Description
-//webkit draggable - allows users to drag elements with their hands
-
-var webkit_draggable = function(r, ip)
-{
-    this.ready = false;
-    this.timeout = undefined;
-    this.initialize = function(root, instance_props)
-    {
-        this.root = webkit_tools.$(root);
-        var default_props = {scroll : false, revert : false, handle : this.root, zIndex : 1000, onStart : webkit_tools.empty, onEnd : webkit_tools.empty};
-
-        this.p = webkit_tools.extend(default_props, instance_props || {});
-        default_props.handle = webkit_tools.$(default_props.handle);
-        this.prepare();
-        this.bindEvents();
-    }
-
-    this.prepare = function()
-    {
-        var rs = this.root.style;
-
-        //set position
-        if(webkit_tools.getCalculatedStyle(this.root,'position') != 'absolute')
-        {
-            rs.position = 'relative';
-        }
-
-        //set top, right, bottom, left
-        rs.top = rs.top || '0px';
-        rs.left = rs.left || '0px';
-        rs.right = "";
-        rs.bottom = "";
-
-        //set zindex;
-        rs.zIndex = rs.zIndex || '0';
-    }
-
-    this.bindEvents = function()
-    {
-        var handle = this.p.handle;
-
-        this.ts = webkit_tools.bindAsEventListener(this.touchStart, this);
-        this.tm = webkit_tools.bindAsEventListener(this.touchMove, this);
-        this.te = webkit_tools.bindAsEventListener(this.touchEnd, this);
-
-        handle.addEventListener("touchstart", this.ts, false);
-        handle.addEventListener("touchmove", this.tm, false);
-        handle.addEventListener("touchend", this.te, false);
-    }
-
-    this.destroy = function()
-    {
-        var handle = this.p.handle;
-
-        handle.removeEventListener("touchstart", this.ts);
-        handle.removeEventListener("touchmove", this.tm);
-        handle.removeEventListener("touchend", this.te);
-    }
-
-    this.set = function(key, value)
-    {
-        this.p[key] = value;
-    }
-
-    this.touchStart = function(event)
-    {
-        this.timeout = setTimeout(function () {
-            //prepare needed variables
-            var p = this.p;
-            var r = this.root;
-            var rs = r.style;
-            var t = event.targetTouches[0];
-
-            //get position of touch
-            touchX = t.pageX;
-            touchY = t.pageY;
-
-            //set base values for position of root
-            rs.top = this.root.style.top || '0px';
-            rs.left = this.root.style.left || '0px';
-            rs.bottom = null;
-            rs.right = null;
-
-            var rootP = webkit_tools.cumulativeOffset(r);
-            var cp = this.getPosition();
-
-            //save event properties
-            p.rx = cp.x;
-            p.ry = cp.y;
-            p.tx = touchX;
-            p.ty = touchY;
-            p.z = parseInt(this.root.style.zIndex);
-
-            //boost zIndex
-            rs.zIndex = p.zIndex;
-            webkit_drop.prepare();
-            p.onStart(r, event);
-            
-            this.ready = true;
-            
-        }.bind(this), 500);
-    }
-
-    this.touchMove = function(event)
-    {
-        if ( this.ready ) {
-            event.preventDefault();
-            event.stopPropagation();
-
-            //prepare needed variables
-            var p = this.p;
-            var r = this.root;
-            var rs = r.style;
-            var t = event.targetTouches[0];
-            if(t == null){return}
-
-            var curX = t.pageX;
-            var curY = t.pageY;
-
-            var delX = curX - p.tx;
-            var delY = curY - p.ty;
-
-            rs.webkitTransform = 'translate3d(' + (p.rx + delX) + 'px,' + (p.ry + delY) + 'px, 1px)';
-
-            //scroll window
-            if(p.scroll)
-            {
-                s = this.getScroll(curX, curY);
-                if((s[0] != 0) || (s[1] != 0))
-                {
-                    window.scrollTo(window.scrollX + s[0], window.scrollY + s[1]);
-                }
-            }
-
-            //check droppables
-            webkit_drop.check(curX, curY, r, event);
-
-            //save position for touchEnd
-            this.lastCurX = curX;
-            this.lastCurY = curY;
-        }
-    }
-
-    this.touchEnd = function(event)
-    {
-        clearTimeout(this.timeout);
-        if ( this.ready ) {
-            event.preventSwipe = true;
-            var r = this.root;
-            var p = this.p;
-            var dropped = webkit_drop.finalize(this.lastCurX, this.lastCurY, r, event);
-
-            if(((p.revert) && (!dropped)) || (p.revert === 'always'))
-            {
-                //revert root
-                var rs = r.style;
-                rs.webkitTransform = 'translate3d(' + p.rx + 'px,' + p.ry + 'px, 1px)';
-                //rs.top = (p.ry + 'px');
-                //rs.left = (p.rx + 'px');
-            }
-
-            r.style.zIndex = this.p.z;
-            this.p.onEnd(r, event);
-            this.ready = false;
-        }
-    }
-
-    this.getPosition = function()
-    {
-        var rs = this.root.style;
-        return {x : parseInt(rs.left || 0), y : parseInt(rs.top  || 0)}
-    }
-
-    this.getScroll = function(pX, pY)
-    {
-        //read window variables
-        var sX = window.scrollX;
-        var sY = window.scrollY;
-
-        var wX = window.innerWidth;
-        var wY = window.innerHeight;
-
-        //set contants
-        var scroll_amount = 10; //how many pixels to scroll
-        var scroll_sensitivity = 100; //how many pixels from border to start scrolling from.
-
-        var delX = 0;
-        var delY = 0;
-
-        //process vertical y scroll
-        if(pY - sY < scroll_sensitivity)
-        {
-            delY = -scroll_amount;
-        }
-        else
-        if((sY + wY) - pY < scroll_sensitivity)
-        {
-            delY = scroll_amount;
-        }
-
-        //process horizontal x scroll
-        if(pX - sX < scroll_sensitivity)
-        {
-            delX = -scroll_amount;
-        }
-        else
-        if((sX + wX) - pX < scroll_sensitivity)
-        {
-            delX = scroll_amount;
-        }
-
-        return [delX, delY]
-    }
-
-    //contructor
-    this.initialize(r, ip);
-}
-
-//Description
-//webkit_click class. manages click events for draggables
-
-var webkit_click = function(r, ip)
-{
-    this.initialize = function(root, instance_props)
-    {
-        var default_props = {onClick : webkit_tools.empty};
-
-        this.root = webkit_tools.$(root);
-        this.p = webkit_tools.extend(default_props, instance_props || {});
-        this.bindEvents();
-    }
-
-    this.bindEvents = function()
-    {
-        var root = this.root;
-
-        //bind events to local scope
-        this.ts = webkit_tools.bindAsEventListener(this.touchStart,this);
-        this.tm = webkit_tools.bindAsEventListener(this.touchMove,this);
-        this.te = webkit_tools.bindAsEventListener(this.touchEnd,this);
-
-        //add Listeners
-        root.addEventListener("touchstart", this.ts, false);
-        root.addEventListener("touchmove", this.tm, false);
-        root.addEventListener("touchend", this.te, false);
-
-        this.bound = true;
-    }
-
-    this.touchStart = function()
-    {
-        this.moved = false;
-        if(this.bound == false)
-        {
-            this.root.addEventListener("touchmove", this.tm, false);
-            this.bound = true;
-        }
-    }
-
-    this.touchMove = function()
-    {
-        this.moved = true;
-        this.root.removeEventListener("touchmove", this.tm);
-        this.bound = false;
-    }
-
-    this.touchEnd = function()
-    {e.preventSwipe = true;
-        if(this.moved == false)
-        {
-            this.p.onClick();
-        }
-    }
-
-    this.setEvent = function(f)
-    {
-        if(typeof(f) == 'function')
-        {
-            this.p.onClick = f;
-        }
-    }
-
-    this.unbind = function()
-    {
-        var root = this.root;
-        root.removeEventListener("touchstart", this.ts);
-        root.removeEventListener("touchmove", this.tm);
-        root.removeEventListener("touchend", this.te);
-    }
-
-    //call constructor
-    this.initialize(r, ip);
-}
\ No newline at end of file
diff --git a/lib/web/extjs/adapter/ext/ext-base.js b/lib/web/extjs/adapter/ext/ext-base.js
deleted file mode 100644
index 6da8411446f7f117a21c5c67d777f81f4d2d58a5..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/ext/ext-base.js
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,defaults){if(defaults){Ext.apply(o,defaults);}
-if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}
-return o;};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isIE=ua.indexOf("msie")>-1,isIE7=ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
-Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}
-return o;},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o);});return;}
-var cache={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s);}
-cache[s].on(parts[1],o[b]);}}
-cache=null;},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};return function(sb,sp,overrides){if(typeof sp=='object'){overrides=sp;sp=sb;sb=function(){sp.apply(this,arguments);};}
-var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}
-sb.override=function(o){Ext.override(sb,o);};sbp.override=io;sbp.__extcls=sb;Ext.override(sb,overrides);return sb;};}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},urlEncode:function(o){if(!o){return"";}
-var buf=[];for(var key in o){var ov=o[key];var type=typeof ov;if(type=='undefined'){buf.push(encodeURIComponent(key),"=&");}else if(type!="function"&&type!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}}
-buf.pop();return buf.join("");},urlDecode:function(string,overwrite){if(!string||!string.length){return{};}
-var obj={};var pairs=string.split('&');var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split('=');name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value;}else if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value);}else{obj[name].push(value);}}else{obj[name]=value;}}
-return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
-for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
-return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
-return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}
-if(typeof as.purgeListeners=='function'){as.purgeListeners();}
-if(typeof as.destroy=='function'){as.destroy();}}}},isOpera:isOpera,isSafari:isSafari,isIE:isIE,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isWindows:isWindows,isMac:isMac,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
-return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
-fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){fcn.target=this;fcn.method=method;if(fcn.apply(scope||this||window,arguments)===false){return;}
-return method.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(string){return string.replace(/('|\\)/g,"\\$1");},leftPad:function(val,size,ch){var result=new String(val);if(ch===null||ch===undefined||ch===''){ch=" ";}
-while(result.length<size){result=ch+result;}
-return result;},format:function(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}});String.prototype.toggle=function(value,other){return this==value?other:value;};Ext.applyIf(Number.prototype,{constrain:function(min,max){return Math.min(Math.max(this,min),max);}});Ext.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
-return-1;},remove:function(o){var index=this.indexOf(o);if(index!=-1){this.splice(index,1);}}});Date.prototype.getElapsed=function(date){return Math.abs((date||new Date()).getTime()-this.getTime());};
-
-(function(){var libFlyweight;Ext.lib.Dom={getViewWidth:function(full){return full?this.getDocumentWidth():this.getViewportWidth();},getViewHeight:function(full){return full?this.getDocumentHeight():this.getViewportHeight();},getDocumentHeight:function(){var scrollHeight=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(scrollHeight,this.getViewportHeight());},getDocumentWidth:function(){var scrollWidth=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(scrollWidth,this.getViewportWidth());},getViewportHeight:function(){var height=self.innerHeight;var mode=document.compatMode;if((mode||Ext.isIE)&&!Ext.isOpera){height=(mode=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight;}
-return height;},getViewportWidth:function(){var width=self.innerWidth;var mode=document.compatMode;if(mode||Ext.isIE){width=(mode=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth;}
-return width;},isAncestor:function(p,c){p=Ext.getDom(p);c=Ext.getDom(c);if(!p||!c){return false;}
-if(p.contains&&!Ext.isSafari){return p.contains(c);}else if(p.compareDocumentPosition){return!!(p.compareDocumentPosition(c)&16);}else{var parent=c.parentNode;while(parent){if(parent==p){return true;}
-else if(!parent.tagName||parent.tagName.toUpperCase()=="HTML"){return false;}
-parent=parent.parentNode;}
-return false;}},getRegion:function(el){return Ext.lib.Region.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,scroll,bd=document.body;el=Ext.getDom(el);if(el.getBoundingClientRect){b=el.getBoundingClientRect();scroll=fly(document).getScroll();return[b.left+scroll.left,b.top+scroll.top];}else{var x=el.offsetLeft,y=el.offsetTop;p=el.offsetParent;var hasAbsolute=false;if(p!=el){while(p){x+=p.offsetLeft;y+=p.offsetTop;if(Ext.isSafari&&!hasAbsolute&&fly(p).getStyle("position")=="absolute"){hasAbsolute=true;}
-if(Ext.isGecko){pe=fly(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
-p=p.offsetParent;}}
-if(Ext.isSafari&&(hasAbsolute||fly(el).getStyle("position")=="absolute")){x-=bd.offsetLeft;y-=bd.offsetTop;}}
-p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(Ext.isOpera&&p.tagName!='TR'&&fly(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
-p=p.parentNode;}
-return[x,y];},setXY:function(el,xy){el=Ext.fly(el,'_setXY');el.position();var pts=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=pts.left+"px";}
-if(xy[1]!==false){el.dom.style.top=pts.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};Ext.lib.Event=function(){var loadComplete=false;var listeners=[];var unloadListeners=[];var retryCount=0;var onAvailStack=[];var counter=0;var lastError=null;return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function(){if(!this._interval){var self=this;var callback=function(){self._tryPreloadAttach();};this._interval=setInterval(callback,this.POLL_INTERVAL);}},onAvailable:function(p_id,p_fn,p_obj,p_override){onAvailStack.push({id:p_id,fn:p_fn,obj:p_obj,override:p_override,checkReady:false});retryCount=this.POLL_RETRYS;this.startInterval();},addListener:function(el,eventName,fn){el=Ext.getDom(el);if(!el||!fn){return false;}
-if("unload"==eventName){unloadListeners[unloadListeners.length]=[el,eventName,fn];return true;}
-var wrappedFn=function(e){return fn.call(scope,Ext.lib.Event.getEvent(e),obj);};var li=[el,eventName,fn,wrappedFn];var index=listeners.length;listeners[index]=li;this.doAdd(el,eventName,wrappedFn,false);return true;},removeListener:function(el,eventName,fn){var i,len;el=Ext.getDom(el);if(!fn){return this.purgeElement(el,false,eventName);}
-if("unload"==eventName){for(i=0,len=unloadListeners.length;i<len;i++){var li=unloadListeners[i];if(li&&li[0]==el&&li[1]==eventName&&li[2]==fn){unloadListeners.splice(i,1);return true;}}
-return false;}
-var cacheItem=null;var index=arguments[3];if("undefined"==typeof index){index=this._getCacheIndex(el,eventName,fn);}
-if(index>=0){cacheItem=listeners[index];}
-if(!el||!cacheItem){return false;}
-this.doRemove(el,eventName,cacheItem[this.WFN],false);delete listeners[index][this.WFN];delete listeners[index][this.FN];listeners.splice(index,1);return true;},getTarget:function(ev,resolveTextNode){var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(node){if(Ext.isSafari&&node&&3==node.nodeType){return node.parentNode;}else{return node;}},getPageX:function(ev){var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(Ext.isIE){x+=this.getScroll()[1];}}
-return x;},getPageY:function(ev){var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(Ext.isIE){y+=this.getScroll()[0];}}
-return y;},getXY:function(ev){return[this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}
-return this.resolveTextNode(t);},getTime:function(ev){if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){this.lastError=ex;return t;}}
-return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=true;}},preventDefault:function(ev){if(ev.preventDefault){ev.preventDefault();}else{ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;}
-c=c.caller;}}
-return ev;},getCharCode:function(ev){return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,eventName,fn){for(var i=0,len=listeners.length;i<len;++i){var li=listeners[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==eventName){return i;}}
-return-1;},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){},_load:function(e){loadComplete=true;var EU=Ext.lib.Event;if(Ext.isIE){EU.doRemove(window,"load",EU._load);}},_tryPreloadAttach:function(){if(this.locked){return false;}
-this.locked=true;var tryAgain=!loadComplete;if(!tryAgain){tryAgain=(retryCount>0);}
-var notAvail=[];for(var i=0,len=onAvailStack.length;i<len;++i){var item=onAvailStack[i];if(item){var el=this.getEl(item.id);if(el){if(!item.checkReady||loadComplete||el.nextSibling||(document&&document.body)){var scope=el;if(item.override){if(item.override===true){scope=item.obj;}else{scope=item.override;}}
-item.fn.call(scope,item.obj);onAvailStack[i]=null;}}else{notAvail.push(item);}}}
-retryCount=(notAvail.length===0)?0:retryCount-1;if(tryAgain){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}
-this.locked=false;return true;},purgeElement:function(el,recurse,eventName){var elListeners=this.getListeners(el,eventName);if(elListeners){for(var i=0,len=elListeners.length;i<len;++i){var l=elListeners[i];this.removeListener(el,l.type,l.fn);}}
-if(recurse&&el&&el.childNodes){for(i=0,len=el.childNodes.length;i<len;++i){this.purgeElement(el.childNodes[i],recurse,eventName);}}},getListeners:function(el,eventName){var results=[],searchLists;if(!eventName){searchLists=[listeners,unloadListeners];}else if(eventName=="unload"){searchLists=[unloadListeners];}else{searchLists=[listeners];}
-for(var j=0;j<searchLists.length;++j){var searchList=searchLists[j];if(searchList&&searchList.length>0){for(var i=0,len=searchList.length;i<len;++i){var l=searchList[i];if(l&&l[this.EL]===el&&(!eventName||eventName===l[this.TYPE])){results.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.ADJ_SCOPE],index:i});}}}}
-return(results.length)?results:null;},_unload:function(e){var EU=Ext.lib.Event,i,j,l,len,index;for(i=0,len=unloadListeners.length;i<len;++i){l=unloadListeners[i];if(l){var scope=window;if(l[EU.ADJ_SCOPE]){if(l[EU.ADJ_SCOPE]===true){scope=l[EU.OBJ];}else{scope=l[EU.ADJ_SCOPE];}}
-l[EU.FN].call(scope,EU.getEvent(e),l[EU.OBJ]);unloadListeners[i]=null;l=null;scope=null;}}
-unloadListeners=null;if(listeners&&listeners.length>0){j=listeners.length;while(j){index=j-1;l=listeners[index];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],index);}
-j=j-1;}
-l=null;EU.clearCache();}
-EU.doRemove(window,"unload",EU._unload);},getScroll:function(){var dd=document.documentElement,db=document.body;if(dd&&(dd.scrollTop||dd.scrollLeft)){return[dd.scrollTop,dd.scrollLeft];}else if(db){return[db.scrollTop,db.scrollLeft];}else{return[0,0];}},doAdd:function(){if(window.addEventListener){return function(el,eventName,fn,capture){el.addEventListener(eventName,fn,(capture));};}else if(window.attachEvent){return function(el,eventName,fn,capture){el.attachEvent("on"+eventName,fn);};}else{return function(){};}}(),doRemove:function(){if(window.removeEventListener){return function(el,eventName,fn,capture){el.removeEventListener(eventName,fn,(capture));};}else if(window.detachEvent){return function(el,eventName,fn){el.detachEvent("on"+eventName,fn);};}else{return function(){};}}()};}();Ext.lib.Event.on=Ext.lib.Event.addListener;Ext.lib.Event.un=Ext.lib.Event.removeListener;Ext.lib.Ajax={request:function(method,uri,cb,data){return this.asyncRequest(method,uri,cb,data);},formRequest:function(form,uri,cb,data,isUpload,sslUri){this.setForm(form,isUpload,sslUri);return this.asyncRequest(Ext.getDom(form).method||'POST',uri,cb,data);},serializeForm:function(form){if(typeof form=='string'){form=(document.getElementById(form)||document.forms[form]);}
-var el,name,val,disabled,data='',hasSubmit=false;for(var i=0;i<form.elements.length;i++){el=form.elements[i];disabled=form.elements[i].disabled;name=form.elements[i].name;val=form.elements[i].value;if(!disabled&&name){switch(el.type)
-{case'select-one':case'select-multiple':for(var j=0;j<el.options.length;j++){if(el.options[j].selected){if(Ext.isIE){data+=encodeURIComponent(name)+'='+encodeURIComponent(el.options[j].attributes['value'].specified?el.options[j].value:el.options[j].text)+'&';}
-else{data+=encodeURIComponent(name)+'='+encodeURIComponent(el.options[j].hasAttribute('value')?el.options[j].value:el.options[j].text)+'&';}}}
-break;case'radio':case'checkbox':if(el.checked){data+=encodeURIComponent(name)+'='+encodeURIComponent(val)+'&';}
-break;case'file':case undefined:case'reset':case'button':break;case'submit':if(hasSubmit==false){data+=encodeURIComponent(name)+'='+encodeURIComponent(val)+'&';hasSubmit=true;}
-break;default:data+=encodeURIComponent(name)+'='+encodeURIComponent(val)+'&';break;}}}
-data=data.substr(0,data.length-1);return data;},headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:'application/x-www-form-urlencoded',useDefaultXhrHeader:true,defaultXhrHeader:'XMLHttpRequest',hasDefaultHeaders:true,defaultHeaders:{},isFormSubmit:false,isFileUpload:false,formNode:null,formData:null,poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(id)
-{this.activeX.unshift(id);},setDefaultPostHeader:function(b)
-{this.useDefaultHeader=b;},setDefaultXhrHeader:function(b)
-{this.useDefaultXhrHeader=b;},setPollingInterval:function(i)
-{if(typeof i=='number'&&isFinite(i)){this.pollInterval=i;}},createXhrObject:function(transactionId)
-{var obj,http;try
-{http=new XMLHttpRequest();obj={conn:http,tId:transactionId};}
-catch(e)
-{for(var i=0;i<this.activeX.length;++i){try
-{http=new ActiveXObject(this.activeX[i]);obj={conn:http,tId:transactionId};break;}
-catch(e){}}}
-finally
-{return obj;}},getConnectionObject:function()
-{var o;var tId=this.transactionId;try
-{o=this.createXhrObject(tId);if(o){this.transactionId++;}}
-catch(e){}
-finally
-{return o;}},asyncRequest:function(method,uri,callback,postData)
-{var o=this.getConnectionObject();if(!o){return null;}
-else{if(this.isFormSubmit){if(this.isFileUpload){this.uploadFile(o.tId,callback,uri,postData);this.releaseObject(o);return;}
-if(method.toUpperCase()=='GET'){if(this.formData.length!=0){uri+=((uri.indexOf('?')==-1)?'?':'&')+this.formData;}
-else{uri+="?"+this.formData;}}
-else if(method.toUpperCase()=='POST'){postData=postData?this.formData+"&"+postData:this.formData;}}
-o.conn.open(method,uri,true);if(this.useDefaultXhrHeader){if(!this.defaultHeaders['X-Requested-With']){this.initHeader('X-Requested-With',this.defaultXhrHeader,true);}}
-if(this.isFormSubmit||(postData&&this.useDefaultHeader)){this.initHeader('Content-Type',this.defaultPostHeader);if(this.isFormSubmit){this.resetFormState();}}
-if(this.hasDefaultHeaders||this.hasHeaders){this.setHeader(o);}
-this.handleReadyState(o,callback);o.conn.send(postData||null);return o;}},handleReadyState:function(o,callback)
-{var oConn=this;if(callback&&callback.timeout){this.timeout[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
-this.poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(oConn.poll[o.tId]);delete oConn.poll[o.tId];if(callback&&callback.timeout){delete oConn.timeout[o.tId];}
-oConn.handleTransactionResponse(o,callback);}},this.pollInterval);},handleTransactionResponse:function(o,callback,isAbort)
-{if(!callback){this.releaseObject(o);return;}
-var httpStatus,responseObject;try
-{if(o.conn.status!==undefined&&o.conn.status!=0){httpStatus=o.conn.status;}
-else{httpStatus=13030;}}
-catch(e){httpStatus=13030;}
-if(httpStatus>=200&&httpStatus<300){responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);}
-else{callback.success.apply(callback.scope,[responseObject]);}}}
-else{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
-else{callback.failure.apply(callback.scope,[responseObject]);}}
-break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
-else{callback.failure.apply(callback.scope,[responseObject]);}}}}
-this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg)
-{var obj={};var headerObj={};try
-{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){headerObj[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}
-catch(e){}
-obj.tId=o.tId;obj.status=o.conn.status;obj.statusText=o.conn.statusText;obj.getResponseHeader=headerObj;obj.getAllResponseHeaders=headerStr;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof callbackArg!==undefined){obj.argument=callbackArg;}
-return obj;},createExceptionObject:function(tId,callbackArg,isAbort)
-{var COMM_CODE=0;var COMM_ERROR='communication failure';var ABORT_CODE=-1;var ABORT_ERROR='transaction aborted';var obj={};obj.tId=tId;if(isAbort){obj.status=ABORT_CODE;obj.statusText=ABORT_ERROR;}
-else{obj.status=COMM_CODE;obj.statusText=COMM_ERROR;}
-if(callbackArg){obj.argument=callbackArg;}
-return obj;},initHeader:function(label,value,isDefault)
-{var headerObj=(isDefault)?this.defaultHeaders:this.headers;if(headerObj[label]===undefined){headerObj[label]=value;}
-else{headerObj[label]=value+","+headerObj[label];}
-if(isDefault){this.hasDefaultHeaders=true;}
-else{this.hasHeaders=true;}},setHeader:function(o)
-{if(this.hasDefaultHeaders){for(var prop in this.defaultHeaders){if(this.defaultHeaders.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.defaultHeaders[prop]);}}}
-if(this.hasHeaders){for(var prop in this.headers){if(this.defaultHeaders.hasOwnProperty(prop)){o.conn.setRequestHeader(prop,this.headers[prop]);}}
-delete this.headers;this.headers={};this.hasHeaders=false;}},resetDefaultHeaders:function(){delete this.defaultHeaders
-this.defaultHeaders={};this.hasDefaultHeaders=false;},setForm:function(form,isUpload,secureUri){this.resetFormState();if(typeof form=='string'){form=(document.getElementById(form)||document.forms[form]);}
-if(isUpload){this.createFrame(secureUri?secureUri:null);this.isFormSubmit=true;this.isFileUpload=true;this.formNode=form;return;}
-this.isFormSubmit=true;this.formData=this.serializeForm(form);return this.formData;},resetFormState:function(){this.isFormSubmit=false;this.isFileUpload=false;this.formNode=null;this.formData="";},createFrame:function(secureUri){var frameId='yuiIO'+this.transactionId;if(window.ActiveXObject){var io=document.createElement('<iframe id="'+frameId+'" name="'+frameId+'" />');if(typeof secureUri=='boolean'){io.src='javascript:false';}
-else if(typeof secureURI=='string'){io.src=secureUri;}}
-else{var io=document.createElement('iframe');io.id=frameId;io.name=frameId;}
-io.style.position='absolute';io.style.top='-1000px';io.style.left='-1000px';document.body.appendChild(io);},appendPostData:function(postData)
-{var formElements=[];var postMessage=postData.split('&');for(var i=0;i<postMessage.length;i++){var delimitPos=postMessage[i].indexOf('=');if(delimitPos!=-1){formElements[i]=document.createElement('input');formElements[i].type='hidden';formElements[i].name=postMessage[i].substring(0,delimitPos);formElements[i].value=postMessage[i].substring(delimitPos+1);this.formNode.appendChild(formElements[i]);}}
-return formElements;},uploadFile:function(id,callback,uri,postData){var frameId='yuiIO'+id;var uploadEncoding='multipart/form-data';var io=document.getElementById(frameId);this.formNode.action=uri;this.formNode.method='POST';this.formNode.target=frameId;if(this.formNode.encoding){this.formNode.encoding=uploadEncoding;}
-else{this.formNode.enctype=uploadEncoding;}
-if(postData){var oElements=this.appendPostData(postData);}
-this.formNode.submit();if(oElements&&oElements.length>0){for(var i=0;i<oElements.length;i++){this.formNode.removeChild(oElements[i]);}}
-this.resetFormState();var uploadCallback=function()
-{var obj={};obj.tId=id;obj.argument=callback.argument;try
-{obj.responseText=io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;obj.responseXML=io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}
-catch(e){}
-if(callback&&callback.upload){if(!callback.scope){callback.upload(obj);}
-else{callback.upload.apply(callback.scope,[obj]);}}
-if(Ext.lib.Event){Ext.lib.Event.removeListener(io,"load",uploadCallback);}
-else if(window.detachEvent){io.detachEvent('onload',uploadCallback);}
-else{io.removeEventListener('load',uploadCallback,false);}
-setTimeout(function(){document.body.removeChild(io);},100);};Ext.EventManager.addListener(io,"load",uploadCallback);},abort:function(o,callback,isTimeout)
-{if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this.poll[o.tId]);delete this.poll[o.tId];if(isTimeout){delete this.timeout[o.tId];}
-this.handleTransactionResponse(o,callback,true);return true;}
-else{return false;}},isCallInProgress:function(o)
-{if(o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}
-else{return false;}},releaseObject:function(o)
-{o.conn=null;o=null;},activeX:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP']};Ext.lib.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};Ext.lib.Region.prototype={contains:function(region){return(region.left>=this.left&&region.right<=this.right&&region.top>=this.top&&region.bottom<=this.bottom);},getArea:function(){return((this.bottom-this.top)*(this.right-this.left));},intersect:function(region){var t=Math.max(this.top,region.top);var r=Math.min(this.right,region.right);var b=Math.min(this.bottom,region.bottom);var l=Math.max(this.left,region.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(region){var t=Math.min(this.top,region.top);var r=Math.max(this.right,region.right);var b=Math.max(this.bottom,region.bottom);var l=Math.min(this.left,region.left);return new Ext.lib.Region(t,r,b,l);},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Ext.lib.Region.getRegion=function(el){var p=Ext.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Ext.lib.Region(t,r,b,l);};Ext.lib.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}
-this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.lib.Anim={scroll:function(el,args,duration,easing,cb,scope){this.run(el,args,duration,easing,cb,scope,Ext.lib.Scroll);},motion:function(el,args,duration,easing,cb,scope){this.run(el,args,duration,easing,cb,scope,Ext.lib.Motion);},color:function(el,args,duration,easing,cb,scope){this.run(el,args,duration,easing,cb,scope,Ext.lib.ColorAnim);},run:function(el,args,duration,easing,cb,scope,type){type=type||Ext.lib.AnimBase;if(typeof easing=="string"){easing=Ext.lib.Easing[easing];}
-var anim=new type(el,args,duration,easing);anim.animateX(function(){Ext.callback(cb,scope);});return anim;}};function fly(el){if(!libFlyweight){libFlyweight=new Ext.Element.Flyweight();}
-libFlyweight.dom=el;return libFlyweight;}
-if(Ext.isIE){function fnCleaup(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;window.detachEvent("unload",fnCleaup);}
-window.attachEvent("unload",fnCleaup);}
-Ext.lib.AnimBase=function(el,attributes,duration,method){if(el){this.init(el,attributes,duration,method);}};Ext.lib.AnimBase.prototype={toString:function(){var el=this.getEl();var id=el.id||el.tagName;return("Anim "+id);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(attr,start,end){return this.method(this.currentFrame,start,end-start,this.totalFrames);},setAttribute:function(attr,val,unit){if(this.patterns.noNegatives.test(attr)){val=(val>0)?val:0;}
-Ext.fly(this.getEl(),'_anim').setStyle(attr,val+unit);},getAttribute:function(attr){var el=this.getEl();var val=fly(el).getStyle(attr);if(val!=='auto'&&!this.patterns.offsetUnit.test(val)){return parseFloat(val);}
-var a=this.patterns.offsetAttribute.exec(attr)||[];var pos=!!(a[3]);var box=!!(a[2]);if(box||(fly(el).getStyle('position')=='absolute'&&pos)){val=el['offset'+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else{val=0;}
-return val;},getDefaultUnit:function(attr){if(this.patterns.defaultUnit.test(attr)){return'px';}
-return'';},animateX:function(callback,scope){var f=function(){this.onComplete.unsubscribe(f);if(typeof callback=="function"){callback.call(scope||this,this);}};this.onComplete.subscribe(f,this,true);this.animate();},setRuntimeAttribute:function(attr){var start;var end;var attributes=this.attributes;this.runtimeAttributes[attr]={};var isset=function(prop){return(typeof prop!=='undefined');};if(!isset(attributes[attr]['to'])&&!isset(attributes[attr]['by'])){return false;}
-start=(isset(attributes[attr]['from']))?attributes[attr]['from']:this.getAttribute(attr);if(isset(attributes[attr]['to'])){end=attributes[attr]['to'];}else if(isset(attributes[attr]['by'])){if(start.constructor==Array){end=[];for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+attributes[attr]['by'][i];}}else{end=start+attributes[attr]['by'];}}
-this.runtimeAttributes[attr].start=start;this.runtimeAttributes[attr].end=end;this.runtimeAttributes[attr].unit=(isset(attributes[attr].unit))?attributes[attr]['unit']:this.getDefaultUnit(attr);},init:function(el,attributes,duration,method){var isAnimated=false;var startTime=null;var actualFrames=0;el=Ext.lib.Dom.get(el);this.attributes=attributes||{};this.duration=duration||1;this.method=method||Ext.lib.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=Ext.lib.AnimMgr.fps;this.getEl=function(){return el;};this.isAnimated=function(){return isAnimated;};this.getStartTime=function(){return startTime;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}
-this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(Ext.lib.AnimMgr.fps*this.duration):this.duration;Ext.lib.AnimMgr.registerElement(this);};this.stop=function(finish){if(finish){this.currentFrame=this.totalFrames;this._onTween.fire();}
-Ext.lib.AnimMgr.stop(this);};var onStart=function(){this.onStart.fire();this.runtimeAttributes={};for(var attr in this.attributes){this.setRuntimeAttribute(attr);}
-isAnimated=true;actualFrames=0;startTime=new Date();};var onTween=function(){var data={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};data.toString=function(){return('duration: '+data.duration+', currentFrame: '+data.currentFrame);};this.onTween.fire(data);var runtimeAttributes=this.runtimeAttributes;for(var attr in runtimeAttributes){this.setAttribute(attr,this.doMethod(attr,runtimeAttributes[attr].start,runtimeAttributes[attr].end),runtimeAttributes[attr].unit);}
-actualFrames+=1;};var onComplete=function(){var actual_duration=(new Date()-startTime)/1000;var data={duration:actual_duration,frames:actualFrames,fps:actualFrames/actual_duration};data.toString=function(){return('duration: '+data.duration+', frames: '+data.frames+', fps: '+data.fps);};isAnimated=false;actualFrames=0;this.onComplete.fire(data);};this._onStart=new Ext.lib.CustomEvent('_start',this,true);this.onStart=new Ext.lib.CustomEvent('start',this);this.onTween=new Ext.lib.CustomEvent('tween',this);this._onTween=new Ext.lib.CustomEvent('_tween',this,true);this.onComplete=new Ext.lib.CustomEvent('complete',this);this._onComplete=new Ext.lib.CustomEvent('_complete',this,true);this._onStart.subscribe(onStart);this._onTween.subscribe(onTween);this._onComplete.subscribe(onComplete);}};Ext.lib.AnimMgr=new function(){var thread=null;var queue=[];var tweenCount=0;this.fps=1000;this.delay=1;this.registerElement=function(tween){queue[queue.length]=tween;tweenCount+=1;tween._onStart.fire();this.start();};this.unRegister=function(tween,index){tween._onComplete.fire();index=index||getIndex(tween);if(index!=-1){queue.splice(index,1);}
-tweenCount-=1;if(tweenCount<=0){this.stop();}};this.start=function(){if(thread===null){thread=setInterval(this.run,this.delay);}};this.stop=function(tween){if(!tween){clearInterval(thread);for(var i=0,len=queue.length;i<len;++i){if(queue[0].isAnimated()){this.unRegister(queue[0],0);}}
-queue=[];thread=null;tweenCount=0;}
-else{this.unRegister(tween);}};this.run=function(){for(var i=0,len=queue.length;i<len;++i){var tween=queue[i];if(!tween||!tween.isAnimated()){continue;}
-if(tween.currentFrame<tween.totalFrames||tween.totalFrames===null)
-{tween.currentFrame+=1;if(tween.useSeconds){correctFrame(tween);}
-tween._onTween.fire();}
-else{Ext.lib.AnimMgr.stop(tween,i);}}};var getIndex=function(anim){for(var i=0,len=queue.length;i<len;++i){if(queue[i]==anim){return i;}}
-return-1;};var correctFrame=function(tween){var frames=tween.totalFrames;var frame=tween.currentFrame;var expected=(tween.currentFrame*tween.duration*1000/tween.totalFrames);var elapsed=(new Date()-tween.getStartTime());var tweak=0;if(elapsed<tween.duration*1000){tweak=Math.round((elapsed/expected-1)*tween.currentFrame);}else{tweak=frames-(frame+1);}
-if(tweak>0&&isFinite(tweak)){if(tween.currentFrame+tweak>=frames){tweak=frames-(frame+1);}
-tween.currentFrame+=tweak;}};};Ext.lib.Bezier=new function(){this.getPosition=function(points,t){var n=points.length;var tmp=[];for(var i=0;i<n;++i){tmp[i]=[points[i][0],points[i][1]];}
-for(var j=1;j<n;++j){for(i=0;i<n-j;++i){tmp[i][0]=(1-t)*tmp[i][0]+t*tmp[parseInt(i+1,10)][0];tmp[i][1]=(1-t)*tmp[i][1]+t*tmp[parseInt(i+1,10)][1];}}
-return[tmp[0][0],tmp[0][1]];};};(function(){Ext.lib.ColorAnim=function(el,attributes,duration,method){Ext.lib.ColorAnim.superclass.constructor.call(this,el,attributes,duration,method);};Ext.extend(Ext.lib.ColorAnim,Ext.lib.AnimBase);var Y=Ext.lib;var superclass=Y.ColorAnim.superclass;var proto=Y.ColorAnim.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("ColorAnim "+id);};proto.patterns.color=/color$/i;proto.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;proto.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;proto.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;proto.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;proto.parseColor=function(s){if(s.length==3){return s;}
-var c=this.patterns.hex.exec(s);if(c&&c.length==4){return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];}
-c=this.patterns.rgb.exec(s);if(c&&c.length==4){return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];}
-c=this.patterns.hex3.exec(s);if(c&&c.length==4){return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];}
-return null;};proto.getAttribute=function(attr){var el=this.getEl();if(this.patterns.color.test(attr)){var val=fly(el).getStyle(attr);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=fly(parent).getStyle(attr);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=fly(parent).getStyle(attr);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else{val=superclass.getAttribute.call(this,attr);}
-return val;};proto.doMethod=function(attr,start,end){var val;if(this.patterns.color.test(attr)){val=[];for(var i=0,len=start.length;i<len;++i){val[i]=superclass.doMethod.call(this,attr,start[i],end[i]);}
-val='rgb('+Math.floor(val[0])+','+Math.floor(val[1])+','+Math.floor(val[2])+')';}
-else{val=superclass.doMethod.call(this,attr,start,end);}
-return val;};proto.setRuntimeAttribute=function(attr){superclass.setRuntimeAttribute.call(this,attr);if(this.patterns.color.test(attr)){var attributes=this.attributes;var start=this.parseColor(this.runtimeAttributes[attr].start);var end=this.parseColor(this.runtimeAttributes[attr].end);if(typeof attributes[attr]['to']==='undefined'&&typeof attributes[attr]['by']!=='undefined'){end=this.parseColor(attributes[attr].by);for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+end[i];}}
-this.runtimeAttributes[attr].start=start;this.runtimeAttributes[attr].end=end;}};})();Ext.lib.Easing={easeNone:function(t,b,c,d){return c*t/d+b;},easeIn:function(t,b,c,d){return c*(t/=d)*t+b;},easeOut:function(t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeBoth:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t+b;}
-return-c/2*((--t)*(t-2)-1)+b;},easeInStrong:function(t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutStrong:function(t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},easeBothStrong:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t*t*t+b;}
-return-c/2*((t-=2)*t*t*t-2)+b;},elasticIn:function(t,b,c,d,a,p){if(t==0){return b;}
-if((t/=d)==1){return b+c;}
-if(!p){p=d*.3;}
-if(!a||a<Math.abs(c)){a=c;var s=p/4;}
-else{var s=p/(2*Math.PI)*Math.asin(c/a);}
-return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},elasticOut:function(t,b,c,d,a,p){if(t==0){return b;}
-if((t/=d)==1){return b+c;}
-if(!p){p=d*.3;}
-if(!a||a<Math.abs(c)){a=c;var s=p/4;}
-else{var s=p/(2*Math.PI)*Math.asin(c/a);}
-return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},elasticBoth:function(t,b,c,d,a,p){if(t==0){return b;}
-if((t/=d/2)==2){return b+c;}
-if(!p){p=d*(.3*1.5);}
-if(!a||a<Math.abs(c)){a=c;var s=p/4;}
-else{var s=p/(2*Math.PI)*Math.asin(c/a);}
-if(t<1){return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;}
-return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},backIn:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
-return c*(t/=d)*t*((s+1)*t-s)+b;},backOut:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
-return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},backBoth:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
-if((t/=d/2)<1){return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;}
-return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},bounceIn:function(t,b,c,d){return c-Ext.lib.Easing.bounceOut(d-t,0,c,d)+b;},bounceOut:function(t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}
-return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;},bounceBoth:function(t,b,c,d){if(t<d/2){return Ext.lib.Easing.bounceIn(t*2,0,c,d)*.5+b;}
-return Ext.lib.Easing.bounceOut(t*2-d,0,c,d)*.5+c*.5+b;}};(function(){Ext.lib.Motion=function(el,attributes,duration,method){if(el){Ext.lib.Motion.superclass.constructor.call(this,el,attributes,duration,method);}};Ext.extend(Ext.lib.Motion,Ext.lib.ColorAnim);var Y=Ext.lib;var superclass=Y.Motion.superclass;var proto=Y.Motion.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Motion "+id);};proto.patterns.points=/^points$/i;proto.setAttribute=function(attr,val,unit){if(this.patterns.points.test(attr)){unit=unit||'px';superclass.setAttribute.call(this,'left',val[0],unit);superclass.setAttribute.call(this,'top',val[1],unit);}else{superclass.setAttribute.call(this,attr,val,unit);}};proto.getAttribute=function(attr){if(this.patterns.points.test(attr)){var val=[superclass.getAttribute.call(this,'left'),superclass.getAttribute.call(this,'top')];}else{val=superclass.getAttribute.call(this,attr);}
-return val;};proto.doMethod=function(attr,start,end){var val=null;if(this.patterns.points.test(attr)){var t=this.method(this.currentFrame,0,100,this.totalFrames)/100;val=Y.Bezier.getPosition(this.runtimeAttributes[attr],t);}else{val=superclass.doMethod.call(this,attr,start,end);}
-return val;};proto.setRuntimeAttribute=function(attr){if(this.patterns.points.test(attr)){var el=this.getEl();var attributes=this.attributes;var start;var control=attributes['points']['control']||[];var end;var i,len;if(control.length>0&&!(control[0]instanceof Array)){control=[control];}else{var tmp=[];for(i=0,len=control.length;i<len;++i){tmp[i]=control[i];}
-control=tmp;}
-Ext.fly(el).position();if(isset(attributes['points']['from'])){Ext.lib.Dom.setXY(el,attributes['points']['from']);}
-else{Ext.lib.Dom.setXY(el,Ext.lib.Dom.getXY(el));}
-start=this.getAttribute('points');if(isset(attributes['points']['to'])){end=translateValues.call(this,attributes['points']['to'],start);var pageXY=Ext.lib.Dom.getXY(this.getEl());for(i=0,len=control.length;i<len;++i){control[i]=translateValues.call(this,control[i],start);}}else if(isset(attributes['points']['by'])){end=[start[0]+attributes['points']['by'][0],start[1]+attributes['points']['by'][1]];for(i=0,len=control.length;i<len;++i){control[i]=[start[0]+control[i][0],start[1]+control[i][1]];}}
-this.runtimeAttributes[attr]=[start];if(control.length>0){this.runtimeAttributes[attr]=this.runtimeAttributes[attr].concat(control);}
-this.runtimeAttributes[attr][this.runtimeAttributes[attr].length]=end;}
-else{superclass.setRuntimeAttribute.call(this,attr);}};var translateValues=function(val,start){var pageXY=Ext.lib.Dom.getXY(this.getEl());val=[val[0]-pageXY[0]+start[0],val[1]-pageXY[1]+start[1]];return val;};var isset=function(prop){return(typeof prop!=='undefined');};})();(function(){Ext.lib.Scroll=function(el,attributes,duration,method){if(el){Ext.lib.Scroll.superclass.constructor.call(this,el,attributes,duration,method);}};Ext.extend(Ext.lib.Scroll,Ext.lib.ColorAnim);var Y=Ext.lib;var superclass=Y.Scroll.superclass;var proto=Y.Scroll.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Scroll "+id);};proto.doMethod=function(attr,start,end){var val=null;if(attr=='scroll'){val=[this.method(this.currentFrame,start[0],end[0]-start[0],this.totalFrames),this.method(this.currentFrame,start[1],end[1]-start[1],this.totalFrames)];}else{val=superclass.doMethod.call(this,attr,start,end);}
-return val;};proto.getAttribute=function(attr){var val=null;var el=this.getEl();if(attr=='scroll'){val=[el.scrollLeft,el.scrollTop];}else{val=superclass.getAttribute.call(this,attr);}
-return val;};proto.setAttribute=function(attr,val,unit){var el=this.getEl();if(attr=='scroll'){el.scrollLeft=val[0];el.scrollTop=val[1];}else{superclass.setAttribute.call(this,attr,val,unit);}};})();})();
diff --git a/lib/web/extjs/adapter/jquery/ext-jquery-adapter.js b/lib/web/extjs/adapter/jquery/ext-jquery-adapter.js
deleted file mode 100644
index b3505aa731f8e89d86e12b3bdd915caadd017eaa..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/jquery/ext-jquery-adapter.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,defaults){if(defaults){Ext.apply(o,defaults);}
-if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}
-return o;};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isIE=ua.indexOf("msie")>-1,isIE7=ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
-Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}
-return o;},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o);});return;}
-var cache={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s);}
-cache[s].on(parts[1],o[b]);}}
-cache=null;},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};return function(sb,sp,overrides){if(typeof sp=='object'){overrides=sp;sp=sb;sb=function(){sp.apply(this,arguments);};}
-var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}
-sb.override=function(o){Ext.override(sb,o);};sbp.override=io;sbp.__extcls=sb;Ext.override(sb,overrides);return sb;};}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},urlEncode:function(o){if(!o){return"";}
-var buf=[];for(var key in o){var ov=o[key];var type=typeof ov;if(type=='undefined'){buf.push(encodeURIComponent(key),"=&");}else if(type!="function"&&type!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}}
-buf.pop();return buf.join("");},urlDecode:function(string,overwrite){if(!string||!string.length){return{};}
-var obj={};var pairs=string.split('&');var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split('=');name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value;}else if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value);}else{obj[name].push(value);}}else{obj[name]=value;}}
-return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
-for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
-return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
-return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}
-if(typeof as.purgeListeners=='function'){as.purgeListeners();}
-if(typeof as.destroy=='function'){as.destroy();}}}},isOpera:isOpera,isSafari:isSafari,isIE:isIE,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isWindows:isWindows,isMac:isMac,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
-return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
-fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){fcn.target=this;fcn.method=method;if(fcn.apply(scope||this||window,arguments)===false){return;}
-return method.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(string){return string.replace(/('|\\)/g,"\\$1");},leftPad:function(val,size,ch){var result=new String(val);if(ch===null||ch===undefined||ch===''){ch=" ";}
-while(result.length<size){result=ch+result;}
-return result;},format:function(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}});String.prototype.toggle=function(value,other){return this==value?other:value;};Ext.applyIf(Number.prototype,{constrain:function(min,max){return Math.min(Math.max(this,min),max);}});Ext.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
-return-1;},remove:function(o){var index=this.indexOf(o);if(index!=-1){this.splice(index,1);}}});Date.prototype.getElapsed=function(date){return Math.abs((date||new Date()).getTime()-this.getTime());};
-
-if(typeof jQuery=="undefined"){throw"Unable to load Ext, jQuery not found.";}
-(function(){Ext.lib.Dom={getViewWidth:function(full){return full?Math.max(jQuery(document).width(),jQuery(window).width()):jQuery(window).width();},getViewHeight:function(full){return full?Math.max(jQuery(document).height(),jQuery(window).height()):jQuery(window).height();},isAncestor:function(p,c){p=Ext.getDom(p);c=Ext.getDom(c);if(!p||!c){return false;}
-if(p.contains&&!Ext.isSafari){return p.contains(c);}else if(p.compareDocumentPosition){return!!(p.compareDocumentPosition(c)&16);}else{var parent=c.parentNode;while(parent){if(parent==p){return true;}
-else if(!parent.tagName||parent.tagName.toUpperCase()=="HTML"){return false;}
-parent=parent.parentNode;}
-return false;}},getRegion:function(el){return Ext.lib.Region.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,scroll,bd=document.body;el=Ext.getDom(el);if(el.getBoundingClientRect){b=el.getBoundingClientRect();scroll=fly(document).getScroll();return[b.left+scroll.left,b.top+scroll.top];}else{var x=el.offsetLeft,y=el.offsetTop;p=el.offsetParent;var hasAbsolute=false;if(p!=el){while(p){x+=p.offsetLeft;y+=p.offsetTop;if(Ext.isSafari&&!hasAbsolute&&fly(p).getStyle("position")=="absolute"){hasAbsolute=true;}
-if(Ext.isGecko){pe=fly(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
-p=p.offsetParent;}}
-if(Ext.isSafari&&(hasAbsolute||fly(el).getStyle("position")=="absolute")){x-=bd.offsetLeft;y-=bd.offsetTop;}}
-p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(Ext.isOpera&&p.tagName!='TR'&&fly(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
-p=p.parentNode;}
-return[x,y];},setXY:function(el,xy){el=Ext.fly(el,'_setXY');el.position();var pts=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=pts.left+"px";}
-if(xy[1]!==false){el.dom.style.top=pts.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};Ext.lib.Event={getPageX:function(e){e=e.browserEvent||e;return e.pageX;},getPageY:function(e){e=e.browserEvent||e;return e.pageY;},getXY:function(e){e=e.browserEvent||e;return[e.pageX,e.pageY];},getTarget:function(e){return e.target;},on:function(el,eventName,fn,scope,override){jQuery(el).bind(eventName,fn);},un:function(el,eventName,fn){jQuery(el).unbind(eventName,fn);},purgeElement:function(el){jQuery(el).unbind();},preventDefault:function(e){e=e.browserEvent||e;if(e.preventDefault){e.preventDefault();}else{e.returnValue=false;}},stopPropagation:function(e){e=e.browserEvent||e;if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}},stopEvent:function(e){this.preventDefault(e);this.stopPropagation(e);},onAvailable:function(id,fn,scope){var start=new Date();var f=function(){if(start.getElapsed()>10000){clearInterval(iid);}
-var el=document.getElementById(id);if(el){clearInterval(iid);fn.call(scope||window,el);}};var iid=setInterval(f,50);},resolveTextNode:function(node){if(node&&3==node.nodeType){return node.parentNode;}else{return node;}},getRelatedTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}
-return this.resolveTextNode(t);}};Ext.lib.Ajax=function(){var createComplete=function(cb){return function(xhr,status){if((status=='error'||status=='timeout')&&cb.failure){cb.failure.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}else if(cb.success){cb.success.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}};};return{request:function(method,uri,cb,data){jQuery.ajax({type:method,url:uri,data:data,timeout:cb.timeout,complete:createComplete(cb)});},formRequest:function(form,uri,cb,data,isUpload,sslUri){jQuery.ajax({type:Ext.getDom(form).method||'POST',url:uri,data:jQuery(form).formSerialize()+(data?'&'+data:''),timeout:cb.timeout,complete:createComplete(cb)});},isCallInProgress:function(trans){return false;},abort:function(trans){return false;},serializeForm:function(form){return jQuery(form.dom||form).formSerialize();}};}();Ext.lib.Anim=function(){var createAnim=function(cb,scope){var animated=true;return{stop:function(skipToLast){},isAnimated:function(){return animated;},proxyCallback:function(){animated=false;Ext.callback(cb,scope);}};};return{scroll:function(el,args,duration,easing,cb,scope){var anim=createAnim(cb,scope);el=Ext.getDom(el);el.scrollLeft=args.scroll.to[0];el.scrollTop=args.scroll.to[1];anim.proxyCallback();return anim;},motion:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope);},color:function(el,args,duration,easing,cb,scope){var anim=createAnim(cb,scope);anim.proxyCallback();return anim;},run:function(el,args,duration,easing,cb,scope,type){var anim=createAnim(cb,scope);var o={};for(var k in args){switch(k){case'points':var by,pts,e=Ext.fly(el,'_animrun');e.position();if(by=args.points.by){var xy=e.getXY();pts=e.translatePoints([xy[0]+by[0],xy[1]+by[1]]);}else{pts=e.translatePoints(args.points.to);}
-o.left=pts.left;o.top=pts.top;if(!parseInt(e.getStyle('left'),10)){e.setLeft(0);}
-if(!parseInt(e.getStyle('top'),10)){e.setTop(0);}
-break;case'width':o.width=args.width.to;break;case'height':o.height=args.height.to;break;case'opacity':o.opacity=args.opacity.to;break;default:o[k]=args[k].to;break;}}
-jQuery(el).animate(o,duration*1000,undefined,anim.proxyCallback);return anim;}};}();Ext.lib.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};Ext.lib.Region.prototype={contains:function(region){return(region.left>=this.left&&region.right<=this.right&&region.top>=this.top&&region.bottom<=this.bottom);},getArea:function(){return((this.bottom-this.top)*(this.right-this.left));},intersect:function(region){var t=Math.max(this.top,region.top);var r=Math.min(this.right,region.right);var b=Math.min(this.bottom,region.bottom);var l=Math.max(this.left,region.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(region){var t=Math.min(this.top,region.top);var r=Math.max(this.right,region.right);var b=Math.max(this.bottom,region.bottom);var l=Math.min(this.left,region.left);return new Ext.lib.Region(t,r,b,l);},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Ext.lib.Region.getRegion=function(el){var p=Ext.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Ext.lib.Region(t,r,b,l);};Ext.lib.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}
-this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){jQuery(window).unload(function(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;});}})();
diff --git a/lib/web/extjs/adapter/jquery/jquery-plugins.js b/lib/web/extjs/adapter/jquery/jquery-plugins.js
deleted file mode 100644
index 25e950553451e8c2825e033a474a33069e61c9a0..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/jquery/jquery-plugins.js
+++ /dev/null
@@ -1,965 +0,0 @@
-/*
- * Ext - JS Library 1.0 Alpha 2
- * Copyright(c) 2006-2007, Jack Slocum.
- */
-
-/*
- * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
- * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
- *
- * $LastChangedDate$
- * $Rev$
- */
-
-jQuery.fn._height = jQuery.fn.height;
-jQuery.fn._width  = jQuery.fn.width;
-
-/**
- * If used on document, returns the document's height (innerHeight)
- * If used on window, returns the viewport's (window) height
- * See core docs on height() to see what happens when used on an element.
- *
- * @example $("#testdiv").height()
- * @result 200
- *
- * @example $(document).height()
- * @result 800
- *
- * @example $(window).height()
- * @result 400
- *
- * @name height
- * @type Object
- * @cat Plugins/Dimensions
- */
-jQuery.fn.height = function() {
-	if ( this[0] == window )
-		return self.innerHeight ||
-			jQuery.boxModel && document.documentElement.clientHeight ||
-			document.body.clientHeight;
-
-	if ( this[0] == document )
-		return Math.max( document.body.scrollHeight, document.body.offsetHeight );
-
-	return this._height(arguments[0]);
-};
-
-/**
- * If used on document, returns the document's width (innerWidth)
- * If used on window, returns the viewport's (window) width
- * See core docs on height() to see what happens when used on an element.
- *
- * @example $("#testdiv").width()
- * @result 200
- *
- * @example $(document).width()
- * @result 800
- *
- * @example $(window).width()
- * @result 400
- *
- * @name width
- * @type Object
- * @cat Plugins/Dimensions
- */
-jQuery.fn.width = function() {
-	if ( this[0] == window )
-		return self.innerWidth ||
-			jQuery.boxModel && document.documentElement.clientWidth ||
-			document.body.clientWidth;
-
-	if ( this[0] == document )
-		return Math.max( document.body.scrollWidth, document.body.offsetWidth );
-
-	return this._width(arguments[0]);
-};
-
-/**
- * Returns the inner height value (without border) for the first matched element.
- * If used on document, returns the document's height (innerHeight)
- * If used on window, returns the viewport's (window) height
- *
- * @example $("#testdiv").innerHeight()
- * @result 800
- *
- * @name innerHeight
- * @type Number
- * @cat Plugins/Dimensions
- */
-jQuery.fn.innerHeight = function() {
-	return this[0] == window || this[0] == document ?
-		this.height() :
-		this.css('display') != 'none' ?
-		 	this[0].offsetHeight - (parseInt(this.css("borderTopWidth")) || 0) - (parseInt(this.css("borderBottomWidth")) || 0) :
-			this.height() + (parseInt(this.css("paddingTop")) || 0) + (parseInt(this.css("paddingBottom")) || 0);
-};
-
-/**
- * Returns the inner width value (without border) for the first matched element.
- * If used on document, returns the document's Width (innerWidth)
- * If used on window, returns the viewport's (window) width
- *
- * @example $("#testdiv").innerWidth()
- * @result 1000
- *
- * @name innerWidth
- * @type Number
- * @cat Plugins/Dimensions
- */
-jQuery.fn.innerWidth = function() {
-	return this[0] == window || this[0] == document ?
-		this.width() :
-		this.css('display') != 'none' ?
-			this[0].offsetWidth - (parseInt(this.css("borderLeftWidth")) || 0) - (parseInt(this.css("borderRightWidth")) || 0) :
-			this.height() + (parseInt(this.css("paddingLeft")) || 0) + (parseInt(this.css("paddingRight")) || 0);
-};
-
-/**
- * Returns the outer height value (including border) for the first matched element.
- * Cannot be used on document or window.
- *
- * @example $("#testdiv").outerHeight()
- * @result 1000
- *
- * @name outerHeight
- * @type Number
- * @cat Plugins/Dimensions
- */
-jQuery.fn.outerHeight = function() {
-	return this[0] == window || this[0] == document ?
-		this.height() :
-		this.css('display') != 'none' ?
-			this[0].offsetHeight :
-			this.height() + (parseInt(this.css("borderTopWidth")) || 0) + (parseInt(this.css("borderBottomWidth")) || 0)
-				+ (parseInt(this.css("paddingTop")) || 0) + (parseInt(this.css("paddingBottom")) || 0);
-};
-
-/**
- * Returns the outer width value (including border) for the first matched element.
- * Cannot be used on document or window.
- *
- * @example $("#testdiv").outerWidth()
- * @result 1000
- *
- * @name outerWidth
- * @type Number
- * @cat Plugins/Dimensions
- */
-jQuery.fn.outerWidth = function() {
-	return this[0] == window || this[0] == document ?
-		this.width() :
-		this.css('display') != 'none' ?
-			this[0].offsetWidth :
-			this.height() + (parseInt(this.css("borderLeftWidth")) || 0) + (parseInt(this.css("borderRightWidth")) || 0)
-				+ (parseInt(this.css("paddingLeft")) || 0) + (parseInt(this.css("paddingRight")) || 0);
-};
-
-/**
- * Returns how many pixels the user has scrolled to the right (scrollLeft).
- * Works on containers with overflow: auto and window/document.
- *
- * @example $("#testdiv").scrollLeft()
- * @result 100
- *
- * @name scrollLeft
- * @type Number
- * @cat Plugins/Dimensions
- */
-jQuery.fn.scrollLeft = function() {
-	if ( this[0] == window || this[0] == document )
-		return self.pageXOffset ||
-			jQuery.boxModel && document.documentElement.scrollLeft ||
-			document.body.scrollLeft;
-
-	return this[0].scrollLeft;
-};
-
-/**
- * Returns how many pixels the user has scrolled to the bottom (scrollTop).
- * Works on containers with overflow: auto and window/document.
- *
- * @example $("#testdiv").scrollTop()
- * @result 100
- *
- * @name scrollTop
- * @type Number
- * @cat Plugins/Dimensions
- */
-jQuery.fn.scrollTop = function() {
-	if ( this[0] == window || this[0] == document )
-		return self.pageYOffset ||
-			jQuery.boxModel && document.documentElement.scrollTop ||
-			document.body.scrollTop;
-
-	return this[0].scrollTop;
-};
-
-/**
- * Returns the location of the element in pixels from the top left corner of the viewport.
- *
- * For accurate readings make sure to use pixel values for margins, borders and padding.
- *
- * @example $("#testdiv").offset()
- * @result { top: 100, left: 100, scrollTop: 10, scrollLeft: 10 }
- *
- * @example $("#testdiv").offset({ scroll: false })
- * @result { top: 90, left: 90 }
- *
- * @example var offset = {}
- * $("#testdiv").offset({ scroll: false }, offset)
- * @result offset = { top: 90, left: 90 }
- *
- * @name offset
- * @param Object options A hash of options describing what should be included in the final calculations of the offset.
- *                       The options include:
- *                           margin: Should the margin of the element be included in the calculations? True by default.
- *                                   If set to false the margin of the element is subtracted from the total offset.
- *                           border: Should the border of the element be included in the calculations? True by default.
- *                                   If set to false the border of the element is subtracted from the total offset.
- *                           padding: Should the padding of the element be included in the calculations? False by default.
- *                                    If set to true the padding of the element is added to the total offset.
- *                           scroll: Should the scroll offsets of the parent elements be included in the calculations?
- *                                   True by default. When true, it adds the total scroll offsets of all parents to the
- *                                   total offset and also adds two properties to the returned object, scrollTop and
- *                                   scrollLeft. If set to false the scroll offsets of parent elements are ignored.
- *                                   If scroll offsets are not needed, set to false to get a performance boost.
- * @param Object returnObject An object to store the return value in, so as not to break the chain. If passed in the
- *                            chain will not be broken and the result will be assigned to this object.
- * @type Object
- * @cat Plugins/Dimensions
- * @author Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
- */
-jQuery.fn.offset = function(options, returnObject) {
-	var x = 0, y = 0, elem = this[0], parent = this[0], sl = 0, st = 0, options = jQuery.extend({ margin: true, border: true, padding: false, scroll: true }, options || {});
-	do {
-		x += parent.offsetLeft || 0;
-		y += parent.offsetTop  || 0;
-
-		// Mozilla and IE do not add the border
-		if (jQuery.browser.mozilla || jQuery.browser.msie) {
-			// get borders
-			var bt = parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
-			var bl = parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
-
-			// add borders to offset
-			x += bl;
-			y += bt;
-
-			// Mozilla removes the border if the parent has overflow property other than visible
-			if (jQuery.browser.mozilla && parent != elem && jQuery.css(parent, 'overflow') != 'visible') {
-				x += bl;
-				y += bt;
-			}
-		}
-
-		var op = parent.offsetParent;
-		if (op && (op.tagName == 'BODY' || op.tagName == 'HTML')) {
-			// Safari doesn't add the body margin for elments positioned with static or relative
-			if (jQuery.browser.safari && jQuery.css(parent, 'position') != 'absolute') {
-				x += parseInt(jQuery.css(op, 'marginLeft')) || 0;
-				y += parseInt(jQuery.css(op, 'marginTop'))  || 0;
-			}
-
-			// Exit the loop
-			break;
-		}
-
-		if (options.scroll) {
-			// Need to get scroll offsets in-between offsetParents
-			do {
-				sl += parent.scrollLeft || 0;
-				st += parent.scrollTop  || 0;
-
-				parent = parent.parentNode;
-
-				// Mozilla removes the border if the parent has overflow property other than visible
-				if (jQuery.browser.mozilla && parent != elem && parent != op && parent.style && jQuery.css(parent, 'overflow') != 'visible') {
-					y += parseInt(jQuery.css(parent, 'borderTopWidth')) || 0;
-					x += parseInt(jQuery.css(parent, 'borderLeftWidth')) || 0;
-				}
-			} while (parent != op);
-		} else {
-			parent = parent.offsetParent;
-		}
-	} while (parent);
-
-	if ( !options.margin) {
-		x -= parseInt(jQuery.css(elem, 'marginLeft')) || 0;
-		y -= parseInt(jQuery.css(elem, 'marginTop'))  || 0;
-	}
-
-	// Safari and Opera do not add the border for the element
-	if ( options.border && (jQuery.browser.safari || jQuery.browser.opera) ) {
-		x += parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
-		y += parseInt(jQuery.css(elem, 'borderTopWidth'))  || 0;
-	} else if ( !options.border && !(jQuery.browser.safari || jQuery.browser.opera) ) {
-		x -= parseInt(jQuery.css(elem, 'borderLeftWidth')) || 0;
-		y -= parseInt(jQuery.css(elem, 'borderTopWidth'))  || 0;
-	}
-
-	if ( options.padding ) {
-		x += parseInt(jQuery.css(elem, 'paddingLeft')) || 0;
-		y += parseInt(jQuery.css(elem, 'paddingTop'))  || 0;
-	}
-
-	// Opera thinks offset is scroll offset for display: inline elements
-	if (options.scroll && jQuery.browser.opera && jQuery.css(elem, 'display') == 'inline') {
-		sl -= elem.scrollLeft || 0;
-		st -= elem.scrollTop  || 0;
-	}
-
-	var returnValue = options.scroll ? { top: y - st, left: x - sl, scrollTop:  st, scrollLeft: sl }
-									: { top: y, left: x };
-
-	if (returnObject) { jQuery.extend(returnObject, returnValue); return this; }
-	else              { return returnValue; }
-};
-
-
-
-// FORM PLUGIN
-
-/*
- * jQuery form plugin
- * @requires jQuery v1.0.3
- *
- * 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$
- * Version: 0.9
- */
-
-/**
- * ajaxSubmit() provides a mechanism for submitting an HTML form using AJAX.
- *
- * ajaxSubmit accepts a single argument which can be either a success callback function
- * or an options Object.  If a function is provided it will be invoked upon successful
- * completion of the submit and will be passed the response from the server.
- * If an options Object is provided, the following attributes are supported:
- *
- *  target:   Identifies the element(s) in the page to be updated with the server response.
- *            This value may be specified as a jQuery selection string, a jQuery object,
- *            or a DOM element.
- *            default value: null
- *
- *  url:      URL to which the form data will be submitted.
- *            default value: value of form's 'action' attribute
- *
- *  method:   @deprecated use 'type'
- *  type:     The method in which the form data should be submitted, 'GET' or 'POST'.
- *            default value: value of form's 'method' attribute (or 'GET' if none found)
- *
- *  before:   @deprecated use 'beforeSubmit'
- *  beforeSubmit:  Callback method to be invoked before the form is submitted.
- *            default value: null
- *
- *  after:    @deprecated use 'success'
- *  success:  Callback method to be invoked after the form has been successfully submitted
- *            and the response has been returned from the server
- *            default value: null
- *
- *  dataType: Expected dataType of the response.  One of: null, 'xml', 'script', or 'json'
- *            default value: null
- *
- *  semantic: Boolean flag indicating whether data must be submitted in semantic order (slower).
- *            default value: false
- *
- *  resetForm: Boolean flag indicating whether the form should be reset if the submit is successful
- *
- *  clearForm: Boolean flag indicating whether the form should be cleared if the submit is successful
- *
- *
- * The 'beforeSubmit' callback can be provided as a hook for running pre-submit logic or for
- * validating the form data.  If the 'beforeSubmit' callback returns false then the form will
- * not be submitted. The 'beforeSubmit' callback is invoked with three arguments: the form data
- * in array format, the jQuery object, and the options object passed into ajaxSubmit.
- * The form data array takes the following form:
- *
- *     [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * If a 'success' callback method is provided it is invoked after the response has been returned
- * from the server.  It is passed the responseText or responseXML value (depending on dataType).
- * See jQuery.ajax for further details.
- *
- *
- * The dataType option provides a means for specifying how the server response should be handled.
- * This maps directly to the jQuery.httpData method.  The following values are supported:
- *
- *      'xml':    if dataType == 'xml' the server response is treated as XML and the 'after'
- *                   callback method, if specified, will be passed the responseXML value
- *      'json':   if dataType == 'json' the server response will be evaluted and passed to
- *                   the 'after' callback, if specified
- *      'script': if dataType == 'script' the server response is evaluated in the global context
- *
- *
- * Note that it does not make sense to use both the 'target' and 'dataType' options.  If both
- * are provided the target will be ignored.
- *
- * The semantic argument can be used to force form serialization in semantic order.
- * This is normally true anyway, unless the form contains input elements of type='image'.
- * If your form must be submitted with name/value pairs in semantic order and your form
- * contains an input of type='image" then pass true for this arg, otherwise pass false
- * (or nothing) to avoid the overhead for this logic.
- *
- *
- * When used on its own, ajaxSubmit() is typically bound to a form's submit event like this:
- *
- * $("#form-id").submit(function() {
- *     $(this).ajaxSubmit(options);
- *     return false; // cancel conventional submit
- * });
- *
- * When using ajaxForm(), however, this is done for you.
- *
- * @example
- * $('#myForm').ajaxSubmit(function(data) {
- *     alert('Form submit succeeded! Server returned: ' + data);
- * });
- * @desc Submit form and alert server response
- *
- *
- * @example
- * var options = {
- *     target: '#myTargetDiv'
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Submit form and update page element with server response
- *
- *
- * @example
- * var options = {
- *     success: function(responseText) {
- *         alert(responseText);
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Submit form and alert the server response
- *
- *
- * @example
- * var options = {
- *     beforeSubmit: function(formArray, jqForm) {
- *         if (formArray.length == 0) {
- *             alert('Please enter data.');
- *             return false;
- *         }
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Pre-submit validation which aborts the submit operation if form data is empty
- *
- *
- * @example
- * var options = {
- *     url: myJsonUrl.php,
- *     dataType: 'json',
- *     success: function(data) {
- *        // 'data' is an object representing the the evaluated json data
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc json data returned and evaluated
- *
- *
- * @example
- * var options = {
- *     url: myXmlUrl.php,
- *     dataType: 'xml',
- *     success: function(responseXML) {
- *        // responseXML is XML document object
- *        var data = $('myElement', responseXML).text();
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc XML data returned from server
- *
- *
- * @example
- * var options = {
- *     resetForm: true
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc submit form and reset it if successful
- *
- * @example
- * $('#myForm).submit(function() {
- *    $(this).ajaxSubmit();
- *    return false;
- * });
- * @desc Bind form's submit event to use ajaxSubmit
- *
- *
- * @name ajaxSubmit
- * @type jQuery
- * @param options  object literal containing options which control the form submission process
- * @cat Plugins/Form
- * @return jQuery
- * @see formToArray
- * @see ajaxForm
- * @see $.ajax
- * @author jQuery Community
- */
-jQuery.fn.ajaxSubmit = function(options) {
-    if (typeof options == 'function')
-        options = { success: options };
-
-    options = jQuery.extend({
-        url:    this.attr('action') || '',
-        method: this.attr('method') || 'GET'
-    }, options || {});
-
-    // remap deprecated options (temporarily)
-    options.success = options.success || options.after;
-    options.beforeSubmit = options.beforeSubmit || options.before;
-    options.type = options.type || options.method;
-
-    var a = this.formToArray(options.semantic);
-
-    // give pre-submit callback an opportunity to abort the submit
-    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) return this;
-
-    var q = jQuery.param(a);
-
-    if (options.type.toUpperCase() == 'GET') {
-        // if url already has a '?' then append args after '&'
-        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
-        options.data = null;  // data is null for 'get'
-    }
-    else
-        options.data = q; // data is the query string for 'post'
-
-    var $form = this, callbacks = [];
-    if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
-    if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
-
-    // perform a load on the target only if dataType is not provided
-    if (!options.dataType && options.target) {
-        var oldSuccess = options.success || function(){};
-        callbacks.push(function(data, status) {
-            jQuery(options.target).attr("innerHTML", data).evalScripts().each(oldSuccess, [data, status]);
-        });
-    }
-    else if (options.success)
-        callbacks.push(options.success);
-
-    options.success = function(data, status) {
-        for (var i=0, max=callbacks.length; i < max; i++)
-            callbacks[i](data, status);
-    };
-
-    jQuery.ajax(options);
-    return this;
-};
-
-/**
- * ajaxForm() provides a mechanism for fully automating form submission.
- *
- * The advantages of using this method instead of ajaxSubmit() are:
- *
- * 1: This method will include coordinates for <input type="image" /> elements (if the element
- *    is used to submit the form).
- * 2. This method will include the submit element's name/value data (for the element that was
- *    used to submit the form).
- * 3. This method binds the submit() method to the form for you.
- *
- * Note that for accurate x/y coordinates of image submit elements in all browsers
- * you need to also use the "dimensions" plugin (this method will auto-detect its presence).
- *
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
- * passes the options argument along after properly binding events for submit elements and
- * the form itself.  See ajaxSubmit for a full description of the options argument.
- *
- *
- * @example
- * var options = {
- *     target: '#myTargetDiv'
- * };
- * $('#myForm').ajaxSForm(options);
- * @desc Bind form's submit event so that 'myTargetDiv' is updated with the server response
- *       when the form is submitted.
- *
- *
- * @example
- * var options = {
- *     success: function(responseText) {
- *         alert(responseText);
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Bind form's submit event so that server response is alerted after the form is submitted.
- *
- *
- * @example
- * var options = {
- *     beforeSubmit: function(formArray, jqForm) {
- *         if (formArray.length == 0) {
- *             alert('Please enter data.');
- *             return false;
- *         }
- *     }
- * };
- * $('#myForm').ajaxSubmit(options);
- * @desc Bind form's submit event so that pre-submit callback is invoked before the form
- *       is submitted.
- *
- *
- * @name   ajaxForm
- * @param  options  object literal containing options which control the form submission process
- * @return jQuery
- * @cat    Plugins/Form
- * @type   jQuery
- * @see    ajaxSubmit
- * @author jQuery Community
- */
-jQuery.fn.ajaxForm = function(options) {
-    return this.each(function() {
-        jQuery("input:submit,input:image,button:submit", this).click(function(ev) {
-            var $form = this.form;
-            $form.clk = this;
-            if (this.type == 'image') {
-                if (ev.offsetX != undefined) {
-                    $form.clk_x = ev.offsetX;
-                    $form.clk_y = ev.offsetY;
-                } else if (typeof jQuery.fn.offset == 'function') { // try to use dimensions plugin
-                    var offset = jQuery(this).offset();
-                    $form.clk_x = ev.pageX - offset.left;
-                    $form.clk_y = ev.pageY - offset.top;
-                } else {
-                    $form.clk_x = ev.pageX - this.offsetLeft;
-                    $form.clk_y = ev.pageY - this.offsetTop;
-                }
-            }
-            // clear form vars
-            setTimeout(function() {
-                $form.clk = $form.clk_x = $form.clk_y = null;
-                }, 10);
-        })
-    }).submit(function(e) {
-        jQuery(this).ajaxSubmit(options);
-        return false;
-    });
-};
-
-
-/**
- * formToArray() gathers form element data into an array of objects that can
- * be passed to any of the following ajax functions: $.get, $.post, or load.
- * Each object in the array has both a 'name' and 'value' property.  An example of
- * an array for a simple login form might be:
- *
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * It is this array that is passed to pre-submit callback functions provided to the
- * ajaxSubmit() and ajaxForm() methods.
- *
- * The semantic argument can be used to force form serialization in semantic order.
- * This is normally true anyway, unless the form contains input elements of type='image'.
- * If your form must be submitted with name/value pairs in semantic order and your form
- * contains an input of type='image" then pass true for this arg, otherwise pass false
- * (or nothing) to avoid the overhead for this logic.
- *
- * @example var data = $("#myForm").formToArray();
- * $.post( "myscript.cgi", data );
- * @desc Collect all the data from a form and submit it to the server.
- *
- * @name formToArray
- * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
- * @type Array<Object>
- * @cat Plugins/Form
- * @see ajaxForm
- * @see ajaxSubmit
- * @author jQuery Community
- */
-jQuery.fn.formToArray = function(semantic) {
-    var a = [];
-    if (this.length == 0) return a;
-
-    var form = this[0];
-    var els = semantic ? form.getElementsByTagName('*') : form.elements;
-    if (!els) return a;
-    for(var i=0, max=els.length; i < max; i++) {
-        var el = els[i];
-        var n = el.name;
-        if (!n) continue;
-
-        if (semantic && form.clk && el.type == "image") {
-            // handle image inputs on the fly when semantic == true
-            if(!el.disabled && form.clk == el)
-                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-            continue;
-        }
-        var v = jQuery.fieldValue(el, true);
-        if (v === null) continue;
-        if (v.constructor == Array) {
-            for(var j=0, jmax=v.length; j < jmax; j++)
-                a.push({name: n, value: v[j]});
-        }
-        else
-            a.push({name: n, value: v});
-    }
-
-    if (!semantic && form.clk) {
-        // input type=='image' are not found in elements array! handle them here
-        var inputs = form.getElementsByTagName("input");
-        for(var i=0, max=inputs.length; i < max; i++) {
-            var input = inputs[i];
-            var n = input.name;
-            if(n && !input.disabled && input.type == "image" && form.clk == input)
-                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
-        }
-    }
-    return a;
-};
-
-
-/**
- * Serializes form data into a 'submittable' string. This method will return a string
- * in the format: name1=value1&amp;name2=value2
- *
- * The semantic argument can be used to force form serialization in semantic order.
- * If your form must be submitted with name/value pairs in semantic order then pass
- * true for this arg, otherwise pass false (or nothing) to avoid the overhead for
- * this logic (which can be significant for very large forms).
- *
- * @example var data = $("#myForm").formSerialize();
- * $.ajax('POST', "myscript.cgi", data);
- * @desc Collect all the data from a form into a single string
- *
- * @name formSerialize
- * @param semantic true if serialization must maintain strict semantic ordering of elements (slower)
- * @type String
- * @cat Plugins/Form
- * @see formToArray
- * @author jQuery Community
- */
-jQuery.fn.formSerialize = function(semantic) {
-    //hand off to jQuery.param for proper encoding
-    return jQuery.param(this.formToArray(semantic));
-};
-
-
-/**
- * Serializes all field elements in the jQuery object into a query string.
- * This method will return a string in the format: name1=value1&amp;name2=value2
- *
- * The successful argument controls whether or not serialization is limited to
- * 'successful' controls (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.
- *
- * @example var data = $("input").formSerialize();
- * @desc Collect the data from all successful input elements into a query string
- *
- * @example var data = $(":radio").formSerialize();
- * @desc Collect the data from all successful radio input elements into a query string
- *
- * @example var data = $("#myForm :checkbox").formSerialize();
- * @desc Collect the data from all successful checkbox input elements in myForm into a query string
- *
- * @example var data = $("#myForm :checkbox").formSerialize(false);
- * @desc Collect the data from all checkbox elements in myForm (even the unchecked ones) into a query string
- *
- * @example var data = $(":input").formSerialize();
- * @desc Collect the data from all successful input, select, textarea and button elements into a query string
- *
- * @name fieldSerialize
- * @param successful true if only successful controls should be serialized (default is true)
- * @type String
- * @cat Plugins/Form
- */
-jQuery.fn.fieldSerialize = function(successful) {
-    var a = [];
-    this.each(function() {
-        var n = this.name;
-        if (!n) return;
-        var v = jQuery.fieldValue(this, successful);
-        if (v && v.constructor == Array) {
-            for (var i=0,max=v.length; i < max; i++)
-                a.push({name: n, value: v[i]});
-        }
-        else if (v !== null && typeof v != 'undefined')
-            a.push({name: this.name, value: v});
-    });
-    //hand off to jQuery.param for proper encoding
-    return jQuery.param(a);
-};
-
-
-/**
- * Returns the value of the field element in the jQuery object.  If there is more than one field element
- * in the jQuery object the value of the first successful one is returned.
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.  If this value is false then
- * the value of the first field element in the jQuery object is returned.
- *
- * Note: If no valid value can be determined the return value will be undifined.
- *
- * Note: The fieldValue returned for a select-multiple element or for a checkbox input will
- *       always be an array if it is not undefined.
- *
- *
- * @example var data = $("#myPasswordElement").formValue();
- * @desc Gets the current value of the myPasswordElement element
- *
- * @example var data = $("#myForm :input").formValue();
- * @desc Get the value of the first successful control in the jQuery object.
- *
- * @example var data = $("#myForm :checkbox").formValue();
- * @desc Get the array of values for the first set of successful checkbox controls in the jQuery object.
- *
- * @example var data = $("#mySingleSelect").formValue();
- * @desc Get the value of the select control
- *
- * @example var data = $("#myMultiSelect").formValue();
- * @desc Get the array of selected values for the select-multiple control
- *
- * @name fieldValue
- * @param Boolean successful true if value returned must be for a successful controls (default is true)
- * @type String or Array<String>
- * @cat Plugins/Form
- */
-jQuery.fn.fieldValue = function(successful) {
-    var cbVal, cbName;
-
-    // loop until we find a value
-    for (var i=0, max=this.length; i < max; i++) {
-        var el = this[i];
-        var v = jQuery.fieldValue(el, successful);
-        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
-            continue;
-
-        // for checkboxes, consider multiple elements, for everything else just return first valid value
-        if (el.type != 'checkbox') return v;
-
-        cbName = cbName || el.name;
-        if (cbName != el.name) // return if we hit a checkbox with a different name
-            return cbVal;
-        cbVal = cbVal || [];
-        cbVal.push(v);
-    }
-    return cbVal;
-};
-
-/**
- * Returns the value of the field element.
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true.  If the given element is not
- * successful and the successful arg is not false then the returned value will be null.
- *
- * Note: The fieldValue returned for a select-multiple element will always be an array.
- *
- * @example var data = jQuery.fieldValue($("#myPasswordElement")[0]);
- * @desc Gets the current value of the myPasswordElement element
- *
- * @name fieldValue
- * @param Element el The DOM element for which the value will be returned
- * @param Boolean successful true if value returned must be for a successful controls (default is true)
- * @type String or Array<String>
- * @cat Plugins/Form
- */
-jQuery.fieldValue = function(el, successful) {
-    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
-    if (typeof successful == 'undefined') successful = true;
-
-    if (successful && ( !n || el.disabled || t == 'reset' ||
-        (t == 'checkbox' || t == 'radio') && !el.checked ||
-        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
-        tag == 'select' && el.selectedIndex == -1))
-            return null;
-
-    if (tag == 'select') {
-        var index = el.selectedIndex;
-        if (index < 0) return null;
-        var a = [], ops = el.options;
-        var one = (t == 'select-one');
-        var max = (one ? index+1 : ops.length);
-        for(var i=(one ? index : 0); i < max; i++) {
-            var op = ops[i];
-            if (op.selected) {
-                // extra pain for IE...
-                var v = jQuery.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
-                if (one) return v;
-                a.push(v);
-            }
-        }
-        return a;
-    }
-    return el.value;
-};
-
-
-/**
- * Clears the form data.  Takes the following actions on the form's input fields:
- *  - input text fields will have their 'value' property set to the empty string
- *  - select elements will have their 'selectedIndex' property set to -1
- *  - checkbox and radio inputs will have their 'checked' property set to false
- *  - inputs of type submit, button, reset, and hidden will *not* be effected
- *  - button elements will *not* be effected
- *
- * @example $('form').clearForm();
- * @desc Clears all forms on the page.
- *
- * @name clearForm
- * @type jQuery
- * @cat Plugins/Form
- * @see resetForm
- */
-jQuery.fn.clearForm = function() {
-    return this.each(function() {
-        jQuery('input,select,textarea', this).clearFields();
-    });
-};
-
-/**
- * Clears the selected form elements.  Takes the following actions on the matched elements:
- *  - input text fields will have their 'value' property set to the empty string
- *  - select elements will have their 'selectedIndex' property set to -1
- *  - checkbox and radio inputs will have their 'checked' property set to false
- *  - inputs of type submit, button, reset, and hidden will *not* be effected
- *  - button elements will *not* be effected
- *
- * @example $('.myInputs').clearFields();
- * @desc Clears all inputs with class myInputs
- *
- * @name clearFields
- * @type jQuery
- * @cat Plugins/Form
- * @see clearForm
- */
-jQuery.fn.clearFields = jQuery.fn.clearInputs = function() {
-    return this.each(function() {
-        var t = this.type, tag = this.tagName.toLowerCase();
-        if (t == 'text' || t == 'password' || tag == 'textarea')
-            this.value = '';
-        else if (t == 'checkbox' || t == 'radio')
-            this.checked = false;
-        else if (tag == 'select')
-            this.selectedIndex = -1;
-    });
-};
-
-
-/**
- * Resets the form data.  Causes all form elements to be reset to their original value.
- *
- * @example $('form').resetForm();
- * @desc Resets all forms on the page.
- *
- * @name resetForm
- * @type jQuery
- * @cat Plugins/Form
- * @see clearForm
- */
-jQuery.fn.resetForm = function() {
-    return this.each(function() {
-        // guard against an input with the name of 'reset'
-        // note that IE reports the reset function as an 'object'
-        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
-            this.reset();
-    });
-};
diff --git a/lib/web/extjs/adapter/jquery/jquery.js b/lib/web/extjs/adapter/jquery/jquery.js
deleted file mode 100644
index 709be4ac2ef3f811e934f37d219a0866bf2e4a7f..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/jquery/jquery.js
+++ /dev/null
@@ -1,2201 +0,0 @@
-/* prevent execution of jQuery if included more than once */
-if(typeof window.jQuery == "undefined") {
-/*
- * jQuery 1.1.1 - New Wave Javascript
- *
- * Copyright (c) 2007 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2007-01-22 00:27:54 -0500 (Mon, 22 Jan 2007) $
- * $Rev: 1153 $
- */
-
-// Global undefined variable
-window.undefined = window.undefined;
-var jQuery = function(a,c) {
-	// If the context is global, return a new object
-	if ( window == this )
-		return new jQuery(a,c);
-
-	// Make sure that a selection was provided
-	a = a || document;
-	
-	// HANDLE: $(function)
-	// Shortcut for document ready
-	if ( jQuery.isFunction(a) )
-		return new jQuery(document)[ jQuery.fn.ready ? "ready" : "load" ]( a );
-	
-	// Handle HTML strings
-	if ( typeof a  == "string" ) {
-		// HANDLE: $(html) -> $(array)
-		var m = /^[^<]*(<(.|\n)+>)[^>]*$/.exec(a);
-		if ( m )
-			a = jQuery.clean( [ m[1] ] );
-		
-		// HANDLE: $(expr)
-		else
-			return new jQuery( c ).find( a );
-	}
-	
-	return this.setArray(
-		// HANDLE: $(array)
-		a.constructor == Array && a ||
-
-		// HANDLE: $(arraylike)
-		// Watch for when an array-like object is passed as the selector
-		(a.jquery || a.length && a != window && !a.nodeType && a[0] != undefined && a[0].nodeType) && jQuery.makeArray( a ) ||
-
-		// HANDLE: $(*)
-		[ a ] );
-};
-
-// Map over the $ in case of overwrite
-if ( typeof $ != "undefined" )
-	jQuery._$ = $;
-	
-// Map the jQuery namespace to the '$' one
-var $ = jQuery;
-
-jQuery.fn = jQuery.prototype = {
-	jquery: "1.1.1",
-
-	size: function() {
-		return this.length;
-	},
-	
-	length: 0,
-
-	get: function( num ) {
-		return num == undefined ?
-
-			// Return a 'clean' array
-			jQuery.makeArray( this ) :
-
-			// Return just the object
-			this[num];
-	},
-	pushStack: function( a ) {
-		var ret = jQuery(this);
-		ret.prevObject = this;
-		return ret.setArray( a );
-	},
-	setArray: function( a ) {
-		this.length = 0;
-		[].push.apply( this, a );
-		return this;
-	},
-	each: function( fn, args ) {
-		return jQuery.each( this, fn, args );
-	},
-	index: function( obj ) {
-		var pos = -1;
-		this.each(function(i){
-			if ( this == obj ) pos = i;
-		});
-		return pos;
-	},
-
-	attr: function( key, value, type ) {
-		var obj = key;
-		
-		// Look for the case where we're accessing a style value
-		if ( key.constructor == String )
-			if ( value == undefined )
-				return this.length && jQuery[ type || "attr" ]( this[0], key ) || undefined;
-			else {
-				obj = {};
-				obj[ key ] = value;
-			}
-		
-		// Check to see if we're setting style values
-		return this.each(function(index){
-			// Set all the styles
-			for ( var prop in obj )
-				jQuery.attr(
-					type ? this.style : this,
-					prop, jQuery.prop(this, obj[prop], type, index, prop)
-				);
-		});
-	},
-
-	css: function( key, value ) {
-		return this.attr( key, value, "curCSS" );
-	},
-
-	text: function(e) {
-		if ( typeof e == "string" )
-			return this.empty().append( document.createTextNode( e ) );
-
-		var t = "";
-		jQuery.each( e || this, function(){
-			jQuery.each( this.childNodes, function(){
-				if ( this.nodeType != 8 )
-					t += this.nodeType != 1 ?
-						this.nodeValue : jQuery.fn.text([ this ]);
-			});
-		});
-		return t;
-	},
-
-	wrap: function() {
-		// The elements to wrap the target around
-		var a = jQuery.clean(arguments);
-
-		// Wrap each of the matched elements individually
-		return this.each(function(){
-			// Clone the structure that we're using to wrap
-			var b = a[0].cloneNode(true);
-
-			// Insert it before the element to be wrapped
-			this.parentNode.insertBefore( b, this );
-
-			// Find the deepest point in the wrap structure
-			while ( b.firstChild )
-				b = b.firstChild;
-
-			// Move the matched element to within the wrap structure
-			b.appendChild( this );
-		});
-	},
-	append: function() {
-		return this.domManip(arguments, true, 1, function(a){
-			this.appendChild( a );
-		});
-	},
-	prepend: function() {
-		return this.domManip(arguments, true, -1, function(a){
-			this.insertBefore( a, this.firstChild );
-		});
-	},
-	before: function() {
-		return this.domManip(arguments, false, 1, function(a){
-			this.parentNode.insertBefore( a, this );
-		});
-	},
-	after: function() {
-		return this.domManip(arguments, false, -1, function(a){
-			this.parentNode.insertBefore( a, this.nextSibling );
-		});
-	},
-	end: function() {
-		return this.prevObject || jQuery([]);
-	},
-	find: function(t) {
-		return this.pushStack( jQuery.map( this, function(a){
-			return jQuery.find(t,a);
-		}) );
-	},
-	clone: function(deep) {
-		return this.pushStack( jQuery.map( this, function(a){
-			return a.cloneNode( deep != undefined ? deep : true );
-		}) );
-	},
-
-	filter: function(t) {
-		return this.pushStack(
-			jQuery.isFunction( t ) &&
-			jQuery.grep(this, function(el, index){
-				return t.apply(el, [index])
-			}) ||
-
-			jQuery.multiFilter(t,this) );
-	},
-
-	not: function(t) {
-		return this.pushStack(
-			t.constructor == String &&
-			jQuery.multiFilter(t,this,true) ||
-
-			jQuery.grep(this,function(a){
-					if ( t.constructor == Array || t.jquery )
-						return jQuery.inArray( t, a ) < 0;
-					else
-						return a != t;
-			}) );
-	},
-
-	add: function(t) {
-		return this.pushStack( jQuery.merge(
-			this.get(),
-			t.constructor == String ?
-				jQuery(t).get() :
-				t.length != undefined && !t.nodeName ?
-					t : [t] )
-		);
-	},
-	is: function(expr) {
-		return expr ? jQuery.filter(expr,this).r.length > 0 : false;
-	},
-
-	val: function( val ) {
-		return val == undefined ?
-			( this.length ? this[0].value : null ) :
-			this.attr( "value", val );
-	},
-
-	html: function( val ) {
-		return val == undefined ?
-			( this.length ? this[0].innerHTML : null ) :
-			this.empty().append( val );
-	},
-	domManip: function(args, table, dir, fn){
-		var clone = this.length > 1; 
-		var a = jQuery.clean(args);
-		if ( dir < 0 )
-			a.reverse();
-
-		return this.each(function(){
-			var obj = this;
-
-			if ( table && jQuery.nodeName(this, "table") && jQuery.nodeName(a[0], "tr") )
-				obj = this.getElementsByTagName("tbody")[0] || this.appendChild(document.createElement("tbody"));
-
-			jQuery.each( a, function(){
-				fn.apply( obj, [ clone ? this.cloneNode(true) : this ] );
-			});
-
-		});
-	}
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-	// copy reference to target object
-	var target = arguments[0],
-		a = 1;
-
-	// extend jQuery itself if only one argument is passed
-	if ( arguments.length == 1 ) {
-		target = this;
-		a = 0;
-	}
-	var prop;
-	while (prop = arguments[a++])
-		// Extend the base object
-		for ( var i in prop ) target[i] = prop[i];
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend({
-	noConflict: function() {
-		if ( jQuery._$ )
-			$ = jQuery._$;
-		return jQuery;
-	},
-
-	// This may seem like some crazy code, but trust me when I say that this
-	// is the only cross-browser way to do this. --John
-	isFunction: function( fn ) {
-		return !!fn && typeof fn != "string" &&
-			typeof fn[0] == "undefined" && /function/i.test( fn + "" );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
-	},
-	// args is for internal usage only
-	each: function( obj, fn, args ) {
-		if ( obj.length == undefined )
-			for ( var i in obj )
-				fn.apply( obj[i], args || [i, obj[i]] );
-		else
-			for ( var i = 0, ol = obj.length; i < ol; i++ )
-				if ( fn.apply( obj[i], args || [i, obj[i]] ) === false ) break;
-		return obj;
-	},
-	
-	prop: function(elem, value, type, index, prop){
-			// Handle executable functions
-			if ( jQuery.isFunction( value ) )
-				return value.call( elem, [index] );
-				
-			// exclude the following css properties to add px
-			var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i;
-
-			// Handle passing in a number to a CSS property
-			if ( value.constructor == Number && type == "curCSS" && !exclude.test(prop) )
-				return value + "px";
-
-			return value;
-	},
-
-	className: {
-		// internal only, use addClass("class")
-		add: function( elem, c ){
-			jQuery.each( c.split(/\s+/), function(i, cur){
-				if ( !jQuery.className.has( elem.className, cur ) )
-					elem.className += ( elem.className ? " " : "" ) + cur;
-			});
-		},
-
-		// internal only, use removeClass("class")
-		remove: function( elem, c ){
-			elem.className = c ?
-				jQuery.grep( elem.className.split(/\s+/), function(cur){
-					return !jQuery.className.has( c, cur );	
-				}).join(" ") : "";
-		},
-
-		// internal only, use is(".class")
-		has: function( t, c ) {
-			t = t.className || t;
-			return t && new RegExp("(^|\\s)" + c + "(\\s|$)").test( t );
-		}
-	},
-	swap: function(e,o,f) {
-		for ( var i in o ) {
-			e.style["old"+i] = e.style[i];
-			e.style[i] = o[i];
-		}
-		f.apply( e, [] );
-		for ( var i in o )
-			e.style[i] = e.style["old"+i];
-	},
-
-	css: function(e,p) {
-		if ( p == "height" || p == "width" ) {
-			var old = {}, oHeight, oWidth, d = ["Top","Bottom","Right","Left"];
-
-			jQuery.each( d, function(){
-				old["padding" + this] = 0;
-				old["border" + this + "Width"] = 0;
-			});
-
-			jQuery.swap( e, old, function() {
-				if (jQuery.css(e,"display") != "none") {
-					oHeight = e.offsetHeight;
-					oWidth = e.offsetWidth;
-				} else {
-					e = jQuery(e.cloneNode(true))
-						.find(":radio").removeAttr("checked").end()
-						.css({
-							visibility: "hidden", position: "absolute", display: "block", right: "0", left: "0"
-						}).appendTo(e.parentNode)[0];
-
-					var parPos = jQuery.css(e.parentNode,"position");
-					if ( parPos == "" || parPos == "static" )
-						e.parentNode.style.position = "relative";
-
-					oHeight = e.clientHeight;
-					oWidth = e.clientWidth;
-
-					if ( parPos == "" || parPos == "static" )
-						e.parentNode.style.position = "static";
-
-					e.parentNode.removeChild(e);
-				}
-			});
-
-			return p == "height" ? oHeight : oWidth;
-		}
-
-		return jQuery.curCSS( e, p );
-	},
-
-	curCSS: function(elem, prop, force) {
-		var ret;
-		
-		if (prop == "opacity" && jQuery.browser.msie)
-			return jQuery.attr(elem.style, "opacity");
-			
-		if (prop == "float" || prop == "cssFloat")
-		    prop = jQuery.browser.msie ? "styleFloat" : "cssFloat";
-
-		if (!force && elem.style[prop])
-			ret = elem.style[prop];
-
-		else if (document.defaultView && document.defaultView.getComputedStyle) {
-
-			if (prop == "cssFloat" || prop == "styleFloat")
-				prop = "float";
-
-			prop = prop.replace(/([A-Z])/g,"-$1").toLowerCase();
-			var cur = document.defaultView.getComputedStyle(elem, null);
-
-			if ( cur )
-				ret = cur.getPropertyValue(prop);
-			else if ( prop == "display" )
-				ret = "none";
-			else
-				jQuery.swap(elem, { display: "block" }, function() {
-				    var c = document.defaultView.getComputedStyle(this, "");
-				    ret = c && c.getPropertyValue(prop) || "";
-				});
-
-		} else if (elem.currentStyle) {
-
-			var newProp = prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();});
-			ret = elem.currentStyle[prop] || elem.currentStyle[newProp];
-			
-		}
-
-		return ret;
-	},
-	
-	clean: function(a) {
-		var r = [];
-
-		jQuery.each( a, function(i,arg){
-			if ( !arg ) return;
-
-			if ( arg.constructor == Number )
-				arg = arg.toString();
-			
-			 // Convert html string into DOM nodes
-			if ( typeof arg == "string" ) {
-				// Trim whitespace, otherwise indexOf won't work as expected
-				var s = jQuery.trim(arg), div = document.createElement("div"), tb = [];
-
-				var wrap =
-					 // option or optgroup
-					!s.indexOf("<opt") &&
-					[1, "<select>", "</select>"] ||
-					
-					(!s.indexOf("<thead") || !s.indexOf("<tbody") || !s.indexOf("<tfoot")) &&
-					[1, "<table>", "</table>"] ||
-					
-					!s.indexOf("<tr") &&
-					[2, "<table><tbody>", "</tbody></table>"] ||
-					
-				 	// <thead> matched above
-					(!s.indexOf("<td") || !s.indexOf("<th")) &&
-					[3, "<table><tbody><tr>", "</tr></tbody></table>"] ||
-					
-					[0,"",""];
-
-				// Go to html and back, then peel off extra wrappers
-				div.innerHTML = wrap[1] + s + wrap[2];
-				
-				// Move to the right depth
-				while ( wrap[0]-- )
-					div = div.firstChild;
-				
-				// Remove IE's autoinserted <tbody> from table fragments
-				if ( jQuery.browser.msie ) {
-					
-					// String was a <table>, *may* have spurious <tbody>
-					if ( !s.indexOf("<table") && s.indexOf("<tbody") < 0 ) 
-						tb = div.firstChild && div.firstChild.childNodes;
-						
-					// String was a bare <thead> or <tfoot>
-					else if ( wrap[1] == "<table>" && s.indexOf("<tbody") < 0 )
-						tb = div.childNodes;
-
-					for ( var n = tb.length-1; n >= 0 ; --n )
-						if ( jQuery.nodeName(tb[n], "tbody") && !tb[n].childNodes.length )
-							tb[n].parentNode.removeChild(tb[n]);
-					
-				}
-				
-				arg = div.childNodes;
-			}
-
-			if ( arg.length === 0 )
-				return;
-			
-			if ( arg[0] == undefined )
-				r.push( arg );
-			else
-				r = jQuery.merge( r, arg );
-
-		});
-
-		return r;
-	},
-	
-	attr: function(elem, name, value){
-		var fix = {
-			"for": "htmlFor",
-			"class": "className",
-			"float": jQuery.browser.msie ? "styleFloat" : "cssFloat",
-			cssFloat: jQuery.browser.msie ? "styleFloat" : "cssFloat",
-			innerHTML: "innerHTML",
-			className: "className",
-			value: "value",
-			disabled: "disabled",
-			checked: "checked",
-			readonly: "readOnly",
-			selected: "selected"
-		};
-		
-		// IE actually uses filters for opacity ... elem is actually elem.style
-		if ( name == "opacity" && jQuery.browser.msie && value != undefined ) {
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			elem.zoom = 1; 
-
-			// Set the alpha filter to set the opacity
-			return elem.filter = elem.filter.replace(/alpha\([^\)]*\)/gi,"") +
-				( value == 1 ? "" : "alpha(opacity=" + value * 100 + ")" );
-
-		} else if ( name == "opacity" && jQuery.browser.msie )
-			return elem.filter ? 
-				parseFloat( elem.filter.match(/alpha\(opacity=(.*)\)/)[1] ) / 100 : 1;
-		
-		// Mozilla doesn't play well with opacity 1
-		if ( name == "opacity" && jQuery.browser.mozilla && value == 1 )
-			value = 0.9999;
-
-		// Certain attributes only work when accessed via the old DOM 0 way
-		if ( fix[name] ) {
-			if ( value != undefined ) elem[fix[name]] = value;
-			return elem[fix[name]];
-
-		} else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName(elem, "form") && (name == "action" || name == "method") )
-			return elem.getAttributeNode(name).nodeValue;
-
-		// IE elem.getAttribute passes even for style
-		else if ( elem.tagName ) {
-			if ( value != undefined ) elem.setAttribute( name, value );
-			return elem.getAttribute( name );
-
-		} else {
-			name = name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});
-			if ( value != undefined ) elem[name] = value;
-			return elem[name];
-		}
-	},
-	trim: function(t){
-		return t.replace(/^\s+|\s+$/g, "");
-	},
-
-	makeArray: function( a ) {
-		var r = [];
-
-		if ( a.constructor != Array )
-			for ( var i = 0, al = a.length; i < al; i++ )
-				r.push( a[i] );
-		else
-			r = a.slice( 0 );
-
-		return r;
-	},
-
-	inArray: function( b, a ) {
-		for ( var i = 0, al = a.length; i < al; i++ )
-			if ( a[i] == b )
-				return i;
-		return -1;
-	},
-	merge: function(first, second) {
-		var r = [].slice.call( first, 0 );
-
-		// Now check for duplicates between the two arrays
-		// and only add the unique items
-		for ( var i = 0, sl = second.length; i < sl; i++ )
-			// Check for duplicates
-			if ( jQuery.inArray( second[i], r ) == -1 )
-				// The item is unique, add it
-				first.push( second[i] );
-
-		return first;
-	},
-	grep: function(elems, fn, inv) {
-		// If a string is passed in for the function, make a function
-		// for it (a handy shortcut)
-		if ( typeof fn == "string" )
-			fn = new Function("a","i","return " + fn);
-
-		var result = [];
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( var i = 0, el = elems.length; i < el; i++ )
-			if ( !inv && fn(elems[i],i) || inv && !fn(elems[i],i) )
-				result.push( elems[i] );
-
-		return result;
-	},
-	map: function(elems, fn) {
-		// If a string is passed in for the function, make a function
-		// for it (a handy shortcut)
-		if ( typeof fn == "string" )
-			fn = new Function("a","return " + fn);
-
-		var result = [], r = [];
-
-		// Go through the array, translating each of the items to their
-		// new value (or values).
-		for ( var i = 0, el = elems.length; i < el; i++ ) {
-			var val = fn(elems[i],i);
-
-			if ( val !== null && val != undefined ) {
-				if ( val.constructor != Array ) val = [val];
-				result = result.concat( val );
-			}
-		}
-
-		var r = result.length ? [ result[0] ] : [];
-
-		check: for ( var i = 1, rl = result.length; i < rl; i++ ) {
-			for ( var j = 0; j < i; j++ )
-				if ( result[i] == r[j] )
-					continue check;
-
-			r.push( result[i] );
-		}
-
-		return r;
-	}
-});
- 
-/*
- * Whether the W3C compliant box model is being used.
- *
- * @property
- * @name $.boxModel
- * @type Boolean
- * @cat JavaScript
- */
-new function() {
-	var b = navigator.userAgent.toLowerCase();
-
-	// Figure out what browser is being used
-	jQuery.browser = {
-		safari: /webkit/.test(b),
-		opera: /opera/.test(b),
-		msie: /msie/.test(b) && !/opera/.test(b),
-		mozilla: /mozilla/.test(b) && !/(compatible|webkit)/.test(b)
-	};
-
-	// Check to see if the W3C box model is being used
-	jQuery.boxModel = !jQuery.browser.msie || document.compatMode == "CSS1Compat";
-};
-
-jQuery.each({
-	parent: "a.parentNode",
-	parents: "jQuery.parents(a)",
-	next: "jQuery.nth(a,2,'nextSibling')",
-	prev: "jQuery.nth(a,2,'previousSibling')",
-	siblings: "jQuery.sibling(a.parentNode.firstChild,a)",
-	children: "jQuery.sibling(a.firstChild)"
-}, function(i,n){
-	jQuery.fn[ i ] = function(a) {
-		var ret = jQuery.map(this,n);
-		if ( a && typeof a == "string" )
-			ret = jQuery.multiFilter(a,ret);
-		return this.pushStack( ret );
-	};
-});
-
-jQuery.each({
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after"
-}, function(i,n){
-	jQuery.fn[ i ] = function(){
-		var a = arguments;
-		return this.each(function(){
-			for ( var j = 0, al = a.length; j < al; j++ )
-				jQuery(a[j])[n]( this );
-		});
-	};
-});
-
-jQuery.each( {
-	removeAttr: function( key ) {
-		jQuery.attr( this, key, "" );
-		this.removeAttribute( key );
-	},
-	addClass: function(c){
-		jQuery.className.add(this,c);
-	},
-	removeClass: function(c){
-		jQuery.className.remove(this,c);
-	},
-	toggleClass: function( c ){
-		jQuery.className[ jQuery.className.has(this,c) ? "remove" : "add" ](this, c);
-	},
-	remove: function(a){
-		if ( !a || jQuery.filter( a, [this] ).r.length )
-			this.parentNode.removeChild( this );
-	},
-	empty: function() {
-		while ( this.firstChild )
-			this.removeChild( this.firstChild );
-	}
-}, function(i,n){
-	jQuery.fn[ i ] = function() {
-		return this.each( n, arguments );
-	};
-});
-
-jQuery.each( [ "eq", "lt", "gt", "contains" ], function(i,n){
-	jQuery.fn[ n ] = function(num,fn) {
-		return this.filter( ":" + n + "(" + num + ")", fn );
-	};
-});
-
-jQuery.each( [ "height", "width" ], function(i,n){
-	jQuery.fn[ n ] = function(h) {
-		return h == undefined ?
-			( this.length ? jQuery.css( this[0], n ) : null ) :
-			this.css( n, h.constructor == String ? h : h + "px" );
-	};
-});
-jQuery.extend({
-	expr: {
-		"": "m[2]=='*'||jQuery.nodeName(a,m[2])",
-		"#": "a.getAttribute('id')==m[2]",
-		":": {
-			// Position Checks
-			lt: "i<m[3]-0",
-			gt: "i>m[3]-0",
-			nth: "m[3]-0==i",
-			eq: "m[3]-0==i",
-			first: "i==0",
-			last: "i==r.length-1",
-			even: "i%2==0",
-			odd: "i%2",
-
-			// Child Checks
-			"nth-child": "jQuery.nth(a.parentNode.firstChild,m[3],'nextSibling',a)==a",
-			"first-child": "jQuery.nth(a.parentNode.firstChild,1,'nextSibling')==a",
-			"last-child": "jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a",
-			"only-child": "jQuery.sibling(a.parentNode.firstChild).length==1",
-
-			// Parent Checks
-			parent: "a.firstChild",
-			empty: "!a.firstChild",
-
-			// Text Check
-			contains: "jQuery.fn.text.apply([a]).indexOf(m[3])>=0",
-
-			// Visibility
-			visible: 'a.type!="hidden"&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"',
-			hidden: 'a.type=="hidden"||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"',
-
-			// Form attributes
-			enabled: "!a.disabled",
-			disabled: "a.disabled",
-			checked: "a.checked",
-			selected: "a.selected||jQuery.attr(a,'selected')",
-
-			// Form elements
-			text: "a.type=='text'",
-			radio: "a.type=='radio'",
-			checkbox: "a.type=='checkbox'",
-			file: "a.type=='file'",
-			password: "a.type=='password'",
-			submit: "a.type=='submit'",
-			image: "a.type=='image'",
-			reset: "a.type=='reset'",
-			button: 'a.type=="button"||jQuery.nodeName(a,"button")',
-			input: "/input|select|textarea|button/i.test(a.nodeName)"
-		},
-		".": "jQuery.className.has(a,m[2])",
-		"@": {
-			"=": "z==m[4]",
-			"!=": "z!=m[4]",
-			"^=": "z&&!z.indexOf(m[4])",
-			"$=": "z&&z.substr(z.length - m[4].length,m[4].length)==m[4]",
-			"*=": "z&&z.indexOf(m[4])>=0",
-			"": "z",
-			_resort: function(m){
-				return ["", m[1], m[3], m[2], m[5]];
-			},
-			_prefix: "z=a[m[3]]||jQuery.attr(a,m[3]);"
-		},
-		"[": "jQuery.find(m[2],a).length"
-	},
-	
-	// The regular expressions that power the parsing engine
-	parse: [
-		// Match: [@value='test'], [@foo]
-		/^\[ *(@)([a-z0-9_-]*) *([!*$^=]*) *('?"?)(.*?)\4 *\]/i,
-
-		// Match: [div], [div p]
-		/^(\[)\s*(.*?(\[.*?\])?[^[]*?)\s*\]/,
-
-		// Match: :contains('foo')
-		/^(:)([a-z0-9_-]*)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/i,
-
-		// Match: :even, :last-chlid
-		/^([:.#]*)([a-z0-9_*-]*)/i
-	],
-
-	token: [
-		/^(\/?\.\.)/, "a.parentNode",
-		/^(>|\/)/, "jQuery.sibling(a.firstChild)",
-		/^(\+)/, "jQuery.nth(a,2,'nextSibling')",
-		/^(~)/, function(a){
-			var s = jQuery.sibling(a.parentNode.firstChild);
-			return s.slice(0, jQuery.inArray(a,s));
-		}
-	],
-
-	multiFilter: function( expr, elems, not ) {
-		var old, cur = [];
-
-		while ( expr && expr != old ) {
-			old = expr;
-			var f = jQuery.filter( expr, elems, not );
-			expr = f.t.replace(/^\s*,\s*/, "" );
-			cur = not ? elems = f.r : jQuery.merge( cur, f.r );
-		}
-
-		return cur;
-	},
-	find: function( t, context ) {
-		// Quickly handle non-string expressions
-		if ( typeof t != "string" )
-			return [ t ];
-
-		// Make sure that the context is a DOM Element
-		if ( context && !context.nodeType )
-			context = null;
-
-		// Set the correct context (if none is provided)
-		context = context || document;
-
-		// Handle the common XPath // expression
-		if ( !t.indexOf("//") ) {
-			context = context.documentElement;
-			t = t.substr(2,t.length);
-
-		// And the / root expression
-		} else if ( !t.indexOf("/") ) {
-			context = context.documentElement;
-			t = t.substr(1,t.length);
-			if ( t.indexOf("/") >= 1 )
-				t = t.substr(t.indexOf("/"),t.length);
-		}
-
-		// Initialize the search
-		var ret = [context], done = [], last = null;
-
-		// Continue while a selector expression exists, and while
-		// we're no longer looping upon ourselves
-		while ( t && last != t ) {
-			var r = [];
-			last = t;
-
-			t = jQuery.trim(t).replace( /^\/\//i, "" );
-
-			var foundToken = false;
-
-			// An attempt at speeding up child selectors that
-			// point to a specific element tag
-			var re = /^[\/>]\s*([a-z0-9*-]+)/i;
-			var m = re.exec(t);
-
-			if ( m ) {
-				// Perform our own iteration and filter
-				jQuery.each( ret, function(){
-					for ( var c = this.firstChild; c; c = c.nextSibling )
-						if ( c.nodeType == 1 && ( jQuery.nodeName(c, m[1]) || m[1] == "*" ) )
-							r.push( c );
-				});
-
-				ret = r;
-				t = t.replace( re, "" );
-				if ( t.indexOf(" ") == 0 ) continue;
-				foundToken = true;
-			} else {
-				// Look for pre-defined expression tokens
-				for ( var i = 0; i < jQuery.token.length; i += 2 ) {
-					// Attempt to match each, individual, token in
-					// the specified order
-					var re = jQuery.token[i];
-					var m = re.exec(t);
-
-					// If the token match was found
-					if ( m ) {
-						// Map it against the token's handler
-						r = ret = jQuery.map( ret, jQuery.isFunction( jQuery.token[i+1] ) ?
-							jQuery.token[i+1] :
-							function(a){ return eval(jQuery.token[i+1]); });
-
-						// And remove the token
-						t = jQuery.trim( t.replace( re, "" ) );
-						foundToken = true;
-						break;
-					}
-				}
-			}
-
-			// See if there's still an expression, and that we haven't already
-			// matched a token
-			if ( t && !foundToken ) {
-				// Handle multiple expressions
-				if ( !t.indexOf(",") ) {
-					// Clean the result set
-					if ( ret[0] == context ) ret.shift();
-
-					// Merge the result sets
-					jQuery.merge( done, ret );
-
-					// Reset the context
-					r = ret = [context];
-
-					// Touch up the selector string
-					t = " " + t.substr(1,t.length);
-
-				} else {
-					// Optomize for the case nodeName#idName
-					var re2 = /^([a-z0-9_-]+)(#)([a-z0-9\\*_-]*)/i;
-					var m = re2.exec(t);
-					
-					// Re-organize the results, so that they're consistent
-					if ( m ) {
-					   m = [ 0, m[2], m[3], m[1] ];
-
-					} else {
-						// Otherwise, do a traditional filter check for
-						// ID, class, and element selectors
-						re2 = /^([#.]?)([a-z0-9\\*_-]*)/i;
-						m = re2.exec(t);
-					}
-
-					// Try to do a global search by ID, where we can
-					if ( m[1] == "#" && ret[ret.length-1].getElementById ) {
-						// Optimization for HTML document case
-						var oid = ret[ret.length-1].getElementById(m[2]);
-
-						// Do a quick check for node name (where applicable) so
-						// that div#foo searches will be really fast
-						ret = r = oid && 
-						  (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : [];
-
-					} else {
-						// Pre-compile a regular expression to handle class searches
-						if ( m[1] == "." )
-							var rec = new RegExp("(^|\\s)" + m[2] + "(\\s|$)");
-
-						// We need to find all descendant elements, it is more
-						// efficient to use getAll() when we are already further down
-						// the tree - we try to recognize that here
-						jQuery.each( ret, function(){
-							// Grab the tag name being searched for
-							var tag = m[1] != "" || m[0] == "" ? "*" : m[2];
-
-							// Handle IE7 being really dumb about <object>s
-							if ( jQuery.nodeName(this, "object") && tag == "*" )
-								tag = "param";
-
-							jQuery.merge( r,
-								m[1] != "" && ret.length != 1 ?
-									jQuery.getAll( this, [], m[1], m[2], rec ) :
-									this.getElementsByTagName( tag )
-							);
-						});
-
-						// It's faster to filter by class and be done with it
-						if ( m[1] == "." && ret.length == 1 )
-							r = jQuery.grep( r, function(e) {
-								return rec.test(e.className);
-							});
-
-						// Same with ID filtering
-						if ( m[1] == "#" && ret.length == 1 ) {
-							// Remember, then wipe out, the result set
-							var tmp = r;
-							r = [];
-
-							// Then try to find the element with the ID
-							jQuery.each( tmp, function(){
-								if ( this.getAttribute("id") == m[2] ) {
-									r = [ this ];
-									return false;
-								}
-							});
-						}
-
-						ret = r;
-					}
-
-					t = t.replace( re2, "" );
-				}
-
-			}
-
-			// If a selector string still exists
-			if ( t ) {
-				// Attempt to filter it
-				var val = jQuery.filter(t,r);
-				ret = r = val.r;
-				t = jQuery.trim(val.t);
-			}
-		}
-
-		// Remove the root context
-		if ( ret && ret[0] == context ) ret.shift();
-
-		// And combine the results
-		jQuery.merge( done, ret );
-
-		return done;
-	},
-
-	filter: function(t,r,not) {
-		// Look for common filter expressions
-		while ( t && /^[a-z[({<*:.#]/i.test(t) ) {
-
-			var p = jQuery.parse, m;
-
-			jQuery.each( p, function(i,re){
-		
-				// Look for, and replace, string-like sequences
-				// and finally build a regexp out of it
-				m = re.exec( t );
-
-				if ( m ) {
-					// Remove what we just matched
-					t = t.substring( m[0].length );
-
-					// Re-organize the first match
-					if ( jQuery.expr[ m[1] ]._resort )
-						m = jQuery.expr[ m[1] ]._resort( m );
-
-					return false;
-				}
-			});
-
-			// :not() is a special case that can be optimized by
-			// keeping it out of the expression list
-			if ( m[1] == ":" && m[2] == "not" )
-				r = jQuery.filter(m[3], r, true).r;
-
-			// Handle classes as a special case (this will help to
-			// improve the speed, as the regexp will only be compiled once)
-			else if ( m[1] == "." ) {
-
-				var re = new RegExp("(^|\\s)" + m[2] + "(\\s|$)");
-				r = jQuery.grep( r, function(e){
-					return re.test(e.className || "");
-				}, not);
-
-			// Otherwise, find the expression to execute
-			} else {
-				var f = jQuery.expr[m[1]];
-				if ( typeof f != "string" )
-					f = jQuery.expr[m[1]][m[2]];
-
-				// Build a custom macro to enclose it
-				eval("f = function(a,i){" +
-					( jQuery.expr[ m[1] ]._prefix || "" ) +
-					"return " + f + "}");
-
-				// Execute it against the current filter
-				r = jQuery.grep( r, f, not );
-			}
-		}
-
-		// Return an array of filtered elements (r)
-		// and the modified expression string (t)
-		return { r: r, t: t };
-	},
-	
-	getAll: function( o, r, token, name, re ) {
-		for ( var s = o.firstChild; s; s = s.nextSibling )
-			if ( s.nodeType == 1 ) {
-				var add = true;
-
-				if ( token == "." )
-					add = s.className && re.test(s.className);
-				else if ( token == "#" )
-					add = s.getAttribute("id") == name;
-	
-				if ( add )
-					r.push( s );
-
-				if ( token == "#" && r.length ) break;
-
-				if ( s.firstChild )
-					jQuery.getAll( s, r, token, name, re );
-			}
-
-		return r;
-	},
-	parents: function( elem ){
-		var matched = [];
-		var cur = elem.parentNode;
-		while ( cur && cur != document ) {
-			matched.push( cur );
-			cur = cur.parentNode;
-		}
-		return matched;
-	},
-	nth: function(cur,result,dir,elem){
-		result = result || 1;
-		var num = 0;
-		for ( ; cur; cur = cur[dir] ) {
-			if ( cur.nodeType == 1 ) num++;
-			if ( num == result || result == "even" && num % 2 == 0 && num > 1 && cur == elem ||
-				result == "odd" && num % 2 == 1 && cur == elem ) return cur;
-		}
-	},
-	sibling: function( n, elem ) {
-		var r = [];
-
-		for ( ; n; n = n.nextSibling ) {
-			if ( n.nodeType == 1 && (!elem || n != elem) )
-				r.push( n );
-		}
-
-		return r;
-	}
-});
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code orignated from 
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
-	// Bind an event to an element
-	// Original by Dean Edwards
-	add: function(element, type, handler, data) {
-		// For whatever reason, IE has trouble passing the window object
-		// around, causing it to be cloned in the process
-		if ( jQuery.browser.msie && element.setInterval != undefined )
-			element = window;
-
-		// if data is passed, bind to handler
-		if( data ) 
-			handler.data = data;
-
-		// Make sure that the function being executed has a unique ID
-		if ( !handler.guid )
-			handler.guid = this.guid++;
-
-		// Init the element's event structure
-		if (!element.events)
-			element.events = {};
-
-		// Get the current list of functions bound to this event
-		var handlers = element.events[type];
-
-		// If it hasn't been initialized yet
-		if (!handlers) {
-			// Init the event handler queue
-			handlers = element.events[type] = {};
-
-			// Remember an existing handler, if it's already there
-			if (element["on" + type])
-				handlers[0] = element["on" + type];
-		}
-
-		// Add the function to the element's handler list
-		handlers[handler.guid] = handler;
-
-		// And bind the global event handler to the element
-		element["on" + type] = this.handle;
-
-		// Remember the function in a global list (for triggering)
-		if (!this.global[type])
-			this.global[type] = [];
-		this.global[type].push( element );
-	},
-
-	guid: 1,
-	global: {},
-
-	// Detach an event or set of events from an element
-	remove: function(element, type, handler) {
-		if (element.events)
-			if ( type && type.type )
-				delete element.events[ type.type ][ type.handler.guid ];
-			else if (type && element.events[type])
-				if ( handler )
-					delete element.events[type][handler.guid];
-				else
-					for ( var i in element.events[type] )
-						delete element.events[type][i];
-			else
-				for ( var j in element.events )
-					this.remove( element, j );
-	},
-
-	trigger: function(type,data,element) {
-		// Clone the incoming data, if any
-		data = jQuery.makeArray(data || []);
-
-		// Handle a global trigger
-		if ( !element )
-			jQuery.each( this.global[type] || [], function(){
-				jQuery.event.trigger( type, data, this );
-			});
-
-		// Handle triggering a single element
-		else {
-			var handler = element["on" + type ], val,
-				fn = jQuery.isFunction( element[ type ] );
-
-			if ( handler ) {
-				// Pass along a fake event
-				data.unshift( this.fix({ type: type, target: element }) );
-	
-				// Trigger the event
-				if ( (val = handler.apply( element, data )) !== false )
-					this.triggered = true;
-			}
-
-			if ( fn && val !== false )
-				element[ type ]();
-
-			this.triggered = false;
-		}
-	},
-
-	handle: function(event) {
-		// Handle the second event of a trigger and when
-		// an event is called after a page has unloaded
-		if ( typeof jQuery == "undefined" || jQuery.event.triggered ) return;
-
-		// Empty object is for triggered events with no data
-		event = jQuery.event.fix( event || window.event || {} ); 
-
-		// returned undefined or false
-		var returnValue;
-
-		var c = this.events[event.type];
-
-		var args = [].slice.call( arguments, 1 );
-		args.unshift( event );
-
-		for ( var j in c ) {
-			// Pass in a reference to the handler function itself
-			// So that we can later remove it
-			args[0].handler = c[j];
-			args[0].data = c[j].data;
-
-			if ( c[j].apply( this, args ) === false ) {
-				event.preventDefault();
-				event.stopPropagation();
-				returnValue = false;
-			}
-		}
-
-		// Clean up added properties in IE to prevent memory leak
-		if (jQuery.browser.msie) event.target = event.preventDefault = event.stopPropagation = event.handler = event.data = null;
-
-		return returnValue;
-	},
-
-	fix: function(event) {
-		// Fix target property, if necessary
-		if ( !event.target && event.srcElement )
-			event.target = event.srcElement;
-
-		// Calculate pageX/Y if missing and clientX/Y available
-		if ( event.pageX == undefined && event.clientX != undefined ) {
-			var e = document.documentElement, b = document.body;
-			event.pageX = event.clientX + (e.scrollLeft || b.scrollLeft);
-			event.pageY = event.clientY + (e.scrollTop || b.scrollTop);
-		}
-				
-		// check if target is a textnode (safari)
-		if (jQuery.browser.safari && event.target.nodeType == 3) {
-			// store a copy of the original event object 
-			// and clone because target is read only
-			var originalEvent = event;
-			event = jQuery.extend({}, originalEvent);
-			
-			// get parentnode from textnode
-			event.target = originalEvent.target.parentNode;
-			
-			// add preventDefault and stopPropagation since 
-			// they will not work on the clone
-			event.preventDefault = function() {
-				return originalEvent.preventDefault();
-			};
-			event.stopPropagation = function() {
-				return originalEvent.stopPropagation();
-			};
-		}
-		
-		// fix preventDefault and stopPropagation
-		if (!event.preventDefault)
-			event.preventDefault = function() {
-				this.returnValue = false;
-			};
-			
-		if (!event.stopPropagation)
-			event.stopPropagation = function() {
-				this.cancelBubble = true;
-			};
-			
-		return event;
-	}
-};
-
-jQuery.fn.extend({
-	bind: function( type, data, fn ) {
-		return this.each(function(){
-			jQuery.event.add( this, type, fn || data, data );
-		});
-	},
-	one: function( type, data, fn ) {
-		return this.each(function(){
-			jQuery.event.add( this, type, function(event) {
-				jQuery(this).unbind(event);
-				return (fn || data).apply( this, arguments);
-			}, data);
-		});
-	},
-	unbind: function( type, fn ) {
-		return this.each(function(){
-			jQuery.event.remove( this, type, fn );
-		});
-	},
-	trigger: function( type, data ) {
-		return this.each(function(){
-			jQuery.event.trigger( type, data, this );
-		});
-	},
-	toggle: function() {
-		// Save reference to arguments for access in closure
-		var a = arguments;
-
-		return this.click(function(e) {
-			// Figure out which function to execute
-			this.lastToggle = this.lastToggle == 0 ? 1 : 0;
-			
-			// Make sure that clicks stop
-			e.preventDefault();
-			
-			// and execute the function
-			return a[this.lastToggle].apply( this, [e] ) || false;
-		});
-	},
-	hover: function(f,g) {
-		
-		// A private function for handling mouse 'hovering'
-		function handleHover(e) {
-			// Check if mouse(over|out) are still within the same parent element
-			var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget;
-	
-			// Traverse up the tree
-			while ( p && p != this ) try { p = p.parentNode } catch(e) { p = this; };
-			
-			// If we actually just moused on to a sub-element, ignore it
-			if ( p == this ) return false;
-			
-			// Execute the right function
-			return (e.type == "mouseover" ? f : g).apply(this, [e]);
-		}
-		
-		// Bind the function to the two event listeners
-		return this.mouseover(handleHover).mouseout(handleHover);
-	},
-	ready: function(f) {
-		// If the DOM is already ready
-		if ( jQuery.isReady )
-			// Execute the function immediately
-			f.apply( document, [jQuery] );
-			
-		// Otherwise, remember the function for later
-		else {
-			// Add the function to the wait list
-			jQuery.readyList.push( function() { return f.apply(this, [jQuery]) } );
-		}
-	
-		return this;
-	}
-});
-
-jQuery.extend({
-	/*
-	 * All the code that makes DOM Ready work nicely.
-	 */
-	isReady: false,
-	readyList: [],
-	
-	// Handle when the DOM is ready
-	ready: function() {
-		// Make sure that the DOM is not already loaded
-		if ( !jQuery.isReady ) {
-			// Remember that the DOM is ready
-			jQuery.isReady = true;
-			
-			// If there are functions bound, to execute
-			if ( jQuery.readyList ) {
-				// Execute all of them
-				jQuery.each( jQuery.readyList, function(){
-					this.apply( document );
-				});
-				
-				// Reset the list of functions
-				jQuery.readyList = null;
-			}
-			// Remove event lisenter to avoid memory leak
-			if ( jQuery.browser.mozilla || jQuery.browser.opera )
-				document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );
-		}
-	}
-});
-
-new function(){
-
-	jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
-		"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + 
-		"submit,keydown,keypress,keyup,error").split(","), function(i,o){
-		
-		// Handle event binding
-		jQuery.fn[o] = function(f){
-			return f ? this.bind(o, f) : this.trigger(o);
-		};
-			
-	});
-	
-	// If Mozilla is used
-	if ( jQuery.browser.mozilla || jQuery.browser.opera )
-		// Use the handy event callback
-		document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
-	
-	// If IE is used, use the excellent hack by Matthias Miller
-	// http://www.outofhanwell.com/blog/index.php?title=the_window_onload_problem_revisited
-	else if ( jQuery.browser.msie ) {
-	
-		// Only works if you document.write() it
-		document.write("<scr" + "ipt id=__ie_init defer=true " + 
-			"src=//:><\/script>");
-	
-		// Use the defer script hack
-		var script = document.getElementById("__ie_init");
-		
-		// script does not exist if jQuery is loaded dynamically
-		if ( script ) 
-			script.onreadystatechange = function() {
-				if ( this.readyState != "complete" ) return;
-				this.parentNode.removeChild( this );
-				jQuery.ready();
-			};
-	
-		// Clear from memory
-		script = null;
-	
-	// If Safari  is used
-	} else if ( jQuery.browser.safari )
-		// Continually check to see if the document.readyState is valid
-		jQuery.safariTimer = setInterval(function(){
-			// loaded and complete are both valid states
-			if ( document.readyState == "loaded" || 
-				document.readyState == "complete" ) {
-	
-				// If either one are found, remove the timer
-				clearInterval( jQuery.safariTimer );
-				jQuery.safariTimer = null;
-	
-				// and execute any waiting functions
-				jQuery.ready();
-			}
-		}, 10); 
-
-	// A fallback to window.onload, that will always work
-	jQuery.event.add( window, "load", jQuery.ready );
-	
-};
-
-// Clean up after IE to avoid memory leaks
-if (jQuery.browser.msie)
-	jQuery(window).one("unload", function() {
-		var global = jQuery.event.global;
-		for ( var type in global ) {
-			var els = global[type], i = els.length;
-			if ( i && type != 'unload' )
-				do
-					jQuery.event.remove(els[i-1], type);
-				while (--i);
-		}
-	});
-jQuery.fn.extend({
-
-	show: function(speed,callback){
-		var hidden = this.filter(":hidden");
-		speed ?
-			hidden.animate({
-				height: "show", width: "show", opacity: "show"
-			}, speed, callback) :
-			
-			hidden.each(function(){
-				this.style.display = this.oldblock ? this.oldblock : "";
-				if ( jQuery.css(this,"display") == "none" )
-					this.style.display = "block";
-			});
-		return this;
-	},
-
-	hide: function(speed,callback){
-		var visible = this.filter(":visible");
-		speed ?
-			visible.animate({
-				height: "hide", width: "hide", opacity: "hide"
-			}, speed, callback) :
-			
-			visible.each(function(){
-				this.oldblock = this.oldblock || jQuery.css(this,"display");
-				if ( this.oldblock == "none" )
-					this.oldblock = "block";
-				this.style.display = "none";
-			});
-		return this;
-	},
-
-	// Save the old toggle function
-	_toggle: jQuery.fn.toggle,
-	toggle: function( fn, fn2 ){
-		var args = arguments;
-		return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
-			this._toggle( fn, fn2 ) :
-			this.each(function(){
-				jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ]
-					.apply( jQuery(this), args );
-			});
-	},
-	slideDown: function(speed,callback){
-		return this.animate({height: "show"}, speed, callback);
-	},
-	slideUp: function(speed,callback){
-		return this.animate({height: "hide"}, speed, callback);
-	},
-	slideToggle: function(speed, callback){
-		return this.each(function(){
-			var state = jQuery(this).is(":hidden") ? "show" : "hide";
-			jQuery(this).animate({height: state}, speed, callback);
-		});
-	},
-	fadeIn: function(speed, callback){
-		return this.animate({opacity: "show"}, speed, callback);
-	},
-	fadeOut: function(speed, callback){
-		return this.animate({opacity: "hide"}, speed, callback);
-	},
-	fadeTo: function(speed,to,callback){
-		return this.animate({opacity: to}, speed, callback);
-	},
-	animate: function( prop, speed, easing, callback ) {
-		return this.queue(function(){
-		
-			this.curAnim = jQuery.extend({}, prop);
-			var opt = jQuery.speed(speed, easing, callback);
-			
-			for ( var p in prop ) {
-				var e = new jQuery.fx( this, opt, p );
-				if ( prop[p].constructor == Number )
-					e.custom( e.cur(), prop[p] );
-				else
-					e[ prop[p] ]( prop );
-			}
-			
-		});
-	},
-	queue: function(type,fn){
-		if ( !fn ) {
-			fn = type;
-			type = "fx";
-		}
-	
-		return this.each(function(){
-			if ( !this.queue )
-				this.queue = {};
-	
-			if ( !this.queue[type] )
-				this.queue[type] = [];
-	
-			this.queue[type].push( fn );
-		
-			if ( this.queue[type].length == 1 )
-				fn.apply(this);
-		});
-	}
-
-});
-
-jQuery.extend({
-	
-	speed: function(speed, easing, fn) {
-		var opt = speed && speed.constructor == Object ? speed : {
-			complete: fn || !fn && easing || 
-				jQuery.isFunction( speed ) && speed,
-			duration: speed,
-			easing: fn && easing || easing && easing.constructor != Function && easing
-		};
-
-		opt.duration = (opt.duration && opt.duration.constructor == Number ? 
-			opt.duration : 
-			{ slow: 600, fast: 200 }[opt.duration]) || 400;
-	
-		// Queueing
-		opt.old = opt.complete;
-		opt.complete = function(){
-			jQuery.dequeue(this, "fx");
-			if ( jQuery.isFunction( opt.old ) )
-				opt.old.apply( this );
-		};
-	
-		return opt;
-	},
-	
-	easing: {},
-	
-	queue: {},
-	
-	dequeue: function(elem,type){
-		type = type || "fx";
-	
-		if ( elem.queue && elem.queue[type] ) {
-			// Remove self
-			elem.queue[type].shift();
-	
-			// Get next function
-			var f = elem.queue[type][0];
-		
-			if ( f ) f.apply( elem );
-		}
-	},
-
-	/*
-	 * I originally wrote fx() as a clone of moo.fx and in the process
-	 * of making it small in size the code became illegible to sane
-	 * people. You've been warned.
-	 */
-	
-	fx: function( elem, options, prop ){
-
-		var z = this;
-
-		// The styles
-		var y = elem.style;
-		
-		// Store display property
-		var oldDisplay = jQuery.css(elem, "display");
-
-		// Set display property to block for animation
-		y.display = "block";
-
-		// Make sure that nothing sneaks out
-		y.overflow = "hidden";
-
-		// Simple function for setting a style value
-		z.a = function(){
-			if ( options.step )
-				options.step.apply( elem, [ z.now ] );
-
-			if ( prop == "opacity" )
-				jQuery.attr(y, "opacity", z.now); // Let attr handle opacity
-			else if ( parseInt(z.now) ) // My hate for IE will never die
-				y[prop] = parseInt(z.now) + "px";
-		};
-
-		// Figure out the maximum number to run to
-		z.max = function(){
-			return parseFloat( jQuery.css(elem,prop) );
-		};
-
-		// Get the current size
-		z.cur = function(){
-			var r = parseFloat( jQuery.curCSS(elem, prop) );
-			return r && r > -10000 ? r : z.max();
-		};
-
-		// Start an animation from one number to another
-		z.custom = function(from,to){
-			z.startTime = (new Date()).getTime();
-			z.now = from;
-			z.a();
-
-			z.timer = setInterval(function(){
-				z.step(from, to);
-			}, 13);
-		};
-
-		// Simple 'show' function
-		z.show = function(){
-			if ( !elem.orig ) elem.orig = {};
-
-			// Remember where we started, so that we can go back to it later
-			elem.orig[prop] = this.cur();
-
-			options.show = true;
-
-			// Begin the animation
-			z.custom(0, elem.orig[prop]);
-
-			// Stupid IE, look what you made me do
-			if ( prop != "opacity" )
-				y[prop] = "1px";
-		};
-
-		// Simple 'hide' function
-		z.hide = function(){
-			if ( !elem.orig ) elem.orig = {};
-
-			// Remember where we started, so that we can go back to it later
-			elem.orig[prop] = this.cur();
-
-			options.hide = true;
-
-			// Begin the animation
-			z.custom(elem.orig[prop], 0);
-		};
-		
-		//Simple 'toggle' function
-		z.toggle = function() {
-			if ( !elem.orig ) elem.orig = {};
-
-			// Remember where we started, so that we can go back to it later
-			elem.orig[prop] = this.cur();
-
-			if(oldDisplay == "none")  {
-				options.show = true;
-				
-				// Stupid IE, look what you made me do
-				if ( prop != "opacity" )
-					y[prop] = "1px";
-
-				// Begin the animation
-				z.custom(0, elem.orig[prop]);	
-			} else {
-				options.hide = true;
-
-				// Begin the animation
-				z.custom(elem.orig[prop], 0);
-			}		
-		};
-
-		// Each step of an animation
-		z.step = function(firstNum, lastNum){
-			var t = (new Date()).getTime();
-
-			if (t > options.duration + z.startTime) {
-				// Stop the timer
-				clearInterval(z.timer);
-				z.timer = null;
-
-				z.now = lastNum;
-				z.a();
-
-				if (elem.curAnim) elem.curAnim[ prop ] = true;
-
-				var done = true;
-				for ( var i in elem.curAnim )
-					if ( elem.curAnim[i] !== true )
-						done = false;
-
-				if ( done ) {
-					// Reset the overflow
-					y.overflow = "";
-					
-					// Reset the display
-					y.display = oldDisplay;
-					if (jQuery.css(elem, "display") == "none")
-						y.display = "block";
-
-					// Hide the element if the "hide" operation was done
-					if ( options.hide ) 
-						y.display = "none";
-
-					// Reset the properties, if the item has been hidden or shown
-					if ( options.hide || options.show )
-						for ( var p in elem.curAnim )
-							if (p == "opacity")
-								jQuery.attr(y, p, elem.orig[p]);
-							else
-								y[p] = "";
-				}
-
-				// If a callback was provided, execute it
-				if ( done && jQuery.isFunction( options.complete ) )
-					// Execute the complete function
-					options.complete.apply( elem );
-			} else {
-				var n = t - this.startTime;
-				// Figure out where in the animation we are and set the number
-				var p = n / options.duration;
-				
-				// If the easing function exists, then use it 
-				z.now = options.easing && jQuery.easing[options.easing] ?
-					jQuery.easing[options.easing](p, n,  firstNum, (lastNum-firstNum), options.duration) :
-					// else use default linear easing
-					((-Math.cos(p*Math.PI)/2) + 0.5) * (lastNum-firstNum) + firstNum;
-
-				// Perform the next step of the animation
-				z.a();
-			}
-		};
-	
-	}
-});
-jQuery.fn.extend({
-	loadIfModified: function( url, params, callback ) {
-		this.load( url, params, callback, 1 );
-	},
-	load: function( url, params, callback, ifModified ) {
-		if ( jQuery.isFunction( url ) )
-			return this.bind("load", url);
-
-		callback = callback || function(){};
-
-		// Default to a GET request
-		var type = "GET";
-
-		// If the second parameter was provided
-		if ( params )
-			// If it's a function
-			if ( jQuery.isFunction( params ) ) {
-				// We assume that it's the callback
-				callback = params;
-				params = null;
-
-			// Otherwise, build a param string
-			} else {
-				params = jQuery.param( params );
-				type = "POST";
-			}
-
-		var self = this;
-
-		// Request the remote document
-		jQuery.ajax({
-			url: url,
-			type: type,
-			data: params,
-			ifModified: ifModified,
-			complete: function(res, status){
-				if ( status == "success" || !ifModified && status == "notmodified" )
-					// Inject the HTML into all the matched elements
-					self.attr("innerHTML", res.responseText)
-					  // Execute all the scripts inside of the newly-injected HTML
-					  .evalScripts()
-					  // Execute callback
-					  .each( callback, [res.responseText, status, res] );
-				else
-					callback.apply( self, [res.responseText, status, res] );
-			}
-		});
-		return this;
-	},
-	serialize: function() {
-		return jQuery.param( this );
-	},
-	evalScripts: function() {
-		return this.find("script").each(function(){
-			if ( this.src )
-				jQuery.getScript( this.src );
-			else
-				jQuery.globalEval( this.text || this.textContent || this.innerHTML || "" );
-		}).end();
-	}
-
-});
-
-// If IE is used, create a wrapper for the XMLHttpRequest object
-if ( !window.XMLHttpRequest )
-	XMLHttpRequest = function(){
-		return new ActiveXObject("Microsoft.XMLHTTP");
-	};
-
-// Attach a bunch of functions for handling common AJAX events
-
-jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
-	jQuery.fn[o] = function(f){
-		return this.bind(o, f);
-	};
-});
-
-jQuery.extend({
-	get: function( url, data, callback, type, ifModified ) {
-		// shift arguments if data argument was ommited
-		if ( jQuery.isFunction( data ) ) {
-			callback = data;
-			data = null;
-		}
-		
-		return jQuery.ajax({
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type,
-			ifModified: ifModified
-		});
-	},
-	getIfModified: function( url, data, callback, type ) {
-		return jQuery.get(url, data, callback, type, 1);
-	},
-	getScript: function( url, callback ) {
-		return jQuery.get(url, null, callback, "script");
-	},
-	getJSON: function( url, data, callback ) {
-		return jQuery.get(url, data, callback, "json");
-	},
-	post: function( url, data, callback, type ) {
-		if ( jQuery.isFunction( data ) ) {
-			callback = data;
-			data = {};
-		}
-
-		return jQuery.ajax({
-			type: "POST",
-			url: url,
-			data: data,
-			success: callback,
-			dataType: type
-		});
-	},
-
-	// timeout (ms)
-	//timeout: 0,
-	ajaxTimeout: function( timeout ) {
-		jQuery.ajaxSettings.timeout = timeout;
-	},
-	ajaxSetup: function( settings ) {
-		jQuery.extend( jQuery.ajaxSettings, settings );
-	},
-
-	ajaxSettings: {
-		global: true,
-		type: "GET",
-		timeout: 0,
-		contentType: "application/x-www-form-urlencoded",
-		processData: true,
-		async: true,
-		data: null
-	},
-	
-	// Last-Modified header cache for next request
-	lastModified: {},
-	ajax: function( s ) {
-		// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
-		s = jQuery.extend({}, jQuery.ajaxSettings, s);
-
-		// if data available
-		if ( s.data ) {
-			// convert data if not already a string
-			if (s.processData && typeof s.data != "string")
-    			s.data = jQuery.param(s.data);
-			// append data to url for get requests
-			if( s.type.toLowerCase() == "get" )
-				// "?" + data or "&" + data (in case there are already params)
-				s.url += ((s.url.indexOf("?") > -1) ? "&" : "?") + s.data;
-		}
-
-		// Watch for a new set of requests
-		if ( s.global && ! jQuery.active++ )
-			jQuery.event.trigger( "ajaxStart" );
-
-		var requestDone = false;
-
-		// Create the request object
-		var xml = new XMLHttpRequest();
-
-		// Open the socket
-		xml.open(s.type, s.url, s.async);
-
-		// Set the correct header, if data is being sent
-		if ( s.data )
-			xml.setRequestHeader("Content-Type", s.contentType);
-
-		// Set the If-Modified-Since header, if ifModified mode.
-		if ( s.ifModified )
-			xml.setRequestHeader("If-Modified-Since",
-				jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
-
-		// Set header so the called script knows that it's an XMLHttpRequest
-		xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-
-		// Make sure the browser sends the right content length
-		if ( xml.overrideMimeType )
-			xml.setRequestHeader("Connection", "close");
-			
-		// Allow custom headers/mimetypes
-		if( s.beforeSend )
-			s.beforeSend(xml);
-			
-		if ( s.global )
-		    jQuery.event.trigger("ajaxSend", [xml, s]);
-
-		// Wait for a response to come back
-		var onreadystatechange = function(isTimeout){
-			// The transfer is complete and the data is available, or the request timed out
-			if ( xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
-				requestDone = true;
-				var status;
-				try {
-					status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
-						s.ifModified && jQuery.httpNotModified( xml, s.url ) ? "notmodified" : "success" : "error";
-					// Make sure that the request was successful or notmodified
-					if ( status != "error" ) {
-						// Cache Last-Modified header, if ifModified mode.
-						var modRes;
-						try {
-							modRes = xml.getResponseHeader("Last-Modified");
-						} catch(e) {} // swallow exception thrown by FF if header is not available
-	
-						if ( s.ifModified && modRes )
-							jQuery.lastModified[s.url] = modRes;
-	
-						// process the data (runs the xml through httpData regardless of callback)
-						var data = jQuery.httpData( xml, s.dataType );
-	
-						// If a local callback was specified, fire it and pass it the data
-						if ( s.success )
-							s.success( data, status );
-	
-						// Fire the global callback
-						if( s.global )
-							jQuery.event.trigger( "ajaxSuccess", [xml, s] );
-					} else
-						jQuery.handleError(s, xml, status);
-				} catch(e) {
-					status = "error";
-					jQuery.handleError(s, xml, status, e);
-				}
-
-				// The request was completed
-				if( s.global )
-					jQuery.event.trigger( "ajaxComplete", [xml, s] );
-
-				// Handle the global AJAX counter
-				if ( s.global && ! --jQuery.active )
-					jQuery.event.trigger( "ajaxStop" );
-
-				// Process result
-				if ( s.complete )
-					s.complete(xml, status);
-
-				// Stop memory leaks
-				xml.onreadystatechange = function(){};
-				xml = null;
-			}
-		};
-		xml.onreadystatechange = onreadystatechange;
-
-		// Timeout checker
-		if ( s.timeout > 0 )
-			setTimeout(function(){
-				// Check to see if the request is still happening
-				if ( xml ) {
-					// Cancel the request
-					xml.abort();
-
-					if( !requestDone )
-						onreadystatechange( "timeout" );
-				}
-			}, s.timeout);
-			
-		// save non-leaking reference 
-		var xml2 = xml;
-
-		// Send the data
-		try {
-			xml2.send(s.data);
-		} catch(e) {
-			jQuery.handleError(s, xml, null, e);
-		}
-		
-		// firefox 1.5 doesn't fire statechange for sync requests
-		if ( !s.async )
-			onreadystatechange();
-		
-		// return XMLHttpRequest to allow aborting the request etc.
-		return xml2;
-	},
-
-	handleError: function( s, xml, status, e ) {
-		// If a local callback was specified, fire it
-		if ( s.error ) s.error( xml, status, e );
-
-		// Fire the global callback
-		if ( s.global )
-			jQuery.event.trigger( "ajaxError", [xml, s, e] );
-	},
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Determines if an XMLHttpRequest was successful or not
-	httpSuccess: function( r ) {
-		try {
-			return !r.status && location.protocol == "file:" ||
-				( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
-				jQuery.browser.safari && r.status == undefined;
-		} catch(e){}
-		return false;
-	},
-
-	// Determines if an XMLHttpRequest returns NotModified
-	httpNotModified: function( xml, url ) {
-		try {
-			var xmlRes = xml.getResponseHeader("Last-Modified");
-
-			// Firefox always returns 200. check Last-Modified date
-			return xml.status == 304 || xmlRes == jQuery.lastModified[url] ||
-				jQuery.browser.safari && xml.status == undefined;
-		} catch(e){}
-		return false;
-	},
-
-	/* Get the data out of an XMLHttpRequest.
-	 * Return parsed XML if content-type header is "xml" and type is "xml" or omitted,
-	 * otherwise return plain text.
-	 * (String) data - The type of data that you're expecting back,
-	 * (e.g. "xml", "html", "script")
-	 */
-	httpData: function( r, type ) {
-		var ct = r.getResponseHeader("content-type");
-		var data = !type && ct && ct.indexOf("xml") >= 0;
-		data = type == "xml" || data ? r.responseXML : r.responseText;
-
-		// If the type is "script", eval it in global context
-		if ( type == "script" )
-			jQuery.globalEval( data );
-
-		// Get the JavaScript object, if JSON is used.
-		if ( type == "json" )
-			eval( "data = " + data );
-
-		// evaluate scripts within html
-		if ( type == "html" )
-			jQuery("<div>").html(data).evalScripts();
-
-		return data;
-	},
-
-	// Serialize an array of form elements or a set of
-	// key/values into a query string
-	param: function( a ) {
-		var s = [];
-
-		// If an array was passed in, assume that it is an array
-		// of form elements
-		if ( a.constructor == Array || a.jquery )
-			// Serialize the form elements
-			jQuery.each( a, function(){
-				s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) );
-			});
-
-		// Otherwise, assume that it's an object of key/value pairs
-		else
-			// Serialize the key/values
-			for ( var j in a )
-				// If the value is an array then the key names need to be repeated
-				if ( a[j] && a[j].constructor == Array )
-					jQuery.each( a[j], function(){
-						s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) );
-					});
-				else
-					s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) );
-
-		// Return the resulting serialization
-		return s.join("&");
-	},
-	
-	// evalulates a script in global context
-	// not reliable for safari
-	globalEval: function( data ) {
-		if ( window.execScript )
-			window.execScript( data );
-		else if ( jQuery.browser.safari )
-			// safari doesn't provide a synchronous global eval
-			window.setTimeout( data, 0 );
-		else
-			eval.call( window, data );
-	}
-
-});
-}
diff --git a/lib/web/extjs/adapter/prototype/effects.js b/lib/web/extjs/adapter/prototype/effects.js
deleted file mode 100644
index 3583fe80c91b804a64ef9073cbbdc15082339cd4..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/prototype/effects.js
+++ /dev/null
@@ -1,1098 +0,0 @@
-/*
- * Ext JS Library 1.0 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-// script.aculo.us effects.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/ 
-
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';
-  if(this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if(this.slice(0,1) == '#') {  
-      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if(this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return(color.length==7 ? color : (arguments[0] || this));  
-}
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
-  }).flatten().join('');
-}
-
-Element.collectTextNodesIgnoreClass = function(element, className) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
-        Element.collectTextNodesIgnoreClass(node, className) : ''));
-  }).flatten().join('');
-}
-
-Element.setContentZoom = function(element, percent) {
-  element = $(element);  
-  element.setStyle({fontSize: (percent/100) + 'em'});   
-  if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
-  return element;
-}
-
-Element.getOpacity = function(element){
-  return $(element).getStyle('opacity');
-}
-
-Element.setOpacity = function(element, value){
-  return $(element).setStyle({opacity:value});
-}
-
-Element.getInlineOpacity = function(element){
-  return $(element).style.opacity || '';
-}
-
-Element.forceRerendering = function(element) {
-  try {
-    element = $(element);
-    var n = document.createTextNode(' ');
-    element.appendChild(n);
-    element.removeChild(n);
-  } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Array.prototype.call = function() {
-  var args = arguments;
-  this.each(function(f){ f.apply(this, args) });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  _elementDoesNotExistError: {
-    name: 'ElementDoesNotExistError',
-    message: 'The specified DOM element does not exist, but is required for this effect to operate'
-  },
-  tagifyText: function(element) {
-    if(typeof Builder == 'undefined')
-      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
-      
-    var tagifyStyle = 'position:relative';
-    if(/MSIE/.test(navigator.userAgent) && !window.opera) tagifyStyle += ';zoom:1';
-    
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if(child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            Builder.node('span',{style: tagifyStyle},
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if(((typeof element == 'object') || 
-        (typeof element == 'function')) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || {});
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  },
-  PAIRS: {
-    'slide':  ['SlideDown','SlideUp'],
-    'blind':  ['BlindDown','BlindUp'],
-    'appear': ['Appear','Fade']
-  },
-  toggle: function(element, effect) {
-    element = $(element);
-    effect = (effect || 'appear').toLowerCase();
-    var options = Object.extend({
-      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
-    }, arguments[2] || {});
-    Effect[element.visible() ? 
-      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
-  }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {
-  linear: Prototype.K,
-  sinoidal: function(pos) {
-    return (-Math.cos(pos*Math.PI)/2) + 0.5;
-  },
-  reverse: function(pos) {
-    return 1-pos;
-  },
-  flicker: function(pos) {
-    return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-  },
-  wobble: function(pos) {
-    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-  },
-  pulse: function(pos, pulses) { 
-    pulses = pulses || 5; 
-    return (
-      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
-            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
-        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
-      );
-  },
-  none: function(pos) {
-    return 0;
-  },
-  full: function(pos) {
-    return 1;
-  }
-};
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
-  initialize: function() {
-    this.effects  = [];
-    this.interval = null;
-  },
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    var position = (typeof effect.options.queue == 'string') ? 
-      effect.options.queue : effect.options.queue.position;
-    
-    switch(position) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'with-last':
-        timestamp = this.effects.pluck('startOn').max() || timestamp;
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-
-    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
-      this.effects.push(effect);
-    
-    if(!this.interval) 
-      this.interval = setInterval(this.loop.bind(this), 15);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if(this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    for(var i=0, len=this.effects.length;i<len;i++) 
-      if(this.effects[i]) this.effects[i].loop(timePos);
-  }
-});
-
-Effect.Queues = {
-  instances: $H(),
-  get: function(queueName) {
-    if(typeof queueName != 'string') return queueName;
-    
-    if(!this.instances[queueName])
-      this.instances[queueName] = new Effect.ScopedQueue();
-      
-    return this.instances[queueName];
-  }
-}
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.DefaultOptions = {
-  transition: Effect.Transitions.sinoidal,
-  duration:   1.0,   // seconds
-  fps:        60.0,  // max. 60fps due to Effect.Queue implementation
-  sync:       false, // true for combining
-  from:       0.0,
-  to:         1.0,
-  delay:      0.0,
-  queue:      'parallel'
-}
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
-  position: null,
-  start: function(options) {
-    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn + (this.options.duration*1000);
-    this.event('beforeStart');
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).add(this);
-  },
-  loop: function(timePos) {
-    if(timePos >= this.startOn) {
-      if(timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if(this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / (this.finishOn - this.startOn);
-      var frame = Math.round(pos * this.options.fps * this.options.duration);
-      if(frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  render: function(pos) {
-    if(this.state == 'idle') {
-      this.state = 'running';
-      this.event('beforeSetup');
-      if(this.setup) this.setup();
-      this.event('afterSetup');
-    }
-    if(this.state == 'running') {
-      if(this.options.transition) pos = this.options.transition(pos);
-      pos *= (this.options.to-this.options.from);
-      pos += this.options.from;
-      this.position = pos;
-      this.event('beforeUpdate');
-      if(this.update) this.update(pos);
-      this.event('afterUpdate');
-    }
-  },
-  cancel: function() {
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if(this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    var data = $H();
-    for(property in this)
-      if(typeof this[property] != 'function') data[property] = this[property];
-    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if(effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Event = Class.create();
-Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
-  initialize: function() {
-    var options = Object.extend({
-      duration: 0
-    }, arguments[0] || {});
-    this.start(options);
-  },
-  update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    // make this work on IE on elements without 'layout'
-    if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
-      this.element.setStyle({zoom: 1});
-    var options = Object.extend({
-      from: this.element.getOpacity() || 0.0,
-      to:   1.0
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  update: function(position) {
-    this.element.setOpacity(position);
-  }
-});
-
-Effect.Move = Class.create();
-Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      x:    0,
-      y:    0,
-      mode: 'relative'
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Bug in Opera: Opera returns the "real" position of a static element or
-    // relative element that does not have top/left explicitly set.
-    // ==> Always set top and left for position relative elements in your stylesheets 
-    // (to 0 if you do not need them) 
-    this.element.makePositioned();
-    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
-    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
-    if(this.options.mode == 'absolute') {
-      // absolute movement, so we need to calc deltaX and deltaY
-      this.options.x = this.options.x - this.originalLeft;
-      this.options.y = this.options.y - this.originalTop;
-    }
-  },
-  update: function(position) {
-    this.element.setStyle({
-      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
-      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
-    });
-  }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
-  return new Effect.Move(element, 
-    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
-};
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
-  initialize: function(element, percent) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || {});
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = this.element.getStyle('position');
-    
-    this.originalStyle = {};
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = this.element.getStyle('font-size') || '100%';
-    ['em','px','%','pt'].each( function(fontSizeType) {
-      if(fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if(this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if(/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if(!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if(this.options.scaleContent && this.fontSize)
-      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = {};
-    if(this.options.scaleX) d.width = Math.round(width) + 'px';
-    if(this.options.scaleY) d.height = Math.round(height) + 'px';
-    if(this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if(this.elementPositioning == 'absolute') {
-        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if(this.options.scaleY) d.top = -topd + 'px';
-        if(this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    this.element.setStyle(d);
-  }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = {};
-    if (!this.options.keepBackgroundImage) {
-      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
-      this.element.setStyle({backgroundImage: 'none'});
-    }
-    if(!this.options.endcolor)
-      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
-    if(!this.options.restorecolor)
-      this.options.restorecolor = this.element.getStyle('background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    this.element.setStyle(Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    this.start(arguments[1] || {});
-  },
-  setup: function() {
-    Position.prepare();
-    var offsets = Position.cumulativeOffset(this.element);
-    if(this.options.offset) offsets[1] += this.options.offset;
-    var max = window.innerHeight ? 
-      window.height - window.innerHeight :
-      document.body.scrollHeight - 
-        (document.documentElement.clientHeight ? 
-          document.documentElement.clientHeight : document.body.clientHeight);
-    this.scrollStart = Position.deltaY;
-    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
-  },
-  update: function(position) {
-    Position.prepare();
-    window.scrollTo(Position.deltaX, 
-      this.scrollStart + (position*this.delta));
-  }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  var options = Object.extend({
-  from: element.getOpacity() || 1.0,
-  to:   0.0,
-  afterFinishInternal: function(effect) { 
-    if(effect.options.to!=0) return;
-    effect.element.hide().setStyle({opacity: oldOpacity}); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
-  element = $(element);
-  var options = Object.extend({
-  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
-  to:   1.0,
-  // force Safari to render floated elements properly
-  afterFinishInternal: function(effect) {
-    effect.element.forceRerendering();
-  },
-  beforeSetup: function(effect) {
-    effect.element.setOpacity(effect.options.from).show(); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { 
-    opacity: element.getInlineOpacity(), 
-    position: element.getStyle('position'),
-    top:  element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height
-  };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) {
-        Position.absolutize(effect.effects[0].element)
-      },
-      afterFinishInternal: function(effect) {
-         effect.effects[0].element.hide().setStyle(oldStyle); }
-     }, arguments[1] || {})
-   );
-}
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  element.makeClipping();
-  return new Effect.Scale(element, 0,
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping();
-      } 
-    }, arguments[1] || {})
-  );
-}
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false,
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping();
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  return new Effect.Appear(element, Object.extend({
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { 
-          effect.element.makePositioned().makeClipping();
-        },
-        afterFinishInternal: function(effect) {
-          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
-        }
-      })
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left'),
-    opacity: element.getInlineOpacity() };
-  return new Effect.Parallel(
-    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) {
-          effect.effects[0].element.makePositioned(); 
-        },
-        afterFinishInternal: function(effect) {
-          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
-        } 
-      }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left') };
-    return new Effect.Move(element, 
-      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-        effect.element.undoPositioned().setStyle(oldStyle);
-  }}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
-  element = $(element).cleanWhitespace();
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: window.opera ? 0 : 1,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
-    }, arguments[1] || {})
-  );
-}
-
-Effect.SlideUp = function(element) {
-  element = $(element).cleanWhitespace();
-  var oldInnerBottom = element.down().getStyle('bottom');
-  return new Effect.Scale(element, window.opera ? 0 : 1,
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    restoreAfterFinish: true,
-    beforeStartInternal: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().show();
-    },  
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' });
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
-      effect.element.down().undoPositioned();
-    }
-   }, arguments[1] || {})
-  );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, { 
-    restoreAfterFinish: true,
-    beforeSetup: function(effect) {
-      effect.element.makeClipping(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping(); 
-    }
-  });
-}
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Move(element, {
-    x: initialMoveX,
-    y: initialMoveY,
-    duration: 0.01, 
-    beforeSetup: function(effect) {
-      effect.element.hide().makeClipping().makePositioned();
-    },
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) {
-               effect.effects[0].element.setStyle({height: '0px'}).show(); 
-             },
-             afterFinishInternal: function(effect) {
-               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
-             }
-           }, options)
-      )
-    }
-  });
-}
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) {
-           effect.effects[0].element.makePositioned().makeClipping(); 
-         },
-         afterFinishInternal: function(effect) {
-           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
-       }, options)
-  );
-}
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || {};
-  var oldOpacity = element.getInlineOpacity();
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 2.0, from: 0,
-      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  element.makeClipping();
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping().setStyle(oldStyle);
-      } });
-  }}, arguments[1] || {}));
-};
-
-Effect.Morph = Class.create();
-Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      style: {}
-    }, arguments[1] || {});
-    if (typeof options.style == 'string') {
-      if(options.style.indexOf(':') == -1) {
-        var cssText = '', selector = '.' + options.style;
-        $A(document.styleSheets).reverse().each(function(styleSheet) {
-          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
-          else if (styleSheet.rules) cssRules = styleSheet.rules;
-          $A(cssRules).reverse().each(function(rule) {
-            if (selector == rule.selectorText) {
-              cssText = rule.style.cssText;
-              throw $break;
-            }
-          });
-          if (cssText) throw $break;
-        });
-        this.style = cssText.parseStyle();
-        options.afterFinishInternal = function(effect){
-          effect.element.addClassName(effect.options.style);
-          effect.transforms.each(function(transform) {
-            if(transform.style != 'opacity')
-              effect.element.style[transform.style.camelize()] = '';
-          });
-        }
-      } else this.style = options.style.parseStyle();
-    } else this.style = $H(options.style)
-    this.start(options);
-  },
-  setup: function(){
-    function parseColor(color){
-      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
-      color = color.parseColor();
-      return $R(0,2).map(function(i){
-        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
-      });
-    }
-    this.transforms = this.style.map(function(pair){
-      var property = pair[0].underscore().dasherize(), value = pair[1], unit = null;
-
-      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
-        value = value.parseColor();
-        unit  = 'color';
-      } else if(property == 'opacity') {
-        value = parseFloat(value);
-        if(/MSIE/.test(navigator.userAgent) && !window.opera && (!this.element.currentStyle.hasLayout))
-          this.element.setStyle({zoom: 1});
-      } else if(Element.CSS_LENGTH.test(value)) 
-        var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/),
-          value = parseFloat(components[1]), unit = (components.length == 3) ? components[2] : null;
-
-      var originalValue = this.element.getStyle(property);
-      return $H({ 
-        style: property, 
-        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
-        targetValue: unit=='color' ? parseColor(value) : value,
-        unit: unit
-      });
-    }.bind(this)).reject(function(transform){
-      return (
-        (transform.originalValue == transform.targetValue) ||
-        (
-          transform.unit != 'color' &&
-          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
-        )
-      )
-    });
-  },
-  update: function(position) {
-    var style = $H(), value = null;
-    this.transforms.each(function(transform){
-      value = transform.unit=='color' ?
-        $R(0,2).inject('#',function(m,v,i){
-          return m+(Math.round(transform.originalValue[i]+
-            (transform.targetValue[i] - transform.originalValue[i])*position)).toColorPart() }) : 
-        transform.originalValue + Math.round(
-          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
-      style[transform.style] = value;
-    });
-    this.element.setStyle(style);
-  }
-});
-
-Effect.Transform = Class.create();
-Object.extend(Effect.Transform.prototype, {
-  initialize: function(tracks){
-    this.tracks  = [];
-    this.options = arguments[1] || {};
-    this.addTracks(tracks);
-  },
-  addTracks: function(tracks){
-    tracks.each(function(track){
-      var data = $H(track).values().first();
-      this.tracks.push($H({
-        ids:     $H(track).keys().first(),
-        effect:  Effect.Morph,
-        options: { style: data }
-      }));
-    }.bind(this));
-    return this;
-  },
-  play: function(){
-    return new Effect.Parallel(
-      this.tracks.map(function(track){
-        var elements = [$(track.ids) || $$(track.ids)].flatten();
-        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
-      }).flatten(),
-      this.options
-    );
-  }
-});
-
-Element.CSS_PROPERTIES = $w(
-  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
-  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
-  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
-  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
-  'fontSize fontWeight height left letterSpacing lineHeight ' +
-  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
-  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
-  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
-  'right textIndent top width wordSpacing zIndex');
-  
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.prototype.parseStyle = function(){
-  var element = Element.extend(document.createElement('div'));
-  element.innerHTML = '<div style="' + this + '"></div>';
-  var style = element.down().style, styleRules = $H();
-  
-  Element.CSS_PROPERTIES.each(function(property){
-    if(style[property]) styleRules[property] = style[property]; 
-  });
-  if(/MSIE/.test(navigator.userAgent) && !window.opera && this.indexOf('opacity') > -1) {
-    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
-  }
-  return styleRules;
-};
-
-Element.morph = function(element, style) {
-  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
-  return element;
-};
-
-['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
- 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
-  function(f) { Element.Methods[f] = Element[f]; }
-);
-
-Element.Methods.visualEffect = function(element, effect, options) {
-  s = effect.gsub(/_/, '-').camelize();
-  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
-  new Effect[effect_class](element, options);
-  return $(element);
-};
-
-Element.addMethods();
\ No newline at end of file
diff --git a/lib/web/extjs/adapter/prototype/ext-prototype-adapter.js b/lib/web/extjs/adapter/prototype/ext-prototype-adapter.js
deleted file mode 100644
index 8d5761c9a6e924e341c891539833dc1074d63ffb..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/prototype/ext-prototype-adapter.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,defaults){if(defaults){Ext.apply(o,defaults);}
-if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}
-return o;};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isIE=ua.indexOf("msie")>-1,isIE7=ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
-Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}
-return o;},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o);});return;}
-var cache={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s);}
-cache[s].on(parts[1],o[b]);}}
-cache=null;},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};return function(sb,sp,overrides){if(typeof sp=='object'){overrides=sp;sp=sb;sb=function(){sp.apply(this,arguments);};}
-var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}
-sb.override=function(o){Ext.override(sb,o);};sbp.override=io;sbp.__extcls=sb;Ext.override(sb,overrides);return sb;};}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},urlEncode:function(o){if(!o){return"";}
-var buf=[];for(var key in o){var ov=o[key];var type=typeof ov;if(type=='undefined'){buf.push(encodeURIComponent(key),"=&");}else if(type!="function"&&type!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}}
-buf.pop();return buf.join("");},urlDecode:function(string,overwrite){if(!string||!string.length){return{};}
-var obj={};var pairs=string.split('&');var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split('=');name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value;}else if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value);}else{obj[name].push(value);}}else{obj[name]=value;}}
-return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
-for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
-return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
-return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}
-if(typeof as.purgeListeners=='function'){as.purgeListeners();}
-if(typeof as.destroy=='function'){as.destroy();}}}},isOpera:isOpera,isSafari:isSafari,isIE:isIE,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isWindows:isWindows,isMac:isMac,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
-return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
-fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){fcn.target=this;fcn.method=method;if(fcn.apply(scope||this||window,arguments)===false){return;}
-return method.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(string){return string.replace(/('|\\)/g,"\\$1");},leftPad:function(val,size,ch){var result=new String(val);if(ch===null||ch===undefined||ch===''){ch=" ";}
-while(result.length<size){result=ch+result;}
-return result;},format:function(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}});String.prototype.toggle=function(value,other){return this==value?other:value;};Ext.applyIf(Number.prototype,{constrain:function(min,max){return Math.min(Math.max(this,min),max);}});Ext.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
-return-1;},remove:function(o){var index=this.indexOf(o);if(index!=-1){this.splice(index,1);}}});Date.prototype.getElapsed=function(date){return Math.abs((date||new Date()).getTime()-this.getTime());};
-
-(function(){var libFlyweight;Ext.lib.Dom={getViewWidth:function(full){return full?this.getDocumentWidth():this.getViewportWidth();},getViewHeight:function(full){return full?this.getDocumentHeight():this.getViewportHeight();},getDocumentHeight:function(){var scrollHeight=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(scrollHeight,this.getViewportHeight());},getDocumentWidth:function(){var scrollWidth=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(scrollWidth,this.getViewportWidth());},getViewportHeight:function(){var height=self.innerHeight;var mode=document.compatMode;if((mode||Ext.isIE)&&!Ext.isOpera){height=(mode=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight;}
-return height;},getViewportWidth:function(){var width=self.innerWidth;var mode=document.compatMode;if(mode||Ext.isIE){width=(mode=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth;}
-return width;},isAncestor:function(p,c){p=Ext.getDom(p);c=Ext.getDom(c);if(!p||!c){return false;}
-if(p.contains&&!Ext.isSafari){return p.contains(c);}else if(p.compareDocumentPosition){return!!(p.compareDocumentPosition(c)&16);}else{var parent=c.parentNode;while(parent){if(parent==p){return true;}
-else if(!parent.tagName||parent.tagName.toUpperCase()=="HTML"){return false;}
-parent=parent.parentNode;}
-return false;}},getRegion:function(el){return Ext.lib.Region.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,scroll,bd=document.body;el=Ext.getDom(el);if(el.getBoundingClientRect){b=el.getBoundingClientRect();scroll=fly(document).getScroll();return[b.left+scroll.left,b.top+scroll.top];}else{var x=el.offsetLeft,y=el.offsetTop;p=el.offsetParent;var hasAbsolute=false;if(p!=el){while(p){x+=p.offsetLeft;y+=p.offsetTop;if(Ext.isSafari&&!hasAbsolute&&fly(p).getStyle("position")=="absolute"){hasAbsolute=true;}
-if(Ext.isGecko){pe=fly(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
-p=p.offsetParent;}}
-if(Ext.isSafari&&(hasAbsolute||fly(el).getStyle("position")=="absolute")){x-=bd.offsetLeft;y-=bd.offsetTop;}}
-p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(Ext.isOpera&&p.tagName!='TR'&&fly(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
-p=p.parentNode;}
-return[x,y];},setXY:function(el,xy){el=Ext.fly(el,'_setXY');el.position();var pts=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=pts.left+"px";}
-if(xy[1]!==false){el.dom.style.top=pts.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};Ext.lib.Event={getPageX:function(e){return Event.pointerX(e.browserEvent||e);},getPageY:function(e){return Event.pointerY(e.browserEvent||e);},getXY:function(e){e=e.browserEvent||e;return[Event.pointerX(e),Event.pointerY(e)];},getTarget:function(e){return Event.element(e.browserEvent||e);},resolveTextNode:function(node){if(node&&3==node.nodeType){return node.parentNode;}else{return node;}},getRelatedTarget:function(ev){ev=ev.browserEvent||ev;var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}
-return this.resolveTextNode(t);},on:function(el,eventName,fn){Event.observe(el,eventName,fn,false);},un:function(el,eventName,fn){Event.stopObserving(el,eventName,fn,false);},purgeElement:function(el){},preventDefault:function(e){e=e.browserEvent||e;if(e.preventDefault){e.preventDefault();}else{e.returnValue=false;}},stopPropagation:function(e){e=e.browserEvent||e;if(e.stopPropagation){e.stopPropagation();}else{e.cancelBubble=true;}},stopEvent:function(e){Event.stop(e.browserEvent||e);},onAvailable:function(id,fn,scope){var start=new Date(),iid;var f=function(){if(start.getElapsed()>10000){clearInterval(iid);}
-var el=document.getElementById(id);if(el){clearInterval(iid);fn.call(scope||window,el);}};iid=setInterval(f,50);}};Ext.lib.Ajax=function(){var createSuccess=function(cb){return cb.success?function(xhr){cb.success.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}:Ext.emptyFn;};var createFailure=function(cb){return cb.failure?function(xhr){cb.failure.call(cb.scope||window,{responseText:xhr.responseText,responseXML:xhr.responseXML,argument:cb.argument});}:Ext.emptyFn;};return{request:function(method,uri,cb,data){new Ajax.Request(uri,{method:method,parameters:data||'',timeout:cb.timeout,onSuccess:createSuccess(cb),onFailure:createFailure(cb)});},formRequest:function(form,uri,cb,data,isUpload,sslUri){new Ajax.Request(uri,{method:Ext.getDom(form).method||'POST',parameters:Form.serialize(form)+(data?'&'+data:''),timeout:cb.timeout,onSuccess:createSuccess(cb),onFailure:createFailure(cb)});},isCallInProgress:function(trans){return false;},abort:function(trans){return false;},serializeForm:function(form){return Form.serialize(form.dom||form);}};}();Ext.lib.Anim=function(){var easings={easeOut:function(pos){return 1-Math.pow(1-pos,2);},easeIn:function(pos){return 1-Math.pow(1-pos,2);}};var createAnim=function(cb,scope){return{stop:function(skipToLast){this.effect.cancel();},isAnimated:function(){return this.effect.state=='running';},proxyCallback:function(){Ext.callback(cb,scope);}};};return{scroll:function(el,args,duration,easing,cb,scope){var anim=createAnim(cb,scope);el=Ext.getDom(el);el.scrollLeft=args.to[0];el.scrollTop=args.to[1];anim.proxyCallback();return anim;},motion:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope);},color:function(el,args,duration,easing,cb,scope){return this.run(el,args,duration,easing,cb,scope);},run:function(el,args,duration,easing,cb,scope,type){var o={};for(var k in args){switch(k){case'points':var by,pts,e=Ext.fly(el,'_animrun');e.position();if(by=args.points.by){var xy=e.getXY();pts=e.translatePoints([xy[0]+by[0],xy[1]+by[1]]);}else{pts=e.translatePoints(args.points.to);}
-o.left=pts.left+'px';o.top=pts.top+'px';break;case'width':o.width=args.width.to+'px';break;case'height':o.height=args.height.to+'px';break;case'opacity':o.opacity=String(args.opacity.to);break;default:o[k]=String(args[k].to);break;}}
-var anim=createAnim(cb,scope);anim.effect=new Effect.Morph(Ext.id(el),{duration:duration,afterFinish:anim.proxyCallback,transition:easings[easing]||Effect.Transitions.linear,style:o});return anim;}};}();function fly(el){if(!libFlyweight){libFlyweight=new Ext.Element.Flyweight();}
-libFlyweight.dom=el;return libFlyweight;}
-Ext.lib.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};Ext.lib.Region.prototype={contains:function(region){return(region.left>=this.left&&region.right<=this.right&&region.top>=this.top&&region.bottom<=this.bottom);},getArea:function(){return((this.bottom-this.top)*(this.right-this.left));},intersect:function(region){var t=Math.max(this.top,region.top);var r=Math.min(this.right,region.right);var b=Math.min(this.bottom,region.bottom);var l=Math.max(this.left,region.left);if(b>=t&&r>=l){return new Ext.lib.Region(t,r,b,l);}else{return null;}},union:function(region){var t=Math.min(this.top,region.top);var r=Math.max(this.right,region.right);var b=Math.max(this.bottom,region.bottom);var l=Math.min(this.left,region.left);return new Ext.lib.Region(t,r,b,l);},adjust:function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;}};Ext.lib.Region.getRegion=function(el){var p=Ext.lib.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new Ext.lib.Region(t,r,b,l);};Ext.lib.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}
-this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){Event.observe(window,"unload",function(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;});}})();
diff --git a/lib/web/extjs/adapter/prototype/prototype.js b/lib/web/extjs/adapter/prototype/prototype.js
deleted file mode 100644
index e6597861ab2e97811d2a82123258d0a8d2c7e819..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/prototype/prototype.js
+++ /dev/null
@@ -1,2523 +0,0 @@
-/*
- * Ext JS Library 1.0 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/*  Prototype JavaScript framework, version 1.5.0
- *  (c) 2005-2007 Sam Stephenson
- *
- *  Prototype is freely distributable under the terms of an MIT-style license.
- *  For details, see the Prototype web site: http://prototype.conio.net/
- *
-/*--------------------------------------------------------------------------*/
-
-var Prototype = {
-  Version: '1.5.0',
-  BrowserFeatures: {
-    XPath: !!document.evaluate
-  },
-
-  ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
-  emptyFunction: function() {},
-  K: function(x) { return x }
-}
-
-var Class = {
-  create: function() {
-    return function() {
-      this.initialize.apply(this, arguments);
-    }
-  }
-}
-
-var Abstract = new Object();
-
-Object.extend = function(destination, source) {
-  for (var property in source) {
-    destination[property] = source[property];
-  }
-  return destination;
-}
-
-Object.extend(Object, {
-  inspect: function(object) {
-    try {
-      if (object === undefined) return 'undefined';
-      if (object === null) return 'null';
-      return object.inspect ? object.inspect() : object.toString();
-    } catch (e) {
-      if (e instanceof RangeError) return '...';
-      throw e;
-    }
-  },
-
-  keys: function(object) {
-    var keys = [];
-    for (var property in object)
-      keys.push(property);
-    return keys;
-  },
-
-  values: function(object) {
-    var values = [];
-    for (var property in object)
-      values.push(object[property]);
-    return values;
-  },
-
-  clone: function(object) {
-    return Object.extend({}, object);
-  }
-});
-
-Function.prototype.bind = function() {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function() {
-    return __method.apply(object, args.concat($A(arguments)));
-  }
-}
-
-Function.prototype.bindAsEventListener = function(object) {
-  var __method = this, args = $A(arguments), object = args.shift();
-  return function(event) {
-    return __method.apply(object, [( event || window.event)].concat(args).concat($A(arguments)));
-  }
-}
-
-Object.extend(Number.prototype, {
-  toColorPart: function() {
-    var digits = this.toString(16);
-    if (this < 16) return '0' + digits;
-    return digits;
-  },
-
-  succ: function() {
-    return this + 1;
-  },
-
-  times: function(iterator) {
-    $R(0, this, true).each(iterator);
-    return this;
-  }
-});
-
-var Try = {
-  these: function() {
-    var returnValue;
-
-    for (var i = 0, length = arguments.length; i < length; i++) {
-      var lambda = arguments[i];
-      try {
-        returnValue = lambda();
-        break;
-      } catch (e) {}
-    }
-
-    return returnValue;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-var PeriodicalExecuter = Class.create();
-PeriodicalExecuter.prototype = {
-  initialize: function(callback, frequency) {
-    this.callback = callback;
-    this.frequency = frequency;
-    this.currentlyExecuting = false;
-
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  stop: function() {
-    if (!this.timer) return;
-    clearInterval(this.timer);
-    this.timer = null;
-  },
-
-  onTimerEvent: function() {
-    if (!this.currentlyExecuting) {
-      try {
-        this.currentlyExecuting = true;
-        this.callback(this);
-      } finally {
-        this.currentlyExecuting = false;
-      }
-    }
-  }
-}
-String.interpret = function(value){
-  return value == null ? '' : String(value);
-}
-
-Object.extend(String.prototype, {
-  gsub: function(pattern, replacement) {
-    var result = '', source = this, match;
-    replacement = arguments.callee.prepareReplacement(replacement);
-
-    while (source.length > 0) {
-      if (match = source.match(pattern)) {
-        result += source.slice(0, match.index);
-        result += String.interpret(replacement(match));
-        source  = source.slice(match.index + match[0].length);
-      } else {
-        result += source, source = '';
-      }
-    }
-    return result;
-  },
-
-  sub: function(pattern, replacement, count) {
-    replacement = this.gsub.prepareReplacement(replacement);
-    count = count === undefined ? 1 : count;
-
-    return this.gsub(pattern, function(match) {
-      if (--count < 0) return match[0];
-      return replacement(match);
-    });
-  },
-
-  scan: function(pattern, iterator) {
-    this.gsub(pattern, iterator);
-    return this;
-  },
-
-  truncate: function(length, truncation) {
-    length = length || 30;
-    truncation = truncation === undefined ? '...' : truncation;
-    return this.length > length ?
-      this.slice(0, length - truncation.length) + truncation : this;
-  },
-
-  strip: function() {
-    return this.replace(/^\s+/, '').replace(/\s+$/, '');
-  },
-
-  stripTags: function() {
-    return this.replace(/<\/?[^>]+>/gi, '');
-  },
-
-  stripScripts: function() {
-    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
-  },
-
-  extractScripts: function() {
-    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
-    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
-    return (this.match(matchAll) || []).map(function(scriptTag) {
-      return (scriptTag.match(matchOne) || ['', ''])[1];
-    });
-  },
-
-  evalScripts: function() {
-    return this.extractScripts().map(function(script) { return eval(script) });
-  },
-
-  escapeHTML: function() {
-    var div = document.createElement('div');
-    var text = document.createTextNode(this);
-    div.appendChild(text);
-    return div.innerHTML;
-  },
-
-  unescapeHTML: function() {
-    var div = document.createElement('div');
-    div.innerHTML = this.stripTags();
-    return div.childNodes[0] ? (div.childNodes.length > 1 ?
-      $A(div.childNodes).inject('',function(memo,node){ return memo+node.nodeValue }) :
-      div.childNodes[0].nodeValue) : '';
-  },
-
-  toQueryParams: function(separator) {
-    var match = this.strip().match(/([^?#]*)(#.*)?$/);
-    if (!match) return {};
-
-    return match[1].split(separator || '&').inject({}, function(hash, pair) {
-      if ((pair = pair.split('='))[0]) {
-        var name = decodeURIComponent(pair[0]);
-        var value = pair[1] ? decodeURIComponent(pair[1]) : undefined;
-
-        if (hash[name] !== undefined) {
-          if (hash[name].constructor != Array)
-            hash[name] = [hash[name]];
-          if (value) hash[name].push(value);
-        }
-        else hash[name] = value;
-      }
-      return hash;
-    });
-  },
-
-  toArray: function() {
-    return this.split('');
-  },
-
-  succ: function() {
-    return this.slice(0, this.length - 1) +
-      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
-  },
-
-  camelize: function() {
-    var parts = this.split('-'), len = parts.length;
-    if (len == 1) return parts[0];
-
-    var camelized = this.charAt(0) == '-'
-      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
-      : parts[0];
-
-    for (var i = 1; i < len; i++)
-      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
-
-    return camelized;
-  },
-
-  capitalize: function(){
-    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
-  },
-
-  underscore: function() {
-    return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
-  },
-
-  dasherize: function() {
-    return this.gsub(/_/,'-');
-  },
-
-  inspect: function(useDoubleQuotes) {
-    var escapedString = this.replace(/\\/g, '\\\\');
-    if (useDoubleQuotes)
-      return '"' + escapedString.replace(/"/g, '\\"') + '"';
-    else
-      return "'" + escapedString.replace(/'/g, '\\\'') + "'";
-  }
-});
-
-String.prototype.gsub.prepareReplacement = function(replacement) {
-  if (typeof replacement == 'function') return replacement;
-  var template = new Template(replacement);
-  return function(match) { return template.evaluate(match) };
-}
-
-String.prototype.parseQuery = String.prototype.toQueryParams;
-
-var Template = Class.create();
-Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
-Template.prototype = {
-  initialize: function(template, pattern) {
-    this.template = template.toString();
-    this.pattern  = pattern || Template.Pattern;
-  },
-
-  evaluate: function(object) {
-    return this.template.gsub(this.pattern, function(match) {
-      var before = match[1];
-      if (before == '\\') return match[2];
-      return before + String.interpret(object[match[3]]);
-    });
-  }
-}
-
-var $break    = new Object();
-var $continue = new Object();
-
-var Enumerable = {
-  each: function(iterator) {
-    var index = 0;
-    try {
-      this._each(function(value) {
-        try {
-          iterator(value, index++);
-        } catch (e) {
-          if (e != $continue) throw e;
-        }
-      });
-    } catch (e) {
-      if (e != $break) throw e;
-    }
-    return this;
-  },
-
-  eachSlice: function(number, iterator) {
-    var index = -number, slices = [], array = this.toArray();
-    while ((index += number) < array.length)
-      slices.push(array.slice(index, index+number));
-    return slices.map(iterator);
-  },
-
-  all: function(iterator) {
-    var result = true;
-    this.each(function(value, index) {
-      result = result && !!(iterator || Prototype.K)(value, index);
-      if (!result) throw $break;
-    });
-    return result;
-  },
-
-  any: function(iterator) {
-    var result = false;
-    this.each(function(value, index) {
-      if (result = !!(iterator || Prototype.K)(value, index))
-        throw $break;
-    });
-    return result;
-  },
-
-  collect: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push((iterator || Prototype.K)(value, index));
-    });
-    return results;
-  },
-
-  detect: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      if (iterator(value, index)) {
-        result = value;
-        throw $break;
-      }
-    });
-    return result;
-  },
-
-  findAll: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  grep: function(pattern, iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      var stringValue = value.toString();
-      if (stringValue.match(pattern))
-        results.push((iterator || Prototype.K)(value, index));
-    })
-    return results;
-  },
-
-  include: function(object) {
-    var found = false;
-    this.each(function(value) {
-      if (value == object) {
-        found = true;
-        throw $break;
-      }
-    });
-    return found;
-  },
-
-  inGroupsOf: function(number, fillWith) {
-    fillWith = fillWith === undefined ? null : fillWith;
-    return this.eachSlice(number, function(slice) {
-      while(slice.length < number) slice.push(fillWith);
-      return slice;
-    });
-  },
-
-  inject: function(memo, iterator) {
-    this.each(function(value, index) {
-      memo = iterator(memo, value, index);
-    });
-    return memo;
-  },
-
-  invoke: function(method) {
-    var args = $A(arguments).slice(1);
-    return this.map(function(value) {
-      return value[method].apply(value, args);
-    });
-  },
-
-  max: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value >= result)
-        result = value;
-    });
-    return result;
-  },
-
-  min: function(iterator) {
-    var result;
-    this.each(function(value, index) {
-      value = (iterator || Prototype.K)(value, index);
-      if (result == undefined || value < result)
-        result = value;
-    });
-    return result;
-  },
-
-  partition: function(iterator) {
-    var trues = [], falses = [];
-    this.each(function(value, index) {
-      ((iterator || Prototype.K)(value, index) ?
-        trues : falses).push(value);
-    });
-    return [trues, falses];
-  },
-
-  pluck: function(property) {
-    var results = [];
-    this.each(function(value, index) {
-      results.push(value[property]);
-    });
-    return results;
-  },
-
-  reject: function(iterator) {
-    var results = [];
-    this.each(function(value, index) {
-      if (!iterator(value, index))
-        results.push(value);
-    });
-    return results;
-  },
-
-  sortBy: function(iterator) {
-    return this.map(function(value, index) {
-      return {value: value, criteria: iterator(value, index)};
-    }).sort(function(left, right) {
-      var a = left.criteria, b = right.criteria;
-      return a < b ? -1 : a > b ? 1 : 0;
-    }).pluck('value');
-  },
-
-  toArray: function() {
-    return this.map();
-  },
-
-  zip: function() {
-    var iterator = Prototype.K, args = $A(arguments);
-    if (typeof args.last() == 'function')
-      iterator = args.pop();
-
-    var collections = [this].concat(args).map($A);
-    return this.map(function(value, index) {
-      return iterator(collections.pluck(index));
-    });
-  },
-
-  size: function() {
-    return this.toArray().length;
-  },
-
-  inspect: function() {
-    return '#<Enumerable:' + this.toArray().inspect() + '>';
-  }
-}
-
-Object.extend(Enumerable, {
-  map:     Enumerable.collect,
-  find:    Enumerable.detect,
-  select:  Enumerable.findAll,
-  member:  Enumerable.include,
-  entries: Enumerable.toArray
-});
-var $A = Array.from = function(iterable) {
-  if (!iterable) return [];
-  if (iterable.toArray) {
-    return iterable.toArray();
-  } else {
-    var results = [];
-    for (var i = 0, length = iterable.length; i < length; i++)
-      results.push(iterable[i]);
-    return results;
-  }
-}
-
-Object.extend(Array.prototype, Enumerable);
-
-if (!Array.prototype._reverse)
-  Array.prototype._reverse = Array.prototype.reverse;
-
-Object.extend(Array.prototype, {
-  _each: function(iterator) {
-    for (var i = 0, length = this.length; i < length; i++)
-      iterator(this[i]);
-  },
-
-  clear: function() {
-    this.length = 0;
-    return this;
-  },
-
-  first: function() {
-    return this[0];
-  },
-
-  last: function() {
-    return this[this.length - 1];
-  },
-
-  compact: function() {
-    return this.select(function(value) {
-      return value != null;
-    });
-  },
-
-  flatten: function() {
-    return this.inject([], function(array, value) {
-      return array.concat(value && value.constructor == Array ?
-        value.flatten() : [value]);
-    });
-  },
-
-  without: function() {
-    var values = $A(arguments);
-    return this.select(function(value) {
-      return !values.include(value);
-    });
-  },
-
-  indexOf: function(object) {
-    for (var i = 0, length = this.length; i < length; i++)
-      if (this[i] == object) return i;
-    return -1;
-  },
-
-  reverse: function(inline) {
-    return (inline !== false ? this : this.toArray())._reverse();
-  },
-
-  reduce: function() {
-    return this.length > 1 ? this : this[0];
-  },
-
-  uniq: function() {
-    return this.inject([], function(array, value) {
-      return array.include(value) ? array : array.concat([value]);
-    });
-  },
-
-  clone: function() {
-    return [].concat(this);
-  },
-
-  size: function() {
-    return this.length;
-  },
-
-  inspect: function() {
-    return '[' + this.map(Object.inspect).join(', ') + ']';
-  }
-});
-
-Array.prototype.toArray = Array.prototype.clone;
-
-function $w(string){
-  string = string.strip();
-  return string ? string.split(/\s+/) : [];
-}
-
-if(window.opera){
-  Array.prototype.concat = function(){
-    var array = [];
-    for(var i = 0, length = this.length; i < length; i++) array.push(this[i]);
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      if(arguments[i].constructor == Array) {
-        for(var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
-          array.push(arguments[i][j]);
-      } else {
-        array.push(arguments[i]);
-      }
-    }
-    return array;
-  }
-}
-var Hash = function(obj) {
-  Object.extend(this, obj || {});
-};
-
-Object.extend(Hash, {
-  toQueryString: function(obj) {
-    var parts = [];
-
-	  this.prototype._each.call(obj, function(pair) {
-      if (!pair.key) return;
-
-      if (pair.value && pair.value.constructor == Array) {
-        var values = pair.value.compact();
-        if (values.length < 2) pair.value = values.reduce();
-        else {
-        	key = encodeURIComponent(pair.key);
-          values.each(function(value) {
-            value = value != undefined ? encodeURIComponent(value) : '';
-            parts.push(key + '=' + encodeURIComponent(value));
-          });
-          return;
-        }
-      }
-      if (pair.value == undefined) pair[1] = '';
-      parts.push(pair.map(encodeURIComponent).join('='));
-	  });
-
-    return parts.join('&');
-  }
-});
-
-Object.extend(Hash.prototype, Enumerable);
-Object.extend(Hash.prototype, {
-  _each: function(iterator) {
-    for (var key in this) {
-      var value = this[key];
-      if (value && value == Hash.prototype[key]) continue;
-
-      var pair = [key, value];
-      pair.key = key;
-      pair.value = value;
-      iterator(pair);
-    }
-  },
-
-  keys: function() {
-    return this.pluck('key');
-  },
-
-  values: function() {
-    return this.pluck('value');
-  },
-
-  merge: function(hash) {
-    return $H(hash).inject(this, function(mergedHash, pair) {
-      mergedHash[pair.key] = pair.value;
-      return mergedHash;
-    });
-  },
-
-  remove: function() {
-    var result;
-    for(var i = 0, length = arguments.length; i < length; i++) {
-      var value = this[arguments[i]];
-      if (value !== undefined){
-        if (result === undefined) result = value;
-        else {
-          if (result.constructor != Array) result = [result];
-          result.push(value)
-        }
-      }
-      delete this[arguments[i]];
-    }
-    return result;
-  },
-
-  toQueryString: function() {
-    return Hash.toQueryString(this);
-  },
-
-  inspect: function() {
-    return '#<Hash:{' + this.map(function(pair) {
-      return pair.map(Object.inspect).join(': ');
-    }).join(', ') + '}>';
-  }
-});
-
-function $H(object) {
-  if (object && object.constructor == Hash) return object;
-  return new Hash(object);
-};
-ObjectRange = Class.create();
-Object.extend(ObjectRange.prototype, Enumerable);
-Object.extend(ObjectRange.prototype, {
-  initialize: function(start, end, exclusive) {
-    this.start = start;
-    this.end = end;
-    this.exclusive = exclusive;
-  },
-
-  _each: function(iterator) {
-    var value = this.start;
-    while (this.include(value)) {
-      iterator(value);
-      value = value.succ();
-    }
-  },
-
-  include: function(value) {
-    if (value < this.start)
-      return false;
-    if (this.exclusive)
-      return value < this.end;
-    return value <= this.end;
-  }
-});
-
-var $R = function(start, end, exclusive) {
-  return new ObjectRange(start, end, exclusive);
-}
-
-var Ajax = {
-  getTransport: function() {
-    return Try.these(
-      function() {return new XMLHttpRequest()},
-      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
-      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
-    ) || false;
-  },
-
-  activeRequestCount: 0
-}
-
-Ajax.Responders = {
-  responders: [],
-
-  _each: function(iterator) {
-    this.responders._each(iterator);
-  },
-
-  register: function(responder) {
-    if (!this.include(responder))
-      this.responders.push(responder);
-  },
-
-  unregister: function(responder) {
-    this.responders = this.responders.without(responder);
-  },
-
-  dispatch: function(callback, request, transport, json) {
-    this.each(function(responder) {
-      if (typeof responder[callback] == 'function') {
-        try {
-          responder[callback].apply(responder, [request, transport, json]);
-        } catch (e) {}
-      }
-    });
-  }
-};
-
-Object.extend(Ajax.Responders, Enumerable);
-
-Ajax.Responders.register({
-  onCreate: function() {
-    Ajax.activeRequestCount++;
-  },
-  onComplete: function() {
-    Ajax.activeRequestCount--;
-  }
-});
-
-Ajax.Base = function() {};
-Ajax.Base.prototype = {
-  setOptions: function(options) {
-    this.options = {
-      method:       'post',
-      asynchronous: true,
-      contentType:  'application/x-www-form-urlencoded',
-      encoding:     'UTF-8',
-      parameters:   ''
-    }
-    Object.extend(this.options, options || {});
-
-    this.options.method = this.options.method.toLowerCase();
-    if (typeof this.options.parameters == 'string')
-      this.options.parameters = this.options.parameters.toQueryParams();
-  }
-}
-
-Ajax.Request = Class.create();
-Ajax.Request.Events =
-  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
-
-Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
-  _complete: false,
-
-  initialize: function(url, options) {
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-    this.request(url);
-  },
-
-  request: function(url) {
-    this.url = url;
-    this.method = this.options.method;
-    var params = this.options.parameters;
-
-    if (!['get', 'post'].include(this.method)) {
-      // simulate other verbs over post
-      params['_method'] = this.method;
-      this.method = 'post';
-    }
-
-    params = Hash.toQueryString(params);
-    if (params && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) params += '&_='
-
-    // when GET, append parameters to URL
-    if (this.method == 'get' && params)
-      this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + params;
-
-    try {
-      Ajax.Responders.dispatch('onCreate', this, this.transport);
-
-      this.transport.open(this.method.toUpperCase(), this.url,
-        this.options.asynchronous);
-
-      if (this.options.asynchronous)
-        setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
-
-      this.transport.onreadystatechange = this.onStateChange.bind(this);
-      this.setRequestHeaders();
-
-      var body = this.method == 'post' ? (this.options.postBody || params) : null;
-
-      this.transport.send(body);
-
-      /* Force Firefox to handle ready state 4 for synchronous requests */
-      if (!this.options.asynchronous && this.transport.overrideMimeType)
-        this.onStateChange();
-
-    }
-    catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  onStateChange: function() {
-    var readyState = this.transport.readyState;
-    if (readyState > 1 && !((readyState == 4) && this._complete))
-      this.respondToReadyState(this.transport.readyState);
-  },
-
-  setRequestHeaders: function() {
-    var headers = {
-      'X-Requested-With': 'XMLHttpRequest',
-      'X-Prototype-Version': Prototype.Version,
-      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
-    };
-
-    if (this.method == 'post') {
-      headers['Content-type'] = this.options.contentType +
-        (this.options.encoding ? '; charset=' + this.options.encoding : '');
-
-      /* Force "Connection: close" for older Mozilla browsers to work
-       * around a bug where XMLHttpRequest sends an incorrect
-       * Content-length header. See Mozilla Bugzilla #246651.
-       */
-      if (this.transport.overrideMimeType &&
-          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
-            headers['Connection'] = 'close';
-    }
-
-    // user-defined headers
-    if (typeof this.options.requestHeaders == 'object') {
-      var extras = this.options.requestHeaders;
-
-      if (typeof extras.push == 'function')
-        for (var i = 0, length = extras.length; i < length; i += 2)
-          headers[extras[i]] = extras[i+1];
-      else
-        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
-    }
-
-    for (var name in headers)
-      this.transport.setRequestHeader(name, headers[name]);
-  },
-
-  success: function() {
-    return !this.transport.status
-        || (this.transport.status >= 200 && this.transport.status < 300);
-  },
-
-  respondToReadyState: function(readyState) {
-    var state = Ajax.Request.Events[readyState];
-    var transport = this.transport, json = this.evalJSON();
-
-    if (state == 'Complete') {
-      try {
-        this._complete = true;
-        (this.options['on' + this.transport.status]
-         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
-         || Prototype.emptyFunction)(transport, json);
-      } catch (e) {
-        this.dispatchException(e);
-      }
-
-      if ((this.getHeader('Content-type') || 'text/javascript').strip().
-        match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
-          this.evalResponse();
-    }
-
-    try {
-      (this.options['on' + state] || Prototype.emptyFunction)(transport, json);
-      Ajax.Responders.dispatch('on' + state, this, transport, json);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-
-    if (state == 'Complete') {
-      // avoid memory leak in MSIE: clean up
-      this.transport.onreadystatechange = Prototype.emptyFunction;
-    }
-  },
-
-  getHeader: function(name) {
-    try {
-      return this.transport.getResponseHeader(name);
-    } catch (e) { return null }
-  },
-
-  evalJSON: function() {
-    try {
-      var json = this.getHeader('X-JSON');
-      return json ? eval('(' + json + ')') : null;
-    } catch (e) { return null }
-  },
-
-  evalResponse: function() {
-    try {
-      return eval(this.transport.responseText);
-    } catch (e) {
-      this.dispatchException(e);
-    }
-  },
-
-  dispatchException: function(exception) {
-    (this.options.onException || Prototype.emptyFunction)(this, exception);
-    Ajax.Responders.dispatch('onException', this, exception);
-  }
-});
-
-Ajax.Updater = Class.create();
-
-Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
-  initialize: function(container, url, options) {
-    this.container = {
-      success: (container.success || container),
-      failure: (container.failure || (container.success ? null : container))
-    }
-
-    this.transport = Ajax.getTransport();
-    this.setOptions(options);
-
-    var onComplete = this.options.onComplete || Prototype.emptyFunction;
-    this.options.onComplete = (function(transport, param) {
-      this.updateContent();
-      onComplete(transport, param);
-    }).bind(this);
-
-    this.request(url);
-  },
-
-  updateContent: function() {
-    var receiver = this.container[this.success() ? 'success' : 'failure'];
-    var response = this.transport.responseText;
-
-    if (!this.options.evalScripts) response = response.stripScripts();
-
-    if (receiver = $(receiver)) {
-      if (this.options.insertion)
-        new this.options.insertion(receiver, response);
-      else
-        receiver.update(response);
-    }
-
-    if (this.success()) {
-      if (this.onComplete)
-        setTimeout(this.onComplete.bind(this), 10);
-    }
-  }
-});
-
-Ajax.PeriodicalUpdater = Class.create();
-Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
-  initialize: function(container, url, options) {
-    this.setOptions(options);
-    this.onComplete = this.options.onComplete;
-
-    this.frequency = (this.options.frequency || 2);
-    this.decay = (this.options.decay || 1);
-
-    this.updater = {};
-    this.container = container;
-    this.url = url;
-
-    this.start();
-  },
-
-  start: function() {
-    this.options.onComplete = this.updateComplete.bind(this);
-    this.onTimerEvent();
-  },
-
-  stop: function() {
-    this.updater.options.onComplete = undefined;
-    clearTimeout(this.timer);
-    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
-  },
-
-  updateComplete: function(request) {
-    if (this.options.decay) {
-      this.decay = (request.responseText == this.lastText ?
-        this.decay * this.options.decay : 1);
-
-      this.lastText = request.responseText;
-    }
-    this.timer = setTimeout(this.onTimerEvent.bind(this),
-      this.decay * this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    this.updater = new Ajax.Updater(this.container, this.url, this.options);
-  }
-});
-function $(element) {
-  if (arguments.length > 1) {
-    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
-      elements.push($(arguments[i]));
-    return elements;
-  }
-  if (typeof element == 'string')
-    element = document.getElementById(element);
-  return Element.extend(element);
-}
-
-if (Prototype.BrowserFeatures.XPath) {
-  document._getElementsByXPath = function(expression, parentElement) {
-    var results = [];
-    var query = document.evaluate(expression, $(parentElement) || document,
-      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
-    for (var i = 0, length = query.snapshotLength; i < length; i++)
-      results.push(query.snapshotItem(i));
-    return results;
-  };
-}
-
-document.getElementsByClassName = function(className, parentElement) {
-  if (Prototype.BrowserFeatures.XPath) {
-    var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
-    return document._getElementsByXPath(q, parentElement);
-  } else {
-    var children = ($(parentElement) || document.body).getElementsByTagName('*');
-    var elements = [], child;
-    for (var i = 0, length = children.length; i < length; i++) {
-      child = children[i];
-      if (Element.hasClassName(child, className))
-        elements.push(Element.extend(child));
-    }
-    return elements;
-  }
-};
-
-/*--------------------------------------------------------------------------*/
-
-if (!window.Element)
-  var Element = new Object();
-
-Element.extend = function(element) {
-  if (!element || _nativeExtensions || element.nodeType == 3) return element;
-
-  if (!element._extended && element.tagName && element != window) {
-    var methods = Object.clone(Element.Methods), cache = Element.extend.cache;
-
-    if (element.tagName == 'FORM')
-      Object.extend(methods, Form.Methods);
-    if (['INPUT', 'TEXTAREA', 'SELECT'].include(element.tagName))
-      Object.extend(methods, Form.Element.Methods);
-
-    Object.extend(methods, Element.Methods.Simulated);
-
-    for (var property in methods) {
-      var value = methods[property];
-      if (typeof value == 'function' && !(property in element))
-        element[property] = cache.findOrStore(value);
-    }
-  }
-
-  element._extended = true;
-  return element;
-};
-
-Element.extend.cache = {
-  findOrStore: function(value) {
-    return this[value] = this[value] || function() {
-      return value.apply(null, [this].concat($A(arguments)));
-    }
-  }
-};
-
-Element.Methods = {
-  visible: function(element) {
-    return $(element).style.display != 'none';
-  },
-
-  toggle: function(element) {
-    element = $(element);
-    Element[Element.visible(element) ? 'hide' : 'show'](element);
-    return element;
-  },
-
-  hide: function(element) {
-    $(element).style.display = 'none';
-    return element;
-  },
-
-  show: function(element) {
-    $(element).style.display = '';
-    return element;
-  },
-
-  remove: function(element) {
-    element = $(element);
-    element.parentNode.removeChild(element);
-    return element;
-  },
-
-  update: function(element, html) {
-    html = typeof html == 'undefined' ? '' : html.toString();
-    $(element).innerHTML = html.stripScripts();
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  replace: function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    if (element.outerHTML) {
-      element.outerHTML = html.stripScripts();
-    } else {
-      var range = element.ownerDocument.createRange();
-      range.selectNodeContents(element);
-      element.parentNode.replaceChild(
-        range.createContextualFragment(html.stripScripts()), element);
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  },
-
-  inspect: function(element) {
-    element = $(element);
-    var result = '<' + element.tagName.toLowerCase();
-    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
-      var property = pair.first(), attribute = pair.last();
-      var value = (element[property] || '').toString();
-      if (value) result += ' ' + attribute + '=' + value.inspect(true);
-    });
-    return result + '>';
-  },
-
-  recursivelyCollect: function(element, property) {
-    element = $(element);
-    var elements = [];
-    while (element = element[property])
-      if (element.nodeType == 1)
-        elements.push(Element.extend(element));
-    return elements;
-  },
-
-  ancestors: function(element) {
-    return $(element).recursivelyCollect('parentNode');
-  },
-
-  descendants: function(element) {
-    return $A($(element).getElementsByTagName('*'));
-  },
-
-  immediateDescendants: function(element) {
-    if (!(element = $(element).firstChild)) return [];
-    while (element && element.nodeType != 1) element = element.nextSibling;
-    if (element) return [element].concat($(element).nextSiblings());
-    return [];
-  },
-
-  previousSiblings: function(element) {
-    return $(element).recursivelyCollect('previousSibling');
-  },
-
-  nextSiblings: function(element) {
-    return $(element).recursivelyCollect('nextSibling');
-  },
-
-  siblings: function(element) {
-    element = $(element);
-    return element.previousSiblings().reverse().concat(element.nextSiblings());
-  },
-
-  match: function(element, selector) {
-    if (typeof selector == 'string')
-      selector = new Selector(selector);
-    return selector.match($(element));
-  },
-
-  up: function(element, expression, index) {
-    return Selector.findElement($(element).ancestors(), expression, index);
-  },
-
-  down: function(element, expression, index) {
-    return Selector.findElement($(element).descendants(), expression, index);
-  },
-
-  previous: function(element, expression, index) {
-    return Selector.findElement($(element).previousSiblings(), expression, index);
-  },
-
-  next: function(element, expression, index) {
-    return Selector.findElement($(element).nextSiblings(), expression, index);
-  },
-
-  getElementsBySelector: function() {
-    var args = $A(arguments), element = $(args.shift());
-    return Selector.findChildElements(element, args);
-  },
-
-  getElementsByClassName: function(element, className) {
-    return document.getElementsByClassName(className, element);
-  },
-
-  readAttribute: function(element, name) {
-    element = $(element);
-    if (document.all && !window.opera) {
-      var t = Element._attributeTranslations;
-      if (t.values[name]) return t.values[name](element, name);
-      if (t.names[name])  name = t.names[name];
-      var attribute = element.attributes[name];
-      if(attribute) return attribute.nodeValue;
-    }
-    return element.getAttribute(name);
-  },
-
-  getHeight: function(element) {
-    return $(element).getDimensions().height;
-  },
-
-  getWidth: function(element) {
-    return $(element).getDimensions().width;
-  },
-
-  classNames: function(element) {
-    return new Element.ClassNames(element);
-  },
-
-  hasClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    var elementClassName = element.className;
-    if (elementClassName.length == 0) return false;
-    if (elementClassName == className ||
-        elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
-      return true;
-    return false;
-  },
-
-  addClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).add(className);
-    return element;
-  },
-
-  removeClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element).remove(className);
-    return element;
-  },
-
-  toggleClassName: function(element, className) {
-    if (!(element = $(element))) return;
-    Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
-    return element;
-  },
-
-  observe: function() {
-    Event.observe.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  stopObserving: function() {
-    Event.stopObserving.apply(Event, arguments);
-    return $A(arguments).first();
-  },
-
-  // removes whitespace-only text node children
-  cleanWhitespace: function(element) {
-    element = $(element);
-    var node = element.firstChild;
-    while (node) {
-      var nextNode = node.nextSibling;
-      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
-        element.removeChild(node);
-      node = nextNode;
-    }
-    return element;
-  },
-
-  empty: function(element) {
-    return $(element).innerHTML.match(/^\s*$/);
-  },
-
-  descendantOf: function(element, ancestor) {
-    element = $(element), ancestor = $(ancestor);
-    while (element = element.parentNode)
-      if (element == ancestor) return true;
-    return false;
-  },
-
-  scrollTo: function(element) {
-    element = $(element);
-    var pos = Position.cumulativeOffset(element);
-    window.scrollTo(pos[0], pos[1]);
-    return element;
-  },
-
-  getStyle: function(element, style) {
-    element = $(element);
-    if (['float','cssFloat'].include(style))
-      style = (typeof element.style.styleFloat != 'undefined' ? 'styleFloat' : 'cssFloat');
-    style = style.camelize();
-    var value = element.style[style];
-    if (!value) {
-      if (document.defaultView && document.defaultView.getComputedStyle) {
-        var css = document.defaultView.getComputedStyle(element, null);
-        value = css ? css[style] : null;
-      } else if (element.currentStyle) {
-        value = element.currentStyle[style];
-      }
-    }
-
-    if((value == 'auto') && ['width','height'].include(style) && (element.getStyle('display') != 'none'))
-      value = element['offset'+style.capitalize()] + 'px';
-
-    if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
-      if (Element.getStyle(element, 'position') == 'static') value = 'auto';
-    if(style == 'opacity') {
-      if(value) return parseFloat(value);
-      if(value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
-        if(value[1]) return parseFloat(value[1]) / 100;
-      return 1.0;
-    }
-    return value == 'auto' ? null : value;
-  },
-
-  setStyle: function(element, style) {
-    element = $(element);
-    for (var name in style) {
-      var value = style[name];
-      if(name == 'opacity') {
-        if (value == 1) {
-          value = (/Gecko/.test(navigator.userAgent) &&
-            !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ? 0.999999 : 1.0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else if(value === '') {
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'');
-        } else {
-          if(value < 0.00001) value = 0;
-          if(/MSIE/.test(navigator.userAgent) && !window.opera)
-            element.style.filter = element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'') +
-              'alpha(opacity='+value*100+')';
-        }
-      } else if(['float','cssFloat'].include(name)) name = (typeof element.style.styleFloat != 'undefined') ? 'styleFloat' : 'cssFloat';
-      element.style[name.camelize()] = value;
-    }
-    return element;
-  },
-
-  getDimensions: function(element) {
-    element = $(element);
-    var display = $(element).getStyle('display');
-    if (display != 'none' && display != null) // Safari bug
-      return {width: element.offsetWidth, height: element.offsetHeight};
-
-    // All *Width and *Height properties give 0 on elements with display none,
-    // so enable the element temporarily
-    var els = element.style;
-    var originalVisibility = els.visibility;
-    var originalPosition = els.position;
-    var originalDisplay = els.display;
-    els.visibility = 'hidden';
-    els.position = 'absolute';
-    els.display = 'block';
-    var originalWidth = element.clientWidth;
-    var originalHeight = element.clientHeight;
-    els.display = originalDisplay;
-    els.position = originalPosition;
-    els.visibility = originalVisibility;
-    return {width: originalWidth, height: originalHeight};
-  },
-
-  makePositioned: function(element) {
-    element = $(element);
-    var pos = Element.getStyle(element, 'position');
-    if (pos == 'static' || !pos) {
-      element._madePositioned = true;
-      element.style.position = 'relative';
-      // Opera returns the offset relative to the positioning context, when an
-      // element is position relative but top and left have not been defined
-      if (window.opera) {
-        element.style.top = 0;
-        element.style.left = 0;
-      }
-    }
-    return element;
-  },
-
-  undoPositioned: function(element) {
-    element = $(element);
-    if (element._madePositioned) {
-      element._madePositioned = undefined;
-      element.style.position =
-        element.style.top =
-        element.style.left =
-        element.style.bottom =
-        element.style.right = '';
-    }
-    return element;
-  },
-
-  makeClipping: function(element) {
-    element = $(element);
-    if (element._overflow) return element;
-    element._overflow = element.style.overflow || 'auto';
-    if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
-      element.style.overflow = 'hidden';
-    return element;
-  },
-
-  undoClipping: function(element) {
-    element = $(element);
-    if (!element._overflow) return element;
-    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
-    element._overflow = null;
-    return element;
-  }
-};
-
-Object.extend(Element.Methods, {childOf: Element.Methods.descendantOf});
-
-Element._attributeTranslations = {};
-
-Element._attributeTranslations.names = {
-  colspan:   "colSpan",
-  rowspan:   "rowSpan",
-  valign:    "vAlign",
-  datetime:  "dateTime",
-  accesskey: "accessKey",
-  tabindex:  "tabIndex",
-  enctype:   "encType",
-  maxlength: "maxLength",
-  readonly:  "readOnly",
-  longdesc:  "longDesc"
-};
-
-Element._attributeTranslations.values = {
-  _getAttr: function(element, attribute) {
-    return element.getAttribute(attribute, 2);
-  },
-
-  _flag: function(element, attribute) {
-    return $(element).hasAttribute(attribute) ? attribute : null;
-  },
-
-  style: function(element) {
-    return element.style.cssText.toLowerCase();
-  },
-
-  title: function(element) {
-    var node = element.getAttributeNode('title');
-    return node.specified ? node.nodeValue : null;
-  }
-};
-
-Object.extend(Element._attributeTranslations.values, {
-  href: Element._attributeTranslations.values._getAttr,
-  src:  Element._attributeTranslations.values._getAttr,
-  disabled: Element._attributeTranslations.values._flag,
-  checked:  Element._attributeTranslations.values._flag,
-  readonly: Element._attributeTranslations.values._flag,
-  multiple: Element._attributeTranslations.values._flag
-});
-
-Element.Methods.Simulated = {
-  hasAttribute: function(element, attribute) {
-    var t = Element._attributeTranslations;
-    attribute = t.names[attribute] || attribute;
-    return $(element).getAttributeNode(attribute).specified;
-  }
-};
-
-// IE is missing .innerHTML support for TABLE-related elements
-if (document.all && !window.opera){
-  Element.Methods.update = function(element, html) {
-    element = $(element);
-    html = typeof html == 'undefined' ? '' : html.toString();
-    var tagName = element.tagName.toUpperCase();
-    if (['THEAD','TBODY','TR','TD'].include(tagName)) {
-      var div = document.createElement('div');
-      switch (tagName) {
-        case 'THEAD':
-        case 'TBODY':
-          div.innerHTML = '<table><tbody>' +  html.stripScripts() + '</tbody></table>';
-          depth = 2;
-          break;
-        case 'TR':
-          div.innerHTML = '<table><tbody><tr>' +  html.stripScripts() + '</tr></tbody></table>';
-          depth = 3;
-          break;
-        case 'TD':
-          div.innerHTML = '<table><tbody><tr><td>' +  html.stripScripts() + '</td></tr></tbody></table>';
-          depth = 4;
-      }
-      $A(element.childNodes).each(function(node){
-        element.removeChild(node)
-      });
-      depth.times(function(){ div = div.firstChild });
-
-      $A(div.childNodes).each(
-        function(node){ element.appendChild(node) });
-    } else {
-      element.innerHTML = html.stripScripts();
-    }
-    setTimeout(function() {html.evalScripts()}, 10);
-    return element;
-  }
-};
-
-Object.extend(Element, Element.Methods);
-
-var _nativeExtensions = false;
-
-if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
-  ['', 'Form', 'Input', 'TextArea', 'Select'].each(function(tag) {
-    var className = 'HTML' + tag + 'Element';
-    if(window[className]) return;
-    var klass = window[className] = {};
-    klass.prototype = document.createElement(tag ? tag.toLowerCase() : 'div').__proto__;
-  });
-
-Element.addMethods = function(methods) {
-  Object.extend(Element.Methods, methods || {});
-
-  function copy(methods, destination, onlyIfAbsent) {
-    onlyIfAbsent = onlyIfAbsent || false;
-    var cache = Element.extend.cache;
-    for (var property in methods) {
-      var value = methods[property];
-      if (!onlyIfAbsent || !(property in destination))
-        destination[property] = cache.findOrStore(value);
-    }
-  }
-
-  if (typeof HTMLElement != 'undefined') {
-    copy(Element.Methods, HTMLElement.prototype);
-    copy(Element.Methods.Simulated, HTMLElement.prototype, true);
-    copy(Form.Methods, HTMLFormElement.prototype);
-    [HTMLInputElement, HTMLTextAreaElement, HTMLSelectElement].each(function(klass) {
-      copy(Form.Element.Methods, klass.prototype);
-    });
-    _nativeExtensions = true;
-  }
-}
-
-var Toggle = new Object();
-Toggle.display = Element.toggle;
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.Insertion = function(adjacency) {
-  this.adjacency = adjacency;
-}
-
-Abstract.Insertion.prototype = {
-  initialize: function(element, content) {
-    this.element = $(element);
-    this.content = content.stripScripts();
-
-    if (this.adjacency && this.element.insertAdjacentHTML) {
-      try {
-        this.element.insertAdjacentHTML(this.adjacency, this.content);
-      } catch (e) {
-        var tagName = this.element.tagName.toUpperCase();
-        if (['TBODY', 'TR'].include(tagName)) {
-          this.insertContent(this.contentFromAnonymousTable());
-        } else {
-          throw e;
-        }
-      }
-    } else {
-      this.range = this.element.ownerDocument.createRange();
-      if (this.initializeRange) this.initializeRange();
-      this.insertContent([this.range.createContextualFragment(this.content)]);
-    }
-
-    setTimeout(function() {content.evalScripts()}, 10);
-  },
-
-  contentFromAnonymousTable: function() {
-    var div = document.createElement('div');
-    div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>';
-    return $A(div.childNodes[0].childNodes[0].childNodes);
-  }
-}
-
-var Insertion = new Object();
-
-Insertion.Before = Class.create();
-Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), {
-  initializeRange: function() {
-    this.range.setStartBefore(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment, this.element);
-    }).bind(this));
-  }
-});
-
-Insertion.Top = Class.create();
-Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(true);
-  },
-
-  insertContent: function(fragments) {
-    fragments.reverse(false).each((function(fragment) {
-      this.element.insertBefore(fragment, this.element.firstChild);
-    }).bind(this));
-  }
-});
-
-Insertion.Bottom = Class.create();
-Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), {
-  initializeRange: function() {
-    this.range.selectNodeContents(this.element);
-    this.range.collapse(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.appendChild(fragment);
-    }).bind(this));
-  }
-});
-
-Insertion.After = Class.create();
-Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
-  initializeRange: function() {
-    this.range.setStartAfter(this.element);
-  },
-
-  insertContent: function(fragments) {
-    fragments.each((function(fragment) {
-      this.element.parentNode.insertBefore(fragment,
-        this.element.nextSibling);
-    }).bind(this));
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Element.ClassNames = Class.create();
-Element.ClassNames.prototype = {
-  initialize: function(element) {
-    this.element = $(element);
-  },
-
-  _each: function(iterator) {
-    this.element.className.split(/\s+/).select(function(name) {
-      return name.length > 0;
-    })._each(iterator);
-  },
-
-  set: function(className) {
-    this.element.className = className;
-  },
-
-  add: function(classNameToAdd) {
-    if (this.include(classNameToAdd)) return;
-    this.set($A(this).concat(classNameToAdd).join(' '));
-  },
-
-  remove: function(classNameToRemove) {
-    if (!this.include(classNameToRemove)) return;
-    this.set($A(this).without(classNameToRemove).join(' '));
-  },
-
-  toString: function() {
-    return $A(this).join(' ');
-  }
-};
-
-Object.extend(Element.ClassNames.prototype, Enumerable);
-var Selector = Class.create();
-Selector.prototype = {
-  initialize: function(expression) {
-    this.params = {classNames: []};
-    this.expression = expression.toString().strip();
-    this.parseExpression();
-    this.compileMatcher();
-  },
-
-  parseExpression: function() {
-    function abort(message) { throw 'Parse error in selector: ' + message; }
-
-    if (this.expression == '')  abort('empty expression');
-
-    var params = this.params, expr = this.expression, match, modifier, clause, rest;
-    while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
-      params.attributes = params.attributes || [];
-      params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
-      expr = match[1];
-    }
-
-    if (expr == '*') return this.params.wildcard = true;
-
-    while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
-      modifier = match[1], clause = match[2], rest = match[3];
-      switch (modifier) {
-        case '#':       params.id = clause; break;
-        case '.':       params.classNames.push(clause); break;
-        case '':
-        case undefined: params.tagName = clause.toUpperCase(); break;
-        default:        abort(expr.inspect());
-      }
-      expr = rest;
-    }
-
-    if (expr.length > 0) abort(expr.inspect());
-  },
-
-  buildMatchExpression: function() {
-    var params = this.params, conditions = [], clause;
-
-    if (params.wildcard)
-      conditions.push('true');
-    if (clause = params.id)
-      conditions.push('element.readAttribute("id") == ' + clause.inspect());
-    if (clause = params.tagName)
-      conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
-    if ((clause = params.classNames).length > 0)
-      for (var i = 0, length = clause.length; i < length; i++)
-        conditions.push('element.hasClassName(' + clause[i].inspect() + ')');
-    if (clause = params.attributes) {
-      clause.each(function(attribute) {
-        var value = 'element.readAttribute(' + attribute.name.inspect() + ')';
-        var splitValueBy = function(delimiter) {
-          return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
-        }
-
-        switch (attribute.operator) {
-          case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
-          case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
-          case '|=':      conditions.push(
-                            splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
-                          ); break;
-          case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
-          case '':
-          case undefined: conditions.push('element.hasAttribute(' + attribute.name.inspect() + ')'); break;
-          default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
-        }
-      });
-    }
-
-    return conditions.join(' && ');
-  },
-
-  compileMatcher: function() {
-    this.match = new Function('element', 'if (!element.tagName) return false; \
-      element = $(element); \
-      return ' + this.buildMatchExpression());
-  },
-
-  findElements: function(scope) {
-    var element;
-
-    if (element = $(this.params.id))
-      if (this.match(element))
-        if (!scope || Element.childOf(element, scope))
-          return [element];
-
-    scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
-
-    var results = [];
-    for (var i = 0, length = scope.length; i < length; i++)
-      if (this.match(element = scope[i]))
-        results.push(Element.extend(element));
-
-    return results;
-  },
-
-  toString: function() {
-    return this.expression;
-  }
-}
-
-Object.extend(Selector, {
-  matchElements: function(elements, expression) {
-    var selector = new Selector(expression);
-    return elements.select(selector.match.bind(selector)).map(Element.extend);
-  },
-
-  findElement: function(elements, expression, index) {
-    if (typeof expression == 'number') index = expression, expression = false;
-    return Selector.matchElements(elements, expression || '*')[index || 0];
-  },
-
-  findChildElements: function(element, expressions) {
-    return expressions.map(function(expression) {
-      return expression.match(/[^\s"]+(?:"[^"]*"[^\s"]+)*/g).inject([null], function(results, expr) {
-        var selector = new Selector(expr);
-        return results.inject([], function(elements, result) {
-          return elements.concat(selector.findElements(result || element));
-        });
-      });
-    }).flatten();
-  }
-});
-
-function $$() {
-  return Selector.findChildElements(document, $A(arguments));
-}
-var Form = {
-  reset: function(form) {
-    $(form).reset();
-    return form;
-  },
-
-  serializeElements: function(elements, getHash) {
-    var data = elements.inject({}, function(result, element) {
-      if (!element.disabled && element.name) {
-        var key = element.name, value = $(element).getValue();
-        if (value != undefined) {
-          if (result[key]) {
-            if (result[key].constructor != Array) result[key] = [result[key]];
-            result[key].push(value);
-          }
-          else result[key] = value;
-        }
-      }
-      return result;
-    });
-
-    return getHash ? data : Hash.toQueryString(data);
-  }
-};
-
-Form.Methods = {
-  serialize: function(form, getHash) {
-    return Form.serializeElements(Form.getElements(form), getHash);
-  },
-
-  getElements: function(form) {
-    return $A($(form).getElementsByTagName('*')).inject([],
-      function(elements, child) {
-        if (Form.Element.Serializers[child.tagName.toLowerCase()])
-          elements.push(Element.extend(child));
-        return elements;
-      }
-    );
-  },
-
-  getInputs: function(form, typeName, name) {
-    form = $(form);
-    var inputs = form.getElementsByTagName('input');
-
-    if (!typeName && !name) return $A(inputs).map(Element.extend);
-
-    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
-      var input = inputs[i];
-      if ((typeName && input.type != typeName) || (name && input.name != name))
-        continue;
-      matchingInputs.push(Element.extend(input));
-    }
-
-    return matchingInputs;
-  },
-
-  disable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.blur();
-      element.disabled = 'true';
-    });
-    return form;
-  },
-
-  enable: function(form) {
-    form = $(form);
-    form.getElements().each(function(element) {
-      element.disabled = '';
-    });
-    return form;
-  },
-
-  findFirstElement: function(form) {
-    return $(form).getElements().find(function(element) {
-      return element.type != 'hidden' && !element.disabled &&
-        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
-    });
-  },
-
-  focusFirstElement: function(form) {
-    form = $(form);
-    form.findFirstElement().activate();
-    return form;
-  }
-}
-
-Object.extend(Form, Form.Methods);
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element = {
-  focus: function(element) {
-    $(element).focus();
-    return element;
-  },
-
-  select: function(element) {
-    $(element).select();
-    return element;
-  }
-}
-
-Form.Element.Methods = {
-  serialize: function(element) {
-    element = $(element);
-    if (!element.disabled && element.name) {
-      var value = element.getValue();
-      if (value != undefined) {
-        var pair = {};
-        pair[element.name] = value;
-        return Hash.toQueryString(pair);
-      }
-    }
-    return '';
-  },
-
-  getValue: function(element) {
-    element = $(element);
-    var method = element.tagName.toLowerCase();
-    return Form.Element.Serializers[method](element);
-  },
-
-  clear: function(element) {
-    $(element).value = '';
-    return element;
-  },
-
-  present: function(element) {
-    return $(element).value != '';
-  },
-
-  activate: function(element) {
-    element = $(element);
-    element.focus();
-    if (element.select && ( element.tagName.toLowerCase() != 'input' ||
-      !['button', 'reset', 'submit'].include(element.type) ) )
-      element.select();
-    return element;
-  },
-
-  disable: function(element) {
-    element = $(element);
-    element.disabled = true;
-    return element;
-  },
-
-  enable: function(element) {
-    element = $(element);
-    element.blur();
-    element.disabled = false;
-    return element;
-  }
-}
-
-Object.extend(Form.Element, Form.Element.Methods);
-var Field = Form.Element;
-var $F = Form.Element.getValue;
-
-/*--------------------------------------------------------------------------*/
-
-Form.Element.Serializers = {
-  input: function(element) {
-    switch (element.type.toLowerCase()) {
-      case 'checkbox':
-      case 'radio':
-        return Form.Element.Serializers.inputSelector(element);
-      default:
-        return Form.Element.Serializers.textarea(element);
-    }
-  },
-
-  inputSelector: function(element) {
-    return element.checked ? element.value : null;
-  },
-
-  textarea: function(element) {
-    return element.value;
-  },
-
-  select: function(element) {
-    return this[element.type == 'select-one' ?
-      'selectOne' : 'selectMany'](element);
-  },
-
-  selectOne: function(element) {
-    var index = element.selectedIndex;
-    return index >= 0 ? this.optionValue(element.options[index]) : null;
-  },
-
-  selectMany: function(element) {
-    var values, length = element.length;
-    if (!length) return null;
-
-    for (var i = 0, values = []; i < length; i++) {
-      var opt = element.options[i];
-      if (opt.selected) values.push(this.optionValue(opt));
-    }
-    return values;
-  },
-
-  optionValue: function(opt) {
-    // extend element because hasAttribute may not be native
-    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
-  }
-}
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.TimedObserver = function() {}
-Abstract.TimedObserver.prototype = {
-  initialize: function(element, frequency, callback) {
-    this.frequency = frequency;
-    this.element   = $(element);
-    this.callback  = callback;
-
-    this.lastValue = this.getValue();
-    this.registerCallback();
-  },
-
-  registerCallback: function() {
-    setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
-  },
-
-  onTimerEvent: function() {
-    var value = this.getValue();
-    var changed = ('string' == typeof this.lastValue && 'string' == typeof value
-      ? this.lastValue != value : String(this.lastValue) != String(value));
-    if (changed) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  }
-}
-
-Form.Element.Observer = Class.create();
-Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.Observer = Class.create();
-Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-
-/*--------------------------------------------------------------------------*/
-
-Abstract.EventObserver = function() {}
-Abstract.EventObserver.prototype = {
-  initialize: function(element, callback) {
-    this.element  = $(element);
-    this.callback = callback;
-
-    this.lastValue = this.getValue();
-    if (this.element.tagName.toLowerCase() == 'form')
-      this.registerFormCallbacks();
-    else
-      this.registerCallback(this.element);
-  },
-
-  onElementEvent: function() {
-    var value = this.getValue();
-    if (this.lastValue != value) {
-      this.callback(this.element, value);
-      this.lastValue = value;
-    }
-  },
-
-  registerFormCallbacks: function() {
-    Form.getElements(this.element).each(this.registerCallback.bind(this));
-  },
-
-  registerCallback: function(element) {
-    if (element.type) {
-      switch (element.type.toLowerCase()) {
-        case 'checkbox':
-        case 'radio':
-          Event.observe(element, 'click', this.onElementEvent.bind(this));
-          break;
-        default:
-          Event.observe(element, 'change', this.onElementEvent.bind(this));
-          break;
-      }
-    }
-  }
-}
-
-Form.Element.EventObserver = Class.create();
-Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.Element.getValue(this.element);
-  }
-});
-
-Form.EventObserver = Class.create();
-Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
-  getValue: function() {
-    return Form.serialize(this.element);
-  }
-});
-if (!window.Event) {
-  var Event = new Object();
-}
-
-Object.extend(Event, {
-  KEY_BACKSPACE: 8,
-  KEY_TAB:       9,
-  KEY_RETURN:   13,
-  KEY_ESC:      27,
-  KEY_LEFT:     37,
-  KEY_UP:       38,
-  KEY_RIGHT:    39,
-  KEY_DOWN:     40,
-  KEY_DELETE:   46,
-  KEY_HOME:     36,
-  KEY_END:      35,
-  KEY_PAGEUP:   33,
-  KEY_PAGEDOWN: 34,
-
-  element: function(event) {
-    return event.target || event.srcElement;
-  },
-
-  isLeftClick: function(event) {
-    return (((event.which) && (event.which == 1)) ||
-            ((event.button) && (event.button == 1)));
-  },
-
-  pointerX: function(event) {
-    return event.pageX || (event.clientX +
-      (document.documentElement.scrollLeft || document.body.scrollLeft));
-  },
-
-  pointerY: function(event) {
-    return event.pageY || (event.clientY +
-      (document.documentElement.scrollTop || document.body.scrollTop));
-  },
-
-  stop: function(event) {
-    if (event.preventDefault) {
-      event.preventDefault();
-      event.stopPropagation();
-    } else {
-      event.returnValue = false;
-      event.cancelBubble = true;
-    }
-  },
-
-  // find the first node with the given tagName, starting from the
-  // node the event was triggered on; traverses the DOM upwards
-  findElement: function(event, tagName) {
-    var element = Event.element(event);
-    while (element.parentNode && (!element.tagName ||
-        (element.tagName.toUpperCase() != tagName.toUpperCase())))
-      element = element.parentNode;
-    return element;
-  },
-
-  observers: false,
-
-  _observeAndCache: function(element, name, observer, useCapture) {
-    if (!this.observers) this.observers = [];
-    if (element.addEventListener) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.addEventListener(name, observer, useCapture);
-    } else if (element.attachEvent) {
-      this.observers.push([element, name, observer, useCapture]);
-      element.attachEvent('on' + name, observer);
-    }
-  },
-
-  unloadCache: function() {
-    if (!Event.observers) return;
-    for (var i = 0, length = Event.observers.length; i < length; i++) {
-      Event.stopObserving.apply(this, Event.observers[i]);
-      Event.observers[i][0] = null;
-    }
-    Event.observers = false;
-  },
-
-  observe: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.attachEvent))
-      name = 'keydown';
-
-    Event._observeAndCache(element, name, observer, useCapture);
-  },
-
-  stopObserving: function(element, name, observer, useCapture) {
-    element = $(element);
-    useCapture = useCapture || false;
-
-    if (name == 'keypress' &&
-        (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
-        || element.detachEvent))
-      name = 'keydown';
-
-    if (element.removeEventListener) {
-      element.removeEventListener(name, observer, useCapture);
-    } else if (element.detachEvent) {
-      try {
-        element.detachEvent('on' + name, observer);
-      } catch (e) {}
-    }
-  }
-});
-
-/* prevent memory leaks in IE */
-if (navigator.appVersion.match(/\bMSIE\b/))
-  Event.observe(window, 'unload', Event.unloadCache, false);
-var Position = {
-  // set to true if needed, warning: firefox performance problems
-  // NOT neeeded for page scrolling, only if draggable contained in
-  // scrollable elements
-  includeScrollOffsets: false,
-
-  // must be called before calling withinIncludingScrolloffset, every time the
-  // page is scrolled
-  prepare: function() {
-    this.deltaX =  window.pageXOffset
-                || document.documentElement.scrollLeft
-                || document.body.scrollLeft
-                || 0;
-    this.deltaY =  window.pageYOffset
-                || document.documentElement.scrollTop
-                || document.body.scrollTop
-                || 0;
-  },
-
-  realOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.scrollTop  || 0;
-      valueL += element.scrollLeft || 0;
-      element = element.parentNode;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  cumulativeOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  positionedOffset: function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      element = element.offsetParent;
-      if (element) {
-        if(element.tagName=='BODY') break;
-        var p = Element.getStyle(element, 'position');
-        if (p == 'relative' || p == 'absolute') break;
-      }
-    } while (element);
-    return [valueL, valueT];
-  },
-
-  offsetParent: function(element) {
-    if (element.offsetParent) return element.offsetParent;
-    if (element == document.body) return element;
-
-    while ((element = element.parentNode) && element != document.body)
-      if (Element.getStyle(element, 'position') != 'static')
-        return element;
-
-    return document.body;
-  },
-
-  // caches x/y coordinate pair to use with overlap
-  within: function(element, x, y) {
-    if (this.includeScrollOffsets)
-      return this.withinIncludingScrolloffsets(element, x, y);
-    this.xcomp = x;
-    this.ycomp = y;
-    this.offset = this.cumulativeOffset(element);
-
-    return (y >= this.offset[1] &&
-            y <  this.offset[1] + element.offsetHeight &&
-            x >= this.offset[0] &&
-            x <  this.offset[0] + element.offsetWidth);
-  },
-
-  withinIncludingScrolloffsets: function(element, x, y) {
-    var offsetcache = this.realOffset(element);
-
-    this.xcomp = x + offsetcache[0] - this.deltaX;
-    this.ycomp = y + offsetcache[1] - this.deltaY;
-    this.offset = this.cumulativeOffset(element);
-
-    return (this.ycomp >= this.offset[1] &&
-            this.ycomp <  this.offset[1] + element.offsetHeight &&
-            this.xcomp >= this.offset[0] &&
-            this.xcomp <  this.offset[0] + element.offsetWidth);
-  },
-
-  // within must be called directly before
-  overlap: function(mode, element) {
-    if (!mode) return 0;
-    if (mode == 'vertical')
-      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
-        element.offsetHeight;
-    if (mode == 'horizontal')
-      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
-        element.offsetWidth;
-  },
-
-  page: function(forElement) {
-    var valueT = 0, valueL = 0;
-
-    var element = forElement;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-
-      // Safari fix
-      if (element.offsetParent==document.body)
-        if (Element.getStyle(element,'position')=='absolute') break;
-
-    } while (element = element.offsetParent);
-
-    element = forElement;
-    do {
-      if (!window.opera || element.tagName=='BODY') {
-        valueT -= element.scrollTop  || 0;
-        valueL -= element.scrollLeft || 0;
-      }
-    } while (element = element.parentNode);
-
-    return [valueL, valueT];
-  },
-
-  clone: function(source, target) {
-    var options = Object.extend({
-      setLeft:    true,
-      setTop:     true,
-      setWidth:   true,
-      setHeight:  true,
-      offsetTop:  0,
-      offsetLeft: 0
-    }, arguments[2] || {})
-
-    // find page position of source
-    source = $(source);
-    var p = Position.page(source);
-
-    // find coordinate system to use
-    target = $(target);
-    var delta = [0, 0];
-    var parent = null;
-    // delta [0,0] will do fine with position: fixed elements,
-    // position:absolute needs offsetParent deltas
-    if (Element.getStyle(target,'position') == 'absolute') {
-      parent = Position.offsetParent(target);
-      delta = Position.page(parent);
-    }
-
-    // correct by body offsets (fixes Safari)
-    if (parent == document.body) {
-      delta[0] -= document.body.offsetLeft;
-      delta[1] -= document.body.offsetTop;
-    }
-
-    // set position
-    if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
-    if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
-    if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
-    if(options.setHeight) target.style.height = source.offsetHeight + 'px';
-  },
-
-  absolutize: function(element) {
-    element = $(element);
-    if (element.style.position == 'absolute') return;
-    Position.prepare();
-
-    var offsets = Position.positionedOffset(element);
-    var top     = offsets[1];
-    var left    = offsets[0];
-    var width   = element.clientWidth;
-    var height  = element.clientHeight;
-
-    element._originalLeft   = left - parseFloat(element.style.left  || 0);
-    element._originalTop    = top  - parseFloat(element.style.top || 0);
-    element._originalWidth  = element.style.width;
-    element._originalHeight = element.style.height;
-
-    element.style.position = 'absolute';
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.width  = width + 'px';
-    element.style.height = height + 'px';
-  },
-
-  relativize: function(element) {
-    element = $(element);
-    if (element.style.position == 'relative') return;
-    Position.prepare();
-
-    element.style.position = 'relative';
-    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
-    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
-
-    element.style.top    = top + 'px';
-    element.style.left   = left + 'px';
-    element.style.height = element._originalHeight;
-    element.style.width  = element._originalWidth;
-  }
-}
-
-// Safari returns margins on body which is incorrect if the child is absolutely
-// positioned.  For performance reasons, redefine Position.cumulativeOffset for
-// KHTML/WebKit only.
-if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
-  Position.cumulativeOffset = function(element) {
-    var valueT = 0, valueL = 0;
-    do {
-      valueT += element.offsetTop  || 0;
-      valueL += element.offsetLeft || 0;
-      if (element.offsetParent == document.body)
-        if (Element.getStyle(element, 'position') == 'absolute') break;
-
-      element = element.offsetParent;
-    } while (element);
-
-    return [valueL, valueT];
-  }
-}
-
-Element.addMethods();
\ No newline at end of file
diff --git a/lib/web/extjs/adapter/prototype/scriptaculous.js b/lib/web/extjs/adapter/prototype/scriptaculous.js
deleted file mode 100644
index 442c1e838c546ed14097f5d8553670104dd496fd..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/prototype/scriptaculous.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Ext JS Library 1.0 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-// script.aculo.us scriptaculous.js v1.7.0, Fri Jan 19 19:16:36 CET 2007
-
-// Copyright (c) 2005, 2006 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// 
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-// 
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
-  Version: '1.7.0',
-  require: function(libraryName) {
-    // inserting via DOM fails in Safari 2.0, so brute force approach
-    document.write('<script type="text/javascript" src="'+libraryName+'"></script>');
-  },
-  load: function() {
-    if((typeof Prototype=='undefined') || 
-       (typeof Element == 'undefined') || 
-       (typeof Element.Methods=='undefined') ||
-       parseFloat(Prototype.Version.split(".")[0] + "." +
-                  Prototype.Version.split(".")[1]) < 1.5)
-       throw("script.aculo.us requires the Prototype JavaScript framework >= 1.5.0");
-    
-    $A(document.getElementsByTagName("script")).findAll( function(s) {
-      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
-    }).each( function(s) {
-      var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
-      var includes = s.src.match(/\?.*load=([a-z,]*)/);
-      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider').split(',').each(
-       function(include) { Scriptaculous.require(path+include+'.js') });
-    });
-  }
-}
-
-Scriptaculous.load();
\ No newline at end of file
diff --git a/lib/web/extjs/adapter/yui/ext-yui-adapter.js b/lib/web/extjs/adapter/yui/ext-yui-adapter.js
deleted file mode 100644
index 816ce9a4348ba78eb217f96a58b584f2bfd14f36..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/yui/ext-yui-adapter.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext={};window["undefined"]=window["undefined"];Ext.apply=function(o,c,defaults){if(defaults){Ext.apply(o,defaults);}
-if(o&&c&&typeof c=='object'){for(var p in c){o[p]=c[p];}}
-return o;};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isIE=ua.indexOf("msie")>-1,isIE7=ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true);}catch(e){}}
-Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p];}}}
-return o;},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o);});return;}
-var cache={};for(var b in o){var parts=b.split('@');if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s);}
-cache[s].on(parts[1],o[b]);}}
-cache=null;},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id;},extend:function(){var io=function(o){for(var m in o){this[m]=o[m];}};return function(sb,sp,overrides){if(typeof sp=='object'){overrides=sp;sp=sb;sb=function(){sp.apply(this,arguments);};}
-var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==Object.prototype.constructor){spp.constructor=sp;}
-sb.override=function(o){Ext.override(sb,o);};sbp.override=io;sbp.__extcls=sb;Ext.override(sb,overrides);return sb;};}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method];}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval('if (typeof '+rt+' == "undefined"){'+rt+' = {};} o = '+rt+';');for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}},urlEncode:function(o){if(!o){return"";}
-var buf=[];for(var key in o){var ov=o[key];var type=typeof ov;if(type=='undefined'){buf.push(encodeURIComponent(key),"=&");}else if(type!="function"&&type!="object"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov),"&");}else if(ov instanceof Array){for(var i=0,len=ov.length;i<len;i++){buf.push(encodeURIComponent(key),"=",encodeURIComponent(ov[i]===undefined?'':ov[i]),"&");}}}
-buf.pop();return buf.join("");},urlDecode:function(string,overwrite){if(!string||!string.length){return{};}
-var obj={};var pairs=string.split('&');var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split('=');name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value;}else if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value);}else{obj[name].push(value);}}else{obj[name]=value;}}
-return obj;},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array];}
-for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i;};}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(a instanceof Array){r=r.concat(a);}else if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0));}else{r.push(a);}}
-return r;},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1");},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[]);}else{cb.apply(scope,args||[]);}}},getDom:function(el){if(!el){return null;}
-return el.dom?el.dom:(typeof el=='string'?document.getElementById(el):el);},getCmp:function(id){return Ext.ComponentMgr.get(id);},num:function(v,defaultValue){if(typeof v!='number'){return defaultValue;}
-return v;},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(as.dom){as.removeAllListeners();as.remove();continue;}
-if(typeof as.purgeListeners=='function'){as.purgeListeners();}
-if(typeof as.destroy=='function'){as.destroy();}}}},isOpera:isOpera,isSafari:isSafari,isIE:isIE,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isWindows:isWindows,isMac:isMac,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});})();Ext.namespace("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app");Ext.apply(Function.prototype,{createCallback:function(){var args=arguments;var method=this;return function(){return method.apply(window,args);};},createDelegate:function(obj,args,appendArgs){var method=this;return function(){var callArgs=args||arguments;if(appendArgs===true){callArgs=Array.prototype.slice.call(arguments,0);callArgs=callArgs.concat(args);}else if(typeof appendArgs=="number"){callArgs=Array.prototype.slice.call(arguments,0);var applyArgs=[appendArgs,0].concat(args);Array.prototype.splice.apply(callArgs,applyArgs);}
-return method.apply(obj||window,callArgs);};},defer:function(millis,obj,args,appendArgs){var fn=this.createDelegate(obj,args,appendArgs);if(millis){return setTimeout(fn,millis);}
-fn();return 0;},createSequence:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){var retval=method.apply(this||window,arguments);fcn.apply(scope||this||window,arguments);return retval;};},createInterceptor:function(fcn,scope){if(typeof fcn!="function"){return this;}
-var method=this;return function(){fcn.target=this;fcn.method=method;if(fcn.apply(scope||this||window,arguments)===false){return;}
-return method.apply(this||window,arguments);};}});Ext.applyIf(String,{escape:function(string){return string.replace(/('|\\)/g,"\\$1");},leftPad:function(val,size,ch){var result=new String(val);if(ch===null||ch===undefined||ch===''){ch=" ";}
-while(result.length<size){result=ch+result;}
-return result;},format:function(format){var args=Array.prototype.slice.call(arguments,1);return format.replace(/\{(\d+)\}/g,function(m,i){return args[i];});}});String.prototype.toggle=function(value,other){return this==value?other:value;};Ext.applyIf(Number.prototype,{constrain:function(min,max){return Math.min(Math.max(this,min),max);}});Ext.applyIf(Array.prototype,{indexOf:function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
-return-1;},remove:function(o){var index=this.indexOf(o);if(index!=-1){this.splice(index,1);}}});Date.prototype.getElapsed=function(date){return Math.abs((date||new Date()).getTime()-this.getTime());};
-
-if(typeof YAHOO=="undefined"){throw"Unable to load Ext, core YUI utilities (yahoo, dom, event) not found.";}
-(function(){var E=YAHOO.util.Event;var D=YAHOO.util.Dom;var CN=YAHOO.util.Connect;var ES=YAHOO.util.Easing;var A=YAHOO.util.Anim;var libFlyweight;Ext.lib.Dom={getViewWidth:function(full){return full?D.getDocumentWidth():D.getViewportWidth();},getViewHeight:function(full){return full?D.getDocumentHeight():D.getViewportHeight();},isAncestor:function(haystack,needle){return D.isAncestor(haystack,needle);},getRegion:function(el){return D.getRegion(el);},getY:function(el){return this.getXY(el)[1];},getX:function(el){return this.getXY(el)[0];},getXY:function(el){var p,pe,b,scroll,bd=document.body;el=Ext.getDom(el);if(el.getBoundingClientRect){b=el.getBoundingClientRect();scroll=fly(document).getScroll();return[b.left+scroll.left,b.top+scroll.top];}else{var x=el.offsetLeft,y=el.offsetTop;p=el.offsetParent;var hasAbsolute=false;if(p!=el){while(p){x+=p.offsetLeft;y+=p.offsetTop;if(Ext.isSafari&&!hasAbsolute&&fly(p).getStyle("position")=="absolute"){hasAbsolute=true;}
-if(Ext.isGecko){pe=fly(p);var bt=parseInt(pe.getStyle("borderTopWidth"),10)||0;var bl=parseInt(pe.getStyle("borderLeftWidth"),10)||0;x+=bl;y+=bt;if(p!=el&&pe.getStyle('overflow')!='visible'){x+=bl;y+=bt;}}
-p=p.offsetParent;}}
-if(Ext.isSafari&&(hasAbsolute||fly(el).getStyle("position")=="absolute")){x-=bd.offsetLeft;y-=bd.offsetTop;}}
-p=el.parentNode;while(p&&p!=bd){if(!Ext.isOpera||(Ext.isOpera&&p.tagName!='TR'&&fly(p).getStyle("display")!="inline")){x-=p.scrollLeft;y-=p.scrollTop;}
-p=p.parentNode;}
-return[x,y];},setXY:function(el,xy){el=Ext.fly(el,'_setXY');el.position();var pts=el.translatePoints(xy);if(xy[0]!==false){el.dom.style.left=pts.left+"px";}
-if(xy[1]!==false){el.dom.style.top=pts.top+"px";}},setX:function(el,x){this.setXY(el,[x,false]);},setY:function(el,y){this.setXY(el,[false,y]);}};Ext.lib.Event={getPageX:function(e){return E.getPageX(e.browserEvent||e);},getPageY:function(e){return E.getPageY(e.browserEvent||e);},getXY:function(e){return E.getXY(e.browserEvent||e);},getTarget:function(e){return E.getTarget(e.browserEvent||e);},getRelatedTarget:function(e){return E.getRelatedTarget(e.browserEvent||e);},on:function(el,eventName,fn,scope,override){E.on(el,eventName,fn,scope,override);},un:function(el,eventName,fn){E.removeListener(el,eventName,fn);},purgeElement:function(el){E.purgeElement(el);},preventDefault:function(e){E.preventDefault(e.browserEvent||e);},stopPropagation:function(e){E.stopPropagation(e.browserEvent||e);},stopEvent:function(e){E.stopEvent(e.browserEvent||e);},onAvailable:function(el,fn,scope,override){return E.onAvailable(el,fn,scope,override);}};Ext.lib.Ajax={request:function(method,uri,cb,data){return CN.asyncRequest(method,uri,cb,data);},formRequest:function(form,uri,cb,data,isUpload,sslUri){CN.setForm(form,isUpload,sslUri);return CN.asyncRequest(Ext.getDom(form).method||'POST',uri,cb,data);},isCallInProgress:function(trans){return CN.isCallInProgress(trans);},abort:function(trans){return CN.abort(trans);},serializeForm:function(form){var d=CN.setForm(form.dom||form);CN.resetFormState();return d;}};Ext.lib.Region=YAHOO.util.Region;Ext.lib.Point=YAHOO.util.Point;Ext.lib.Anim={scroll:function(el,args,duration,easing,cb,scope){this.run(el,args,duration,easing,cb,scope,YAHOO.util.Scroll);},motion:function(el,args,duration,easing,cb,scope){this.run(el,args,duration,easing,cb,scope,YAHOO.util.Motion);},color:function(el,args,duration,easing,cb,scope){this.run(el,args,duration,easing,cb,scope,YAHOO.util.ColorAnim);},run:function(el,args,duration,easing,cb,scope,type){type=type||YAHOO.util.Anim;if(typeof easing=="string"){easing=YAHOO.util.Easing[easing];}
-var anim=new type(el,args,duration,easing);anim.animateX(function(){Ext.callback(cb,scope);});return anim;}};function fly(el){if(!libFlyweight){libFlyweight=new Ext.Element.Flyweight();}
-libFlyweight.dom=el;return libFlyweight;}
-if(Ext.isIE){YAHOO.util.Event.on(window,"unload",function(){var p=Function.prototype;delete p.createSequence;delete p.defer;delete p.createDelegate;delete p.createCallback;delete p.createInterceptor;});}
-if(YAHOO.util.Anim){YAHOO.util.Anim.prototype.animateX=function(callback,scope){var f=function(){this.onComplete.unsubscribe(f);if(typeof callback=="function"){callback.call(scope||this,this);}};this.onComplete.subscribe(f,this,true);this.animate();};}
-if(YAHOO.util.DragDrop&&Ext.dd.DragDrop){YAHOO.util.DragDrop.defaultPadding=Ext.dd.DragDrop.defaultPadding;YAHOO.util.DragDrop.constrainTo=Ext.dd.DragDrop.constrainTo;}
-YAHOO.util.Dom.getXY=function(el){var f=function(el){return Ext.lib.Dom.getXY(el);};return YAHOO.util.Dom.batch(el,f,YAHOO.util.Dom,true);};if(YAHOO.util.AnimMgr){YAHOO.util.AnimMgr.fps=1000;}
-YAHOO.util.Region.prototype.adjust=function(t,l,b,r){this.top+=t;this.left+=l;this.right+=r;this.bottom+=b;return this;};})();
diff --git a/lib/web/extjs/adapter/yui/yui-utilities.js b/lib/web/extjs/adapter/yui/yui-utilities.js
deleted file mode 100644
index 06e38e7dbcd5ee152d32dc780c678c2121c3e53f..0000000000000000000000000000000000000000
--- a/lib/web/extjs/adapter/yui/yui-utilities.js
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-if(typeof YAHOO=="undefined"){var YAHOO={};}
-YAHOO.namespace=function(){var a=arguments,o=null,i,j,d;for(i=0;i<a.length;i=i+1){d=a[i].split(".");o=YAHOO;for(j=(d[0]=="YAHOO")?1:0;j<d.length;j=j+1){o[d[j]]=o[d[j]]||{};o=o[d[j]];}}
-return o;};YAHOO.log=function(msg,cat,src){var l=YAHOO.widget.Logger;if(l&&l.log){return l.log(msg,cat,src);}else{return false;}};YAHOO.init=function(){this.namespace("util","widget","example");if(typeof YAHOO_config!="undefined"){var l=YAHOO_config.listener,ls=YAHOO.env.listeners,unique=true,i;if(l){for(i=0;i<ls.length;i=i+1){if(ls[i]==l){unique=false;break;}}
-if(unique){ls.push(l);}}}};YAHOO.register=function(name,mainClass,data){var mods=YAHOO.env.modules;if(!mods[name]){mods[name]={versions:[],builds:[]};}
-var m=mods[name],v=data.version,b=data.build,ls=YAHOO.env.listeners;m.name=name;m.version=v;m.build=b;m.versions.push(v);m.builds.push(b);m.mainClass=mainClass;for(var i=0;i<ls.length;i=i+1){ls[i](m);}
-if(mainClass){mainClass.VERSION=v;mainClass.BUILD=b;}else{YAHOO.log("mainClass is undefined for module "+name,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[],getVersion:function(name){return YAHOO.env.modules[name]||null;}};YAHOO.lang={isArray:function(obj){if(obj.constructor&&obj.constructor.toString().indexOf('Array')>-1){return true;}else{return YAHOO.lang.isObject(obj)&&obj.constructor==Array;}},isBoolean:function(obj){return typeof obj=='boolean';},isFunction:function(obj){return typeof obj=='function';},isNull:function(obj){return obj===null;},isNumber:function(obj){return typeof obj=='number'&&isFinite(obj);},isObject:function(obj){return typeof obj=='object'||YAHOO.lang.isFunction(obj);},isString:function(obj){return typeof obj=='string';},isUndefined:function(obj){return typeof obj=='undefined';},hasOwnProperty:function(obj,prop){if(Object.prototype.hasOwnProperty){return obj.hasOwnProperty(prop);}
-return!YAHOO.lang.isUndefined(obj[prop])&&obj.constructor.prototype[prop]!==obj[prop];},extend:function(subc,superc,overrides){var F=function(){};F.prototype=superc.prototype;subc.prototype=new F();subc.prototype.constructor=subc;subc.superclass=superc.prototype;if(superc.prototype.constructor==Object.prototype.constructor){superc.prototype.constructor=superc;}
-if(overrides){for(var i in overrides){subc.prototype[i]=overrides[i];}}},augment:function(r,s){var rp=r.prototype,sp=s.prototype,a=arguments,i,p;if(a[2]){for(i=2;i<a.length;i=i+1){rp[a[i]]=sp[a[i]];}}else{for(p in sp){if(!rp[p]){rp[p]=sp[p];}}}}};YAHOO.init();YAHOO.util.Lang=YAHOO.lang;YAHOO.augment=YAHOO.lang.augment;YAHOO.extend=YAHOO.lang.extend;YAHOO.register("yahoo",YAHOO,{version:"2.2.0",build:"127"});
-
-(function(){var Y=YAHOO.util,getStyle,setStyle,id_counter=0,propertyCache={};var ua=navigator.userAgent.toLowerCase(),isOpera=(ua.indexOf('opera')>-1),isSafari=(ua.indexOf('safari')>-1),isGecko=(!isOpera&&!isSafari&&ua.indexOf('gecko')>-1),isIE=(!isOpera&&ua.indexOf('msie')>-1);var patterns={HYPHEN:/(-[a-z])/i};var toCamel=function(property){if(!patterns.HYPHEN.test(property)){return property;}
-if(propertyCache[property]){return propertyCache[property];}
-while(patterns.HYPHEN.exec(property)){property=property.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}
-propertyCache[property]=property;return property;};if(document.defaultView&&document.defaultView.getComputedStyle){getStyle=function(el,property){var value=null;var computed=document.defaultView.getComputedStyle(el,'');if(computed){value=computed[toCamel(property)];}
-return el.style[property]||value;};}else if(document.documentElement.currentStyle&&isIE){getStyle=function(el,property){switch(toCamel(property)){case'opacity':var val=100;try{val=el.filters['DXImageTransform.Microsoft.Alpha'].opacity;}catch(e){try{val=el.filters('alpha').opacity;}catch(e){}}
-return val/100;break;default:var value=el.currentStyle?el.currentStyle[property]:null;return(el.style[property]||value);}};}else{getStyle=function(el,property){return el.style[property];};}
-if(isIE){setStyle=function(el,property,val){switch(property){case'opacity':if(typeof el.style.filter=='string'){el.style.filter='alpha(opacity='+val*100+')';if(!el.currentStyle||!el.currentStyle.hasLayout){el.style.zoom=1;}}
-break;default:el.style[property]=val;}};}else{setStyle=function(el,property,val){el.style[property]=val;};}
-YAHOO.util.Dom={get:function(el){if(!el){return null;}
-if(typeof el!='string'&&!(el instanceof Array)){return el;}
-if(typeof el=='string'){return document.getElementById(el);}
-else{var collection=[];for(var i=0,len=el.length;i<len;++i){collection[collection.length]=Y.Dom.get(el[i]);}
-return collection;}
-return null;},getStyle:function(el,property){property=toCamel(property);var f=function(element){return getStyle(element,property);};return Y.Dom.batch(el,f,Y.Dom,true);},setStyle:function(el,property,val){property=toCamel(property);var f=function(element){setStyle(element,property,val);};Y.Dom.batch(el,f,Y.Dom,true);},getXY:function(el){var f=function(el){if(el.parentNode===null||el.offsetParent===null||this.getStyle(el,'display')=='none'){return false;}
-var parentNode=null;var pos=[];var box;if(el.getBoundingClientRect){box=el.getBoundingClientRect();var doc=document;if(!this.inDocument(el)&&parent.document!=document){doc=parent.document;if(!this.isAncestor(doc.documentElement,el)){return false;}}
-var scrollTop=Math.max(doc.documentElement.scrollTop,doc.body.scrollTop);var scrollLeft=Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft);return[box.left+scrollLeft,box.top+scrollTop];}
-else{pos=[el.offsetLeft,el.offsetTop];parentNode=el.offsetParent;if(parentNode!=el){while(parentNode){pos[0]+=parentNode.offsetLeft;pos[1]+=parentNode.offsetTop;parentNode=parentNode.offsetParent;}}
-if(isSafari&&this.getStyle(el,'position')=='absolute'){pos[0]-=document.body.offsetLeft;pos[1]-=document.body.offsetTop;}}
-if(el.parentNode){parentNode=el.parentNode;}
-else{parentNode=null;}
-while(parentNode&&parentNode.tagName.toUpperCase()!='BODY'&&parentNode.tagName.toUpperCase()!='HTML')
-{if(Y.Dom.getStyle(parentNode,'display')!='inline'){pos[0]-=parentNode.scrollLeft;pos[1]-=parentNode.scrollTop;}
-if(parentNode.parentNode){parentNode=parentNode.parentNode;}else{parentNode=null;}}
-return pos;};return Y.Dom.batch(el,f,Y.Dom,true);},getX:function(el){var f=function(el){return Y.Dom.getXY(el)[0];};return Y.Dom.batch(el,f,Y.Dom,true);},getY:function(el){var f=function(el){return Y.Dom.getXY(el)[1];};return Y.Dom.batch(el,f,Y.Dom,true);},setXY:function(el,pos,noRetry){var f=function(el){var style_pos=this.getStyle(el,'position');if(style_pos=='static'){this.setStyle(el,'position','relative');style_pos='relative';}
-var pageXY=this.getXY(el);if(pageXY===false){return false;}
-var delta=[parseInt(this.getStyle(el,'left'),10),parseInt(this.getStyle(el,'top'),10)];if(isNaN(delta[0])){delta[0]=(style_pos=='relative')?0:el.offsetLeft;}
-if(isNaN(delta[1])){delta[1]=(style_pos=='relative')?0:el.offsetTop;}
-if(pos[0]!==null){el.style.left=pos[0]-pageXY[0]+delta[0]+'px';}
-if(pos[1]!==null){el.style.top=pos[1]-pageXY[1]+delta[1]+'px';}
-if(!noRetry){var newXY=this.getXY(el);if((pos[0]!==null&&newXY[0]!=pos[0])||(pos[1]!==null&&newXY[1]!=pos[1])){this.setXY(el,pos,true);}}};Y.Dom.batch(el,f,Y.Dom,true);},setX:function(el,x){Y.Dom.setXY(el,[x,null]);},setY:function(el,y){Y.Dom.setXY(el,[null,y]);},getRegion:function(el){var f=function(el){var region=new Y.Region.getRegion(el);return region;};return Y.Dom.batch(el,f,Y.Dom,true);},getClientWidth:function(){return Y.Dom.getViewportWidth();},getClientHeight:function(){return Y.Dom.getViewportHeight();},getElementsByClassName:function(className,tag,root){var method=function(el){return Y.Dom.hasClass(el,className);};return Y.Dom.getElementsBy(method,tag,root);},hasClass:function(el,className){var re=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)');var f=function(el){return re.test(el['className']);};return Y.Dom.batch(el,f,Y.Dom,true);},addClass:function(el,className){var f=function(el){if(this.hasClass(el,className)){return;}
-el['className']=[el['className'],className].join(' ');};Y.Dom.batch(el,f,Y.Dom,true);},removeClass:function(el,className){var re=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)','g');var f=function(el){if(!this.hasClass(el,className)){return;}
-var c=el['className'];el['className']=c.replace(re,' ');if(this.hasClass(el,className)){this.removeClass(el,className);}};Y.Dom.batch(el,f,Y.Dom,true);},replaceClass:function(el,oldClassName,newClassName){if(oldClassName===newClassName){return false;}
-var re=new RegExp('(?:^|\\s+)'+oldClassName+'(?:\\s+|$)','g');var f=function(el){if(!this.hasClass(el,oldClassName)){this.addClass(el,newClassName);return;}
-el['className']=el['className'].replace(re,' '+newClassName+' ');if(this.hasClass(el,oldClassName)){this.replaceClass(el,oldClassName,newClassName);}};Y.Dom.batch(el,f,Y.Dom,true);},generateId:function(el,prefix){prefix=prefix||'yui-gen';el=el||{};var f=function(el){if(el){el=Y.Dom.get(el);}else{el={};}
-if(!el.id){el.id=prefix+id_counter++;}
-return el.id;};return Y.Dom.batch(el,f,Y.Dom,true);},isAncestor:function(haystack,needle){haystack=Y.Dom.get(haystack);if(!haystack||!needle){return false;}
-var f=function(needle){if(haystack.contains&&!isSafari){return haystack.contains(needle);}
-else if(haystack.compareDocumentPosition){return!!(haystack.compareDocumentPosition(needle)&16);}
-else{var parent=needle.parentNode;while(parent){if(parent==haystack){return true;}
-else if(!parent.tagName||parent.tagName.toUpperCase()=='HTML'){return false;}
-parent=parent.parentNode;}
-return false;}};return Y.Dom.batch(needle,f,Y.Dom,true);},inDocument:function(el){var f=function(el){return this.isAncestor(document.documentElement,el);};return Y.Dom.batch(el,f,Y.Dom,true);},getElementsBy:function(method,tag,root){tag=tag||'*';var nodes=[];if(root){root=Y.Dom.get(root);if(!root){return nodes;}}else{root=document;}
-var elements=root.getElementsByTagName(tag);if(!elements.length&&(tag=='*'&&root.all)){elements=root.all;}
-for(var i=0,len=elements.length;i<len;++i){if(method(elements[i])){nodes[nodes.length]=elements[i];}}
-return nodes;},batch:function(el,method,o,override){var id=el;el=Y.Dom.get(el);var scope=(override)?o:window;if(!el||el.tagName||!el.length){if(!el){return false;}
-return method.call(scope,el,o);}
-var collection=[];for(var i=0,len=el.length;i<len;++i){if(!el[i]){id=el[i];}
-collection[collection.length]=method.call(scope,el[i],o);}
-return collection;},getDocumentHeight:function(){var scrollHeight=(document.compatMode!='CSS1Compat')?document.body.scrollHeight:document.documentElement.scrollHeight;var h=Math.max(scrollHeight,Y.Dom.getViewportHeight());return h;},getDocumentWidth:function(){var scrollWidth=(document.compatMode!='CSS1Compat')?document.body.scrollWidth:document.documentElement.scrollWidth;var w=Math.max(scrollWidth,Y.Dom.getViewportWidth());return w;},getViewportHeight:function(){var height=self.innerHeight;var mode=document.compatMode;if((mode||isIE)&&!isOpera){height=(mode=='CSS1Compat')?document.documentElement.clientHeight:document.body.clientHeight;}
-return height;},getViewportWidth:function(){var width=self.innerWidth;var mode=document.compatMode;if(mode||isIE){width=(mode=='CSS1Compat')?document.documentElement.clientWidth:document.body.clientWidth;}
-return width;}};})();YAHOO.util.Region=function(t,r,b,l){this.top=t;this[1]=t;this.right=r;this.bottom=b;this.left=l;this[0]=l;};YAHOO.util.Region.prototype.contains=function(region){return(region.left>=this.left&&region.right<=this.right&&region.top>=this.top&&region.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(region){var t=Math.max(this.top,region.top);var r=Math.min(this.right,region.right);var b=Math.min(this.bottom,region.bottom);var l=Math.max(this.left,region.left);if(b>=t&&r>=l){return new YAHOO.util.Region(t,r,b,l);}else{return null;}};YAHOO.util.Region.prototype.union=function(region){var t=Math.min(this.top,region.top);var r=Math.max(this.right,region.right);var b=Math.max(this.bottom,region.bottom);var l=Math.min(this.left,region.left);return new YAHOO.util.Region(t,r,b,l);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(el){var p=YAHOO.util.Dom.getXY(el);var t=p[1];var r=p[0]+el.offsetWidth;var b=p[1]+el.offsetHeight;var l=p[0];return new YAHOO.util.Region(t,r,b,l);};YAHOO.util.Point=function(x,y){if(x instanceof Array){y=x[1];x=x[0];}
-this.x=this.right=this.left=this[0]=x;this.y=this.top=this.bottom=this[1]=y;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.2.0",build:"127"});
-
-if(!YAHOO.util.Event){YAHOO.util.Event=function(){var loadComplete=false;var listeners=[];var unloadListeners=[];var legacyEvents=[];var legacyHandlers=[];var retryCount=0;var onAvailStack=[];var legacyMap=[];var counter=0;var lastError=null;return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,isSafari:(/KHTML/gi).test(navigator.userAgent),webkit:function(){var v=navigator.userAgent.match(/AppleWebKit\/([^ ]*)/);if(v&&v[1]){return v[1];}
-return null;}(),isIE:(!this.webkit&&!navigator.userAgent.match(/opera/gi)&&navigator.userAgent.match(/msie/gi)),_interval:null,startInterval:function(){if(!this._interval){var self=this;var callback=function(){self._tryPreloadAttach();};this._interval=setInterval(callback,this.POLL_INTERVAL);}},onAvailable:function(p_id,p_fn,p_obj,p_override){onAvailStack.push({id:p_id,fn:p_fn,obj:p_obj,override:p_override,checkReady:false});retryCount=this.POLL_RETRYS;this.startInterval();},onContentReady:function(p_id,p_fn,p_obj,p_override){onAvailStack.push({id:p_id,fn:p_fn,obj:p_obj,override:p_override,checkReady:true});retryCount=this.POLL_RETRYS;this.startInterval();},addListener:function(el,sType,fn,obj,override){if(!fn||!fn.call){return false;}
-if(this._isValidCollection(el)){var ok=true;for(var i=0,len=el.length;i<len;++i){ok=this.on(el[i],sType,fn,obj,override)&&ok;}
-return ok;}else if(typeof el=="string"){var oEl=this.getEl(el);if(oEl){el=oEl;}else{this.onAvailable(el,function(){YAHOO.util.Event.on(el,sType,fn,obj,override);});return true;}}
-if(!el){return false;}
-if("unload"==sType&&obj!==this){unloadListeners[unloadListeners.length]=[el,sType,fn,obj,override];return true;}
-var scope=el;if(override){if(override===true){scope=obj;}else{scope=override;}}
-var wrappedFn=function(e){return fn.call(scope,YAHOO.util.Event.getEvent(e),obj);};var li=[el,sType,fn,wrappedFn,scope];var index=listeners.length;listeners[index]=li;if(this.useLegacyEvent(el,sType)){var legacyIndex=this.getLegacyIndex(el,sType);if(legacyIndex==-1||el!=legacyEvents[legacyIndex][0]){legacyIndex=legacyEvents.length;legacyMap[el.id+sType]=legacyIndex;legacyEvents[legacyIndex]=[el,sType,el["on"+sType]];legacyHandlers[legacyIndex]=[];el["on"+sType]=function(e){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(e),legacyIndex);};}
-legacyHandlers[legacyIndex].push(li);}else{try{this._simpleAdd(el,sType,wrappedFn,false);}catch(ex){this.lastError=ex;this.removeListener(el,sType,fn);return false;}}
-return true;},fireLegacyEvent:function(e,legacyIndex){var ok=true,le,lh,li,scope,ret;lh=legacyHandlers[legacyIndex];for(var i=0,len=lh.length;i<len;++i){li=lh[i];if(li&&li[this.WFN]){scope=li[this.ADJ_SCOPE];ret=li[this.WFN].call(scope,e);ok=(ok&&ret);}}
-le=legacyEvents[legacyIndex];if(le&&le[2]){le[2](e);}
-return ok;},getLegacyIndex:function(el,sType){var key=this.generateId(el)+sType;if(typeof legacyMap[key]=="undefined"){return-1;}else{return legacyMap[key];}},useLegacyEvent:function(el,sType){if(this.webkit&&("click"==sType||"dblclick"==sType)){var v=parseInt(this.webkit,10);if(!isNaN(v)&&v<418){return true;}}
-return false;},removeListener:function(el,sType,fn){var i,len;if(typeof el=="string"){el=this.getEl(el);}else if(this._isValidCollection(el)){var ok=true;for(i=0,len=el.length;i<len;++i){ok=(this.removeListener(el[i],sType,fn)&&ok);}
-return ok;}
-if(!fn||!fn.call){return this.purgeElement(el,false,sType);}
-if("unload"==sType){for(i=0,len=unloadListeners.length;i<len;i++){var li=unloadListeners[i];if(li&&li[0]==el&&li[1]==sType&&li[2]==fn){unloadListeners.splice(i,1);return true;}}
-return false;}
-var cacheItem=null;var index=arguments[3];if("undefined"==typeof index){index=this._getCacheIndex(el,sType,fn);}
-if(index>=0){cacheItem=listeners[index];}
-if(!el||!cacheItem){return false;}
-if(this.useLegacyEvent(el,sType)){var legacyIndex=this.getLegacyIndex(el,sType);var llist=legacyHandlers[legacyIndex];if(llist){for(i=0,len=llist.length;i<len;++i){li=llist[i];if(li&&li[this.EL]==el&&li[this.TYPE]==sType&&li[this.FN]==fn){llist.splice(i,1);break;}}}}else{try{this._simpleRemove(el,sType,cacheItem[this.WFN],false);}catch(ex){this.lastError=ex;return false;}}
-delete listeners[index][this.WFN];delete listeners[index][this.FN];listeners.splice(index,1);return true;},getTarget:function(ev,resolveTextNode){var t=ev.target||ev.srcElement;return this.resolveTextNode(t);},resolveTextNode:function(node){if(node&&3==node.nodeType){return node.parentNode;}else{return node;}},getPageX:function(ev){var x=ev.pageX;if(!x&&0!==x){x=ev.clientX||0;if(this.isIE){x+=this._getScrollLeft();}}
-return x;},getPageY:function(ev){var y=ev.pageY;if(!y&&0!==y){y=ev.clientY||0;if(this.isIE){y+=this._getScrollTop();}}
-return y;},getXY:function(ev){return[this.getPageX(ev),this.getPageY(ev)];},getRelatedTarget:function(ev){var t=ev.relatedTarget;if(!t){if(ev.type=="mouseout"){t=ev.toElement;}else if(ev.type=="mouseover"){t=ev.fromElement;}}
-return this.resolveTextNode(t);},getTime:function(ev){if(!ev.time){var t=new Date().getTime();try{ev.time=t;}catch(ex){this.lastError=ex;return t;}}
-return ev.time;},stopEvent:function(ev){this.stopPropagation(ev);this.preventDefault(ev);},stopPropagation:function(ev){if(ev.stopPropagation){ev.stopPropagation();}else{ev.cancelBubble=true;}},preventDefault:function(ev){if(ev.preventDefault){ev.preventDefault();}else{ev.returnValue=false;}},getEvent:function(e){var ev=e||window.event;if(!ev){var c=this.getEvent.caller;while(c){ev=c.arguments[0];if(ev&&Event==ev.constructor){break;}
-c=c.caller;}}
-return ev;},getCharCode:function(ev){return ev.charCode||ev.keyCode||0;},_getCacheIndex:function(el,sType,fn){for(var i=0,len=listeners.length;i<len;++i){var li=listeners[i];if(li&&li[this.FN]==fn&&li[this.EL]==el&&li[this.TYPE]==sType){return i;}}
-return-1;},generateId:function(el){var id=el.id;if(!id){id="yuievtautoid-"+counter;++counter;el.id=id;}
-return id;},_isValidCollection:function(o){return(o&&o.length&&typeof o!="string"&&!o.tagName&&!o.alert&&typeof o[0]!="undefined");},elCache:{},getEl:function(id){return document.getElementById(id);},clearCache:function(){},_load:function(e){loadComplete=true;var EU=YAHOO.util.Event;if(this.isIE){EU._simpleRemove(window,"load",EU._load);}},_tryPreloadAttach:function(){if(this.locked){return false;}
-this.locked=true;var tryAgain=!loadComplete;if(!tryAgain){tryAgain=(retryCount>0);}
-var notAvail=[];for(var i=0,len=onAvailStack.length;i<len;++i){var item=onAvailStack[i];if(item){var el=this.getEl(item.id);if(el){if(!item.checkReady||loadComplete||el.nextSibling||(document&&document.body)){var scope=el;if(item.override){if(item.override===true){scope=item.obj;}else{scope=item.override;}}
-item.fn.call(scope,item.obj);onAvailStack[i]=null;}}else{notAvail.push(item);}}}
-retryCount=(notAvail.length===0)?0:retryCount-1;if(tryAgain){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}
-this.locked=false;return true;},purgeElement:function(el,recurse,sType){var elListeners=this.getListeners(el,sType);if(elListeners){for(var i=0,len=elListeners.length;i<len;++i){var l=elListeners[i];this.removeListener(el,l.type,l.fn);}}
-if(recurse&&el&&el.childNodes){for(i=0,len=el.childNodes.length;i<len;++i){this.purgeElement(el.childNodes[i],recurse,sType);}}},getListeners:function(el,sType){var results=[],searchLists;if(!sType){searchLists=[listeners,unloadListeners];}else if(sType=="unload"){searchLists=[unloadListeners];}else{searchLists=[listeners];}
-for(var j=0;j<searchLists.length;++j){var searchList=searchLists[j];if(searchList&&searchList.length>0){for(var i=0,len=searchList.length;i<len;++i){var l=searchList[i];if(l&&l[this.EL]===el&&(!sType||sType===l[this.TYPE])){results.push({type:l[this.TYPE],fn:l[this.FN],obj:l[this.OBJ],adjust:l[this.ADJ_SCOPE],index:i});}}}}
-return(results.length)?results:null;},_unload:function(e){var EU=YAHOO.util.Event,i,j,l,len,index;for(i=0,len=unloadListeners.length;i<len;++i){l=unloadListeners[i];if(l){var scope=window;if(l[EU.ADJ_SCOPE]){if(l[EU.ADJ_SCOPE]===true){scope=l[EU.OBJ];}else{scope=l[EU.ADJ_SCOPE];}}
-l[EU.FN].call(scope,EU.getEvent(e),l[EU.OBJ]);unloadListeners[i]=null;l=null;scope=null;}}
-unloadListeners=null;if(listeners&&listeners.length>0){j=listeners.length;while(j){index=j-1;l=listeners[index];if(l){EU.removeListener(l[EU.EL],l[EU.TYPE],l[EU.FN],index);}
-j=j-1;}
-l=null;EU.clearCache();}
-for(i=0,len=legacyEvents.length;i<len;++i){legacyEvents[i][0]=null;legacyEvents[i]=null;}
-legacyEvents=null;EU._simpleRemove(window,"unload",EU._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var dd=document.documentElement,db=document.body;if(dd&&(dd.scrollTop||dd.scrollLeft)){return[dd.scrollTop,dd.scrollLeft];}else if(db){return[db.scrollTop,db.scrollLeft];}else{return[0,0];}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(el,sType,fn,capture){el.addEventListener(sType,fn,(capture));};}else if(window.attachEvent){return function(el,sType,fn,capture){el.attachEvent("on"+sType,fn);};}else{return function(){};}}(),_simpleRemove:function(){if(window.removeEventListener){return function(el,sType,fn,capture){el.removeEventListener(sType,fn,(capture));};}else if(window.detachEvent){return function(el,sType,fn){el.detachEvent("on"+sType,fn);};}else{return function(){};}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;if(document&&document.body){EU._load();}else{EU._simpleAdd(window,"load",EU._load);}
-EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}
-YAHOO.util.CustomEvent=function(type,oScope,silent,signature){this.type=type;this.scope=oScope||window;this.silent=silent;this.signature=signature||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}
-var onsubscribeType="_YUICEOnSubscribe";if(type!==onsubscribeType){this.subscribeEvent=new YAHOO.util.CustomEvent(onsubscribeType,this,true);}};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(fn,obj,override){if(this.subscribeEvent){this.subscribeEvent.fire(fn,obj,override);}
-this.subscribers.push(new YAHOO.util.Subscriber(fn,obj,override));},unsubscribe:function(fn,obj){if(!fn){return this.unsubscribeAll();}
-var found=false;for(var i=0,len=this.subscribers.length;i<len;++i){var s=this.subscribers[i];if(s&&s.contains(fn,obj)){this._delete(i);found=true;}}
-return found;},fire:function(){var len=this.subscribers.length;if(!len&&this.silent){return true;}
-var args=[],ret=true,i;for(i=0;i<arguments.length;++i){args.push(arguments[i]);}
-var argslength=args.length;if(!this.silent){}
-for(i=0;i<len;++i){var s=this.subscribers[i];if(s){if(!this.silent){}
-var scope=s.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var param=null;if(args.length>0){param=args[0];}
-ret=s.fn.call(scope,param,s.obj);}else{ret=s.fn.call(scope,this.type,args,s.obj);}
-if(false===ret){if(!this.silent){}
-return false;}}}
-return true;},unsubscribeAll:function(){for(var i=0,len=this.subscribers.length;i<len;++i){this._delete(len-1-i);}
-return i;},_delete:function(index){var s=this.subscribers[index];if(s){delete s.fn;delete s.obj;}
-this.subscribers.splice(index,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"scope: "+this.scope;}};YAHOO.util.Subscriber=function(fn,obj,override){this.fn=fn;this.obj=obj||null;this.override=override;};YAHOO.util.Subscriber.prototype.getScope=function(defaultScope){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}
-return defaultScope;};YAHOO.util.Subscriber.prototype.contains=function(fn,obj){if(obj){return(this.fn==fn&&this.obj==obj);}else{return(this.fn==fn);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+(this.obj||"")+", override: "+(this.override||"no")+" }";};YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(p_type,p_fn,p_obj,p_override){this.__yui_events=this.__yui_events||{};var ce=this.__yui_events[p_type];if(ce){ce.subscribe(p_fn,p_obj,p_override);}else{this.__yui_subscribers=this.__yui_subscribers||{};var subs=this.__yui_subscribers;if(!subs[p_type]){subs[p_type]=[];}
-subs[p_type].push({fn:p_fn,obj:p_obj,override:p_override});}},unsubscribe:function(p_type,p_fn,p_obj){this.__yui_events=this.__yui_events||{};var ce=this.__yui_events[p_type];if(ce){return ce.unsubscribe(p_fn,p_obj);}else{return false;}},unsubscribeAll:function(p_type){return this.unsubscribe(p_type);},createEvent:function(p_type,p_config){this.__yui_events=this.__yui_events||{};var opts=p_config||{};var events=this.__yui_events;if(events[p_type]){}else{var scope=opts.scope||this;var silent=opts.silent||null;var ce=new YAHOO.util.CustomEvent(p_type,scope,silent,YAHOO.util.CustomEvent.FLAT);events[p_type]=ce;if(opts.onSubscribeCallback){ce.subscribeEvent.subscribe(opts.onSubscribeCallback);}
-this.__yui_subscribers=this.__yui_subscribers||{};var qs=this.__yui_subscribers[p_type];if(qs){for(var i=0;i<qs.length;++i){ce.subscribe(qs[i].fn,qs[i].obj,qs[i].override);}}}
-return events[p_type];},fireEvent:function(p_type,arg1,arg2,etc){this.__yui_events=this.__yui_events||{};var ce=this.__yui_events[p_type];if(ce){var args=[];for(var i=1;i<arguments.length;++i){args.push(arguments[i]);}
-return ce.fire.apply(ce,args);}else{return null;}},hasEvent:function(type){if(this.__yui_events){if(this.__yui_events[type]){return true;}}
-return false;}};YAHOO.util.KeyListener=function(attachTo,keyData,handler,event){if(!attachTo){}else if(!keyData){}else if(!handler){}
-if(!event){event=YAHOO.util.KeyListener.KEYDOWN;}
-var keyEvent=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof attachTo=='string'){attachTo=document.getElementById(attachTo);}
-if(typeof handler=='function'){keyEvent.subscribe(handler);}else{keyEvent.subscribe(handler.fn,handler.scope,handler.correctScope);}
-function handleKeyPress(e,obj){if(!keyData.shift){keyData.shift=false;}
-if(!keyData.alt){keyData.alt=false;}
-if(!keyData.ctrl){keyData.ctrl=false;}
-if(e.shiftKey==keyData.shift&&e.altKey==keyData.alt&&e.ctrlKey==keyData.ctrl){var dataItem;var keyPressed;if(keyData.keys instanceof Array){for(var i=0;i<keyData.keys.length;i++){dataItem=keyData.keys[i];if(dataItem==e.charCode){keyEvent.fire(e.charCode,e);break;}else if(dataItem==e.keyCode){keyEvent.fire(e.keyCode,e);break;}}}else{dataItem=keyData.keys;if(dataItem==e.charCode){keyEvent.fire(e.charCode,e);}else if(dataItem==e.keyCode){keyEvent.fire(e.keyCode,e);}}}}
-this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(attachTo,event,handleKeyPress);this.enabledEvent.fire(keyData);}
-this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(attachTo,event,handleKeyPress);this.disabledEvent.fire(keyData);}
-this.enabled=false;};this.toString=function(){return"KeyListener ["+keyData.keys+"] "+attachTo.tagName+
-(attachTo.id?"["+attachTo.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.register("event",YAHOO.util.Event,{version:"2.2.0",build:"127"});
-
-YAHOO.util.Connect={_msxml_progid:['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:'application/x-www-form-urlencoded',_use_default_xhr_header:true,_default_xhr_header:'XMLHttpRequest',_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,setProgId:function(id)
-{this._msxml_progid.unshift(id);},setDefaultPostHeader:function(b)
-{this._use_default_post_header=b;},setDefaultXhrHeader:function(b)
-{this._use_default_xhr_header=b;},setPollingInterval:function(i)
-{if(typeof i=='number'&&isFinite(i)){this._polling_interval=i;}},createXhrObject:function(transactionId)
-{var obj,http;try
-{http=new XMLHttpRequest();obj={conn:http,tId:transactionId};}
-catch(e)
-{for(var i=0;i<this._msxml_progid.length;++i){try
-{http=new ActiveXObject(this._msxml_progid[i]);obj={conn:http,tId:transactionId};break;}
-catch(e){}}}
-finally
-{return obj;}},getConnectionObject:function()
-{var o;var tId=this._transaction_id;try
-{o=this.createXhrObject(tId);if(o){this._transaction_id++;}}
-catch(e){}
-finally
-{return o;}},asyncRequest:function(method,uri,callback,postData)
-{var o=this.getConnectionObject();if(!o){return null;}
-else{if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(o.tId,callback,uri,postData);this.releaseObject(o);return;}
-if(method.toUpperCase()=='GET'){if(this._sFormData.length!=0){uri+=((uri.indexOf('?')==-1)?'?':'&')+this._sFormData;}
-else{uri+="?"+this._sFormData;}}
-else if(method.toUpperCase()=='POST'){postData=postData?this._sFormData+"&"+postData:this._sFormData;}}
-o.conn.open(method,uri,true);if(this._use_default_xhr_header){if(!this._default_headers['X-Requested-With']){this.initHeader('X-Requested-With',this._default_xhr_header,true);}}
-if(this._isFormSubmit||(postData&&this._use_default_post_header)){this.initHeader('Content-Type',this._default_post_header);if(this._isFormSubmit){this.resetFormState();}}
-if(this._has_default_headers||this._has_http_headers){this.setHeader(o);}
-this.handleReadyState(o,callback);o.conn.send(postData||null);return o;}},handleReadyState:function(o,callback)
-{var oConn=this;if(callback&&callback.timeout){this._timeOut[o.tId]=window.setTimeout(function(){oConn.abort(o,callback,true);},callback.timeout);}
-this._poll[o.tId]=window.setInterval(function(){if(o.conn&&o.conn.readyState==4){window.clearInterval(oConn._poll[o.tId]);delete oConn._poll[o.tId];if(callback&&callback.timeout){delete oConn._timeOut[o.tId];}
-oConn.handleTransactionResponse(o,callback);}},this._polling_interval);},handleTransactionResponse:function(o,callback,isAbort)
-{if(!callback){this.releaseObject(o);return;}
-var httpStatus,responseObject;try
-{if(o.conn.status!==undefined&&o.conn.status!=0){httpStatus=o.conn.status;}
-else{httpStatus=13030;}}
-catch(e){httpStatus=13030;}
-if(httpStatus>=200&&httpStatus<300){responseObject=this.createResponseObject(o,callback.argument);if(callback.success){if(!callback.scope){callback.success(responseObject);}
-else{callback.success.apply(callback.scope,[responseObject]);}}}
-else{switch(httpStatus){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:responseObject=this.createExceptionObject(o.tId,callback.argument,(isAbort?isAbort:false));if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
-else{callback.failure.apply(callback.scope,[responseObject]);}}
-break;default:responseObject=this.createResponseObject(o,callback.argument);if(callback.failure){if(!callback.scope){callback.failure(responseObject);}
-else{callback.failure.apply(callback.scope,[responseObject]);}}}}
-this.releaseObject(o);responseObject=null;},createResponseObject:function(o,callbackArg)
-{var obj={};var headerObj={};try
-{var headerStr=o.conn.getAllResponseHeaders();var header=headerStr.split('\n');for(var i=0;i<header.length;i++){var delimitPos=header[i].indexOf(':');if(delimitPos!=-1){headerObj[header[i].substring(0,delimitPos)]=header[i].substring(delimitPos+2);}}}
-catch(e){}
-obj.tId=o.tId;obj.status=o.conn.status;obj.statusText=o.conn.statusText;obj.getResponseHeader=headerObj;obj.getAllResponseHeaders=headerStr;obj.responseText=o.conn.responseText;obj.responseXML=o.conn.responseXML;if(typeof callbackArg!==undefined){obj.argument=callbackArg;}
-return obj;},createExceptionObject:function(tId,callbackArg,isAbort)
-{var COMM_CODE=0;var COMM_ERROR='communication failure';var ABORT_CODE=-1;var ABORT_ERROR='transaction aborted';var obj={};obj.tId=tId;if(isAbort){obj.status=ABORT_CODE;obj.statusText=ABORT_ERROR;}
-else{obj.status=COMM_CODE;obj.statusText=COMM_ERROR;}
-if(callbackArg){obj.argument=callbackArg;}
-return obj;},initHeader:function(label,value,isDefault)
-{var headerObj=(isDefault)?this._default_headers:this._http_headers;if(headerObj[label]===undefined){headerObj[label]=value;}
-else{headerObj[label]=value+","+headerObj[label];}
-if(isDefault){this._has_default_headers=true;}
-else{this._has_http_headers=true;}},setHeader:function(o)
-{if(this._has_default_headers){for(var prop in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,prop)){o.conn.setRequestHeader(prop,this._default_headers[prop]);}}}
-if(this._has_http_headers){for(var prop in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,prop)){o.conn.setRequestHeader(prop,this._http_headers[prop]);}}
-delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers
-this._default_headers={};this._has_default_headers=false;},setForm:function(formId,isUpload,secureUri)
-{this.resetFormState();var oForm;if(typeof formId=='string'){oForm=(document.getElementById(formId)||document.forms[formId]);}
-else if(typeof formId=='object'){oForm=formId;}
-else{return;}
-if(isUpload){this.createFrame(secureUri?secureUri:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=oForm;return;}
-var oElement,oName,oValue,oDisabled;var hasSubmit=false;for(var i=0;i<oForm.elements.length;i++){oElement=oForm.elements[i];oDisabled=oForm.elements[i].disabled;oName=oForm.elements[i].name;oValue=oForm.elements[i].value;if(!oDisabled&&oName)
-{switch(oElement.type)
-{case'select-one':case'select-multiple':for(var j=0;j<oElement.options.length;j++){if(oElement.options[j].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].attributes['value'].specified?oElement.options[j].value:oElement.options[j].text)+'&';}
-else{this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oElement.options[j].hasAttribute('value')?oElement.options[j].value:oElement.options[j].text)+'&';}}}
-break;case'radio':case'checkbox':if(oElement.checked){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';}
-break;case'file':case undefined:case'reset':case'button':break;case'submit':if(hasSubmit==false){this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';hasSubmit=true;}
-break;default:this._sFormData+=encodeURIComponent(oName)+'='+encodeURIComponent(oValue)+'&';break;}}}
-this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(secureUri){var frameId='yuiIO'+this._transaction_id;if(window.ActiveXObject){var io=document.createElement('<iframe id="'+frameId+'" name="'+frameId+'" />');if(typeof secureUri=='boolean'){io.src='javascript:false';}
-else if(typeof secureURI=='string'){io.src=secureUri;}}
-else{var io=document.createElement('iframe');io.id=frameId;io.name=frameId;}
-io.style.position='absolute';io.style.top='-1000px';io.style.left='-1000px';document.body.appendChild(io);},appendPostData:function(postData)
-{var formElements=[];var postMessage=postData.split('&');for(var i=0;i<postMessage.length;i++){var delimitPos=postMessage[i].indexOf('=');if(delimitPos!=-1){formElements[i]=document.createElement('input');formElements[i].type='hidden';formElements[i].name=postMessage[i].substring(0,delimitPos);formElements[i].value=postMessage[i].substring(delimitPos+1);this._formNode.appendChild(formElements[i]);}}
-return formElements;},uploadFile:function(id,callback,uri,postData){var frameId='yuiIO'+id;var uploadEncoding='multipart/form-data';var io=document.getElementById(frameId);this._formNode.action=uri;this._formNode.method='POST';this._formNode.target=frameId;if(this._formNode.encoding){this._formNode.encoding=uploadEncoding;}
-else{this._formNode.enctype=uploadEncoding;}
-if(postData){var oElements=this.appendPostData(postData);}
-this._formNode.submit();if(oElements&&oElements.length>0){for(var i=0;i<oElements.length;i++){this._formNode.removeChild(oElements[i]);}}
-this.resetFormState();var uploadCallback=function()
-{var obj={};obj.tId=id;obj.argument=callback.argument;try
-{obj.responseText=io.contentWindow.document.body?io.contentWindow.document.body.innerHTML:null;obj.responseXML=io.contentWindow.document.XMLDocument?io.contentWindow.document.XMLDocument:io.contentWindow.document;}
-catch(e){}
-if(callback&&callback.upload){if(!callback.scope){callback.upload(obj);}
-else{callback.upload.apply(callback.scope,[obj]);}}
-if(YAHOO.util.Event){YAHOO.util.Event.removeListener(io,"load",uploadCallback);}
-else if(window.detachEvent){io.detachEvent('onload',uploadCallback);}
-else{io.removeEventListener('load',uploadCallback,false);}
-setTimeout(function(){document.body.removeChild(io);},100);};if(YAHOO.util.Event){YAHOO.util.Event.addListener(io,"load",uploadCallback);}
-else if(window.attachEvent){io.attachEvent('onload',uploadCallback);}
-else{io.addEventListener('load',uploadCallback,false);}},abort:function(o,callback,isTimeout)
-{if(this.isCallInProgress(o)){o.conn.abort();window.clearInterval(this._poll[o.tId]);delete this._poll[o.tId];if(isTimeout){delete this._timeOut[o.tId];}
-this.handleTransactionResponse(o,callback,true);return true;}
-else{return false;}},isCallInProgress:function(o)
-{if(o.conn){return o.conn.readyState!=4&&o.conn.readyState!=0;}
-else{return false;}},releaseObject:function(o)
-{o.conn=null;o=null;}};YAHOO.register("connection",YAHOO.widget.Module,{version:"2.2.0",build:"127"});
-
-YAHOO.util.Anim=function(el,attributes,duration,method){if(el){this.init(el,attributes,duration,method);}};YAHOO.util.Anim.prototype={toString:function(){var el=this.getEl();var id=el.id||el.tagName;return("Anim "+id);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(attr,start,end){return this.method(this.currentFrame,start,end-start,this.totalFrames);},setAttribute:function(attr,val,unit){if(this.patterns.noNegatives.test(attr)){val=(val>0)?val:0;}
-YAHOO.util.Dom.setStyle(this.getEl(),attr,val+unit);},getAttribute:function(attr){var el=this.getEl();var val=YAHOO.util.Dom.getStyle(el,attr);if(val!=='auto'&&!this.patterns.offsetUnit.test(val)){return parseFloat(val);}
-var a=this.patterns.offsetAttribute.exec(attr)||[];var pos=!!(a[3]);var box=!!(a[2]);if(box||(YAHOO.util.Dom.getStyle(el,'position')=='absolute'&&pos)){val=el['offset'+a[0].charAt(0).toUpperCase()+a[0].substr(1)];}else{val=0;}
-return val;},getDefaultUnit:function(attr){if(this.patterns.defaultUnit.test(attr)){return'px';}
-return'';},setRuntimeAttribute:function(attr){var start;var end;var attributes=this.attributes;this.runtimeAttributes[attr]={};var isset=function(prop){return(typeof prop!=='undefined');};if(!isset(attributes[attr]['to'])&&!isset(attributes[attr]['by'])){return false;}
-start=(isset(attributes[attr]['from']))?attributes[attr]['from']:this.getAttribute(attr);if(isset(attributes[attr]['to'])){end=attributes[attr]['to'];}else if(isset(attributes[attr]['by'])){if(start.constructor==Array){end=[];for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+attributes[attr]['by'][i];}}else{end=start+attributes[attr]['by'];}}
-this.runtimeAttributes[attr].start=start;this.runtimeAttributes[attr].end=end;this.runtimeAttributes[attr].unit=(isset(attributes[attr].unit))?attributes[attr]['unit']:this.getDefaultUnit(attr);},init:function(el,attributes,duration,method){var isAnimated=false;var startTime=null;var actualFrames=0;el=YAHOO.util.Dom.get(el);this.attributes=attributes||{};this.duration=duration||1;this.method=method||YAHOO.util.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=YAHOO.util.AnimMgr.fps;this.getEl=function(){return el;};this.isAnimated=function(){return isAnimated;};this.getStartTime=function(){return startTime;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}
-this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(YAHOO.util.AnimMgr.fps*this.duration):this.duration;YAHOO.util.AnimMgr.registerElement(this);};this.stop=function(finish){if(finish){this.currentFrame=this.totalFrames;this._onTween.fire();}
-YAHOO.util.AnimMgr.stop(this);};var onStart=function(){this.onStart.fire();this.runtimeAttributes={};for(var attr in this.attributes){this.setRuntimeAttribute(attr);}
-isAnimated=true;actualFrames=0;startTime=new Date();};var onTween=function(){var data={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};data.toString=function(){return('duration: '+data.duration+', currentFrame: '+data.currentFrame);};this.onTween.fire(data);var runtimeAttributes=this.runtimeAttributes;for(var attr in runtimeAttributes){this.setAttribute(attr,this.doMethod(attr,runtimeAttributes[attr].start,runtimeAttributes[attr].end),runtimeAttributes[attr].unit);}
-actualFrames+=1;};var onComplete=function(){var actual_duration=(new Date()-startTime)/1000;var data={duration:actual_duration,frames:actualFrames,fps:actualFrames/actual_duration};data.toString=function(){return('duration: '+data.duration+', frames: '+data.frames+', fps: '+data.fps);};isAnimated=false;actualFrames=0;this.onComplete.fire(data);};this._onStart=new YAHOO.util.CustomEvent('_start',this,true);this.onStart=new YAHOO.util.CustomEvent('start',this);this.onTween=new YAHOO.util.CustomEvent('tween',this);this._onTween=new YAHOO.util.CustomEvent('_tween',this,true);this.onComplete=new YAHOO.util.CustomEvent('complete',this);this._onComplete=new YAHOO.util.CustomEvent('_complete',this,true);this._onStart.subscribe(onStart);this._onTween.subscribe(onTween);this._onComplete.subscribe(onComplete);}};YAHOO.util.AnimMgr=new function(){var thread=null;var queue=[];var tweenCount=0;this.fps=1000;this.delay=1;this.registerElement=function(tween){queue[queue.length]=tween;tweenCount+=1;tween._onStart.fire();this.start();};this.unRegister=function(tween,index){tween._onComplete.fire();index=index||getIndex(tween);if(index!=-1){queue.splice(index,1);}
-tweenCount-=1;if(tweenCount<=0){this.stop();}};this.start=function(){if(thread===null){thread=setInterval(this.run,this.delay);}};this.stop=function(tween){if(!tween){clearInterval(thread);for(var i=0,len=queue.length;i<len;++i){if(queue[0].isAnimated()){this.unRegister(queue[0],0);}}
-queue=[];thread=null;tweenCount=0;}
-else{this.unRegister(tween);}};this.run=function(){for(var i=0,len=queue.length;i<len;++i){var tween=queue[i];if(!tween||!tween.isAnimated()){continue;}
-if(tween.currentFrame<tween.totalFrames||tween.totalFrames===null)
-{tween.currentFrame+=1;if(tween.useSeconds){correctFrame(tween);}
-tween._onTween.fire();}
-else{YAHOO.util.AnimMgr.stop(tween,i);}}};var getIndex=function(anim){for(var i=0,len=queue.length;i<len;++i){if(queue[i]==anim){return i;}}
-return-1;};var correctFrame=function(tween){var frames=tween.totalFrames;var frame=tween.currentFrame;var expected=(tween.currentFrame*tween.duration*1000/tween.totalFrames);var elapsed=(new Date()-tween.getStartTime());var tweak=0;if(elapsed<tween.duration*1000){tweak=Math.round((elapsed/expected-1)*tween.currentFrame);}else{tweak=frames-(frame+1);}
-if(tweak>0&&isFinite(tweak)){if(tween.currentFrame+tweak>=frames){tweak=frames-(frame+1);}
-tween.currentFrame+=tweak;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(points,t){var n=points.length;var tmp=[];for(var i=0;i<n;++i){tmp[i]=[points[i][0],points[i][1]];}
-for(var j=1;j<n;++j){for(i=0;i<n-j;++i){tmp[i][0]=(1-t)*tmp[i][0]+t*tmp[parseInt(i+1,10)][0];tmp[i][1]=(1-t)*tmp[i][1]+t*tmp[parseInt(i+1,10)][1];}}
-return[tmp[0][0],tmp[0][1]];};};(function(){YAHOO.util.ColorAnim=function(el,attributes,duration,method){YAHOO.util.ColorAnim.superclass.constructor.call(this,el,attributes,duration,method);};YAHOO.extend(YAHOO.util.ColorAnim,YAHOO.util.Anim);var Y=YAHOO.util;var superclass=Y.ColorAnim.superclass;var proto=Y.ColorAnim.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("ColorAnim "+id);};proto.patterns.color=/color$/i;proto.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;proto.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;proto.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;proto.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;proto.parseColor=function(s){if(s.length==3){return s;}
-var c=this.patterns.hex.exec(s);if(c&&c.length==4){return[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)];}
-c=this.patterns.rgb.exec(s);if(c&&c.length==4){return[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)];}
-c=this.patterns.hex3.exec(s);if(c&&c.length==4){return[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)];}
-return null;};proto.getAttribute=function(attr){var el=this.getEl();if(this.patterns.color.test(attr)){var val=YAHOO.util.Dom.getStyle(el,attr);if(this.patterns.transparent.test(val)){var parent=el.parentNode;val=Y.Dom.getStyle(parent,attr);while(parent&&this.patterns.transparent.test(val)){parent=parent.parentNode;val=Y.Dom.getStyle(parent,attr);if(parent.tagName.toUpperCase()=='HTML'){val='#fff';}}}}else{val=superclass.getAttribute.call(this,attr);}
-return val;};proto.doMethod=function(attr,start,end){var val;if(this.patterns.color.test(attr)){val=[];for(var i=0,len=start.length;i<len;++i){val[i]=superclass.doMethod.call(this,attr,start[i],end[i]);}
-val='rgb('+Math.floor(val[0])+','+Math.floor(val[1])+','+Math.floor(val[2])+')';}
-else{val=superclass.doMethod.call(this,attr,start,end);}
-return val;};proto.setRuntimeAttribute=function(attr){superclass.setRuntimeAttribute.call(this,attr);if(this.patterns.color.test(attr)){var attributes=this.attributes;var start=this.parseColor(this.runtimeAttributes[attr].start);var end=this.parseColor(this.runtimeAttributes[attr].end);if(typeof attributes[attr]['to']==='undefined'&&typeof attributes[attr]['by']!=='undefined'){end=this.parseColor(attributes[attr].by);for(var i=0,len=start.length;i<len;++i){end[i]=start[i]+end[i];}}
-this.runtimeAttributes[attr].start=start;this.runtimeAttributes[attr].end=end;}};})();YAHOO.util.Easing={easeNone:function(t,b,c,d){return c*t/d+b;},easeIn:function(t,b,c,d){return c*(t/=d)*t+b;},easeOut:function(t,b,c,d){return-c*(t/=d)*(t-2)+b;},easeBoth:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t+b;}
-return-c/2*((--t)*(t-2)-1)+b;},easeInStrong:function(t,b,c,d){return c*(t/=d)*t*t*t+b;},easeOutStrong:function(t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b;},easeBothStrong:function(t,b,c,d){if((t/=d/2)<1){return c/2*t*t*t*t+b;}
-return-c/2*((t-=2)*t*t*t-2)+b;},elasticIn:function(t,b,c,d,a,p){if(t==0){return b;}
-if((t/=d)==1){return b+c;}
-if(!p){p=d*.3;}
-if(!a||a<Math.abs(c)){a=c;var s=p/4;}
-else{var s=p/(2*Math.PI)*Math.asin(c/a);}
-return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;},elasticOut:function(t,b,c,d,a,p){if(t==0){return b;}
-if((t/=d)==1){return b+c;}
-if(!p){p=d*.3;}
-if(!a||a<Math.abs(c)){a=c;var s=p/4;}
-else{var s=p/(2*Math.PI)*Math.asin(c/a);}
-return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b;},elasticBoth:function(t,b,c,d,a,p){if(t==0){return b;}
-if((t/=d/2)==2){return b+c;}
-if(!p){p=d*(.3*1.5);}
-if(!a||a<Math.abs(c)){a=c;var s=p/4;}
-else{var s=p/(2*Math.PI)*Math.asin(c/a);}
-if(t<1){return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;}
-return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b;},backIn:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
-return c*(t/=d)*t*((s+1)*t-s)+b;},backOut:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
-return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b;},backBoth:function(t,b,c,d,s){if(typeof s=='undefined'){s=1.70158;}
-if((t/=d/2)<1){return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;}
-return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b;},bounceIn:function(t,b,c,d){return c-YAHOO.util.Easing.bounceOut(d-t,0,c,d)+b;},bounceOut:function(t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b;}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b;}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b;}
-return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b;},bounceBoth:function(t,b,c,d){if(t<d/2){return YAHOO.util.Easing.bounceIn(t*2,0,c,d)*.5+b;}
-return YAHOO.util.Easing.bounceOut(t*2-d,0,c,d)*.5+c*.5+b;}};(function(){YAHOO.util.Motion=function(el,attributes,duration,method){if(el){YAHOO.util.Motion.superclass.constructor.call(this,el,attributes,duration,method);}};YAHOO.extend(YAHOO.util.Motion,YAHOO.util.ColorAnim);var Y=YAHOO.util;var superclass=Y.Motion.superclass;var proto=Y.Motion.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Motion "+id);};proto.patterns.points=/^points$/i;proto.setAttribute=function(attr,val,unit){if(this.patterns.points.test(attr)){unit=unit||'px';superclass.setAttribute.call(this,'left',val[0],unit);superclass.setAttribute.call(this,'top',val[1],unit);}else{superclass.setAttribute.call(this,attr,val,unit);}};proto.getAttribute=function(attr){if(this.patterns.points.test(attr)){var val=[superclass.getAttribute.call(this,'left'),superclass.getAttribute.call(this,'top')];}else{val=superclass.getAttribute.call(this,attr);}
-return val;};proto.doMethod=function(attr,start,end){var val=null;if(this.patterns.points.test(attr)){var t=this.method(this.currentFrame,0,100,this.totalFrames)/100;val=Y.Bezier.getPosition(this.runtimeAttributes[attr],t);}else{val=superclass.doMethod.call(this,attr,start,end);}
-return val;};proto.setRuntimeAttribute=function(attr){if(this.patterns.points.test(attr)){var el=this.getEl();var attributes=this.attributes;var start;var control=attributes['points']['control']||[];var end;var i,len;if(control.length>0&&!(control[0]instanceof Array)){control=[control];}else{var tmp=[];for(i=0,len=control.length;i<len;++i){tmp[i]=control[i];}
-control=tmp;}
-if(Y.Dom.getStyle(el,'position')=='static'){Y.Dom.setStyle(el,'position','relative');}
-if(isset(attributes['points']['from'])){Y.Dom.setXY(el,attributes['points']['from']);}
-else{Y.Dom.setXY(el,Y.Dom.getXY(el));}
-start=this.getAttribute('points');if(isset(attributes['points']['to'])){end=translateValues.call(this,attributes['points']['to'],start);var pageXY=Y.Dom.getXY(this.getEl());for(i=0,len=control.length;i<len;++i){control[i]=translateValues.call(this,control[i],start);}}else if(isset(attributes['points']['by'])){end=[start[0]+attributes['points']['by'][0],start[1]+attributes['points']['by'][1]];for(i=0,len=control.length;i<len;++i){control[i]=[start[0]+control[i][0],start[1]+control[i][1]];}}
-this.runtimeAttributes[attr]=[start];if(control.length>0){this.runtimeAttributes[attr]=this.runtimeAttributes[attr].concat(control);}
-this.runtimeAttributes[attr][this.runtimeAttributes[attr].length]=end;}
-else{superclass.setRuntimeAttribute.call(this,attr);}};var translateValues=function(val,start){var pageXY=Y.Dom.getXY(this.getEl());val=[val[0]-pageXY[0]+start[0],val[1]-pageXY[1]+start[1]];return val;};var isset=function(prop){return(typeof prop!=='undefined');};})();(function(){YAHOO.util.Scroll=function(el,attributes,duration,method){if(el){YAHOO.util.Scroll.superclass.constructor.call(this,el,attributes,duration,method);}};YAHOO.extend(YAHOO.util.Scroll,YAHOO.util.ColorAnim);var Y=YAHOO.util;var superclass=Y.Scroll.superclass;var proto=Y.Scroll.prototype;proto.toString=function(){var el=this.getEl();var id=el.id||el.tagName;return("Scroll "+id);};proto.doMethod=function(attr,start,end){var val=null;if(attr=='scroll'){val=[this.method(this.currentFrame,start[0],end[0]-start[0],this.totalFrames),this.method(this.currentFrame,start[1],end[1]-start[1],this.totalFrames)];}else{val=superclass.doMethod.call(this,attr,start,end);}
-return val;};proto.getAttribute=function(attr){var val=null;var el=this.getEl();if(attr=='scroll'){val=[el.scrollLeft,el.scrollTop];}else{val=superclass.getAttribute.call(this,attr);}
-return val;};proto.setAttribute=function(attr,val,unit){var el=this.getEl();if(attr=='scroll'){el.scrollLeft=val[0];el.scrollTop=val[1];}else{superclass.setAttribute.call(this,attr,val,unit);}};})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.2.0",build:"127"});
diff --git a/lib/web/extjs/css/README.txt b/lib/web/extjs/css/README.txt
deleted file mode 100644
index 7eaae4405a6850c6f53eba3f57d4ec8510b06e0c..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-2006-11-21 jvs:
-ext-all.css contains all of the other css files combined and stripped of comments (except themes).
-
diff --git a/lib/web/extjs/css/basic-dialog.css b/lib/web/extjs/css/basic-dialog.css
deleted file mode 100644
index 8af8459fcc3fe76d7194874579568bf33ea5b2a3..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/basic-dialog.css
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-dlg-proxy {
-	background-image: url(../images/default/gradient-bg.gif);
-	background-color:#c3daf9;
-	border:1px solid #6593cf;
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:0;top:0;
-}
-.x-dlg-shadow{
-	background:#aaaaaa;
-	position:absolute;
-	left:0;top:0;
-}
-.x-dlg-focus{
-	-moz-outline:0 none;
-	outline:0 none;
-	width:0;
-	height:0;
-	overflow:hidden;
-	position:absolute;
-	top:0;
-	left:0;
-}
-.x-dlg-mask{
-	z-index:10000;   
-   display:none;
-   position:absolute;
-   top:0;
-   left:0;
-   -moz-opacity: 0.5;
-   opacity:.50;
-   filter: alpha(opacity=50);
-   background-color:#CCC;
-}
-body.x-body-masked select {
-	visibility:hidden;
-}
-body.x-body-masked .x-dlg select {
-	visibility:visible;
-}
-.x-dlg{
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:300;top:0;
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:navy;
-	color:#FFF;
-	font:bold 12px "sans serif", tahoma, verdana, helvetica;
-	overflow:hidden;
-	padding:5px;
-    white-space: nowrap;
-}
-.x-dlg .x-dlg-hd-left {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	padding-left:3px;
-	margin:0;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	padding-right:3px;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:url(../images/default/layout/gradient-bg.gif);
-	border:1px solid #6593cf;
-	border-top:0 none;
-	padding:10px;
-	position:absolute;
-	top:24px;left:0;
-	z-index:1;
-	overflow:hidden;
-}
-.x-dlg-collapsed .x-resizable-handle{
-    display:none;
-}
-.x-dlg .x-dlg-bd{
-	overflow:hidden;
-}
-.x-dlg .x-dlg-ft{
-	overflow:hidden;
-	padding:5px;
-	padding-bottom:0;
-}
-
-.x-dlg .x-tabs-body{
-	background:white;
-	overflow:auto;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:1px solid #6593cf;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #6593cf;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .inner-tab{
-	margin:5px;
-}
-.x-dlg .x-dlg-ft .x-btn{
-	margin-right:5px;
-	float:right;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns td {
-	border:0;
-	padding:0;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-center{
-	text-align:center; /*ie*/
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-center table{
-	margin:0 auto; /*everyone else*/
-}
-
-
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-right{
-	background-position:0 -84px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-
-.x-dlg-draggable .x-dlg-hd{
-	cursor:move;
-}
-.x-dlg-closable .x-dlg-hd{
-	padding-right:22px;
-}
-.x-dlg-toolbox {
-    position:absolute;
-	top:4px;
-	right:4px;
-	z-index:6;
-    width:40px;
-    cursor:default;
-    height:15px;
-    background:transparent;
-}
-.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
-    float:right;
-    height:15px;
-	width:15px;
-	margin:0;
-    margin-left:2px;
-    padding:0;
-	line-height:1px;
-	font-size:1px;
-	background-repeat:no-repeat;
-	cursor:pointer;
-	visibility:inherit;
-}
-.x-dlg .x-dlg-close {
-    background-image:url(../images/default/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/default/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/default/basic-dialog/expand.gif);
-}
-.x-dlg .x-dlg-close-over, .x-dlg .x-dlg-collapse-over {
-    
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/default/basic-dialog/e-handle.gif);
-	border:0;
-	background-position:right;
-	margin-right:0;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/default/sizer/s-handle-dark.gif);
-	border:0;
-	height:6px;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/default/basic-dialog/e-handle.gif);
-	border:0;
-	background-position:1px;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-northeast, .ytheme-gray .x-dlg div.x-resizable-handle-northeast{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-northwest, .ytheme-gray .x-dlg div.x-resizable-handle-northwest{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/default/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/default/sizer/sw-handle-dark.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-
-#x-msg-box .x-dlg-ft .x-btn{
-	float:none;
-	clear:none;
-	margin:0 3px;
-}
-
-#x-msg-box .x-dlg-bd {
-	padding:5px;
-	overflow:hidden !important;
-	font:normal 13px verdana,tahoma,sans-serif;
-}
-#x-msg-box .ext-mb-input {
-	margin-top:4px;
-	width:95%;
-}
-#x-msg-box .ext-mb-textarea {
-	margin-top:4px;
-	font:normal 13px verdana,tahoma,sans-serif;
-}
-#x-msg-box .ext-mb-progress-wrap {
-	margin-top:4px;
-	border:1px solid #6593cf;
-}
-#x-msg-box .ext-mb-progress {
-	height:18px;
-	background: #e0e8f3 url(../images/default/qtip/bg.gif) repeat-x;
-}
-#x-msg-box .ext-mb-progress-bar {
-	height:18px;
-	overflow:hidden;
-	width:0;
-	background:#8BB8F3;
-	border-top:1px solid #B2D0F7;
-	border-bottom:1px solid #65A1EF;
-	border-right:1px solid #65A1EF;
-}
-
-#x-msg-box .x-msg-box-wait {
-	background: transparent url(../images/default/grid/loading.gif) no-repeat left;
-    display:block;
-    width:300px;
-    padding-left:18px;
-    line-height:18px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/box.css b/lib/web/extjs/css/box.css
deleted file mode 100644
index a4b02133867c931972d6bafb262aad64ffd08af0..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/box.css
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/*
- Creates rounded, raised boxes like on the Ext website - the markup isn't pretty:
-  <div class="x-box-blue">
-        <div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>
-        <div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc">
-            <h3>YOUR TITLE HERE (optional)</h3>
-            <div>YOUR CONTENT HERE</div>
-        </div></div></div>
-        <div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>
-    </div>
- */
-
-.x-box-tl {
-	background: transparent url(../images/default/box/corners.gif) no-repeat 0 0;
-    zoom:1;
-}
-
-.x-box-tc {
-	height: 8px;
-	background: transparent url(../images/default/box/tb.gif) repeat-x 0 0;
-	overflow: hidden;
-}
-
-.x-box-tr {
-	background: transparent url(../images/default/box/corners.gif) no-repeat right -8px;
-}
-
-.x-box-ml {
-	background: transparent url(../images/default/box/l.gif) repeat-y 0;
-	padding-left: 4px;
-	overflow: hidden;
-    zoom:1;
-}
-
-.x-box-mc {
-	background: #eee url(../images/default/box/tb.gif) repeat-x 0 -16px;
-	padding: 4px 10px;
-	font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;
-	color: #393939;
-	font-size: 12px;
-}
-
-.x-box-mc h3 {
-	font-size: 14px;
-	font-weight: bold;
-	margin: 0 0 4 0;
-    zoom:1;
-}
-
-.x-box-mr {
-	background: transparent url(../images/default/box/r.gif) repeat-y right;
-	padding-right: 4px;
-	overflow: hidden;
-}
-
-.x-box-bl {
-	background: transparent url(../images/default/box/corners.gif) no-repeat 0 -16px;
-    zoom:1;
-}
-
-.x-box-bc {
-	background: transparent url(../images/default/box/tb.gif) repeat-x 0 -8px;
-	height: 8px;
-	overflow: hidden;
-}
-
-.x-box-br {
-	background: transparent url(../images/default/box/corners.gif) no-repeat right -24px;
-}
-
-.x-box-tl, .x-box-bl {
-	padding-left: 8px;
-	overflow: hidden;
-}
-
-.x-box-tr, .x-box-br {
-	padding-right: 8px;
-	overflow: hidden;
-}
-
-.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr {
-	background-image: url(../images/default/box/corners-blue.gif);
-}
-
-.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc {
-	background-image: url(../images/default/box/tb-blue.gif);
-}
-
-.x-box-blue .x-box-mc {
-	background-color: #c3daf9;
-}
-
-.x-box-blue .x-box-mc h3 {
-	color: #17385b;
-}
-
-.x-box-blue .x-box-ml {
-	background-image: url(../images/default/box/l-blue.gif);
-}
-
-.x-box-blue .x-box-mr {
-	background-image: url(../images/default/box/r-blue.gif);
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/button.css b/lib/web/extjs/css/button.css
deleted file mode 100644
index 614918e69e2e46c4e9664ee2cec31bf9af28253b..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/button.css
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-btn{
-	font:normal 11px tahoma, verdana, helvetica;
-	cursor:pointer;
-	white-space: nowrap;
-}
-.x-btn button{
-    border:0 none;
-    background:transparent;
-    font:normal 11px tahoma,verdana,helvetica;
-    padding-left:3px;
-    padding-right:3px;
-    cursor:pointer;
-    margin:0;
-    overflow:visible;
-    width:auto;
-    -moz-outline:0 none;
-    outline:0 none;
-}
-* html .ext-ie .x-btn button {
-    width:1px;
-}
-.ext-gecko .x-btn button {
-    padding-left:0;
-    padding-right:0;
-}
-.ext-ie .x-btn button {
-    padding-top:2px;
-}
-/*
- Predefined css class for buttons with only icon. Add this class (x-btn-icon) and a class with a background-image
- to your button for a button with just an icon.
- e.g.
- .my-class .x-btn-text { background-image: url(foo.gif); }
- */
- 
-.x-btn-icon .x-btn-center .x-btn-text{
-	background-position: center;
-	background-repeat: no-repeat;
-	height: 16px;
-	width: 16px;
-	cursor:pointer;
-	white-space: nowrap;
-    padding:0;
-}
-.x-btn-icon .x-btn-center{
-	padding:1px;
-}
-.x-btn em {
-    font-style:normal;
-    font-weight:normal;
-}
-/*
- Button class for icon and text. Add this class (x-btn-text-icon) and a class with a background-image
- to your button for both text and icon. 
-*/
-
-.x-btn-text-icon .x-btn-center .x-btn-text{
-	background-position: 0 2px;
-	background-repeat: no-repeat;
-	padding-left:18px;
-	padding-top:3px;
-	padding-bottom:3px;
-    padding-right:0;
-}
-
-.x-btn-left, .x-btn-right{
-	font-size:1px;
-    line-height:1px;
-}
-.x-btn-left{
-	width:3px;
-	height:21px;
-	background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
-}
-.x-btn-right{
-	width:3px;
-	height:21px;
-	background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-btn-left i, .x-btn-right i{
-	display:block;
-    width:3px;
-    overflow:hidden;
-    font-size:1px;
-    line-height:1px;
-}
-.x-btn-center{
-	background:url(../images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
-	vertical-align: middle;
-	text-align:center;
-	padding:0 5px;
-	cursor:pointer;
-	white-space:nowrap;
-}
-.x-btn-over .x-btn-left{
-	background-position:0 -63px;
-}
-.x-btn-over .x-btn-right{
-	background-position:0 -84px;
-}
-.x-btn-over .x-btn-center{
-	background-position:0 -105px;
-}
-.x-btn-click .x-btn-center, .x-btn-menu-active .x-btn-center{
-	background-position:0 -126px;
-}
-.x-btn-disabled *{
-	color:gray !important;
-	cursor:default !important;
-}
-.x-btn-menu-text-wrap .x-btn-center {
-	padding:0 3px;
-}
-.ext-gecko .x-btn-menu-text-wrap .x-btn-center {
-	padding:0 1px;
-}
-.x-btn-menu-arrow-wrap .x-btn-center {
-    padding:0;
-}
-.x-btn-menu-arrow-wrap .x-btn-center button {
-	width:12px !important;
-    height:21px;
-    padding:0 !important;
-    display:block;
-    background:transparent url(../images/default/basic-dialog/btn-arrow.gif) no-repeat left 3px;
-}
-.x-btn-with-menu  .x-btn-center {
-    padding-right:2px !important;
-}
-.x-btn-with-menu  .x-btn-center em {
-    display:block;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat right 0;
-	padding-right:10px;
-}
-
-.x-btn-text-icon .x-btn-with-menu .x-btn-center em {
-    display:block;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat right 3px;
-	padding-right:10px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/combo.css b/lib/web/extjs/css/combo.css
deleted file mode 100644
index cb550c05426cf00495fd8f2e07d63206fb0a3ae4..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/combo.css
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-combo-list {
-    border:1px solid #98c0f4;
-    background:#ddecfe;
-    zoom:1;
-    overflow:hidden;
-}
-.x-combo-list-inner {
-    overflow:auto;
-    background:white;
-    position:relative; /* for calculating scroll offsets */
-    zoom:1;
-    overflow-x:hidden;
-}
-.x-combo-list-hd {
-    font:bold 11px tahoma, arial, helvetica, sans-serif;
-    color:#15428b;
-    background-image: url(../images/default/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #98c0f4;
-    padding:3px;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #98c0f4;
-}
-.x-combo-list-item {
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    padding:2px;
-    border:1px solid #fff;
-    white-space: nowrap;
-    overflow:hidden;
-    text-overflow: ellipsis;
-}
-.x-combo-list .x-combo-selected{
-	background-color: #c3daf9 !important;
-    cursor:pointer;
-    border:1px solid #336699;
-}
-.x-combo-noedit{
-    cursor:pointer;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/core.css b/lib/web/extjs/css/core.css
deleted file mode 100644
index e0ef50d5144bf97b26b3d4bf29eaabe8c246e1b2..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/core.css
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.ext-el-mask {
-    z-index: 20000;
-    position: absolute;
-    top: 0;
-    left: 0;
-    -moz-opacity: 0.5;
-    opacity: .50;
-    filter: alpha(opacity=50);
-    background-color: #CCC;
-    width: 100%;
-    height: 100%;
-    zoom: 1;
-}
-.ext-el-mask-msg {
-    z-index: 20001;
-    position: absolute;
-    top: 0;
-    left: 0;
-    border:1px solid #6593cf;
-    background: #c3daf9 url(../images/default/box/tb-blue.gif) repeat-x 0 -16px;
-    padding:2px;
-}
-.ext-el-mask-msg div {
-    padding:5px 10px 5px 10px;
-    background: #eee;
-    border:1px solid #a3bad9;
-    color:#333;
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    cursor:wait;
-}
-
-.ext-shim {
-    position:absolute;
-    visibility:hidden;
-    left:0;
-    top:0;
-    overflow:hidden;
-}
-.ext-ie .ext-shim {
-    filter: alpha(opacity=0);
-}
-
-.x-mask-loading div {
-    padding:5px 10px 5px 25px;
-    background: #eee url( '../images/default/grid/loading.gif' ) no-repeat 5px 5px;
-    line-height: 16px;
-}
-
-/* class for hiding elements without using display:none */
-.x-hidden {
-    position:absolute;
-    left:-2000px;
-    top:-2000px;
-    visibility:hidden;
-}
-
-.x-masked {
-    overflow: hidden !important;
-}
-
-.x-masked select, .x-masked object, .x-masked embed {
-    visibility: hidden;
-}
-
-.x-layer {
-    visibility: hidden;
-}
-
-.x-unselectable, .x-unselectable * {
-    -moz-user-select: none;
-    -khtml-user-select: none;
-}
-
-.x-repaint {
-    zoom: 1;
-    background-color: transparent;
-    -moz-outline: none;
-}
-
-.x-item-disabled {
-    color: gray;
-    cursor: default;
-    opacity: .6;
-    -moz-opacity: .6;
-    filter: alpha(opacity=60);
-}
-
-.x-item-disabled * {
-    color: gray;
-    cursor: default !important;
-}
-
-.x-splitbar-proxy {
-    position: absolute;
-    visibility: hidden;
-    z-index: 20001;
-    background: #aaa;
-    zoom: 1;
-    line-height: 1px;
-    font-size: 1px;
-    overflow: hidden;
-}
-
-.x-splitbar-h, .x-splitbar-proxy-h {
-    cursor: e-resize;
-    cursor: col-resize;
-}
-
-.x-splitbar-v, .x-splitbar-proxy-v {
-    cursor: s-resize;
-    cursor: row-resize;
-}
-
-.x-color-palette {
-    width: 150px;
-    height: 92px;
-    cursor: pointer;
-}
-
-.x-color-palette a {
-    border: 1px solid #fff;
-    float: left;
-    padding: 2px;
-    text-decoration: none;
-    -moz-outline: 0 none;
-    outline: 0 none;
-    cursor: pointer;
-}
-
-.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel {
-    border: 1px solid #8BB8F3;
-    background: #deecfd;
-}
-
-.x-color-palette em {
-    display: block;
-    border: 1px solid #ACA899;
-}
-
-.x-color-palette em span {
-    cursor: pointer;
-    display: block;
-    height: 10px;
-    line-height: 10px;
-    width: 10px;
-}
-
-.x-ie-shadow {
-    display: none;
-    position: absolute;
-    overflow: hidden;
-    left:0;
-    top:0;
-    background:#777;
-    zoom:1;
-}
-
-.x-shadow {
-    display: none;
-    position: absolute;
-    overflow: hidden;
-    left:0;
-    top:0;
-}
-
-.x-shadow * {
-    overflow: hidden;
-}
-
-.x-shadow * {
-    padding: 0;
-    border: 0;
-    margin: 0;
-    clear: none;
-    zoom: 1;
-}
-
-/* top  bottom */
-.x-shadow .xstc, .x-shadow .xsbc {
-    height: 6px;
-    float: left;
-}
-
-/* corners */
-.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr {
-    width: 6px;
-    height: 6px;
-    float: left;
-}
-
-/* sides */
-.x-shadow .xsc {
-    width: 100%;
-}
-
-.x-shadow .xsml, .x-shadow .xsmr {
-    width: 6px;
-    float: left;
-    height: 100%;
-}
-
-.x-shadow .xsmc {
-    float: left;
-    height: 100%;
-    background: transparent url( ../images/default/shadow-c.png );
-}
-
-.x-shadow .xst, .x-shadow .xsb {
-    height: 6px;
-    overflow: hidden;
-    width: 100%;
-}
-
-.x-shadow .xsml {
-    background: transparent url( ../images/default/shadow-lr.png ) repeat-y 0 0;
-}
-
-.x-shadow .xsmr {
-    background: transparent url( ../images/default/shadow-lr.png ) repeat-y -6px 0;
-}
-
-.x-shadow .xstl {
-    background: transparent url( ../images/default/shadow.png ) no-repeat 0 0;
-}
-
-.x-shadow .xstc {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -30px;
-}
-
-.x-shadow .xstr {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -18px;
-}
-
-.x-shadow .xsbl {
-    background: transparent url( ../images/default/shadow.png ) no-repeat 0 -12px;
-}
-
-.x-shadow .xsbc {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -36px;
-}
-
-.x-shadow .xsbr {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -6px;
-}
-
-.loading-indicator {
-    font-size: 11px;
-    background-image: url( '../images/default/grid/loading.gif' );
-    background-repeat: no-repeat;
-    background-position: left;
-    padding-left: 20px;
-    line-height: 16px;
-    margin: 3px;
-}
-
-.x-text-resize {
-    position: absolute;
-    left: -1000px;
-    top: -1000px;
-    visibility: hidden;
-    zoom: 1;
-}
-
-.x-drag-overlay {
-    width: 100%;
-    height: 100%;
-    display: none;
-    position: absolute;
-    left: 0;
-    top: 0;
-    background: white;
-    z-index: 20000;
-    -moz-opacity: 0;
-    opacity: 0;
-    filter: alpha(opacity=0);
-}
-
-.x-clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
diff --git a/lib/web/extjs/css/date-picker.css b/lib/web/extjs/css/date-picker.css
deleted file mode 100644
index b31141a201024f2b9a4152274e9d98b537c30add..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/date-picker.css
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-date-picker {
-    border: 1px solid #1b376c;
-    border-top:0 none;
-    background:#fff;
-	 position:relative;
-}
-.x-date-picker a {
-    -moz-outline:0 none;
-    outline:0 none;
-}
-.x-date-inner, .x-date-inner td, .x-date-inner th{
-    border-collapse:separate;
-}
-.x-date-middle,.x-date-left,.x-date-right {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -83px;
-	color:#FFF;
-	font:bold 11px "sans serif", tahoma, verdana, helvetica;
-	overflow:hidden;
-}
-
-.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{
-	background:transparent !important;
-    vertical-align:middle;
-}
-.x-date-middle .x-btn .x-btn-text {
-    color:#fff;
-}
-.x-date-middle .x-btn-with-menu  .x-btn-center em {
-    background:transparent url(../images/default/toolbar/btn-arrow-light.gif) no-repeat right 0;
-}
-.x-date-right, .x-date-left {
-    width:18px;
-}
-.x-date-right{
-    text-align:right;
-}
-.x-date-middle {
-    padding-top:2px;padding-bottom:2px;
-}
-.x-date-right a, .x-date-left a{
-    display:block;
-    width:16px;
-	height:16px;
-	background-position: center;
-	background-repeat: no-repeat;
-	cursor:pointer;
-    -moz-opacity: 0.6;
-    opacity:.6;
-    filter: alpha(opacity=60);
-}
-.x-date-right a:hover, .x-date-left a:hover{
-    -moz-opacity: 1;
-    opacity:1;
-    filter: alpha(opacity=100);
-}
-.x-date-right a {
-    background-image: url(../images/default/shared/right-btn.gif);
-    margin-right:2px;
-    text-decoration:none !important;
-}
-.x-date-left a{
-	background-image: url(../images/default/shared/left-btn.gif);
-    margin-left:2px;
-    text-decoration:none !important;
-}
-table.x-date-inner {
-    width:100%;
-    table-layout:fixed;
-}
-.x-date-inner th {
-    width:25px;
-}
-.x-date-inner th {
-    background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-    text-align:right !important;
-	border-bottom: 1px solid #a3bad9;
-    font:normal 10px arial, helvetica,tahoma,sans-serif;
-	color:#233d6d;
-	cursor:default;
-    padding:0;
-    border-collapse:separate;
-}
-.x-date-inner th span {
-    display:block;
-    padding:2px;
-    padding-right:7px;
-}
-.x-date-inner td {
-    border: 1px solid #fff;
-	text-align:right;
-    padding:0;
-}
-.x-date-inner a {
-    padding:2px 5px;
-    display:block;
-    font:normal 11px arial, helvetica,tahoma,sans-serif;
-	text-decoration:none;
-    color:black;
-    text-align:right;
-    zoom:1;
-}
-.x-date-inner .x-date-active{
-	cursor:pointer;
-	color:black;
-}
-.x-date-inner .x-date-selected a{
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-	border:1px solid #8db2e3;
-   padding:1px 4px;
-}
-.x-date-inner .x-date-today a{
-	border: 1px solid darkred;
-    padding:1px 4px;
-}
-.x-date-inner .x-date-selected span{
-    font-weight:bold;
-}
-.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a {
-	color:#aaaaaa;
-    text-decoration:none !important;
-}
-.x-date-bottom {
-    padding:4px;
-    border-top: 1px solid #a3bad9;
-    background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-}
-
-.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
-    text-decoration:none !important;
-    color:black;
-    background: #ddecfe;
-}
-
-.x-date-inner .x-date-disabled a {
-	cursor:default;
-	background:#eeeeee;
-	color:#bbbbbb;
-}
-.x-date-mmenu{
-    background:#eeeeee !important;
-}
-.x-date-mmenu .x-menu-item {
-	font-size:10px;
-	padding:1px 24px 1px 4px;
-	white-space: nowrap;
-	color:#000;
-}
-.x-date-mmenu .x-menu-item .x-menu-item-icon {
-    width:10px;height:10px;margin-right:5px;
-    background-position:center -4px !important;
-}
-
-.x-date-mp {
-	position:absolute;
-	left:0;
-	top:0;
-	background:white;
-	display:none;
-}
-.x-date-mp td {
-    padding:2px;
-	font:normal 11px arial, helvetica,tahoma,sans-serif;
-}
-td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn {
-   border: 0 none;
-	text-align:center;
-	vertical-align: middle;
-	width:25%;
-}
-.x-date-mp-ok {
-	margin-right:3px;
-}
-.x-date-mp-btns button {
-	text-decoration:none;
-	text-align:center;
-	text-decoration:none !important;
-	background:#083772;
-	color:white;
-	border:1px solid;
-	border-color: #3366cc #000055 #000055 #3366cc;
-	padding:1px 3px 1px;
-	font:normal 11px arial, helvetica,tahoma,sans-serif;
-	cursor:pointer;
-}
-.x-date-mp-btns {
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-}
-.x-date-mp-btns td {
-	border-top: 1px solid #c5d2df;
-   text-align:center;
-}
-td.x-date-mp-month a,td.x-date-mp-year a {
-	display:block;
-	padding:2px 4px;
-	text-decoration:none;
-	text-align:center;
-	color:#15428b;
-}
-
-td.x-date-mp-month a:hover,td.x-date-mp-year a:hover {
-	color:#15428b;
-	text-decoration:none;
-	cursor:pointer;
-	background: #ddecfe;
-}
-
-td.x-date-mp-sel a {
-	padding:1px 3px;
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-	border:1px solid #8db2e3;
-}
-.x-date-mp-ybtn a {
-    overflow:hidden;
-    width:15px;
-    height:15px;
-    cursor:pointer;
-    background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;
-    display:block;
-    margin:0 auto;
-}
-.x-date-mp-ybtn a.x-date-mp-next {
-    background-position:0 -120px;
-}
-.x-date-mp-ybtn a.x-date-mp-next:hover {
-    background-position:-15px -120px;
-}
-.x-date-mp-ybtn a.x-date-mp-prev {
-    background-position:0 -105px;
-}
-.x-date-mp-ybtn a.x-date-mp-prev:hover {
-    background-position:-15px -105px;
-}
-.x-date-mp-ybtn {
-   text-align:center;
-}
-td.x-date-mp-sep {
-   border-right:1px solid #c5d2df;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/dd.css b/lib/web/extjs/css/dd.css
deleted file mode 100644
index 08bbcc6a8b2daf27118bf8ae797559ae4fa52923..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/dd.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-dd-drag-proxy{
-	position:absolute;
-	left:0;top:0;
-	visibility:hidden;
-	z-index:15000;
-}
-.x-dd-drag-ghost{
-	color: black;
-	font: normal 11px arial, helvetica, sans-serif;
-	-moz-opacity: 0.85;
-   opacity:.85;
-   filter: alpha(opacity=85);
-	border-top:1px solid #dddddd;
-	border-left:1px solid #dddddd;
-	border-right:1px solid #bbbbbb;
-	border-bottom:1px solid #bbbbbb;
-	padding:3px;
-	padding-left:20px;
-	background-color:white;
-	white-space:nowrap;
-}
-.x-dd-drag-repair .x-dd-drag-ghost{
-	-moz-opacity: 0.4;
-   opacity:.4;
-   filter: alpha(opacity=40);
-	border:0 none;
-	padding:0;
-	background-color:transparent;
-}
-.x-dd-drag-repair .x-dd-drop-icon{
-	visibility:hidden;
-}
-.x-dd-drop-icon{
-  position:absolute;
-	top:3px;
-	left:3px;
-	display:block;
-	width:16px;
-	height:16px;
-	background-color:transparent;
-	background-position: center;
-	background-repeat: no-repeat;
-	z-index:1;
-}
-.x-dd-drop-nodrop .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-no.gif);
-}
-.x-dd-drop-ok .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-yes.gif);
-}
-.x-dd-drop-ok-add .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-add.gif);
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/debug.css b/lib/web/extjs/css/debug.css
deleted file mode 100644
index 07de9e630313ba8d7a0afb375f43c84020d3d6f7..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/debug.css
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-#x-debug-browser .x-tree .x-tree-node a span {
-    color:#222297;
-    font-size:12px;
-    padding-top:2px;
-    font-family:"courier","courier new";
-    line-height:18px;
-}
-#x-debug-browser .x-tree a i {
-    color:#FF4545;
-    font-style:normal;
-}
-#x-debug-browser .x-tree a em {
-    color:#999;
-}
-#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{
-    background:#c3daf9;
-}
-#x-debug-browser pre, .x-debug-browser pre xmp {
-    font:normal 11px tahoma, arial, helvetica, sans-serif !important;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word;
-}
-#x-debug-browser pre {
-    display:block;
-    padding:5px !important;
-    border-bottom:1px solid #eeeeee !important;
-}
-#x-debug-browser pre xmp {
-    padding:0 !important;
-    margin:0 !important;
-}
-#x-debug-console .x-layout-panel-center, #x-debug-inspector .x-layout-panel-center {
-      border-right:1px solid #98c0f4;
-}
-#x-debug-console textarea {
-    border: 0 none;
-    font-size:12px;
-    font-family:"courier","courier new";
-    padding-top:4px;
-    padding-left:4px;
-}
-.x-debug-frame {
-    background:#eeeeee;
-    border:1px dashed #aaaaaa;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/editor.css b/lib/web/extjs/css/editor.css
deleted file mode 100644
index b0fc6f565ccde0b3ef4d2cef3200cce993145b0a..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/editor.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-html-editor-wrap {
-    border:1px solid #a9bfd3;
-    background:white;
-}
-.x-html-editor-tb .x-btn-text {
-    background:transparent url(../images/default/editor/tb-sprite.gif) no-repeat;
-}
-.x-html-editor-tb .x-edit-bold .x-btn-text {
-    background-position:0 0;
-}
-.x-html-editor-tb .x-edit-italic .x-btn-text {
-    background-position:-16px 0;
-}
-.x-html-editor-tb .x-edit-underline .x-btn-text {
-    background-position:-32px 0;
-}
-.x-html-editor-tb .x-edit-forecolor .x-btn-text {
-    background-position:-160px 0;
-}
-.x-html-editor-tb .x-edit-backcolor .x-btn-text {
-    background-position:-176px 0;
-}
-.x-html-editor-tb .x-edit-justifyleft .x-btn-text {
-    background-position:-112px 0;
-}
-.x-html-editor-tb .x-edit-justifycenter .x-btn-text {
-    background-position:-128px 0;
-}
-.x-html-editor-tb .x-edit-justifyright .x-btn-text {
-    background-position:-144px 0;
-}
-.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text {
-    background-position:-80px 0;
-}
-.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text {
-    background-position:-96px 0;
-}
-.x-html-editor-tb .x-edit-increasefontsize .x-btn-text {
-    background-position:-48px 0;
-}
-.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text {
-    background-position:-64px 0;
-}
-.x-html-editor-tb .x-edit-sourceedit .x-btn-text {
-    background-position:-192px 0;
-}
-
-.x-html-editor-tip .x-tip-bd .x-tip-bd-inner {
-    padding:5px;
-    padding-bottom:1px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/ext-all.css b/lib/web/extjs/css/ext-all.css
deleted file mode 100644
index b9d7fa3d05cf1c0487e4beb8d6eb9bc4281a9f8d..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/ext-all.css
+++ /dev/null
@@ -1,3446 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
-.ext-el-mask {
-    z-index: 20000;
-    position: absolute;
-    top: 0;
-    left: 0;
-    -moz-opacity: 0.5;
-    opacity: .50;
-    filter: alpha(opacity=50);
-    background-color: #CCC;
-    width: 100%;
-    height: 100%;
-    zoom: 1;
-}
-.ext-el-mask-msg {
-    z-index: 20001;
-    position: absolute;
-    top: 0;
-    left: 0;
-    border:1px solid #6593cf;
-    background: #c3daf9 url(../images/default/box/tb-blue.gif) repeat-x 0 -16px;
-    padding:2px;
-}
-.ext-el-mask-msg div {
-    padding:5px 10px 5px 10px;
-    background: #eee;
-    border:1px solid #a3bad9;
-    color:#333;
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    cursor:wait;
-}
-
-.ext-shim {
-    position:absolute;
-    visibility:hidden;
-    left:0;
-    top:0;
-    overflow:hidden;
-}
-.ext-ie .ext-shim {
-    filter: alpha(opacity=0);
-}
-
-.x-mask-loading div {
-    padding:5px 10px 5px 25px;
-    background: #eee url( '../images/default/grid/loading.gif' ) no-repeat 5px 5px;
-    line-height: 16px;
-}
-
-
-.x-hidden {
-    position:absolute;
-    left:-2000px;
-    top:-2000px;
-    visibility:hidden;
-}
-
-.x-masked {
-    overflow: hidden !important;
-}
-
-.x-masked select, .x-masked object, .x-masked embed {
-    visibility: hidden;
-}
-
-.x-layer {
-    visibility: hidden;
-}
-
-.x-unselectable, .x-unselectable * {
-    -moz-user-select: none;
-    -khtml-user-select: none;
-}
-
-.x-repaint {
-    zoom: 1;
-    background-color: transparent;
-    -moz-outline: none;
-}
-
-.x-item-disabled {
-    color: gray;
-    cursor: default;
-    opacity: .6;
-    -moz-opacity: .6;
-    filter: alpha(opacity=60);
-}
-
-.x-item-disabled * {
-    color: gray;
-    cursor: default !important;
-}
-
-.x-splitbar-proxy {
-    position: absolute;
-    visibility: hidden;
-    z-index: 20001;
-    background: #aaa;
-    zoom: 1;
-    line-height: 1px;
-    font-size: 1px;
-    overflow: hidden;
-}
-
-.x-splitbar-h, .x-splitbar-proxy-h {
-    cursor: e-resize;
-    cursor: col-resize;
-}
-
-.x-splitbar-v, .x-splitbar-proxy-v {
-    cursor: s-resize;
-    cursor: row-resize;
-}
-
-.x-color-palette {
-    width: 150px;
-    height: 92px;
-    cursor: pointer;
-}
-
-.x-color-palette a {
-    border: 1px solid #fff;
-    float: left;
-    padding: 2px;
-    text-decoration: none;
-    -moz-outline: 0 none;
-    outline: 0 none;
-    cursor: pointer;
-}
-
-.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel {
-    border: 1px solid #8BB8F3;
-    background: #deecfd;
-}
-
-.x-color-palette em {
-    display: block;
-    border: 1px solid #ACA899;
-}
-
-.x-color-palette em span {
-    cursor: pointer;
-    display: block;
-    height: 10px;
-    line-height: 10px;
-    width: 10px;
-}
-
-.x-ie-shadow {
-    display: none;
-    position: absolute;
-    overflow: hidden;
-    left:0;
-    top:0;
-    background:#777;
-    zoom:1;
-}
-
-.x-shadow {
-    display: none;
-    position: absolute;
-    overflow: hidden;
-    left:0;
-    top:0;
-}
-
-.x-shadow * {
-    overflow: hidden;
-}
-
-.x-shadow * {
-    padding: 0;
-    border: 0;
-    margin: 0;
-    clear: none;
-    zoom: 1;
-}
-
-
-.x-shadow .xstc, .x-shadow .xsbc {
-    height: 6px;
-    float: left;
-}
-
-
-.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr {
-    width: 6px;
-    height: 6px;
-    float: left;
-}
-
-
-.x-shadow .xsc {
-    width: 100%;
-}
-
-.x-shadow .xsml, .x-shadow .xsmr {
-    width: 6px;
-    float: left;
-    height: 100%;
-}
-
-.x-shadow .xsmc {
-    float: left;
-    height: 100%;
-    background: transparent url( ../images/default/shadow-c.png );
-}
-
-.x-shadow .xst, .x-shadow .xsb {
-    height: 6px;
-    overflow: hidden;
-    width: 100%;
-}
-
-.x-shadow .xsml {
-    background: transparent url( ../images/default/shadow-lr.png ) repeat-y 0 0;
-}
-
-.x-shadow .xsmr {
-    background: transparent url( ../images/default/shadow-lr.png ) repeat-y -6px 0;
-}
-
-.x-shadow .xstl {
-    background: transparent url( ../images/default/shadow.png ) no-repeat 0 0;
-}
-
-.x-shadow .xstc {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -30px;
-}
-
-.x-shadow .xstr {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -18px;
-}
-
-.x-shadow .xsbl {
-    background: transparent url( ../images/default/shadow.png ) no-repeat 0 -12px;
-}
-
-.x-shadow .xsbc {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -36px;
-}
-
-.x-shadow .xsbr {
-    background: transparent url( ../images/default/shadow.png ) repeat-x 0 -6px;
-}
-
-.loading-indicator {
-    font-size: 11px;
-    background-image: url( '../images/default/grid/loading.gif' );
-    background-repeat: no-repeat;
-    background-position: left;
-    padding-left: 20px;
-    line-height: 16px;
-    margin: 3px;
-}
-
-.x-text-resize {
-    position: absolute;
-    left: -1000px;
-    top: -1000px;
-    visibility: hidden;
-    zoom: 1;
-}
-
-.x-drag-overlay {
-    width: 100%;
-    height: 100%;
-    display: none;
-    position: absolute;
-    left: 0;
-    top: 0;
-    background: white;
-    z-index: 20000;
-    -moz-opacity: 0;
-    opacity: 0;
-    filter: alpha(opacity=0);
-}
-
-.x-clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-
-.x-tabs-wrap {
-	border-bottom:1px solid #6593cf;
-	padding-top:2px;
-}
-.x-tabs-strip-wrap{
-	width:100%;	
-}
-.x-tabs-wrap table{
-	position:relative;
-	top:0; left:0;
-}
-.x-tabs-strip td{
-	padding:0;
-	padding-left:2px;
-}
-.x-tabs-strip a, .x-tabs-strip span, .x-tabs-strip em {
-	display:block;
-}
-.x-tabs-strip a {
-	text-decoration:none !important;
-	-moz-outline: none;
-	outline: none;
-	cursor:pointer;
-}
-.x-tabs-strip .x-tabs-text {
-	font:bold 11px tahoma,arial,helvetica;
-	color:#666;
-	overflow:hidden;
-	white-space: nowrap;
-	cursor:pointer;
-	text-overflow: ellipsis;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#083772;
-}
-.x-tabs-strip .disabled .x-tabs-text {
-	cursor:default;
-	color:#aaaaaa;
-}
-.x-tabs-strip .x-tabs-inner {
-	 padding:4px 10px;	
-}
-
-.x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-.x-tabs-strip .x-tabs-right {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-strip .x-tabs-left {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-
-.x-tabs-strip  a {
-	position:relative;
-	top:1px; left:0;
-}
-.x-tabs-strip .on a {
-	position:relative;
-}
-.x-tabs-strip .on .x-tabs-inner {
-	padding-bottom:5px;
-}
-
-.x-tabs-strip .x-tabs-closable .x-tabs-inner{
-	padding-right:22px;
-	position:relative;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	line-height: 1px;
-	font-size:1px;
-	background-image:url(../images/default/layout/tab-close.gif);
-	display:block;
-	position:absolute;
-	right:5px;top:4px;
-	width:11px;height:11px;
-	cursor:pointer;
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/default/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/default/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #6593cf;
-    border-top:0 none;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-top:1px solid #6593cf;
-	border-bottom:0 none;
-	padding-top:0;
-	padding-bottom:2px;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	 background: url(../images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	 background: url(../images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip  a {
-	position:relative;
-	top:0; left:0;
-}
-.x-tabs-bottom .x-tabs-strip .on a {
-	margin-top:-1px;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-inner {
-	padding-top:5px;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #6593cf;
-    border-bottom:0 none;
-}
-
-
-
-.x-form-field{
-    margin: 0 0 0 0;
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-}
-
-
-.x-form-text, textarea.x-form-field{
-    padding: 1px 3px;
-    background:#fff url(../images/default/form/text-bg.gif) repeat-x 0 0;
-    border: 1px solid #B5B8C8;
-}
-.x-form-text {
-    height:22px;
-    line-height:18px;
-    vertical-align:middle;
-}
-.ext-ie .x-form-text {
-    margin-top:-1px; 
-    margin-bottom:-1px;
-    height:22px; 
-    line-height:18px;
-}
-.ext-strict .x-form-text {
-    height:18px;
-}
-.ext-safari .x-form-text {
-    height:20px; 
-}
-.ext-gecko .x-form-text {
-    padding-top:2px; 
-    padding-bottom:0;
-}
-
-
-.x-form-select-one {
-    height:20px;
-    line-height:18px;
-    vertical-align:middle;
-    background-color:#fff; 
-    border: 1px solid #B5B8C8;
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-.x-form-field-wrap {
-    position:relative;
-    zoom:1;
-    white-space: nowrap;
-}
-
-.x-editor .x-form-check-wrap {
-    background:#fff;
-}
-.x-form-field-wrap .x-form-trigger{
-    width:17px;
-    height:21px;
-    border:0;
-    background:transparent url(../images/default/form/trigger.gif) no-repeat 0 0;
-    cursor:pointer;
-    border-bottom: 1px solid #B5B8C8;
-    position:absolute;
-    top:0;
-}
-.ext-safari .x-form-field-wrap .x-form-trigger{
-    height:19px; 
-}
-.x-form-field-wrap .x-form-date-trigger{
-    background:transparent url(../images/default/form/date-trigger.gif) no-repeat 0 0 !important;
-    cursor:pointer;
-}
-.x-form-field-wrap .x-form-clear-trigger{
-    background:transparent url(../images/default/form/clear-trigger.gif) no-repeat;
-    cursor:pointer;
-}
-.x-form-field-wrap .x-form-search-trigger{
-    background:transparent url(../images/default/form/search-trigger.gif) no-repeat 0 0;
-    cursor:pointer;
-}
-.ext-safari .x-form-field-wrap .x-form-trigger{
-    right:0;
-}
-.x-form-field-wrap .x-form-twin-triggers{
-    
-}
-.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{
-    position:static;
-    top:auto;
-    vertical-align:top;
-}
-
-
-.x-form-field-wrap .x-form-trigger-over{
-    background-position:-17px 0;
-}
-.x-form-field-wrap .x-form-trigger-click{
-    background-position:-34px 0;
-}
-.x-item-disabled .x-form-trigger-over{
-    background-position:0 0 !important;
-}
-.x-item-disabled .x-form-trigger-click{
-    background-position:0 0 !important;
-}
-
-
-.x-form-focus, textarea.x-form-focus{
-	border: 1px solid #7eadd9;
-}
-
-
-.x-form-invalid, textarea.x-form-invalid{
-	background:#fff url(../images/default/grid/invalid_line.gif) repeat-x bottom;
-	border: 1px solid #dd7870;
-}
-.ext-safari .x-form-invalid{
-	background-color:#ffeeee;
-	border: 1px solid #ff7870;
-}
-
-
-
-.x-editor {
-    visibility:hidden;
-    padding:0;
-    margin:0;
-}
-.x-form-check-wrap {
-    line-height:18px;
-}
-.ext-ie .x-form-check-wrap input {
-    width:15px;
-    height:15px;
-}
-.x-editor .x-form-check-wrap {
-    padding:3px;
-}
-.x-editor .x-form-checkbox {
-    height:13px;
-    border: 0 none;
-}
-
-.x-form-grow-sizer {
-	font:normal 12px tahoma, arial, helvetica, sans-serif;
-    left: -10000px;
-	padding: 8px 3px;
-    position: absolute;
-    visibility:hidden;
-    top: -10000px;
-	white-space: pre-wrap;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word;
-    zoom:1;
-}
-.x-form-grow-sizer p {
-    margin:0 !important;
-    border:0 none !important;
-    padding:0 !important;
-}
-
-
-.x-form-item {
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    display:block;
-    margin-bottom:4px;
-}
-
-.x-form-item label {
-    display:block;
-    float:left;
-    width:100px;
-    padding:3px;
-    padding-left:0;
-    clear:left;
-    z-index:2;
-    position:relative;
-}
-
-.x-form-element {
-    padding-left:105px;
-    position:relative;
-}
-
-.x-form-invalid-msg {
-    color:#ee0000;
-    padding:2px;
-    padding-left:18px;
-    font:normal 11px tahoma, arial, helvetica, sans-serif;
-    background: transparent url(../images/default/shared/warning.gif) no-repeat 0 2px;
-    line-height:16px;
-    width:200px;
-}
-
-.x-form-label-right label {
-   text-align:right;
-}
-
-.x-form-label-top .x-form-item label {
-    width:auto;
-    float:none;
-    clear:none;
-    display:inline;
-    margin-bottom:4px;
-    position:static;
-}
-.x-form-label-top .x-form-element {
-    padding-left:0;
-    padding-top:4px;
-}
-.x-form-label-top .x-form-item {
-    padding-bottom:4px;
-}
-.x-form fieldset {
-    border:1px solid #B5B8C8;
-    padding:10px 10px 5px 10px;
-    margin-bottom:10px;
-}
-.x-form fieldset legend {
-    font:bold 11px tahoma, arial, helvetica, sans-serif;
-    color:#15428b;
-}
-.ext-ie .x-form fieldset legend {
-    margin-bottom:10px;
-}
-.ext-ie .x-form fieldset {
-    padding-top: 0;
-}
-.x-form-empty-field {
-    color:gray;
-}
-
-.x-small-editor .x-form-field {
-    font:normal 11px arial, tahoma, helvetica, sans-serif;
-}
-.x-small-editor .x-form-text {
-    height:20px;
-    line-height:16px;
-    vertical-align:middle;
-}
-.ext-ie .x-small-editor .x-form-text {
-    margin-top:-1px !important; 
-    margin-bottom:-1px !important;
-    height:20px !important; 
-    line-height:16px !important;
-}
-.ext-strict .x-small-editor .x-form-text {
-    height:16px !important;
-}
-.ext-safari .x-small-editor .x-form-field {
-    
-    font:normal 12px arial, tahoma, helvetica, sans-serif;
-}
-.ext-ie .x-small-editor .x-form-text {
-    height:20px;
-    line-height:16px;
-}
-.ext-border-box .x-small-editor .x-form-text {
-    height:20px;
-}
-
-.x-small-editor .x-form-select-one {
-    height:20px;
-    line-height:16px;
-    vertical-align:middle;
-}
-.x-small-editor .x-form-num-field {
-    text-align:right;
-}
-.x-small-editor .x-form-field-wrap .x-form-trigger{
-    height:19px;
-}
-
-
-.x-form-clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-.x-form-clear-left {
-    clear:left;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-
-.x-form-cb-label {
-    width:'auto' !important;
-    float:none !important;
-    clear:none !important;
-    display:inline !important;
-    margin-left:4px;
-}
-
-.x-form-column {
-    float:left;
-    padding:0;
-    margin:0;
-    width:48%;
-    overflow:hidden;
-    zoom:1;
-}
-
-
-.x-form .x-form-btns-ct .x-btn{
-	float:right;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns td {
-	border:0;
-	padding:0;
-}
-.x-form .x-form-btns-ct .x-form-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns-center{
-	text-align:center; 
-}
-.x-form .x-form-btns-ct .x-form-btns-center table{
-	margin:0 auto; 
-}
-.x-form .x-form-btns-ct table td.x-form-btn-td{
-	padding:3px;
-}
-
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-form .x-form-btns-ct .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-form .x-form-btns-ct .x-btn-click  .x-btn-right{
-	background-position:0 -84px;
-}
-.x-form .x-form-btns-ct .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-.x-form-invalid-icon {
-    width:16px;
-    height:18px;
-    visibility:hidden;
-    position:absolute;
-    left:0;
-    top:0;
-    display:block;
-    background:transparent url(../images/default/form/exclamation.gif) no-repeat 0 2px;
-}
-.x-btn{
-	font:normal 11px tahoma, verdana, helvetica;
-	cursor:pointer;
-	white-space: nowrap;
-}
-.x-btn button{
-    border:0 none;
-    background:transparent;
-    font:normal 11px tahoma,verdana,helvetica;
-    padding-left:3px;
-    padding-right:3px;
-    cursor:pointer;
-    margin:0;
-    overflow:visible;
-    width:auto;
-    -moz-outline:0 none;
-    outline:0 none;
-}
-* html .ext-ie .x-btn button {
-    width:1px;
-}
-.ext-gecko .x-btn button {
-    padding-left:0;
-    padding-right:0;
-}
-.ext-ie .x-btn button {
-    padding-top:2px;
-}
-
- 
-.x-btn-icon .x-btn-center .x-btn-text{
-	background-position: center;
-	background-repeat: no-repeat;
-	height: 16px;
-	width: 16px;
-	cursor:pointer;
-	white-space: nowrap;
-    padding:0;
-}
-.x-btn-icon .x-btn-center{
-	padding:1px;
-}
-.x-btn em {
-    font-style:normal;
-    font-weight:normal;
-}
-
-
-.x-btn-text-icon .x-btn-center .x-btn-text{
-	background-position: 0 2px;
-	background-repeat: no-repeat;
-	padding-left:18px;
-	padding-top:3px;
-	padding-bottom:3px;
-    padding-right:0;
-}
-
-.x-btn-left, .x-btn-right{
-	font-size:1px;
-    line-height:1px;
-}
-.x-btn-left{
-	width:3px;
-	height:21px;
-	background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
-}
-.x-btn-right{
-	width:3px;
-	height:21px;
-	background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-btn-left i, .x-btn-right i{
-	display:block;
-    width:3px;
-    overflow:hidden;
-    font-size:1px;
-    line-height:1px;
-}
-.x-btn-center{
-	background:url(../images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
-	vertical-align: middle;
-	text-align:center;
-	padding:0 5px;
-	cursor:pointer;
-	white-space:nowrap;
-}
-.x-btn-over .x-btn-left{
-	background-position:0 -63px;
-}
-.x-btn-over .x-btn-right{
-	background-position:0 -84px;
-}
-.x-btn-over .x-btn-center{
-	background-position:0 -105px;
-}
-.x-btn-click .x-btn-center, .x-btn-menu-active .x-btn-center{
-	background-position:0 -126px;
-}
-.x-btn-disabled *{
-	color:gray !important;
-	cursor:default !important;
-}
-.x-btn-menu-text-wrap .x-btn-center {
-	padding:0 3px;
-}
-.ext-gecko .x-btn-menu-text-wrap .x-btn-center {
-	padding:0 1px;
-}
-.x-btn-menu-arrow-wrap .x-btn-center {
-    padding:0;
-}
-.x-btn-menu-arrow-wrap .x-btn-center button {
-	width:12px !important;
-    height:21px;
-    padding:0 !important;
-    display:block;
-    background:transparent url(../images/default/basic-dialog/btn-arrow.gif) no-repeat left 3px;
-}
-.x-btn-with-menu  .x-btn-center {
-    padding-right:2px !important;
-}
-.x-btn-with-menu  .x-btn-center em {
-    display:block;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat right 0;
-	padding-right:10px;
-}
-
-.x-btn-text-icon .x-btn-with-menu .x-btn-center em {
-    display:block;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat right 3px;
-	padding-right:10px;
-}
-.x-toolbar{
-	border-top: 1px solid #eaf0f7;
-    border-bottom: 1px solid #a9bfd3;
-    display: block;
-	padding:2px;
-    background:#d0def0 url(../images/default/layout/panel-title-light-bg.gif) repeat-x;
-}
-.x-toolbar .x-item-disabled .x-btn-icon {
-    opacity: .35;
-    -moz-opacity: .35;
-    filter: alpha(opacity=35);
-}
-.x-toolbar td {
-	vertical-align:middle;
-}
-.mso .x-toolbar, .x-grid-mso .x-toolbar{
-	border: 0 none;
-	background: url(../images/default/grid/mso-hd.gif);
-}
-.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{
-	white-space: nowrap;
-    font:normal 11px tahoma, arial, helvetica, sans-serif;
-}
-.x-toolbar .x-item-disabled {
-	color:gray;
-	cursor:default;
-	opacity:.6;
-	-moz-opacity:.6;
-	filter:alpha(opacity=60);
-}
-.x-toolbar .x-item-disabled * {
-	color:gray;
-	cursor:default;
-}
-.x-toolbar .x-btn-left{
-	background:none;
-}
-.x-toolbar .x-btn-right{
-	background:none;
-}
-.x-toolbar .x-btn-center{
-	background:none;
-	padding:0 0;
-}
-
-.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
-	padding-right:2px;
-}
-.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
-	padding-right:0;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{
-	padding:0 2px;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
-    width:12px;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
-    width:12px;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
-	background-position: 0 -47px;
-}
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-.x-toolbar .x-btn-with-menu .x-btn-center em{
-	padding-right:8px;
-}
-
-.x-toolbar .ytb-text{
-   padding:2px;
-}
-.x-toolbar .ytb-sep {
-	background-image: url(../images/default/grid/grid-split.gif);
-	background-position: center;
-	background-repeat: no-repeat;
-	display: block;
-	font-size: 1px;
-	height: 16px;
-	width:4px;
-	overflow: hidden;
-	cursor:default;
-	margin: 0 2px 0;
-	border:0;
-}
-.x-toolbar .ytb-spacer {
-    width:2px;
-}
-.mso .x-toolbar .ytb-sep, .x-grid-mso .x-toolbar .ytb-sep{
-	background-image: url(../images/default/grid/grid-blue-split.gif);
-}
-
-
-.ext-ie .x-toolbar .x-form-field-wrap {
-	padding-bottom:1px;
-}
-.ext-ie .x-toolbar .x-form-field-wrap .x-form-trigger {
-	top:1px;
-}
-.ext-ie .x-toolbar .x-form-field-wrap .x-form-twin-triggers img {
-	margin-top:1px;
-}
-
-
-
-.x-grid-page-number{
-	width:24px;
-	height:14px;
-}
-.x-grid-page-first .x-btn-text{
-	background-image: url(../images/default/grid/page-first.gif);
-}
-.x-grid-loading .x-btn-text{
-	background-image: url(../images/default/grid/done.gif);
-}
-.x-grid-page-last .x-btn-text{
-	background-image: url(../images/default/grid/page-last.gif);
-}
-.x-grid-page-next .x-btn-text{
-	background-image: url(../images/default/grid/page-next.gif);
-}
-.x-grid-page-prev .x-btn-text{
-	background-image: url(../images/default/grid/page-prev.gif);
-}
-.x-item-disabled .x-grid-loading .x-btn-text{
-	background-image: url(../images/default/grid/loading.gif);
-}
-.x-item-disabled .x-grid-page-first .x-btn-text{
-	background-image: url(../images/default/grid/page-first-disabled.gif);
-}
-.x-item-disabled .x-grid-page-last .x-btn-text{
-	background-image: url(../images/default/grid/page-last-disabled.gif);
-}
-.x-item-disabled .x-grid-page-next .x-btn-text{
-	background-image: url(../images/default/grid/page-next-disabled.gif);
-}
-.x-item-disabled .x-grid-page-prev .x-btn-text{
-	background-image: url(../images/default/grid/page-prev-disabled.gif);
-}
-.x-paging-info {
-    position:absolute;
-    top:8px;
-    right: 8px;
-    color:#15428b;
-}
-
-.x-resizable-handle {
-    position:absolute;
-    z-index:100;
-    
-    font-size:1px;
-    line-height:6px;
-    overflow:hidden;
-	 background:white;
-	 filter:alpha(opacity=0);
-	 opacity:0;
-	 zoom:1;
-}
-.x-resizable-handle-east{
-    width:6px;
-    cursor:e-resize;
-    right:0;
-    top:0;
-    height:100%;
-}
-.ext-ie .x-resizable-handle-east {
-      margin-right:-1px; 
-}
-.x-resizable-handle-south{
-    width:100%;
-    cursor:s-resize;
-    left:0;
-    bottom:0;
-    height:6px;
-}
-.ext-ie .x-resizable-handle-south {
-     margin-bottom:-1px; 
-}
-.x-resizable-handle-west{
-    width:6px;
-    cursor:w-resize;
-    left:0;
-    top:0;
-    height:100%;
-}
-.x-resizable-handle-north{
-    width:100%;
-    cursor:n-resize;
-    left:0;
-    top:0;
-    height:6px;
-}
-.x-resizable-handle-southeast{
-    width:6px;
-    cursor:se-resize;
-    right:0;
-    bottom:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-northwest{
-    width:6px;
-    cursor:nw-resize;
-    left:0;
-    top:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-northeast{
-    width:6px;
-    cursor:ne-resize;
-    right:0;
-    top:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-southwest{
-    width:6px;
-    cursor:sw-resize;
-    left:0;
-    bottom:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{
-    filter:alpha(opacity=100);
-	 opacity:1;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/default/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/default/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/default/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/default/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/default/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/default/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #6593cf;
-    position:absolute;
-    overflow:hidden;
-    display:none;
-	 left:0;top:0;
-    z-index:50000;
-}
-.x-resizable-overlay{
-    width:100%;
-	 height:100%;
-	 display:none;
-	 position:absolute;
-	 left:0;
-	 top:0;
-	 background:white;
-	 z-index:200000;
-	 -moz-opacity: 0;
-    opacity:0;
-    filter: alpha(opacity=0);
-}
-
-
-.x-grid3 {
-	position:relative;
-	overflow:hidden;
-    background-color:#fff;
-}
-.ext-ie .x-grid3 table {
-    table-layout:fixed;
-}
-.x-grid3-viewport{
-	overflow:hidden;
-}
-.x-grid3-hd-row td, .x-grid3-row td{
-	font:normal 11px arial, tahoma, helvetica, sans-serif;
-    -moz-outline: none;
-	-moz-user-focus: normal;
-}
-.x-grid3-row td {
-    line-height:13px;
-    vertical-align: top;
-	padding-left:1px;
-    padding-right:1px;
-    -moz-user-select: none;
-}
-.x-grid3-hd-row td {
-    line-height:15px;
-    vertical-align:middle;
-    border-left:1px solid #eee;
-    border-right:1px solid #d0d0d0;
-}
-
-.x-grid3-hd-row .x-grid3-marker-hd {
-    padding:3px;
-}
-
-.x-grid3-row .x-grid3-marker {
-    padding:3px;
-}
-
-.x-grid3-cell-inner, .x-grid3-hd-inner{
-	overflow:hidden;
-	-o-text-overflow: ellipsis;
-	text-overflow: ellipsis;
-    padding:3px 3px 3px 5px;
-    white-space: nowrap;
-}
-
-.x-grid3-hd-inner {
-    position:relative;
-	 cursor:inherit;
-	 padding:4px 3px 4px 5px;
-}
-
-.x-grid3-row-body {
-    white-space:normal;
-}
-
-
-.ext-ie .x-grid3-cell-inner, .ext-ie .x-grid3-hd-inner{
-	width:100%;
-}
-
-.ext-strict .x-grid3-cell-inner, .ext-strict .x-grid3-hd-inner{
-	width:auto;
-}
-
-.x-grid3-col {
-	
-}
-
-.x-grid3-row {
-	cursor: default;
-    border:1px solid #ededed;
-    border-top-color:#fff;
-    
-    width:100%;
-}
-.x-grid3-row-alt{
-	
-}
-
-.x-grid3-row-over {
-	border:1px solid #dddddd;
-    background: #efefef url(../images/default/grid/row-over.gif) repeat-x left top;
-}
-
-.x-grid3-resize-proxy {
-	width:3px;
-	background-color:#cccccc;
-	cursor: e-resize;
-	cursor: col-resize;
-	position:absolute;
-	top:0;
-	height:100px;
-	overflow:hidden;
-	visibility:hidden;
-	border:0 none;
-	z-index:7;
-}
-.x-grid3-focus {
-	position:absolute;
-	top:0;
-	-moz-outline:0 none;
-    outline:0 none;
-    -moz-user-select: normal;
-    -khtml-user-select: normal;
-}
-
-
-.x-grid3-header{
-	background: #f9f9f9 url(../images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;
-	cursor:default;
-    zoom:1;
-    padding:1px 0 0 0;
-}
-
-.x-grid3-header-pop {
-    border-left:1px solid #d0d0d0;
-    float:right;
-    clear:none;
-}
-.x-grid3-header-pop-inner {
-    border-left:1px solid #eee;
-    width:14px;
-    height:19px;
-    background: transparent url(../images/default/grid/hd-pop.gif) no-repeat center center;
-}
-.ext-ie .x-grid3-header-pop-inner {
-    width:15px;
-}
-.ext-strict .x-grid3-header-pop-inner {
-    width:14px; 
-}
-.x-grid3-header-inner {
-    overflow:hidden;
-    zoom:1;
-    float:left;
-}
-.x-grid3-header-offset {
-    padding-left:1px;
-	 width:10000px;
-}
-
-
-
-td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open {
-    border-left:1px solid #aaccf6;
-    border-right:1px solid #aaccf6;
-}
-td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner {
-    background: #ebf3fd url(../images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;
-
-}
-.x-grid3-sort-icon{
-	background-repeat: no-repeat;
-	display: none;
-	height: 4px;
-	width: 13px;
-	margin-left:3px;
-	vertical-align: middle;
-}
-.sort-asc .x-grid3-sort-icon {
-	background-image: url(../images/aero/grid/sort_asc.gif);
-	display: inline;
-}
-.sort-desc .x-grid3-sort-icon {
-	background-image: url(../images/aero/grid/sort_desc.gif);
-	display: inline;
-}
-
-
-.x-grid3-body {
-	overflow:auto;
-}
-.x-grid3-body-inner {
-	overflow:auto;
-}
-.x-grid3-cell-text, .x-grid3-hd-text {
-	display: block;
-	padding: 3px 5px 3px 5px;
-	-moz-user-select: none;
-	-khtml-user-select: none;
-	color:black;
-}
-.x-grid3-split {
-	background-image: url(../images/default/grid/grid-split.gif);
-	background-position: center;
-	background-repeat: no-repeat;
-	cursor: e-resize;
-	cursor: col-resize;
-	display: block;
-	font-size: 1px;
-	height: 16px;
-	overflow: hidden;
-	position: absolute;
-	top: 2px;
-	width: 6px;
-	z-index: 3;
-}
-
-.x-grid3-hd-text {
-	color:#15428b;
-}
-
-.x-dd-drag-proxy .x-grid3-hd-inner{
-	background: #ebf3fd url(../images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;
-	width:120px;
-	padding:3px;
-	border:1px solid #aaccf6;
-	overflow:hidden;
-}
-
-.col-move-top, .col-move-bottom{
-	width:9px;
-	height:9px;
-	position:absolute;
-	top:0;
-	line-height:1px;
-	font-size:1px;
-	overflow:hidden;
-	visibility:hidden;
-	z-index:20000;
-}
-.col-move-top{
-	background:transparent url(../images/default/grid/col-move-top.gif) no-repeat left top;
-}
-.col-move-bottom{
-	background:transparent url(../images/default/grid/col-move-bottom.gif) no-repeat left top;
-}
-
-
-.x-grid3-row-selected {
-	background: #d9e8fb url(../images/default/grid/row-sel.gif) repeat-x left top;
-	border:1px solid #99bbe8;
-}
-.x-grid3-row-selected span, .x-grid3-row-selected b, .x-grid3-row-selected div, .x-grid3-row-selected strong, .x-grid3-row-selected i{
-
-}
-.x-grid3-cell-selected{
-	background-color: #316ac5 !important;
-	color: white;
-}
-.x-grid3-cell-selected span{
-	color: white !important;
-}
-.x-grid3-cell-selected .x-grid3-cell-text{
-	color: white;
-}
-
-.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{
-    background: #ebeadb url(../images/default/grid/grid-hrow.gif) repeat-x 0 bottom !important;
-    vertical-align:middle !important;
-    color:black;
-    padding:0;
-    border-top:1px solid white;
-    border-bottom:none !important;
-    border-right:1px solid #6fa0df !important;
-    text-align:center;
-}
-.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{
-    padding:0 4px;
-    color:#15428b !important;
-    text-align:center;
-}
-
-
-.x-grid3-dirty-cell {
-    background: transparent url(../images/default/grid/dirty.gif) no-repeat 0 0;
-}
-
-
-.x-grid3-topbar, .x-grid3-bottombar{
-	font:normal 11px arial, tahoma, helvetica, sans-serif;
-    overflow:hidden;
-	display:none;
-	zoom:1;
-    position:relative;
-}
-.x-grid3-topbar .x-toolbar{
-	border-right:0 none;
-}
-.x-grid3-bottombar .x-toolbar{
-	border-right:0 none;
-	border-bottom:0 none;
-	border-top:1px solid #a9bfd3;
-}
-
-.x-props-grid .x-grid3-cell-selected .x-grid3-cell-text{
-	 background-color: #316ac5 !important;
-}
-.x-props-grid .x-grid3-col-value .x-grid3-cell-text{
-	background-color: white;
-}
-.x-props-grid .x-grid3-col-name{
-	 background-color: #c3daf9;
-}
-.x-props-grid .x-grid3-col-name .x-grid3-cell-text{
-	background-color: white;
-    margin-left:10px;
-}
-.x-props-grid .x-grid3-split-value {
-    visibility:hidden;
-}
-
-
-.xg-hmenu-sort-asc .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-asc.gif);
-}
-.xg-hmenu-sort-desc .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-desc.gif);
-}
-.xg-hmenu-lock .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-lock.gif);
-}
-.xg-hmenu-unlock .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-unlock.gif);
-}
-
-
-.x-grid3-col-dd {
-    border:0 none;
-    padding:0;
-    background:transparent;
-}
-
-.x-dd-drag-ghost .x-grid3-dd-wrap {
-    padding:1px 3px 3px 1px;
-}
-
-.x-grid3-hd-btn {
-    display:none;
-    position:absolute;
-    width:14px;
-    background:#c3daf9 url(../images/default/grid/grid3-hd-btn.gif) no-repeat left center;
-    right:0;
-    top:0;
-    z-index:2;
-	 cursor:pointer;
-}
-
-.x-grid3-hd-over .x-grid3-hd-btn, .x-grid3-hd-menu-open .x-grid3-hd-btn {
-    display:block;
-}
-
-a.x-grid3-hd-btn:hover {
-    background-position:-14px center;
-}
-
-
-
-.x-grid3-body .x-grid3-td-expander {
-    background:transparent url(../images/default/grid/grid3-special-col-bg.gif) repeat-y right;
-}
-.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner {
-    padding:0 !important;
-    height:100%;
-}
-.x-grid3-row-expander {
-    width:100%;
-    height:18px;
-    background-position:4px 2px;
-    background-repeat:no-repeat;
-    background-color:transparent;
-	 background-image:url(../images/default/grid/row-expand-sprite.gif);
-}
-.x-grid3-row-collapsed .x-grid3-row-expander {
-    background-position:4px 2px;
-}
-.x-grid3-row-expanded .x-grid3-row-expander {
-    background-position:-21px 2px;
-}
-.x-grid3-row-collapsed .x-grid3-row-body {
-    display:none !important;
-}
-.x-grid3-row-expanded .x-grid3-row-body {
-    display:block !important;
-}
-
-
-
-.x-grid3-body .x-grid3-td-checker {
-    background:transparent url(../images/default/grid/grid3-special-col-bg.gif) repeat-y right;
-}
-
-.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner, .x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner {
-    padding:0 !important;
-    height:100%;
-}
-
-.x-grid3-row-checker, .x-grid3-hd-checker {
-    width:100%;
-    height:18px;
-    background-position:2px 2px;
-    background-repeat:no-repeat;
-    background-color:transparent;
-	 background-image:url(../images/default/grid/row-check-sprite.gif);
-}
-.x-grid3-row .x-grid3-row-checker {
-    background-position:2px 2px;
-}
-.x-grid3-row-selected .x-grid3-row-checker, .x-grid3-hd-checker-on .x-grid3-hd-checker {
-    background-position:-23px 2px;
-}
-.x-grid3-hd-checker {
-    background-position:2px 3px;
-}
-.x-grid3-hd-checker-on .x-grid3-hd-checker {
-    background-position:-23px 3px;
-}
-
-
-
-.x-grid3-body .x-grid3-td-numberer {
-    background:transparent url(../images/default/grid/grid3-special-col-bg.gif) repeat-y right;
-}
-.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner {
-    padding:3px 5px 0 0 !important;
-    text-align:right;
-	 color:#444;
-}
-
-
-
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander {
-	background:transparent url(../images/default/grid/grid3-special-col-sel-bg.gif) repeat-y right;
-}
-
-
-.x-layout-container{
-    width:100%;
-    height:100%;
-    overflow:hidden;
-	 background-color:#c3daf9;
-}
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-.x-layout-collapsed{
-    position:absolute;
-    left:-10000px;
-    top:-10000px;
-    visibility:hidden;
-    background-color:#c3daf9;
-    width:20px;
-    height:20px;
-    overflow:hidden;
-	border:1px solid #98c0f4;
-	z-index:20;
-}
-.ext-border-box .x-layout-collapsed{
-    width:22px;
-    height:22px;
-}
-.x-layout-collapsed-over{
-    cursor:pointer;
-	 background-color:#d9e8fb;
-}
-.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{
-	position:absolute;
-    top:0;
-    left:0;
-    width:20px;
-    height:20px;
-}
-.x-layout-collapsed-north .x-layout-collapsed-tools, .x-layout-collapsed-south .x-layout-collapsed-tools{
-	position:absolute;
-    top:0;
-    right:0;
-    width:20px;
-    height:20px;
-}
-.x-layout-collapsed .x-layout-tools-button{
-    margin:0;
-}
-.x-layout-collapsed .x-layout-tools-button-inner{
-    width:16px;
-    height:16px;
-}
-.x-layout-inactive-content{
-    position:absolute;
-    left:-10000px;
-    top:-10000px;
-    visibility:hidden;
-}
-.x-layout-active-content{
-    visibility:visible;
-}
-.x-layout-panel{
-    position:absolute;border:1px solid #98c0f4;overflow:hidden;background-color:white;
-}
-.x-layout-panel-east, .x-layout-panel-west {
-    z-index:10;
-}
-.x-layout-panel-north, .x-layout-panel-south {
-    z-index:11;
-}
-.x-layout-collapsed-north, .x-layout-collapsed-south, .x-layout-collapsed-east, .x-layout-collapsed-west {
-    z-index:12;
-}
-.x-layout-panel-body{
-    overflow:hidden;
-}
-.x-layout-grid-wrapper{
-
-}
-.x-layout-split{
-    position:absolute;
-    height:5px;
-    width:5px;
-    line-height:1px;
-    font-size:1px;
-    z-index:3;
-    background-color:#c3daf9;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/default/layout/panel-title-light-bg.gif);
-    color: black;
-    border-bottom:1px solid #98c0f4;
-    position:relative;
-}
-.x-layout-panel-hd-text{
-    font:normal 11px tahoma, verdana, helvetica;
-    padding: 4px;
-    padding-left: 4px;
-    display:block;
-	 white-space:nowrap;
-}
-.x-layout-panel-hd-tools{
-    position:absolute;
-    right:0;
-    top:0;
-    text-align:right;
-    padding-top:2px;
-    padding-right:2px;
-    width:60px;
-}
-.x-layout-tools-button{
-    z-index:6;
-    padding:2px;
-    cursor:pointer;
-    float:right;
-}
-.x-layout-tools-button-over{
-    padding:1px;
-    border:1px solid #98c0f4;
-    background-color:white;
-}
-.x-layout-tools-button-inner{
-    height:12px;
-    width:12px;
-    line-height:1px;
-    font-size:1px;
-    background-repeat:no-repeat;
-    background-position:center;
-}
-.x-layout-close{
-    background-image:url(../images/default/layout/panel-close.gif);
-}
-.x-layout-stick{
-    background-image:url(../images/default/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/default/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/default/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/default/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/default/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background-image:url(../images/default/sizer/e-handle.gif);
-    background-position: left;
-}
-.x-layout-split-v{
-    background-image:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-layout-panel .x-tabs-wrap{
-    background:url(../images/default/layout/gradient-bg.gif);
-}
-.x-layout-panel .x-tabs-body {
-    background-color:white;
-    overflow:auto;height:100%;
-}
-.x-layout-component-panel, .x-layout-nested-layout {
-	position:relative;
-   padding:0;
-	overflow:hidden;
-	width:200px;
-	height:200px;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #98c0f4;
-}
-
-.x-layout-panel-dragover {
-	border: 2px solid #6593cf;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/default/layout/gradient-bg.gif);
-	background-color:#c3daf9;
-	border:1px dashed #6593cf;
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:0;top:0;
-}
-.x-layout-slider {
-	z-index:15;
-	overflow:hidden;
-	position:absolute;
-}
-
-.x-scroller-up, .x-scroller-down {
-	background-color:#c3daf9;
-	border: 1px solid #6593cf;
-	border-top-color: #fff;
-	border-left-color: #fff;
-	border-right:0 none;
-	cursor:pointer;
-	overflow:hidden;
-	line-height:16px;
-}
-.x-scroller-down {
-	border-bottom: 0 none;
-	border-top: 1px solid #6593cf;
-}
-.x-scroller-btn-over {
-	background-color: #d9e8f8;
-}
-.x-scroller-btn-click {
-	background-color: #AECEF7;
-}
-.x-scroller-btn-disabled {
-	cursor:default;
-	background-color: #c3daf9;
-	-moz-opacity: 0.3;
-   opacity:.30;
-   filter: alpha(opacity=30);
-}
-
-
-
-.x-reader .x-layout-panel-north {
-    border:0 none;
-}
-.x-reader .x-layout-panel-center{
-    border:0 none;
-}
-.x-reader .x-layout-nested-layout .x-layout-panel-center{
-    border:1px solid #99bbe8;
-    border-top:0 none;
-}
-.x-reader .x-layout-nested-layout .x-layout-panel-south{
-    border:1px solid #99bbe8;
-}
-.x-dlg-proxy {
-	background-image: url(../images/default/gradient-bg.gif);
-	background-color:#c3daf9;
-	border:1px solid #6593cf;
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:0;top:0;
-}
-.x-dlg-shadow{
-	background:#aaaaaa;
-	position:absolute;
-	left:0;top:0;
-}
-.x-dlg-focus{
-	-moz-outline:0 none;
-	outline:0 none;
-	width:0;
-	height:0;
-	overflow:hidden;
-	position:absolute;
-	top:0;
-	left:0;
-}
-.x-dlg-mask{
-	z-index:10000;   
-   display:none;
-   position:absolute;
-   top:0;
-   left:0;
-   -moz-opacity: 0.5;
-   opacity:.50;
-   filter: alpha(opacity=50);
-   background-color:#CCC;
-}
-body.x-body-masked select {
-	visibility:hidden;
-}
-body.x-body-masked .x-dlg select {
-	visibility:visible;
-}
-.x-dlg{
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:300;top:0;
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:navy;
-	color:#FFF;
-	font:bold 12px "sans serif", tahoma, verdana, helvetica;
-	overflow:hidden;
-	padding:5px;
-    white-space: nowrap;
-}
-.x-dlg .x-dlg-hd-left {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	padding-left:3px;
-	margin:0;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	padding-right:3px;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:url(../images/default/layout/gradient-bg.gif);
-	border:1px solid #6593cf;
-	border-top:0 none;
-	padding:10px;
-	position:absolute;
-	top:24px;left:0;
-	z-index:1;
-	overflow:hidden;
-}
-.x-dlg-collapsed .x-resizable-handle{
-    display:none;
-}
-.x-dlg .x-dlg-bd{
-	overflow:hidden;
-}
-.x-dlg .x-dlg-ft{
-	overflow:hidden;
-	padding:5px;
-	padding-bottom:0;
-}
-
-.x-dlg .x-tabs-body{
-	background:white;
-	overflow:auto;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:1px solid #6593cf;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #6593cf;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .inner-tab{
-	margin:5px;
-}
-.x-dlg .x-dlg-ft .x-btn{
-	margin-right:5px;
-	float:right;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns td {
-	border:0;
-	padding:0;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-center{
-	text-align:center; 
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-center table{
-	margin:0 auto; 
-}
-
-
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-right{
-	background-position:0 -84px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-
-.x-dlg-draggable .x-dlg-hd{
-	cursor:move;
-}
-.x-dlg-closable .x-dlg-hd{
-	padding-right:22px;
-}
-.x-dlg-toolbox {
-    position:absolute;
-	top:4px;
-	right:4px;
-	z-index:6;
-    width:40px;
-    cursor:default;
-    height:15px;
-    background:transparent;
-}
-.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
-    float:right;
-    height:15px;
-	width:15px;
-	margin:0;
-    margin-left:2px;
-    padding:0;
-	line-height:1px;
-	font-size:1px;
-	background-repeat:no-repeat;
-	cursor:pointer;
-	visibility:inherit;
-}
-.x-dlg .x-dlg-close {
-    background-image:url(../images/default/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/default/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/default/basic-dialog/expand.gif);
-}
-.x-dlg .x-dlg-close-over, .x-dlg .x-dlg-collapse-over {
-    
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/default/basic-dialog/e-handle.gif);
-	border:0;
-	background-position:right;
-	margin-right:0;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/default/sizer/s-handle-dark.gif);
-	border:0;
-	height:6px;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/default/basic-dialog/e-handle.gif);
-	border:0;
-	background-position:1px;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-northeast, .ytheme-gray .x-dlg div.x-resizable-handle-northeast{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-northwest, .ytheme-gray .x-dlg div.x-resizable-handle-northwest{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/default/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/default/sizer/sw-handle-dark.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-
-#x-msg-box .x-dlg-ft .x-btn{
-	float:none;
-	clear:none;
-	margin:0 3px;
-}
-
-#x-msg-box .x-dlg-bd {
-	padding:5px;
-	overflow:hidden !important;
-	font:normal 13px verdana,tahoma,sans-serif;
-}
-#x-msg-box .ext-mb-input {
-	margin-top:4px;
-	width:95%;
-}
-#x-msg-box .ext-mb-textarea {
-	margin-top:4px;
-	font:normal 13px verdana,tahoma,sans-serif;
-}
-#x-msg-box .ext-mb-progress-wrap {
-	margin-top:4px;
-	border:1px solid #6593cf;
-}
-#x-msg-box .ext-mb-progress {
-	height:18px;
-	background: #e0e8f3 url(../images/default/qtip/bg.gif) repeat-x;
-}
-#x-msg-box .ext-mb-progress-bar {
-	height:18px;
-	overflow:hidden;
-	width:0;
-	background:#8BB8F3;
-	border-top:1px solid #B2D0F7;
-	border-bottom:1px solid #65A1EF;
-	border-right:1px solid #65A1EF;
-}
-
-#x-msg-box .x-msg-box-wait {
-	background: transparent url(../images/default/grid/loading.gif) no-repeat left;
-    display:block;
-    width:300px;
-    padding-left:18px;
-    line-height:18px;
-}
-.x-dd-drag-proxy{
-	position:absolute;
-	left:0;top:0;
-	visibility:hidden;
-	z-index:15000;
-}
-.x-dd-drag-ghost{
-	color: black;
-	font: normal 11px arial, helvetica, sans-serif;
-	-moz-opacity: 0.85;
-   opacity:.85;
-   filter: alpha(opacity=85);
-	border-top:1px solid #dddddd;
-	border-left:1px solid #dddddd;
-	border-right:1px solid #bbbbbb;
-	border-bottom:1px solid #bbbbbb;
-	padding:3px;
-	padding-left:20px;
-	background-color:white;
-	white-space:nowrap;
-}
-.x-dd-drag-repair .x-dd-drag-ghost{
-	-moz-opacity: 0.4;
-   opacity:.4;
-   filter: alpha(opacity=40);
-	border:0 none;
-	padding:0;
-	background-color:transparent;
-}
-.x-dd-drag-repair .x-dd-drop-icon{
-	visibility:hidden;
-}
-.x-dd-drop-icon{
-  position:absolute;
-	top:3px;
-	left:3px;
-	display:block;
-	width:16px;
-	height:16px;
-	background-color:transparent;
-	background-position: center;
-	background-repeat: no-repeat;
-	z-index:1;
-}
-.x-dd-drop-nodrop .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-no.gif);
-}
-.x-dd-drop-ok .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-yes.gif);
-}
-.x-dd-drop-ok-add .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-add.gif);
-}
-.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
-	border: 0 none;
-	height: 18px;
-	margin: 0;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-    background-repeat: no-repeat;
-}
-.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{
-	border: 0 none;
-	height: 18px;
-	margin: 0;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-	background-position:center;
-    background-repeat: no-repeat;
-}
-
-
-.x-tree-node-collapsed .x-tree-node-icon{
-	background-image:url(../images/default/tree/folder.gif);
-}
-.x-tree-node-expanded .x-tree-node-icon{
-	background-image:url(../images/default/tree/folder-open.gif);
-}
-.x-tree-node-leaf .x-tree-node-icon{
-	background-image:url(../images/default/tree/leaf.gif);
-}
-
-.x-tree-noicon .x-tree-node-icon{
-	width:0; height:0;
-}
-
-.x-tree-node-loading .x-tree-node-icon{
-	background-image:url(../images/default/tree/loading.gif) !important;
-}
-.x-tree-node-loading a span{
-	 font-style: italic;
-	 color:#444444;
-}
-
-
-.x-tree-lines .x-tree-elbow{
-	background-image:url(../images/default/tree/elbow.gif);
-}
-.x-tree-lines .x-tree-elbow-plus{
-	background-image:url(../images/default/tree/elbow-plus.gif);
-}
-.x-tree-lines .x-tree-elbow-minus{
-	background-image:url(../images/default/tree/elbow-minus.gif);
-}
-.x-tree-lines .x-tree-elbow-end{
-	background-image:url(../images/default/tree/elbow-end.gif);
-}
-.x-tree-lines .x-tree-elbow-end-plus{
-	background-image:url(../images/default/tree/elbow-end-plus.gif);
-}
-.x-tree-lines .x-tree-elbow-end-minus{
-	background-image:url(../images/default/tree/elbow-end-minus.gif);
-}
-.x-tree-lines .x-tree-elbow-line{
-	background-image:url(../images/default/tree/elbow-line.gif);
-}
-
-
-.x-tree-no-lines .x-tree-elbow{
-	background:transparent;
-}
-.x-tree-no-lines .x-tree-elbow-plus{
-	background-image:url(../images/default/tree/elbow-plus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-minus{
-	background-image:url(../images/default/tree/elbow-minus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-end{
-	background:transparent;
-}
-.x-tree-no-lines .x-tree-elbow-end-plus{
-	background-image:url(../images/default/tree/elbow-end-plus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-end-minus{
-	background-image:url(../images/default/tree/elbow-end-minus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-line{
-	background:transparent;
-}
-
-.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
-	cursor:pointer;
-}
-.ext-ie ul.x-tree-node-ct{
-    font-size:0;
-    line-height:0;
-}
-.x-tree-node{
-	color: black;
-	font: normal 11px arial, tahoma, helvetica, sans-serif;
-	white-space: nowrap;
-}
-.x-tree-node a, .x-dd-drag-ghost a{
-	text-decoration:none;
-	color:black;
-	-khtml-user-select:none;
-	-moz-user-select:none;
-    -kthml-user-focus:normal;
-    -moz-user-focus:normal;
-    -moz-outline: 0 none;
-    outline:0 none;
-}
-.x-tree-node a span, .x-dd-drag-ghost a span{
-	text-decoration:none;
-	color:black;
-	padding:1px 3px 1px 2px;
-}
-.x-tree-node .x-tree-node-disabled a span{
-	color:gray !important;
-}
-.x-tree-node .x-tree-node-disabled .x-tree-node-icon{
-	-moz-opacity: 0.5;
-   opacity:.5;
-   filter: alpha(opacity=50);
-}
-.x-tree-node .x-tree-node-inline-icon{
-	background:transparent;
-}
-.x-tree-node a:hover, .x-dd-drag-ghost a:hover{
-	text-decoration:none;
-}
-.x-tree-node div.x-tree-drag-insert-below{
- 	 border-bottom:1px dotted #3366cc;
-}
-.x-tree-node div.x-tree-drag-insert-above{
-	 border-top:1px dotted #3366cc;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{
- 	 border-bottom:0 none;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{
-	 border-top:0 none;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{
- 	 border-bottom:2px solid #3366cc;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{
-	 border-top:2px solid #3366cc;
-}
-.x-tree-node .x-tree-drag-append a span{
-	 background:#dddddd;
-	 border:1px dotted gray;
-}
-.x-tree-node .x-tree-selected a span{
-	background:#3366cc;
-	color:white;
-}
-.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{
-	display:none !important;
-}
-.x-tree-drop-ok-append .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-add.gif);
-}
-.x-tree-drop-ok-above .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-over.gif);
-}
-.x-tree-drop-ok-below .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-under.gif);
-}
-.x-tree-drop-ok-between .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-between.gif);
-}
-
-.x-tip{
-	position: absolute;
-	top: 0;
-    left:0;
-    visibility: hidden;
-	z-index: 20000;
-    border:0 none;
-}
-.x-tip .x-tip-close{
-	background-image: url(../images/default/qtip/close.gif);
-	height: 15px;
-	float:right;
-	width: 15px;
-    margin:0 0 2px 2px;
-    cursor:pointer;
-    display:none;
-}
-.x-tip .x-tip-top {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -12px;
-	height:6px;
-    overflow:hidden;
-}
-.x-tip .x-tip-top-left {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 0;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-top-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right 0;
-	padding-right:6px;
-    zoom:1;
-}
-.x-tip .x-tip-ft {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -18px;
-	height:6px;
-    overflow:hidden;
-}
-.x-tip .x-tip-ft-left {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -6px;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-ft-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -6px;
-	padding-right:6px;
-    zoom:1;
-}
-.x-tip .x-tip-bd {
-    border:0 none;
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-}
-.x-tip .x-tip-bd-left {
-	background: #fff url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -24px;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-bd-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -24px;
-	padding-right:6px;
-    zoom:1;
-}
-
-.x-tip h3 {
-    font: bold 11px tahoma,arial,helvetica,sans-serif;
-    margin:0;
-    padding:2px 0;
-    color:#444;
-}
-.x-tip .x-tip-bd-inner {
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-    margin:0 !important;
-    line-height:14px;
-    color:#444;
-    padding:0;
-    float:left;
-}
-
-
-.x-form-invalid-tip {
-}
-
-.x-form-invalid-tip .x-tip-top {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-top-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-top-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner {
-    padding-left:24px;
-    background:transparent url(../images/default/form/exclamation.gif) no-repeat 2px 2px;
-}
-.x-form-invalid-tip .x-tip-bd-inner {
-    padding:2px;
-}
-.x-date-picker {
-    border: 1px solid #1b376c;
-    border-top:0 none;
-    background:#fff;
-	 position:relative;
-}
-.x-date-picker a {
-    -moz-outline:0 none;
-    outline:0 none;
-}
-.x-date-inner, .x-date-inner td, .x-date-inner th{
-    border-collapse:separate;
-}
-.x-date-middle,.x-date-left,.x-date-right {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -83px;
-	color:#FFF;
-	font:bold 11px "sans serif", tahoma, verdana, helvetica;
-	overflow:hidden;
-}
-
-.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{
-	background:transparent !important;
-    vertical-align:middle;
-}
-.x-date-middle .x-btn .x-btn-text {
-    color:#fff;
-}
-.x-date-middle .x-btn-with-menu  .x-btn-center em {
-    background:transparent url(../images/default/toolbar/btn-arrow-light.gif) no-repeat right 0;
-}
-.x-date-right, .x-date-left {
-    width:18px;
-}
-.x-date-right{
-    text-align:right;
-}
-.x-date-middle {
-    padding-top:2px;padding-bottom:2px;
-}
-.x-date-right a, .x-date-left a{
-    display:block;
-    width:16px;
-	height:16px;
-	background-position: center;
-	background-repeat: no-repeat;
-	cursor:pointer;
-    -moz-opacity: 0.6;
-    opacity:.6;
-    filter: alpha(opacity=60);
-}
-.x-date-right a:hover, .x-date-left a:hover{
-    -moz-opacity: 1;
-    opacity:1;
-    filter: alpha(opacity=100);
-}
-.x-date-right a {
-    background-image: url(../images/default/shared/right-btn.gif);
-    margin-right:2px;
-    text-decoration:none !important;
-}
-.x-date-left a{
-	background-image: url(../images/default/shared/left-btn.gif);
-    margin-left:2px;
-    text-decoration:none !important;
-}
-table.x-date-inner {
-    width:100%;
-    table-layout:fixed;
-}
-.x-date-inner th {
-    width:25px;
-}
-.x-date-inner th {
-    background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-    text-align:right !important;
-	border-bottom: 1px solid #a3bad9;
-    font:normal 10px arial, helvetica,tahoma,sans-serif;
-	color:#233d6d;
-	cursor:default;
-    padding:0;
-    border-collapse:separate;
-}
-.x-date-inner th span {
-    display:block;
-    padding:2px;
-    padding-right:7px;
-}
-.x-date-inner td {
-    border: 1px solid #fff;
-	text-align:right;
-    padding:0;
-}
-.x-date-inner a {
-    padding:2px 5px;
-    display:block;
-    font:normal 11px arial, helvetica,tahoma,sans-serif;
-	text-decoration:none;
-    color:black;
-    text-align:right;
-    zoom:1;
-}
-.x-date-inner .x-date-active{
-	cursor:pointer;
-	color:black;
-}
-.x-date-inner .x-date-selected a{
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-	border:1px solid #8db2e3;
-   padding:1px 4px;
-}
-.x-date-inner .x-date-today a{
-	border: 1px solid darkred;
-    padding:1px 4px;
-}
-.x-date-inner .x-date-selected span{
-    font-weight:bold;
-}
-.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a {
-	color:#aaaaaa;
-    text-decoration:none !important;
-}
-.x-date-bottom {
-    padding:4px;
-    border-top: 1px solid #a3bad9;
-    background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-}
-
-.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
-    text-decoration:none !important;
-    color:black;
-    background: #ddecfe;
-}
-
-.x-date-inner .x-date-disabled a {
-	cursor:default;
-	background:#eeeeee;
-	color:#bbbbbb;
-}
-.x-date-mmenu{
-    background:#eeeeee !important;
-}
-.x-date-mmenu .x-menu-item {
-	font-size:10px;
-	padding:1px 24px 1px 4px;
-	white-space: nowrap;
-	color:#000;
-}
-.x-date-mmenu .x-menu-item .x-menu-item-icon {
-    width:10px;height:10px;margin-right:5px;
-    background-position:center -4px !important;
-}
-
-.x-date-mp {
-	position:absolute;
-	left:0;
-	top:0;
-	background:white;
-	display:none;
-}
-.x-date-mp td {
-    padding:2px;
-	font:normal 11px arial, helvetica,tahoma,sans-serif;
-}
-td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn {
-   border: 0 none;
-	text-align:center;
-	vertical-align: middle;
-	width:25%;
-}
-.x-date-mp-ok {
-	margin-right:3px;
-}
-.x-date-mp-btns button {
-	text-decoration:none;
-	text-align:center;
-	text-decoration:none !important;
-	background:#083772;
-	color:white;
-	border:1px solid;
-	border-color: #3366cc #000055 #000055 #3366cc;
-	padding:1px 3px 1px;
-	font:normal 11px arial, helvetica,tahoma,sans-serif;
-	cursor:pointer;
-}
-.x-date-mp-btns {
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-}
-.x-date-mp-btns td {
-	border-top: 1px solid #c5d2df;
-   text-align:center;
-}
-td.x-date-mp-month a,td.x-date-mp-year a {
-	display:block;
-	padding:2px 4px;
-	text-decoration:none;
-	text-align:center;
-	color:#15428b;
-}
-
-td.x-date-mp-month a:hover,td.x-date-mp-year a:hover {
-	color:#15428b;
-	text-decoration:none;
-	cursor:pointer;
-	background: #ddecfe;
-}
-
-td.x-date-mp-sel a {
-	padding:1px 3px;
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-	border:1px solid #8db2e3;
-}
-.x-date-mp-ybtn a {
-    overflow:hidden;
-    width:15px;
-    height:15px;
-    cursor:pointer;
-    background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;
-    display:block;
-    margin:0 auto;
-}
-.x-date-mp-ybtn a.x-date-mp-next {
-    background-position:0 -120px;
-}
-.x-date-mp-ybtn a.x-date-mp-next:hover {
-    background-position:-15px -120px;
-}
-.x-date-mp-ybtn a.x-date-mp-prev {
-    background-position:0 -105px;
-}
-.x-date-mp-ybtn a.x-date-mp-prev:hover {
-    background-position:-15px -105px;
-}
-.x-date-mp-ybtn {
-   text-align:center;
-}
-td.x-date-mp-sep {
-   border-right:1px solid #c5d2df;
-}
-.x-menu {
-	border:1px solid #718bb7;
-    z-index: 15000;
-	background: #fff url(../images/default/menu/menu.gif) repeat-y;
-}
-.ext-ie .x-menu {
-    zoom:1;
-    overflow:hidden;
-}
-.x-menu-list{
-    border:1px solid #fff;
-}
-.x-menu li{
-	line-height:100%;
-}
-.x-menu li.x-menu-sep-li{
-	font-size:1px;
-	line-height:1px;
-}
-.x-menu-list-item{
-	font:normal 11px tahoma,arial, sans-serif;
-    white-space: nowrap;
-    -moz-user-select: none;
-	-khtml-user-select: none;
-	display:block;
-	padding:1px;
-}
-.x-menu-item-arrow{
-	background:transparent url(../images/default/menu/menu-parent.gif) no-repeat right;
-}
-.x-menu-sep {
-	display:block;
-	font-size:1px;
-	line-height:1px;
-	background:#c3daf9;
-	margin: 3px 3px 3px 32px;
-}
-.x-menu-focus {
-	position:absolute;
-	left:0;
-	top:-5px;
-	width:0;
-	height:0;
-    line-height:1px;
-}
-.x-menu-item {
-	display:block;
-	line-height:14px;
-	padding:3px 21px 3px 3px;
-	white-space: nowrap;
-	text-decoration:none;
-	color:#233d6d;
-	-moz-outline: 0 none;
-	outline: 0 none;
-	cursor:pointer;
-}
-.x-menu-item-active {
-	color:#233d6d;
-	background:#c3daf9;
-	border:1px solid #8BB8F3;
-	padding:0;
-}
-.x-menu-item-icon {
-	border: 0 none;
-	height: 16px;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-	margin: 0 11px 0 0;
-    background-position:center;
-}
-
-.x-menu-check-item .x-menu-item-icon{
-	background: transparent url(../images/default/menu/unchecked.gif) no-repeat center;
-}
-
-.x-menu-item-checked .x-menu-item-icon{
-	background-image:url(../images/default/menu/checked.gif);
-}
-.x-menu-group-item .x-menu-item-icon{
-	background: transparent;
-}
-
-.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
-    background: transparent url(../images/default/menu/group-checked.gif) no-repeat center;
-}
-
-.x-menu-plain {
-	background:#fff;
-}
-.x-menu-date-item{
-	padding:0;
-}
-
-.x-menu .x-color-palette, .x-menu .x-date-picker{
-    margin-left:32px;
-	margin-right:4px;
-}
-.x-menu .x-date-picker{
-    border:1px solid #a3bad9;
-    margin-top:2px;
-    margin-bottom:2px;
-}
-.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
-	margin:0;
-    border:0 none;
-}
-.x-date-menu {
-   padding:0 !important;
-}
-
-
-
-.x-box-tl {
-	background: transparent url(../images/default/box/corners.gif) no-repeat 0 0;
-    zoom:1;
-}
-
-.x-box-tc {
-	height: 8px;
-	background: transparent url(../images/default/box/tb.gif) repeat-x 0 0;
-	overflow: hidden;
-}
-
-.x-box-tr {
-	background: transparent url(../images/default/box/corners.gif) no-repeat right -8px;
-}
-
-.x-box-ml {
-	background: transparent url(../images/default/box/l.gif) repeat-y 0;
-	padding-left: 4px;
-	overflow: hidden;
-    zoom:1;
-}
-
-.x-box-mc {
-	background: #eee url(../images/default/box/tb.gif) repeat-x 0 -16px;
-	padding: 4px 10px;
-	font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;
-	color: #393939;
-	font-size: 12px;
-}
-
-.x-box-mc h3 {
-	font-size: 14px;
-	font-weight: bold;
-	margin: 0 0 4 0;
-    zoom:1;
-}
-
-.x-box-mr {
-	background: transparent url(../images/default/box/r.gif) repeat-y right;
-	padding-right: 4px;
-	overflow: hidden;
-}
-
-.x-box-bl {
-	background: transparent url(../images/default/box/corners.gif) no-repeat 0 -16px;
-    zoom:1;
-}
-
-.x-box-bc {
-	background: transparent url(../images/default/box/tb.gif) repeat-x 0 -8px;
-	height: 8px;
-	overflow: hidden;
-}
-
-.x-box-br {
-	background: transparent url(../images/default/box/corners.gif) no-repeat right -24px;
-}
-
-.x-box-tl, .x-box-bl {
-	padding-left: 8px;
-	overflow: hidden;
-}
-
-.x-box-tr, .x-box-br {
-	padding-right: 8px;
-	overflow: hidden;
-}
-
-.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr {
-	background-image: url(../images/default/box/corners-blue.gif);
-}
-
-.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc {
-	background-image: url(../images/default/box/tb-blue.gif);
-}
-
-.x-box-blue .x-box-mc {
-	background-color: #c3daf9;
-}
-
-.x-box-blue .x-box-mc h3 {
-	color: #17385b;
-}
-
-.x-box-blue .x-box-ml {
-	background-image: url(../images/default/box/l-blue.gif);
-}
-
-.x-box-blue .x-box-mr {
-	background-image: url(../images/default/box/r-blue.gif);
-}
-#x-debug-browser .x-tree .x-tree-node a span {
-    color:#222297;
-    font-size:12px;
-    padding-top:2px;
-    font-family:"courier","courier new";
-    line-height:18px;
-}
-#x-debug-browser .x-tree a i {
-    color:#FF4545;
-    font-style:normal;
-}
-#x-debug-browser .x-tree a em {
-    color:#999;
-}
-#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{
-    background:#c3daf9;
-}
-#x-debug-browser pre, .x-debug-browser pre xmp {
-    font:normal 11px tahoma, arial, helvetica, sans-serif !important;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word;
-}
-#x-debug-browser pre {
-    display:block;
-    padding:5px !important;
-    border-bottom:1px solid #eeeeee !important;
-}
-#x-debug-browser pre xmp {
-    padding:0 !important;
-    margin:0 !important;
-}
-#x-debug-console .x-layout-panel-center, #x-debug-inspector .x-layout-panel-center {
-      border-right:1px solid #98c0f4;
-}
-#x-debug-console textarea {
-    border: 0 none;
-    font-size:12px;
-    font-family:"courier","courier new";
-    padding-top:4px;
-    padding-left:4px;
-}
-.x-debug-frame {
-    background:#eeeeee;
-    border:1px dashed #aaaaaa;
-}
-.x-combo-list {
-    border:1px solid #98c0f4;
-    background:#ddecfe;
-    zoom:1;
-    overflow:hidden;
-}
-.x-combo-list-inner {
-    overflow:auto;
-    background:white;
-    position:relative; 
-    zoom:1;
-    overflow-x:hidden;
-}
-.x-combo-list-hd {
-    font:bold 11px tahoma, arial, helvetica, sans-serif;
-    color:#15428b;
-    background-image: url(../images/default/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #98c0f4;
-    padding:3px;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #98c0f4;
-}
-.x-combo-list-item {
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    padding:2px;
-    border:1px solid #fff;
-    white-space: nowrap;
-    overflow:hidden;
-    text-overflow: ellipsis;
-}
-.x-combo-list .x-combo-selected{
-	background-color: #c3daf9 !important;
-    cursor:pointer;
-    border:1px solid #336699;
-}
-.x-combo-noedit{
-    cursor:pointer;
-}
-.x-panel-header {
-    overflow:hidden;
-    zoom:1;
-    color:#15428b;
-	font:bold 11px tahoma,arial,verdana,sans-serif;
-    padding:5px 3px 4px 5px;
-    border:1px solid #99bbe8;
-    background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;
-}
-
-.x-panel-body {
-    border:1px solid #99bbe8;
-    border-top:0 none;
-    overflow:hidden;
-    background:white;
-}
-.x-panel-body-noheader {
-    border-top:1px solid #99bbe8;
-}
-
-.x-panel-header {
-    overflow:hidden;
-    zoom:1;
-}
-.x-panel-tl .x-panel-header {
-    color:#15428b;
-	 font:bold 11px tahoma,arial,verdana,sans-serif;
-    padding:5px 0 4px 0;
-    border:0 none;
-    background:transparent;
-}
-.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon {
-    padding-left:20px !important;
-    background-repeat:no-repeat;
-    background-position:0 4px;
-    zoom:1;
-}
-.x-panel-inline-icon {
-    width:16px;
-	 height:16px;
-    background-repeat:no-repeat;
-    background-position:0 0;
-	 vertical-align:middle;
-	 margin-right:4px;
-	 margin-top:-1px;
-	 margin-bottom:-1px;
-}
-.x-panel-tc {
-	background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 0;
-	overflow:hidden;
-}
-.x-panel-tl {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat 0 0;
-	padding-left:6px;
-    zoom:1;
-    border-bottom:1px solid #99bbe8;
-}
-.x-panel-tr {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat right 0;
-	padding-right:6px;
-}
-.x-panel-bc {
-	background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 bottom;
-    zoom:1;
-}
-.x-panel-bc .x-panel-footer {
-    padding-bottom:1px;
-    zoom:1;
-}
-
-.x-panel-nofooter .x-panel-bc {
-	height:1px;
-}
-.x-panel-bl {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat 0 bottom;
-	padding-left:1px;
-    zoom:1;
-}
-.x-panel-br {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat right bottom;
-	padding-right:1px;
-    zoom:1;
-}
-.x-panel-mc {
-    border:0 none;
-    padding:0;
-    margin:0;
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-    background:white;
-}
-.x-panel-mc .x-panel-body {
-    background:transparent;
-    border:0 none;
-}
-.x-panel-ml {
-	background: #fff url(../images/default/panel/white-left-right.gif) repeat-y 0 0;
-	padding-left:1px;
-    zoom:1;
-}
-.x-panel-mr {
-	background: transparent url(../images/default/panel/white-left-right.gif) repeat-y right 0;
-	padding-right:1px;
-    zoom:1;
-}
-.x-panel-blue .x-panel-tl, .x-panel-blue .x-panel-tr, .x-panel-blue .x-panel-bl, .x-panel-blue .x-panel-br {
-    background-image:url(../images/default/panel/corners-sprite.gif);
-}
-.x-panel-blue .x-panel-tc, .x-panel-blue .x-panel-bc {
-    background-image:url(../images/default/panel/top-bottom.gif);
-}
-.x-panel-blue .x-panel-ml, .x-panel-blue .x-panel-mr {
-	background-image:url(../images/default/panel/left-right.gif);
-}
-.x-panel-blue .x-panel-mc{
-    padding-top:6px;
-    background:#dfe8f6;
-}
-
-.x-panel-blue .x-panel-tl {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-tr {
-	padding-right:6px;
-}
-.x-panel-blue .x-panel-bc .x-panel-footer {
-    padding-bottom:6px;
-}
-.x-panel-blue .x-panel-nofooter .x-panel-bc {
-	height:6px;
-}
-.x-panel-blue .x-panel-bl {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-br {
-	padding-right:6px;
-}
-
-.x-panel-blue .x-panel-ml {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-mr {
-	padding-right:6px;
-}
-
-.x-panel-bwrap {
-    overflow:hidden;
-}
-.x-panel-body {
-    overflow:hidden;
-}
-
-.x-panel-collapsed .x-resizable-handle{
-    display:none;
-}
-
-
-.x-tool {
-    overflow:hidden;
-    width:15px;
-    height:15px;
-    float:right;
-    cursor:pointer;
-    background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;
-    margin-left:2px;
-}
-
-
-
-.x-tool-toggle {
-    background-position:0 -60px;
-}
-.x-tool-toggle-over {
-    background-position:-15px -60px;
-}
-.x-panel-collapsed .x-tool-toggle {
-    background-position:0 -75px;
-}
-.x-panel-collapsed .x-tool-toggle-over {
-    background-position:-15px -75px;
-}
-
-.x-tool-close {
-    background-position:0 -0;
-}
-.x-tool-close-over {
-    background-position:-15px 0;
-}
-
-.x-tool-minimize {
-    background-position:0 -15px;
-}
-.x-tool-minimize-over {
-    background-position:-15px -15px;
-}
-
-.x-tool-maximize {
-    background-position:0 -30px;
-}
-.x-tool-maximize-over {
-    background-position:-15px -30px;
-}
-
-.x-tool-restore {
-    background-position:0 -45px;
-}
-.x-tool-restore-over {
-    background-position:-15px -45px;
-}
-
-.x-tool-gear {
-    background-position:0 -90px;
-}
-.x-tool-gear-over {
-    background-position:-15px -90px;
-}
-
-.x-tool-pin {
-    background-position:0 -135px;
-}
-.x-tool-pin-over {
-    background-position:-15px -135px;
-}
-.x-tool-unpin {
-    background-position:0 -150px;
-}
-.x-tool-unpin-over {
-    background-position:-15px -150px;
-}
-.x-tool-right {
-    background-position:0 -165px;
-}
-.x-tool-right-over {
-    background-position:-15px -165px;
-}
-.x-tool-left {
-    background-position:0 -180px;
-}
-.x-tool-left-over {
-    background-position:-15px -180px;
-}
-.x-tool-up {
-    background-position:0 -210px;
-}
-.x-tool-up-over {
-    background-position:-15px -210px;
-}
-.x-tool-down {
-    background-position:0 -195px;
-}
-.x-tool-down-over {
-    background-position:-15px -195px;
-}
-.x-tool-refresh {
-    background-position:0 -225px;
-}
-.x-tool-refresh-over {
-    background-position:-15px -225px;
-}
-
-.x-panel-ghost {
-    background:#cbddf3;
-    z-index:12000;
-    overflow:hidden;
-    position:absolute;
-    left:0;top:0;
-    opacity:.65;
-    -moz-opacity:.65;
-    filter:alpha(opacity=65);
-}
-
-.x-panel-ghost ul {
-    margin:0;
-    padding:0;
-    overflow:hidden;
-    font-size:0;
-    line-height:0;
-    border:1px solid #84a0c4;
-    border-top:0 none;
-    display:block;
-}
-
-.x-panel-ghost * {
-    cursor:move !important;
-}
-
-
-
-
-.x-panel-btns-ct {
-    padding:5px;
-}
-
-.x-panel-btns-ct .x-btn{
-	float:right;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns td {
-	border:0;
-	padding:0;
-}
-.x-panel-btns-ct .x-panel-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns-center{
-	text-align:center; 
-}
-.x-panel-btns-ct .x-panel-btns-center table{
-	margin:0 auto; 
-}
-.x-panel-btns-ct table td.x-panel-btn-td{
-	padding:3px;
-}
-
-.x-panel-btns-ct .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-panel-btns-ct .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-panel-btns-ct .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-panel-btns-ct .x-btn-over .x-btn-left{
-	background-position:0 -63px;
-}
-.x-panel-btns-ct .x-btn-over .x-btn-right{
-	background-position:0 -84px;
-}
-.x-panel-btns-ct .x-btn-over .x-btn-center{
-	background-position:0 -105px;
-}
-
-.x-panel-btns-ct .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-panel-btns-ct .x-btn-click  .x-btn-right{
-	background-position:0 -84px;
-}
-.x-panel-btns-ct .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-.x-html-editor-wrap {
-    border:1px solid #a9bfd3;
-    background:white;
-}
-.x-html-editor-tb .x-btn-text {
-    background:transparent url(../images/default/editor/tb-sprite.gif) no-repeat;
-}
-.x-html-editor-tb .x-edit-bold .x-btn-text {
-    background-position:0 0;
-}
-.x-html-editor-tb .x-edit-italic .x-btn-text {
-    background-position:-16px 0;
-}
-.x-html-editor-tb .x-edit-underline .x-btn-text {
-    background-position:-32px 0;
-}
-.x-html-editor-tb .x-edit-forecolor .x-btn-text {
-    background-position:-160px 0;
-}
-.x-html-editor-tb .x-edit-backcolor .x-btn-text {
-    background-position:-176px 0;
-}
-.x-html-editor-tb .x-edit-justifyleft .x-btn-text {
-    background-position:-112px 0;
-}
-.x-html-editor-tb .x-edit-justifycenter .x-btn-text {
-    background-position:-128px 0;
-}
-.x-html-editor-tb .x-edit-justifyright .x-btn-text {
-    background-position:-144px 0;
-}
-.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text {
-    background-position:-80px 0;
-}
-.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text {
-    background-position:-96px 0;
-}
-.x-html-editor-tb .x-edit-increasefontsize .x-btn-text {
-    background-position:-48px 0;
-}
-.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text {
-    background-position:-64px 0;
-}
-.x-html-editor-tb .x-edit-sourceedit .x-btn-text {
-    background-position:-192px 0;
-}
-
-.x-html-editor-tip .x-tip-bd .x-tip-bd-inner {
-    padding:5px;
-    padding-bottom:1px;
-}
diff --git a/lib/web/extjs/css/form.css b/lib/web/extjs/css/form.css
deleted file mode 100644
index 8a6ca73ddf1da626ecd3b5663411c5a8b4026fc8..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/form.css
+++ /dev/null
@@ -1,384 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/* all fields */
-.x-form-field{
-    margin: 0 0 0 0;
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-}
-
-/* ---- text fields ---- */
-.x-form-text, textarea.x-form-field{
-    padding: 1px 3px;
-    background:#fff url(../images/default/form/text-bg.gif) repeat-x 0 0;
-    border: 1px solid #B5B8C8;
-}
-.x-form-text {
-    height:22px;
-    line-height:18px;
-    vertical-align:middle;
-}
-.ext-ie .x-form-text {
-    margin-top:-1px; /* ie bogus margin bug */
-    margin-bottom:-1px;
-    height:22px; /* ie quirks */
-    line-height:18px;
-}
-.ext-strict .x-form-text {
-    height:18px;
-}
-.ext-safari .x-form-text {
-    height:20px; /* safari always same size */
-}
-.ext-gecko .x-form-text {
-    padding-top:2px; /* FF won't center the text vertically */
-    padding-bottom:0;
-}
-/* select boxes */
-
-.x-form-select-one {
-    height:20px;
-    line-height:18px;
-    vertical-align:middle;
-    background-color:#fff; /* opera */
-    border: 1px solid #B5B8C8;
-}
-
-/* multi select boxes */
-
-/* --- TODO --- */
-
-/* checkboxes */
-
-/* --- TODO --- */
-
-/* radios */
-
-/* --- TODO --- */
-
-
-/* wrapped fields and triggers */
-
-.x-form-field-wrap {
-    position:relative;
-    zoom:1;
-    white-space: nowrap;
-}
-
-.x-editor .x-form-check-wrap {
-    background:#fff;
-}
-.x-form-field-wrap .x-form-trigger{
-    width:17px;
-    height:21px;
-    border:0;
-    background:transparent url(../images/default/form/trigger.gif) no-repeat 0 0;
-    cursor:pointer;
-    border-bottom: 1px solid #B5B8C8;
-    position:absolute;
-    top:0;
-}
-.ext-safari .x-form-field-wrap .x-form-trigger{
-    height:19px; /* safari doesn't allow height adjustments to the fields, so adjust trigger */
-}
-.x-form-field-wrap .x-form-date-trigger{
-    background:transparent url(../images/default/form/date-trigger.gif) no-repeat 0 0 !important;
-    cursor:pointer;
-}
-.x-form-field-wrap .x-form-clear-trigger{
-    background:transparent url(../images/default/form/clear-trigger.gif) no-repeat;
-    cursor:pointer;
-}
-.x-form-field-wrap .x-form-search-trigger{
-    background:transparent url(../images/default/form/search-trigger.gif) no-repeat 0 0;
-    cursor:pointer;
-}
-.ext-safari .x-form-field-wrap .x-form-trigger{
-    right:0;
-}
-.x-form-field-wrap .x-form-twin-triggers{
-    
-}
-.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{
-    position:static;
-    top:auto;
-    vertical-align:top;
-}
-
-
-.x-form-field-wrap .x-form-trigger-over{
-    background-position:-17px 0;
-}
-.x-form-field-wrap .x-form-trigger-click{
-    background-position:-34px 0;
-}
-.x-item-disabled .x-form-trigger-over{
-    background-position:0 0 !important;
-}
-.x-item-disabled .x-form-trigger-click{
-    background-position:0 0 !important;
-}
-
-/* field focus style */
-.x-form-focus, textarea.x-form-focus{
-	border: 1px solid #7eadd9;
-}
-
-/* invalid fields */
-.x-form-invalid, textarea.x-form-invalid{
-	background:#fff url(../images/default/grid/invalid_line.gif) repeat-x bottom;
-	border: 1px solid #dd7870;
-}
-.ext-safari .x-form-invalid{
-	background-color:#ffeeee;
-	border: 1px solid #ff7870;
-}
-
-/* editors */
-
-.x-editor {
-    visibility:hidden;
-    padding:0;
-    margin:0;
-}
-.x-form-check-wrap {
-    line-height:18px;
-}
-.ext-ie .x-form-check-wrap input {
-    width:15px;
-    height:15px;
-}
-.x-editor .x-form-check-wrap {
-    padding:3px;
-}
-.x-editor .x-form-checkbox {
-    height:13px;
-    border: 0 none;
-}
-/* If you override the default field font above, you would need to change this font as well */
-.x-form-grow-sizer {
-	font:normal 12px tahoma, arial, helvetica, sans-serif;
-    left: -10000px;
-	padding: 8px 3px;
-    position: absolute;
-    visibility:hidden;
-    top: -10000px;
-	white-space: pre-wrap;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word;
-    zoom:1;
-}
-.x-form-grow-sizer p {
-    margin:0 !important;
-    border:0 none !important;
-    padding:0 !important;
-}
-/* Form Items CSS */
-
-.x-form-item {
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    display:block;
-    margin-bottom:4px;
-}
-
-.x-form-item label {
-    display:block;
-    float:left;
-    width:100px;
-    padding:3px;
-    padding-left:0;
-    clear:left;
-    z-index:2;
-    position:relative;
-}
-
-.x-form-element {
-    padding-left:105px;
-    position:relative;
-}
-
-.x-form-invalid-msg {
-    color:#ee0000;
-    padding:2px;
-    padding-left:18px;
-    font:normal 11px tahoma, arial, helvetica, sans-serif;
-    background: transparent url(../images/default/shared/warning.gif) no-repeat 0 2px;
-    line-height:16px;
-    width:200px;
-}
-
-.x-form-label-right label {
-   text-align:right;
-}
-
-.x-form-label-top .x-form-item label {
-    width:auto;
-    float:none;
-    clear:none;
-    display:inline;
-    margin-bottom:4px;
-    position:static;
-}
-.x-form-label-top .x-form-element {
-    padding-left:0;
-    padding-top:4px;
-}
-.x-form-label-top .x-form-item {
-    padding-bottom:4px;
-}
-.x-form fieldset {
-    border:1px solid #B5B8C8;
-    padding:10px 10px 5px 10px;
-    margin-bottom:10px;
-}
-.x-form fieldset legend {
-    font:bold 11px tahoma, arial, helvetica, sans-serif;
-    color:#15428b;
-}
-.ext-ie .x-form fieldset legend {
-    margin-bottom:10px;
-}
-.ext-ie .x-form fieldset {
-    padding-top: 0;
-}
-.x-form-empty-field {
-    color:gray;
-}
-/* Editor small font for grid, toolbar and tree */
-.x-small-editor .x-form-field {
-    font:normal 11px arial, tahoma, helvetica, sans-serif;
-}
-.x-small-editor .x-form-text {
-    height:20px;
-    line-height:16px;
-    vertical-align:middle;
-}
-.ext-ie .x-small-editor .x-form-text {
-    margin-top:-1px !important; /* ie bogus margin bug */
-    margin-bottom:-1px !important;
-    height:20px !important; /* ie quirks */
-    line-height:16px !important;
-}
-.ext-strict .x-small-editor .x-form-text {
-    height:16px !important;
-}
-.ext-safari .x-small-editor .x-form-field {
-    /* safari text field will not size so needs bigger font */
-    font:normal 12px arial, tahoma, helvetica, sans-serif;
-}
-.ext-ie .x-small-editor .x-form-text {
-    height:20px;
-    line-height:16px;
-}
-.ext-border-box .x-small-editor .x-form-text {
-    height:20px;
-}
-
-.x-small-editor .x-form-select-one {
-    height:20px;
-    line-height:16px;
-    vertical-align:middle;
-}
-.x-small-editor .x-form-num-field {
-    text-align:right;
-}
-.x-small-editor .x-form-field-wrap .x-form-trigger{
-    height:19px;
-}
-
-
-.x-form-clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-.x-form-clear-left {
-    clear:left;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-
-.x-form-cb-label {
-    width:'auto' !important;
-    float:none !important;
-    clear:none !important;
-    display:inline !important;
-    margin-left:4px;
-}
-
-.x-form-column {
-    float:left;
-    padding:0;
-    margin:0;
-    width:48%;
-    overflow:hidden;
-    zoom:1;
-}
-
-/* buttons */
-.x-form .x-form-btns-ct .x-btn{
-	float:right;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns td {
-	border:0;
-	padding:0;
-}
-.x-form .x-form-btns-ct .x-form-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns-center{
-	text-align:center; /*ie*/
-}
-.x-form .x-form-btns-ct .x-form-btns-center table{
-	margin:0 auto; /*everyone else*/
-}
-.x-form .x-form-btns-ct table td.x-form-btn-td{
-	padding:3px;
-}
-
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-form .x-form-btns-ct .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-form .x-form-btns-ct .x-btn-click  .x-btn-right{
-	background-position:0 -84px;
-}
-.x-form .x-form-btns-ct .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-.x-form-invalid-icon {
-    width:16px;
-    height:18px;
-    visibility:hidden;
-    position:absolute;
-    left:0;
-    top:0;
-    display:block;
-    background:transparent url(../images/default/form/exclamation.gif) no-repeat 0 2px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/grid.css b/lib/web/extjs/css/grid.css
deleted file mode 100644
index 10842ccd66f8c441e707e16d388687976f33b5f4..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/grid.css
+++ /dev/null
@@ -1,449 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/* Grid2 styles */
-.x-grid3 {
-	position:relative;
-	overflow:hidden;
-    background-color:#fff;
-}
-.ext-ie .x-grid3 table {
-    table-layout:fixed;
-}
-.x-grid3-viewport{
-	overflow:hidden;
-}
-.x-grid3-hd-row td, .x-grid3-row td{
-	font:normal 11px arial, tahoma, helvetica, sans-serif;
-    -moz-outline: none;
-	-moz-user-focus: normal;
-}
-.x-grid3-row td {
-    line-height:13px;
-    vertical-align: top;
-	padding-left:1px;
-    padding-right:1px;
-    -moz-user-select: none;
-}
-.x-grid3-hd-row td {
-    line-height:15px;
-    vertical-align:middle;
-    border-left:1px solid #eee;
-    border-right:1px solid #d0d0d0;
-}
-
-.x-grid3-hd-row .x-grid3-marker-hd {
-    padding:3px;
-}
-
-.x-grid3-row .x-grid3-marker {
-    padding:3px;
-}
-
-.x-grid3-cell-inner, .x-grid3-hd-inner{
-	overflow:hidden;
-	-o-text-overflow: ellipsis;
-	text-overflow: ellipsis;
-    padding:3px 3px 3px 5px;
-    white-space: nowrap;
-}
-
-.x-grid3-hd-inner {
-    position:relative;
-	 cursor:inherit;
-	 padding:4px 3px 4px 5px;
-}
-
-.x-grid3-row-body {
-    white-space:normal;
-}
-
-/* IE Quirks to clip */
-.ext-ie .x-grid3-cell-inner, .ext-ie .x-grid3-hd-inner{
-	width:100%;
-}
-/* reverse above in strict mode */
-.ext-strict .x-grid3-cell-inner, .ext-strict .x-grid3-hd-inner{
-	width:auto;
-}
-
-.x-grid3-col {
-	
-}
-
-.x-grid3-row {
-	cursor: default;
-    border:1px solid #ededed;
-    border-top-color:#fff;
-    /*border-bottom: 1px solid #ededed;*/
-    width:100%;
-}
-.x-grid3-row-alt{
-	/*background-color:#f1f2f4;*/
-}
-
-.x-grid3-row-over {
-	border:1px solid #dddddd;
-    background: #efefef url(../images/default/grid/row-over.gif) repeat-x left top;
-}
-
-.x-grid3-resize-proxy {
-	width:3px;
-	background-color:#cccccc;
-	cursor: e-resize;
-	cursor: col-resize;
-	position:absolute;
-	top:0;
-	height:100px;
-	overflow:hidden;
-	visibility:hidden;
-	border:0 none;
-	z-index:7;
-}
-.x-grid3-focus {
-	position:absolute;
-	top:0;
-	-moz-outline:0 none;
-    outline:0 none;
-    -moz-user-select: normal;
-    -khtml-user-select: normal;
-}
-
-/* header styles */
-.x-grid3-header{
-	background: #f9f9f9 url(../images/default/grid/grid3-hrow.gif) repeat-x 0 bottom;
-	cursor:default;
-    zoom:1;
-    padding:1px 0 0 0;
-}
-
-.x-grid3-header-pop {
-    border-left:1px solid #d0d0d0;
-    float:right;
-    clear:none;
-}
-.x-grid3-header-pop-inner {
-    border-left:1px solid #eee;
-    width:14px;
-    height:19px;
-    background: transparent url(../images/default/grid/hd-pop.gif) no-repeat center center;
-}
-.ext-ie .x-grid3-header-pop-inner {
-    width:15px;
-}
-.ext-strict .x-grid3-header-pop-inner {
-    width:14px; 
-}
-.x-grid3-header-inner {
-    overflow:hidden;
-    zoom:1;
-    float:left;
-}
-.x-grid3-header-offset {
-    padding-left:1px;
-	 width:10000px;
-}
-
-/*
-.x-grid3-hd-over .x-grid3-hd-inner {
-    padding-bottom:2px;
-    border-bottom: 1px solid #c3daf9;
-    background-color: #fafafa;
-}
-td.x-grid3-hd-over .x-grid3-hd-text {
-	border-bottom: 1px solid #b3cae9;
-}*/
-
-td.x-grid3-hd-over, td.sort-desc, td.sort-asc, td.x-grid3-hd-menu-open {
-    border-left:1px solid #aaccf6;
-    border-right:1px solid #aaccf6;
-}
-td.x-grid3-hd-over .x-grid3-hd-inner, td.sort-desc .x-grid3-hd-inner, td.sort-asc .x-grid3-hd-inner, td.x-grid3-hd-menu-open .x-grid3-hd-inner {
-    background: #ebf3fd url(../images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;
-
-}
-.x-grid3-sort-icon{
-	background-repeat: no-repeat;
-	display: none;
-	height: 4px;
-	width: 13px;
-	margin-left:3px;
-	vertical-align: middle;
-}
-.sort-asc .x-grid3-sort-icon {
-	background-image: url(../images/aero/grid/sort_asc.gif);
-	display: inline;
-}
-.sort-desc .x-grid3-sort-icon {
-	background-image: url(../images/aero/grid/sort_desc.gif);
-	display: inline;
-}
-
-/* Body Styles */
-.x-grid3-body {
-	overflow:auto;
-}
-.x-grid3-body-inner {
-	overflow:auto;
-}
-.x-grid3-cell-text, .x-grid3-hd-text {
-	display: block;
-	padding: 3px 5px 3px 5px;
-	-moz-user-select: none;
-	-khtml-user-select: none;
-	color:black;
-}
-.x-grid3-split {
-	background-image: url(../images/default/grid/grid-split.gif);
-	background-position: center;
-	background-repeat: no-repeat;
-	cursor: e-resize;
-	cursor: col-resize;
-	display: block;
-	font-size: 1px;
-	height: 16px;
-	overflow: hidden;
-	position: absolute;
-	top: 2px;
-	width: 6px;
-	z-index: 3;
-}
-
-.x-grid3-hd-text {
-	color:#15428b;
-}
-/* Column Reorder DD */
-.x-dd-drag-proxy .x-grid3-hd-inner{
-	background: #ebf3fd url(../images/default/grid/grid3-hrow-over.gif) repeat-x left bottom;
-	width:120px;
-	padding:3px;
-	border:1px solid #aaccf6;
-	overflow:hidden;
-}
-
-.col-move-top, .col-move-bottom{
-	width:9px;
-	height:9px;
-	position:absolute;
-	top:0;
-	line-height:1px;
-	font-size:1px;
-	overflow:hidden;
-	visibility:hidden;
-	z-index:20000;
-}
-.col-move-top{
-	background:transparent url(../images/default/grid/col-move-top.gif) no-repeat left top;
-}
-.col-move-bottom{
-	background:transparent url(../images/default/grid/col-move-bottom.gif) no-repeat left top;
-}
-
-/* Selection Styles */
-.x-grid3-row-selected {
-	background: #d9e8fb url(../images/default/grid/row-sel.gif) repeat-x left top;
-	border:1px solid #99bbe8;
-}/*
-.x-grid3-row-selected td {
-	border-left:1px solid #c3daf9;
-    border-right:1px solid #719ad5;
-}*/
-.x-grid3-row-selected span, .x-grid3-row-selected b, .x-grid3-row-selected div, .x-grid3-row-selected strong, .x-grid3-row-selected i{
-
-}
-.x-grid3-cell-selected{
-	background-color: #316ac5 !important;
-	color: white;
-}
-.x-grid3-cell-selected span{
-	color: white !important;
-}
-.x-grid3-cell-selected .x-grid3-cell-text{
-	color: white;
-}
-
-.x-grid3-locked td.x-grid3-row-marker, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker{
-    background: #ebeadb url(../images/default/grid/grid-hrow.gif) repeat-x 0 bottom !important;
-    vertical-align:middle !important;
-    color:black;
-    padding:0;
-    border-top:1px solid white;
-    border-bottom:none !important;
-    border-right:1px solid #6fa0df !important;
-    text-align:center;
-}
-.x-grid3-locked td.x-grid3-row-marker div, .x-grid3-locked .x-grid3-row-selected td.x-grid3-row-marker div{
-    padding:0 4px;
-    color:#15428b !important;
-    text-align:center;
-}
-
-/* dirty cells */
-.x-grid3-dirty-cell {
-    background: transparent url(../images/default/grid/dirty.gif) no-repeat 0 0;
-}
-
-/* Grid Toolbars */
-.x-grid3-topbar, .x-grid3-bottombar{
-	font:normal 11px arial, tahoma, helvetica, sans-serif;
-    overflow:hidden;
-	display:none;
-	zoom:1;
-    position:relative;
-}
-.x-grid3-topbar .x-toolbar{
-	border-right:0 none;
-}
-.x-grid3-bottombar .x-toolbar{
-	border-right:0 none;
-	border-bottom:0 none;
-	border-top:1px solid #a9bfd3;
-}
-/* Props Grid Styles */
-.x-props-grid .x-grid3-cell-selected .x-grid3-cell-text{
-	 background-color: #316ac5 !important;
-}
-.x-props-grid .x-grid3-col-value .x-grid3-cell-text{
-	background-color: white;
-}
-.x-props-grid .x-grid3-col-name{
-	 background-color: #c3daf9;
-}
-.x-props-grid .x-grid3-col-name .x-grid3-cell-text{
-	background-color: white;
-    margin-left:10px;
-}
-.x-props-grid .x-grid3-split-value {
-    visibility:hidden;
-}
-
-/* header menu */
-.xg-hmenu-sort-asc .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-asc.gif);
-}
-.xg-hmenu-sort-desc .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-desc.gif);
-}
-.xg-hmenu-lock .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-lock.gif);
-}
-.xg-hmenu-unlock .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-unlock.gif);
-}
-
-/* dd */
-.x-grid3-col-dd {
-    border:0 none;
-    padding:0;
-    background:transparent;
-}
-
-.x-dd-drag-ghost .x-grid3-dd-wrap {
-    padding:1px 3px 3px 1px;
-}
-
-.x-grid3-hd-btn {
-    display:none;
-    position:absolute;
-    width:14px;
-    background:#c3daf9 url(../images/default/grid/grid3-hd-btn.gif) no-repeat left center;
-    right:0;
-    top:0;
-    z-index:2;
-	 cursor:pointer;
-}
-
-.x-grid3-hd-over .x-grid3-hd-btn, .x-grid3-hd-menu-open .x-grid3-hd-btn {
-    display:block;
-}
-
-a.x-grid3-hd-btn:hover {
-    background-position:-14px center;
-}
-
-/* Expanders */
-
-.x-grid3-body .x-grid3-td-expander {
-    background:transparent url(../images/default/grid/grid3-special-col-bg.gif) repeat-y right;
-}
-.x-grid3-body .x-grid3-td-expander .x-grid3-cell-inner {
-    padding:0 !important;
-    height:100%;
-}
-.x-grid3-row-expander {
-    width:100%;
-    height:18px;
-    background-position:4px 2px;
-    background-repeat:no-repeat;
-    background-color:transparent;
-	 background-image:url(../images/default/grid/row-expand-sprite.gif);
-}
-.x-grid3-row-collapsed .x-grid3-row-expander {
-    background-position:4px 2px;
-}
-.x-grid3-row-expanded .x-grid3-row-expander {
-    background-position:-21px 2px;
-}
-.x-grid3-row-collapsed .x-grid3-row-body {
-    display:none !important;
-}
-.x-grid3-row-expanded .x-grid3-row-body {
-    display:block !important;
-}
-
-/* Checkers */
-
-.x-grid3-body .x-grid3-td-checker {
-    background:transparent url(../images/default/grid/grid3-special-col-bg.gif) repeat-y right;
-}
-
-.x-grid3-body .x-grid3-td-checker .x-grid3-cell-inner, .x-grid3-header .x-grid3-td-checker .x-grid3-hd-inner {
-    padding:0 !important;
-    height:100%;
-}
-
-.x-grid3-row-checker, .x-grid3-hd-checker {
-    width:100%;
-    height:18px;
-    background-position:2px 2px;
-    background-repeat:no-repeat;
-    background-color:transparent;
-	 background-image:url(../images/default/grid/row-check-sprite.gif);
-}
-.x-grid3-row .x-grid3-row-checker {
-    background-position:2px 2px;
-}
-.x-grid3-row-selected .x-grid3-row-checker, .x-grid3-hd-checker-on .x-grid3-hd-checker {
-    background-position:-23px 2px;
-}
-.x-grid3-hd-checker {
-    background-position:2px 3px;
-}
-.x-grid3-hd-checker-on .x-grid3-hd-checker {
-    background-position:-23px 3px;
-}
-
-/* Numberer */
-
-.x-grid3-body .x-grid3-td-numberer {
-    background:transparent url(../images/default/grid/grid3-special-col-bg.gif) repeat-y right;
-}
-.x-grid3-body .x-grid3-td-numberer .x-grid3-cell-inner {
-    padding:3px 5px 0 0 !important;
-    text-align:right;
-	 color:#444;
-}
-
-/* All specials */
-
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-numberer,
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-checker,
-.x-grid3-body .x-grid3-row-selected .x-grid3-td-expander {
-	background:transparent url(../images/default/grid/grid3-special-col-sel-bg.gif) repeat-y right;
-}
-
diff --git a/lib/web/extjs/css/layout.css b/lib/web/extjs/css/layout.css
deleted file mode 100644
index 9e67845abd50dcde2ae96a7ee049f5dc090a744b..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/layout.css
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-layout-container{
-    width:100%;
-    height:100%;
-    overflow:hidden;
-	 background-color:#c3daf9;
-}
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-.x-layout-collapsed{
-    position:absolute;
-    left:-10000px;
-    top:-10000px;
-    visibility:hidden;
-    background-color:#c3daf9;
-    width:20px;
-    height:20px;
-    overflow:hidden;
-	border:1px solid #98c0f4;
-	z-index:20;
-}
-.ext-border-box .x-layout-collapsed{
-    width:22px;
-    height:22px;
-}
-.x-layout-collapsed-over{
-    cursor:pointer;
-	 background-color:#d9e8fb;
-}
-.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{
-	position:absolute;
-    top:0;
-    left:0;
-    width:20px;
-    height:20px;
-}
-.x-layout-collapsed-north .x-layout-collapsed-tools, .x-layout-collapsed-south .x-layout-collapsed-tools{
-	position:absolute;
-    top:0;
-    right:0;
-    width:20px;
-    height:20px;
-}
-.x-layout-collapsed .x-layout-tools-button{
-    margin:0;
-}
-.x-layout-collapsed .x-layout-tools-button-inner{
-    width:16px;
-    height:16px;
-}
-.x-layout-inactive-content{
-    position:absolute;
-    left:-10000px;
-    top:-10000px;
-    visibility:hidden;
-}
-.x-layout-active-content{
-    visibility:visible;
-}
-.x-layout-panel{
-    position:absolute;border:1px solid #98c0f4;overflow:hidden;background-color:white;
-}
-.x-layout-panel-east, .x-layout-panel-west {
-    z-index:10;
-}
-.x-layout-panel-north, .x-layout-panel-south {
-    z-index:11;
-}
-.x-layout-collapsed-north, .x-layout-collapsed-south, .x-layout-collapsed-east, .x-layout-collapsed-west {
-    z-index:12;
-}
-.x-layout-panel-body{
-    overflow:hidden;
-}
-.x-layout-grid-wrapper{
-
-}
-.x-layout-split{
-    position:absolute;
-    height:5px;
-    width:5px;
-    line-height:1px;
-    font-size:1px;
-    z-index:3;
-    background-color:#c3daf9;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/default/layout/panel-title-light-bg.gif);
-    color: black;
-    border-bottom:1px solid #98c0f4;
-    position:relative;
-}
-.x-layout-panel-hd-text{
-    font:normal 11px tahoma, verdana, helvetica;
-    padding: 4px;
-    padding-left: 4px;
-    display:block;
-	 white-space:nowrap;
-}
-.x-layout-panel-hd-tools{
-    position:absolute;
-    right:0;
-    top:0;
-    text-align:right;
-    padding-top:2px;
-    padding-right:2px;
-    width:60px;
-}
-.x-layout-tools-button{
-    z-index:6;
-    padding:2px;
-    cursor:pointer;
-    float:right;
-}
-.x-layout-tools-button-over{
-    padding:1px;
-    border:1px solid #98c0f4;
-    background-color:white;
-}
-.x-layout-tools-button-inner{
-    height:12px;
-    width:12px;
-    line-height:1px;
-    font-size:1px;
-    background-repeat:no-repeat;
-    background-position:center;
-}
-.x-layout-close{
-    background-image:url(../images/default/layout/panel-close.gif);
-}
-.x-layout-stick{
-    background-image:url(../images/default/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/default/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/default/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/default/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/default/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background-image:url(../images/default/sizer/e-handle.gif);
-    background-position: left;
-}
-.x-layout-split-v{
-    background-image:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-layout-panel .x-tabs-wrap{
-    background:url(../images/default/layout/gradient-bg.gif);
-}
-.x-layout-panel .x-tabs-body {
-    background-color:white;
-    overflow:auto;height:100%;
-}
-.x-layout-component-panel, .x-layout-nested-layout {
-	position:relative;
-   padding:0;
-	overflow:hidden;
-	width:200px;
-	height:200px;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #98c0f4;
-}
-
-.x-layout-panel-dragover {
-	border: 2px solid #6593cf;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/default/layout/gradient-bg.gif);
-	background-color:#c3daf9;
-	border:1px dashed #6593cf;
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:0;top:0;
-}
-.x-layout-slider {
-	z-index:15;
-	overflow:hidden;
-	position:absolute;
-}
-
-.x-scroller-up, .x-scroller-down {
-	background-color:#c3daf9;
-	border: 1px solid #6593cf;
-	border-top-color: #fff;
-	border-left-color: #fff;
-	border-right:0 none;
-	cursor:pointer;
-	overflow:hidden;
-	line-height:16px;
-}
-.x-scroller-down {
-	border-bottom: 0 none;
-	border-top: 1px solid #6593cf;
-}
-.x-scroller-btn-over {
-	background-color: #d9e8f8;
-}
-.x-scroller-btn-click {
-	background-color: #AECEF7;
-}
-.x-scroller-btn-disabled {
-	cursor:default;
-	background-color: #c3daf9;
-	-moz-opacity: 0.3;
-   opacity:.30;
-   filter: alpha(opacity=30);
-}
-
-/* Reader Layout */
-
-.x-reader .x-layout-panel-north {
-    border:0 none;
-}
-.x-reader .x-layout-panel-center{
-    border:0 none;
-}
-.x-reader .x-layout-nested-layout .x-layout-panel-center{
-    border:1px solid #99bbe8;
-    border-top:0 none;
-}
-.x-reader .x-layout-nested-layout .x-layout-panel-south{
-    border:1px solid #99bbe8;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/menu.css b/lib/web/extjs/css/menu.css
deleted file mode 100644
index fee781054c1c9bcd655c5b86f96d1402ebe8543c..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/menu.css
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-menu {
-	border:1px solid #718bb7;
-    z-index: 15000;
-	background: #fff url(../images/default/menu/menu.gif) repeat-y;
-}
-.ext-ie .x-menu {
-    zoom:1;
-    overflow:hidden;
-}
-.x-menu-list{
-    border:1px solid #fff;
-}
-.x-menu li{
-	line-height:100%;
-}
-.x-menu li.x-menu-sep-li{
-	font-size:1px;
-	line-height:1px;
-}
-.x-menu-list-item{
-	font:normal 11px tahoma,arial, sans-serif;
-    white-space: nowrap;
-    -moz-user-select: none;
-	-khtml-user-select: none;
-	display:block;
-	padding:1px;
-}
-.x-menu-item-arrow{
-	background:transparent url(../images/default/menu/menu-parent.gif) no-repeat right;
-}
-.x-menu-sep {
-	display:block;
-	font-size:1px;
-	line-height:1px;
-	background:#c3daf9;
-	margin: 3px 3px 3px 32px;
-}
-.x-menu-focus {
-	position:absolute;
-	left:0;
-	top:-5px;
-	width:0;
-	height:0;
-    line-height:1px;
-}
-.x-menu-item {
-	display:block;
-	line-height:14px;
-	padding:3px 21px 3px 3px;
-	white-space: nowrap;
-	text-decoration:none;
-	color:#233d6d;
-	-moz-outline: 0 none;
-	outline: 0 none;
-	cursor:pointer;
-}
-.x-menu-item-active {
-	color:#233d6d;
-	background:#c3daf9;
-	border:1px solid #8BB8F3;
-	padding:0;
-}
-.x-menu-item-icon {
-	border: 0 none;
-	height: 16px;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-	margin: 0 11px 0 0;
-    background-position:center;
-}
-
-.x-menu-check-item .x-menu-item-icon{
-	background: transparent url(../images/default/menu/unchecked.gif) no-repeat center;
-}
-
-.x-menu-item-checked .x-menu-item-icon{
-	background-image:url(../images/default/menu/checked.gif);
-}
-.x-menu-group-item .x-menu-item-icon{
-	background: transparent;
-}
-
-.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
-    background: transparent url(../images/default/menu/group-checked.gif) no-repeat center;
-}
-
-.x-menu-plain {
-	background:#fff;
-}
-.x-menu-date-item{
-	padding:0;
-}
-
-.x-menu .x-color-palette, .x-menu .x-date-picker{
-    margin-left:32px;
-	margin-right:4px;
-}
-.x-menu .x-date-picker{
-    border:1px solid #a3bad9;
-    margin-top:2px;
-    margin-bottom:2px;
-}
-.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
-	margin:0;
-    border:0 none;
-}
-.x-date-menu {
-   padding:0 !important;
-}
diff --git a/lib/web/extjs/css/panel.css b/lib/web/extjs/css/panel.css
deleted file mode 100644
index 378878e6431bb0ce7178e4ddae183b0e1de71b5c..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/panel.css
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-panel-header {
-    overflow:hidden;
-    zoom:1;
-    color:#15428b;
-	font:bold 11px tahoma,arial,verdana,sans-serif;
-    padding:5px 3px 4px 5px;
-    border:1px solid #99bbe8;
-    background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;
-}
-
-.x-panel-body {
-    border:1px solid #99bbe8;
-    border-top:0 none;
-    overflow:hidden;
-    background:white;
-}
-.x-panel-body-noheader {
-    border-top:1px solid #99bbe8;
-}
-
-.x-panel-header {
-    overflow:hidden;
-    zoom:1;
-}
-.x-panel-tl .x-panel-header {
-    color:#15428b;
-	 font:bold 11px tahoma,arial,verdana,sans-serif;
-    padding:5px 0 4px 0;
-    border:0 none;
-    background:transparent;
-}
-.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon {
-    padding-left:20px !important;
-    background-repeat:no-repeat;
-    background-position:0 4px;
-    zoom:1;
-}
-.x-panel-inline-icon {
-    width:16px;
-	 height:16px;
-    background-repeat:no-repeat;
-    background-position:0 0;
-	 vertical-align:middle;
-	 margin-right:4px;
-	 margin-top:-1px;
-	 margin-bottom:-1px;
-}
-.x-panel-tc {
-	background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 0;
-	overflow:hidden;
-}
-.x-panel-tl {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat 0 0;
-	padding-left:6px;
-    zoom:1;
-    border-bottom:1px solid #99bbe8;
-}
-.x-panel-tr {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat right 0;
-	padding-right:6px;
-}
-.x-panel-bc {
-	background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 bottom;
-    zoom:1;
-}
-.x-panel-bc .x-panel-footer {
-    padding-bottom:1px;
-    zoom:1;
-}
-
-.x-panel-nofooter .x-panel-bc {
-	height:1px;
-}
-.x-panel-bl {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat 0 bottom;
-	padding-left:1px;
-    zoom:1;
-}
-.x-panel-br {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat right bottom;
-	padding-right:1px;
-    zoom:1;
-}
-.x-panel-mc {
-    border:0 none;
-    padding:0;
-    margin:0;
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-    background:white;
-}
-.x-panel-mc .x-panel-body {
-    background:transparent;
-    border:0 none;
-}
-.x-panel-ml {
-	background: #fff url(../images/default/panel/white-left-right.gif) repeat-y 0 0;
-	padding-left:1px;
-    zoom:1;
-}
-.x-panel-mr {
-	background: transparent url(../images/default/panel/white-left-right.gif) repeat-y right 0;
-	padding-right:1px;
-    zoom:1;
-}
-.x-panel-blue .x-panel-tl, .x-panel-blue .x-panel-tr, .x-panel-blue .x-panel-bl, .x-panel-blue .x-panel-br {
-    background-image:url(../images/default/panel/corners-sprite.gif);
-}
-.x-panel-blue .x-panel-tc, .x-panel-blue .x-panel-bc {
-    background-image:url(../images/default/panel/top-bottom.gif);
-}
-.x-panel-blue .x-panel-ml, .x-panel-blue .x-panel-mr {
-	background-image:url(../images/default/panel/left-right.gif);
-}
-.x-panel-blue .x-panel-mc{
-    padding-top:6px;
-    background:#dfe8f6;
-}
-
-.x-panel-blue .x-panel-tl {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-tr {
-	padding-right:6px;
-}
-.x-panel-blue .x-panel-bc .x-panel-footer {
-    padding-bottom:6px;
-}
-.x-panel-blue .x-panel-nofooter .x-panel-bc {
-	height:6px;
-}
-.x-panel-blue .x-panel-bl {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-br {
-	padding-right:6px;
-}
-
-.x-panel-blue .x-panel-ml {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-mr {
-	padding-right:6px;
-}
-
-.x-panel-bwrap {
-    overflow:hidden;
-}
-.x-panel-body {
-    overflow:hidden;
-}
-
-.x-panel-collapsed .x-resizable-handle{
-    display:none;
-}
-
-/* Tools */
-.x-tool {
-    overflow:hidden;
-    width:15px;
-    height:15px;
-    float:right;
-    cursor:pointer;
-    background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;
-    margin-left:2px;
-}
-
-
-/* expand / collapse tools */
-.x-tool-toggle {
-    background-position:0 -60px;
-}
-.x-tool-toggle-over {
-    background-position:-15px -60px;
-}
-.x-panel-collapsed .x-tool-toggle {
-    background-position:0 -75px;
-}
-.x-panel-collapsed .x-tool-toggle-over {
-    background-position:-15px -75px;
-}
-
-.x-tool-close {
-    background-position:0 -0;
-}
-.x-tool-close-over {
-    background-position:-15px 0;
-}
-
-.x-tool-minimize {
-    background-position:0 -15px;
-}
-.x-tool-minimize-over {
-    background-position:-15px -15px;
-}
-
-.x-tool-maximize {
-    background-position:0 -30px;
-}
-.x-tool-maximize-over {
-    background-position:-15px -30px;
-}
-
-.x-tool-restore {
-    background-position:0 -45px;
-}
-.x-tool-restore-over {
-    background-position:-15px -45px;
-}
-
-.x-tool-gear {
-    background-position:0 -90px;
-}
-.x-tool-gear-over {
-    background-position:-15px -90px;
-}
-
-.x-tool-pin {
-    background-position:0 -135px;
-}
-.x-tool-pin-over {
-    background-position:-15px -135px;
-}
-.x-tool-unpin {
-    background-position:0 -150px;
-}
-.x-tool-unpin-over {
-    background-position:-15px -150px;
-}
-.x-tool-right {
-    background-position:0 -165px;
-}
-.x-tool-right-over {
-    background-position:-15px -165px;
-}
-.x-tool-left {
-    background-position:0 -180px;
-}
-.x-tool-left-over {
-    background-position:-15px -180px;
-}
-.x-tool-up {
-    background-position:0 -210px;
-}
-.x-tool-up-over {
-    background-position:-15px -210px;
-}
-.x-tool-down {
-    background-position:0 -195px;
-}
-.x-tool-down-over {
-    background-position:-15px -195px;
-}
-.x-tool-refresh {
-    background-position:0 -225px;
-}
-.x-tool-refresh-over {
-    background-position:-15px -225px;
-}
-/* Ghosting */
-.x-panel-ghost {
-    background:#cbddf3;
-    z-index:12000;
-    overflow:hidden;
-    position:absolute;
-    left:0;top:0;
-    opacity:.65;
-    -moz-opacity:.65;
-    filter:alpha(opacity=65);
-}
-
-.x-panel-ghost ul {
-    margin:0;
-    padding:0;
-    overflow:hidden;
-    font-size:0;
-    line-height:0;
-    border:1px solid #84a0c4;
-    border-top:0 none;
-    display:block;
-}
-
-.x-panel-ghost * {
-    cursor:move !important;
-}
-
-
-/* Buttons */
-
-.x-panel-btns-ct {
-    padding:5px;
-}
-
-.x-panel-btns-ct .x-btn{
-	float:right;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns td {
-	border:0;
-	padding:0;
-}
-.x-panel-btns-ct .x-panel-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns-center{
-	text-align:center; /*ie*/
-}
-.x-panel-btns-ct .x-panel-btns-center table{
-	margin:0 auto; /*everyone else*/
-}
-.x-panel-btns-ct table td.x-panel-btn-td{
-	padding:3px;
-}
-
-.x-panel-btns-ct .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-panel-btns-ct .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-panel-btns-ct .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-panel-btns-ct .x-btn-over .x-btn-left{
-	background-position:0 -63px;
-}
-.x-panel-btns-ct .x-btn-over .x-btn-right{
-	background-position:0 -84px;
-}
-.x-panel-btns-ct .x-btn-over .x-btn-center{
-	background-position:0 -105px;
-}
-
-.x-panel-btns-ct .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-panel-btns-ct .x-btn-click  .x-btn-right{
-	background-position:0 -84px;
-}
-.x-panel-btns-ct .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/qtips.css b/lib/web/extjs/css/qtips.css
deleted file mode 100644
index b645aa6e864f23caf17fffadb1f80d4259bf134a..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/qtips.css
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-tip{
-	position: absolute;
-	top: 0;
-    left:0;
-    visibility: hidden;
-	z-index: 20000;
-    border:0 none;
-}
-.x-tip .x-tip-close{
-	background-image: url(../images/default/qtip/close.gif);
-	height: 15px;
-	float:right;
-	width: 15px;
-    margin:0 0 2px 2px;
-    cursor:pointer;
-    display:none;
-}
-.x-tip .x-tip-top {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -12px;
-	height:6px;
-    overflow:hidden;
-}
-.x-tip .x-tip-top-left {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 0;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-top-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right 0;
-	padding-right:6px;
-    zoom:1;
-}
-.x-tip .x-tip-ft {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -18px;
-	height:6px;
-    overflow:hidden;
-}
-.x-tip .x-tip-ft-left {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -6px;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-ft-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -6px;
-	padding-right:6px;
-    zoom:1;
-}
-.x-tip .x-tip-bd {
-    border:0 none;
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-}
-.x-tip .x-tip-bd-left {
-	background: #fff url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -24px;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-bd-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -24px;
-	padding-right:6px;
-    zoom:1;
-}
-
-.x-tip h3 {
-    font: bold 11px tahoma,arial,helvetica,sans-serif;
-    margin:0;
-    padding:2px 0;
-    color:#444;
-}
-.x-tip .x-tip-bd-inner {
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-    margin:0 !important;
-    line-height:14px;
-    color:#444;
-    padding:0;
-    float:left;
-}
-
-
-.x-form-invalid-tip {
-}
-
-.x-form-invalid-tip .x-tip-top {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-top-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-top-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner {
-    padding-left:24px;
-    background:transparent url(../images/default/form/exclamation.gif) no-repeat 2px 2px;
-}
-.x-form-invalid-tip .x-tip-bd-inner {
-    padding:2px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/reset-min.css b/lib/web/extjs/css/reset-min.css
deleted file mode 100644
index 655242130bc4414248d9a3954f8101469c43c093..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/reset-min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
\ No newline at end of file
diff --git a/lib/web/extjs/css/resizable.css b/lib/web/extjs/css/resizable.css
deleted file mode 100644
index 5f380b7204f491c4267bf9b8d0d5863c334fc1f4..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/resizable.css
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-resizable-handle {
-    position:absolute;
-    z-index:100;
-    /* ie needs these */
-    font-size:1px;
-    line-height:6px;
-    overflow:hidden;
-	 background:white;
-	 filter:alpha(opacity=0);
-	 opacity:0;
-	 zoom:1;
-}
-.x-resizable-handle-east{
-    width:6px;
-    cursor:e-resize;
-    right:0;
-    top:0;
-    height:100%;
-}
-.ext-ie .x-resizable-handle-east {
-      margin-right:-1px; /*IE rounding error*/
-}
-.x-resizable-handle-south{
-    width:100%;
-    cursor:s-resize;
-    left:0;
-    bottom:0;
-    height:6px;
-}
-.ext-ie .x-resizable-handle-south {
-     margin-bottom:-1px; /*IE rounding error*/
-}
-.x-resizable-handle-west{
-    width:6px;
-    cursor:w-resize;
-    left:0;
-    top:0;
-    height:100%;
-}
-.x-resizable-handle-north{
-    width:100%;
-    cursor:n-resize;
-    left:0;
-    top:0;
-    height:6px;
-}
-.x-resizable-handle-southeast{
-    width:6px;
-    cursor:se-resize;
-    right:0;
-    bottom:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-northwest{
-    width:6px;
-    cursor:nw-resize;
-    left:0;
-    top:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-northeast{
-    width:6px;
-    cursor:ne-resize;
-    right:0;
-    top:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-southwest{
-    width:6px;
-    cursor:sw-resize;
-    left:0;
-    bottom:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{
-    filter:alpha(opacity=100);
-	 opacity:1;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/default/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/default/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/default/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/default/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/default/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/default/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #6593cf;
-    position:absolute;
-    overflow:hidden;
-    display:none;
-	 left:0;top:0;
-    z-index:50000;
-}
-.x-resizable-overlay{
-    width:100%;
-	 height:100%;
-	 display:none;
-	 position:absolute;
-	 left:0;
-	 top:0;
-	 background:white;
-	 z-index:200000;
-	 -moz-opacity: 0;
-    opacity:0;
-    filter: alpha(opacity=0);
-}
diff --git a/lib/web/extjs/css/tabs.css b/lib/web/extjs/css/tabs.css
deleted file mode 100644
index 6e165f9ea6d4d32c907496e9289b5bfca1da2b22..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/tabs.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-tabs-wrap {
-	border-bottom:1px solid #6593cf;
-	padding-top:2px;
-}
-.x-tabs-strip-wrap{
-	width:100%;	
-}
-.x-tabs-wrap table{
-	position:relative;
-	top:0; left:0;
-}
-.x-tabs-strip td{
-	padding:0;
-	padding-left:2px;
-}
-.x-tabs-strip a, .x-tabs-strip span, .x-tabs-strip em {
-	display:block;
-}
-.x-tabs-strip a {
-	text-decoration:none !important;
-	-moz-outline: none;
-	outline: none;
-	cursor:pointer;
-}
-.x-tabs-strip .x-tabs-text {
-	font:bold 11px tahoma,arial,helvetica;
-	color:#666;
-	overflow:hidden;
-	white-space: nowrap;
-	cursor:pointer;
-	text-overflow: ellipsis;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#083772;
-}
-.x-tabs-strip .disabled .x-tabs-text {
-	cursor:default;
-	color:#aaaaaa;
-}
-.x-tabs-strip .x-tabs-inner {
-	 padding:4px 10px;	
-}
-
-.x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-.x-tabs-strip .x-tabs-right {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-strip .x-tabs-left {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-
-.x-tabs-strip  a {
-	position:relative;
-	top:1px; left:0;
-}
-.x-tabs-strip .on a {
-	position:relative;
-}
-.x-tabs-strip .on .x-tabs-inner {
-	padding-bottom:5px;
-}
-/** closable tabs */
-.x-tabs-strip .x-tabs-closable .x-tabs-inner{
-	padding-right:22px;
-	position:relative;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	line-height: 1px;
-	font-size:1px;
-	background-image:url(../images/default/layout/tab-close.gif);
-	display:block;
-	position:absolute;
-	right:5px;top:4px;
-	width:11px;height:11px;
-	cursor:pointer;
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/default/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/default/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #6593cf;
-    border-top:0 none;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-top:1px solid #6593cf;
-	border-bottom:0 none;
-	padding-top:0;
-	padding-bottom:2px;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	 background: url(../images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	 background: url(../images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip  a {
-	position:relative;
-	top:0; left:0;
-}
-.x-tabs-bottom .x-tabs-strip .on a {
-	margin-top:-1px;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-inner {
-	padding-top:5px;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #6593cf;
-    border-bottom:0 none;
-}
-
diff --git a/lib/web/extjs/css/toolbar.css b/lib/web/extjs/css/toolbar.css
deleted file mode 100644
index 2107a2bc4376b1c936ad1dd5f88850f923cd4f90..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/toolbar.css
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-toolbar{
-	border-top: 1px solid #eaf0f7;
-    border-bottom: 1px solid #a9bfd3;
-    display: block;
-	padding:2px;
-    background:#d0def0 url(../images/default/layout/panel-title-light-bg.gif) repeat-x;
-}
-.x-toolbar .x-item-disabled .x-btn-icon {
-    opacity: .35;
-    -moz-opacity: .35;
-    filter: alpha(opacity=35);
-}
-.x-toolbar td {
-	vertical-align:middle;
-}
-.mso .x-toolbar, .x-grid-mso .x-toolbar{
-	border: 0 none;
-	background: url(../images/default/grid/mso-hd.gif);
-}
-.x-toolbar td,.x-toolbar span,.x-toolbar input,.x-toolbar div,.x-toolbar select,.x-toolbar label{
-	white-space: nowrap;
-    font:normal 11px tahoma, arial, helvetica, sans-serif;
-}
-.x-toolbar .x-item-disabled {
-	color:gray;
-	cursor:default;
-	opacity:.6;
-	-moz-opacity:.6;
-	filter:alpha(opacity=60);
-}
-.x-toolbar .x-item-disabled * {
-	color:gray;
-	cursor:default;
-}
-.x-toolbar .x-btn-left{
-	background:none;
-}
-.x-toolbar .x-btn-right{
-	background:none;
-}
-.x-toolbar .x-btn-center{
-	background:none;
-	padding:0 0;
-}
-
-.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
-	padding-right:2px;
-}
-.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
-	padding-right:0;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{
-	padding:0 2px;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
-    width:12px;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
-    width:12px;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
-	background-position: 0 -47px;
-}
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-.x-toolbar .x-btn-with-menu .x-btn-center em{
-	padding-right:8px;
-}
-
-.x-toolbar .ytb-text{
-   padding:2px;
-}
-.x-toolbar .ytb-sep {
-	background-image: url(../images/default/grid/grid-split.gif);
-	background-position: center;
-	background-repeat: no-repeat;
-	display: block;
-	font-size: 1px;
-	height: 16px;
-	width:4px;
-	overflow: hidden;
-	cursor:default;
-	margin: 0 2px 0;
-	border:0;
-}
-.x-toolbar .ytb-spacer {
-    width:2px;
-}
-.mso .x-toolbar .ytb-sep, .x-grid-mso .x-toolbar .ytb-sep{
-	background-image: url(../images/default/grid/grid-blue-split.gif);
-}
-
-/* IE refuses to respect the negative margins in the toolbar */
-.ext-ie .x-toolbar .x-form-field-wrap {
-	padding-bottom:1px;
-}
-.ext-ie .x-toolbar .x-form-field-wrap .x-form-trigger {
-	top:1px;
-}
-.ext-ie .x-toolbar .x-form-field-wrap .x-form-twin-triggers img {
-	margin-top:1px;
-}
-
-/* Paging Toolbar */
-
-.x-grid-page-number{
-	width:24px;
-	height:14px;
-}
-.x-grid-page-first .x-btn-text{
-	background-image: url(../images/default/grid/page-first.gif);
-}
-.x-grid-loading .x-btn-text{
-	background-image: url(../images/default/grid/done.gif);
-}
-.x-grid-page-last .x-btn-text{
-	background-image: url(../images/default/grid/page-last.gif);
-}
-.x-grid-page-next .x-btn-text{
-	background-image: url(../images/default/grid/page-next.gif);
-}
-.x-grid-page-prev .x-btn-text{
-	background-image: url(../images/default/grid/page-prev.gif);
-}
-.x-item-disabled .x-grid-loading .x-btn-text{
-	background-image: url(../images/default/grid/loading.gif);
-}
-.x-item-disabled .x-grid-page-first .x-btn-text{
-	background-image: url(../images/default/grid/page-first-disabled.gif);
-}
-.x-item-disabled .x-grid-page-last .x-btn-text{
-	background-image: url(../images/default/grid/page-last-disabled.gif);
-}
-.x-item-disabled .x-grid-page-next .x-btn-text{
-	background-image: url(../images/default/grid/page-next-disabled.gif);
-}
-.x-item-disabled .x-grid-page-prev .x-btn-text{
-	background-image: url(../images/default/grid/page-prev-disabled.gif);
-}
-.x-paging-info {
-    position:absolute;
-    top:8px;
-    right: 8px;
-    color:#15428b;
-}
diff --git a/lib/web/extjs/css/tree.css b/lib/web/extjs/css/tree.css
deleted file mode 100644
index 73dc3787d5b69dc6247fdedb757a58b99faa1025..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/tree.css
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
-	border: 0 none;
-	height: 18px;
-	margin: 0;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-    background-repeat: no-repeat;
-}
-.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{
-	border: 0 none;
-	height: 18px;
-	margin: 0;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-	background-position:center;
-    background-repeat: no-repeat;
-}
-
-/* some default icons for leaf/folder */
-.x-tree-node-collapsed .x-tree-node-icon{
-	background-image:url(../images/default/tree/folder.gif);
-}
-.x-tree-node-expanded .x-tree-node-icon{
-	background-image:url(../images/default/tree/folder-open.gif);
-}
-.x-tree-node-leaf .x-tree-node-icon{
-	background-image:url(../images/default/tree/leaf.gif);
-}
-
-.x-tree-noicon .x-tree-node-icon{
-	width:0; height:0;
-}
-/* loading icon */
-.x-tree-node-loading .x-tree-node-icon{
-	background-image:url(../images/default/tree/loading.gif) !important;
-}
-.x-tree-node-loading a span{
-	 font-style: italic;
-	 color:#444444;
-}
-
-/* Line styles */
-.x-tree-lines .x-tree-elbow{
-	background-image:url(../images/default/tree/elbow.gif);
-}
-.x-tree-lines .x-tree-elbow-plus{
-	background-image:url(../images/default/tree/elbow-plus.gif);
-}
-.x-tree-lines .x-tree-elbow-minus{
-	background-image:url(../images/default/tree/elbow-minus.gif);
-}
-.x-tree-lines .x-tree-elbow-end{
-	background-image:url(../images/default/tree/elbow-end.gif);
-}
-.x-tree-lines .x-tree-elbow-end-plus{
-	background-image:url(../images/default/tree/elbow-end-plus.gif);
-}
-.x-tree-lines .x-tree-elbow-end-minus{
-	background-image:url(../images/default/tree/elbow-end-minus.gif);
-}
-.x-tree-lines .x-tree-elbow-line{
-	background-image:url(../images/default/tree/elbow-line.gif);
-}
-
-/* No line styles */
-.x-tree-no-lines .x-tree-elbow{
-	background:transparent;
-}
-.x-tree-no-lines .x-tree-elbow-plus{
-	background-image:url(../images/default/tree/elbow-plus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-minus{
-	background-image:url(../images/default/tree/elbow-minus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-end{
-	background:transparent;
-}
-.x-tree-no-lines .x-tree-elbow-end-plus{
-	background-image:url(../images/default/tree/elbow-end-plus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-end-minus{
-	background-image:url(../images/default/tree/elbow-end-minus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-line{
-	background:transparent;
-}
-
-.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
-	cursor:pointer;
-}
-.ext-ie ul.x-tree-node-ct{
-    font-size:0;
-    line-height:0;
-}
-.x-tree-node{
-	color: black;
-	font: normal 11px arial, tahoma, helvetica, sans-serif;
-	white-space: nowrap;
-}
-.x-tree-node a, .x-dd-drag-ghost a{
-	text-decoration:none;
-	color:black;
-	-khtml-user-select:none;
-	-moz-user-select:none;
-    -kthml-user-focus:normal;
-    -moz-user-focus:normal;
-    -moz-outline: 0 none;
-    outline:0 none;
-}
-.x-tree-node a span, .x-dd-drag-ghost a span{
-	text-decoration:none;
-	color:black;
-	padding:1px 3px 1px 2px;
-}
-.x-tree-node .x-tree-node-disabled a span{
-	color:gray !important;
-}
-.x-tree-node .x-tree-node-disabled .x-tree-node-icon{
-	-moz-opacity: 0.5;
-   opacity:.5;
-   filter: alpha(opacity=50);
-}
-.x-tree-node .x-tree-node-inline-icon{
-	background:transparent;
-}
-.x-tree-node a:hover, .x-dd-drag-ghost a:hover{
-	text-decoration:none;
-}
-.x-tree-node div.x-tree-drag-insert-below{
- 	 border-bottom:1px dotted #3366cc;
-}
-.x-tree-node div.x-tree-drag-insert-above{
-	 border-top:1px dotted #3366cc;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{
- 	 border-bottom:0 none;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{
-	 border-top:0 none;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{
- 	 border-bottom:2px solid #3366cc;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{
-	 border-top:2px solid #3366cc;
-}
-.x-tree-node .x-tree-drag-append a span{
-	 background:#dddddd;
-	 border:1px dotted gray;
-}
-.x-tree-node .x-tree-selected a span{
-	background:#3366cc;
-	color:white;
-}
-.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{
-	display:none !important;
-}
-.x-tree-drop-ok-append .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-add.gif);
-}
-.x-tree-drop-ok-above .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-over.gif);
-}
-.x-tree-drop-ok-below .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-under.gif);
-}
-.x-tree-drop-ok-between .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-between.gif);
-}
diff --git a/lib/web/extjs/css/ytheme-aero.css b/lib/web/extjs/css/ytheme-aero.css
deleted file mode 100644
index 2e185550bfc10bdb7190b7b352a773274d037a4f..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/ytheme-aero.css
+++ /dev/null
@@ -1,701 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/* menus */
-.x-menu {
-	border: 1px solid #718bb7;
-	z-index: 15000;
-	zoom: 1;
-	background: #f0f0f0 url(../images/aero/menu/menu.gif) repeat-y;
-	padding: 2px;
-}
-
-.x-menu-list{
-	background:transparent;
-	border:0 none;
-}
-
-.x-menu-item-icon {
-	margin-right: 8px;
-}
-
-.x-menu-sep {
-	background-color:#e0e0e0;
-	border-bottom:1px solid #fff;
-	margin-left:3px;
-}
-.x-menu-item {
-	color:#222;
-}
-.x-menu-item-active {
-	color: #233d6d;
-	background: #ebf3fd url(../images/aero/menu/item-over.gif) repeat-x left bottom;
-	border:1px solid #aaccf6;
-	padding: 0;
-}
-
-.x-date-mmenu .x-menu-list{
-	padding: 0;
-}
-
-.x-date-mmenu .x-menu-list{
-	border: 0 none;
-}
-
-.x-menu .x-color-palette, .x-menu .x-date-picker{
-	margin-left: 26px;
-}
-
-.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
-	margin: 0;
-	border: 0 none;
-}
-
-
-.x-menu-check-item .x-menu-item-icon{
-	background-image: url(../images/aero/menu/unchecked.gif);
-}
-
-.x-menu-item-checked .x-menu-item-icon{
-	background-image:url(../images/aero/menu/checked.gif);
-}
-
-.x-menu-group-item .x-menu-item-icon{
-	background: transparent;
-}
-
-.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
-    background: transparent url(../images/default/menu/group-checked.gif) no-repeat center;
-}
-/**
-* Tabs
-*/
-.x-tabs-wrap, .x-layout-panel .x-tabs-top .x-tabs-wrap {
-	background: #deecfd;
-	border: 1px solid #8db2e3;
-	padding-bottom: 2px;
-	padding-top: 0;
-}
-
-.x-tabs-strip-wrap{
-	padding-top: 1px;
-	background: url(../images/aero/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom;
-	border-bottom: 1px solid #8db2e3;
-}
-
-.x-tabs-strip .x-tabs-text {
-	color: #15428b;
-	font: bold 11px tahoma,arial,verdana,sans-serif;
-}
-
-.x-tabs-strip .on .x-tabs-text {
-	cursor: default;
-	color: #15428b;
-}
-
-.x-tabs-top .x-tabs-strip .on .x-tabs-right {
-	background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right 0;
-}
-
-.x-tabs-top .x-tabs-strip .on .x-tabs-left,.x-tabs-top .x-tabs-strip .on a:hover .x-tabs-left{
-	background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-
-.x-tabs-top .x-tabs-strip .x-tabs-right {
-	background: transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-
-.x-tabs-top .x-tabs-strip .x-tabs-left {
-	background: transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-
-.x-tabs-top .x-tabs-body {
-	border: 1px solid #8db2e3;
-	border-top: 0 none;
-}
-
-.x-tabs-bottom .x-tabs-wrap, .x-layout-panel .x-tabs-bottom .x-tabs-wrap {
-	background: #deecfd;
-	border: 1px solid #8db2e3;
-	padding-top: 2px;
-	padding-bottom: 0;
-}
-
-.x-tabs-bottom .x-tabs-strip-wrap{
-	padding-top: 0;
-	padding-bottom: 1px;
-	background: url(../images/aero/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top;
-	border-top: 1px solid #8db2e3;
-	border-bottom: 0 none;
-}
-
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	background: transparent url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
-}
-
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	background: transparent url(../images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
-}
-
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right,.x-tabs-bottom .x-tabs-strip .on a:hover {
-	background: url(../images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left,.x-tabs-bottom .x-tabs-strip .on a:hover .x-tabs-left {
-	background: url(../images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tabs-bottom .x-tabs-body {
-	border: 1px solid #8db2e3;
-	border-bottom: 0 none;
-}
-
-/*
-* Basic-Dialog 
-*/
-.x-dlg-proxy {
-	background: #c7dffc;
-	border: 1px solid #a5ccf9;
-}
-
-.x-dlg-shadow{
-	background: #cccccc;
-	opacity: .3;
-	-moz-opacity: .3;
-	filter: alpha(opacity=30);
-}
-
-.x-dlg {
-	background: transparent;
-}
-
-.x-dlg .x-dlg-hd {
-	background: url(../images/aero/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color: #aabaca;
-	color: #15428b;
-	zoom: 1;
-	padding-top: 7px;
-}
-
-.x-dlg .x-dlg-hd-left {
-	opacity: .85;
-	-moz-opacity: .85;
-	filter: alpha(opacity=80);
-	background: url(../images/aero/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	zoom: 1;
-}
-
-.x-dlg-modal .x-dlg-hd-left {
-	opacity: .75;
-	-moz-opacity: .75;
-	filter: alpha(opacity=70);
-}
-
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/aero/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	zoom: 1;
-}
-
-.x-dlg .x-dlg-dlg-body{
-	padding: 0 0 0;
-	position: absolute;
-	top: 24px;
-	left: 0;
-	z-index: 1;
-	border: 0 none;
-	background: transparent;
-}
-
-.x-dlg .x-dlg-bd{
-	background: #ffffff;
-	border: 1px solid #96b9e6;
-}
-
-.x-dlg .x-dlg-ft{
-	border: 0 none;
-	background: transparent;
-	padding-bottom: 8px;
-}
-
-.x-dlg .x-dlg-bg{
-	filter: alpha(opacity=80);
-	opacity: .85;
-	-moz-opacity: .85;
-	zoom: 1;
-}
-
-.x-dlg-modal .x-dlg-bg {
-	opacity: .75;
-	-moz-opacity: .75;
-	filter: alpha(opacity=70);
-}
-
-.x-dlg .x-dlg-bg-center {
-	padding: 2px 7px 7px 7px;
-	background: transparent url(../images/aero/basic-dialog/bg-center.gif) repeat-x bottom;
-	zoom: 1;
-}
-
-.x-dlg .x-dlg-bg-left{
-	padding-left: 7px;
-	background: transparent url(../images/aero/basic-dialog/bg-left.gif) no-repeat bottom left;
-	zoom: 1;
-}
-
-.x-dlg .x-dlg-bg-right{
-	padding-right: 7px;
-	background: transparent url(../images/aero/basic-dialog/bg-right.gif) no-repeat bottom right;
-	zoom: 1;
-}
-
-.x-dlg-auto-tabs .x-dlg-dlg-body, .x-dlg-auto-layout .x-dlg-dlg-body{
-	background: transparent;
-	border: 0 none;
-}
-
-.x-dlg-auto-tabs .x-dlg-bd, .x-dlg-auto-layout .x-dlg-bd{
-	background: #ffffff;
-	border: 1px solid #e9f3f5;
-}
-
-.x-dlg-auto-tabs .x-tabs-top .x-tabs-body,.x-dlg-auto-tabs .x-tabs-bottom .x-tabs-body{
-	border-color: #8db2e3;
-}
-
-.x-dlg-auto-tabs .x-tabs-top .x-tabs-wrap,.x-dlg-auto-tabs .x-tabs-bottom .x-tabs-wrap{
-	border-color: #8db2e3;
-}
-
-.x-dlg .x-dlg-toolbox {
-	width: 50px;
-	height: 20px;
-	right: 5px;
-	top: 5px;
-}
-
-.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
-	width: 21px;
-	height: 20px;
-	margin: 0;
-}
-
-.x-dlg .x-dlg-close {
-	background-image: url(../images/aero/basic-dialog/aero-close.gif);
-}
-
-.x-dlg .x-dlg-collapse {
-	background-image: url(../images/aero/basic-dialog/collapse.gif);
-}
-
-.x-dlg-collapsed {
-	border-bottom: 1px solid #96b9e6;
-}
-
-.x-dlg .x-dlg-close-over {
-	background-image: url(../images/aero/basic-dialog/aero-close-over.gif);
-}
-
-.x-dlg .x-dlg-collapse-over {
-	background-image: url(../images/aero/basic-dialog/collapse-over.gif);
-}
-
-.x-dlg-collapsed .x-dlg-collapse {
-	background-image: url(../images/aero/basic-dialog/expand.gif);
-}
-
-.x-dlg-collapsed .x-dlg-collapse-over {
-	background-image: url(../images/aero/basic-dialog/expand-over.gif);
-}
-
-.x-dlg div.x-resizable-handle-east{
-	background-image: url(../images/aero/s.gif);
-	border: 0 none;
-}
-
-.x-dlg div.x-resizable-handle-south{
-	background-image: url(../images/aero/s.gif);
-	border: 0 none;
-}
-
-.x-dlg div.x-resizable-handle-west{
-	background-image: url(../images/aero/s.gif);
-	border: 0 none;
-}
-
-.x-dlg div.x-resizable-handle-southeast{
-	background-image: url(../images/aero/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width: 9px;
-	height: 9px;
-	border: 0;
-	right: 2px;
-	bottom: 2px;
-}
-
-.x-dlg div.x-resizable-handle-southwest{
-	background-image: url(../images/aero/s.gif);
-	background-position: top right;
-	margin-left: 1px;
-	margin-bottom: 1px;
-	border: 0;
-}
-
-.x-dlg div.x-resizable-handle-north{
-	background-image: url(../images/aero/s.gif);
-	border: 0 none;
-}
-
-#x-msg-box .x-dlg-bd{
-	background: #cfe0f5;
-	border: 0 none;
-}
-
-body.x-masked #x-msg-box .x-dlg-bd, body.x-body-masked #x-msg-box .x-dlg-bd{
-	background: #c4d2e3;
-	border: 0 none;
-}
-
-/* BorderLayout */
-.x-layout-container{
-	background: #deecfd;
-}
-
-.x-layout-collapsed{
-	background-color: #deecfd;
-	border: 1px solid #99bbe8;
-}
-
-.x-layout-collapsed-over{
-	background-color: #f5f9fe;
-}
-
-.x-layout-panel{
-	border: 1px solid #99bbe8;
-}
-
-.x-layout-nested-layout .x-layout-panel {
-	border: 0 none;
-}
-
-.x-layout-split{
-	background-color: #deecfd;
-}
-
-.x-layout-panel-hd{
-	background: url(../images/aero/grid/grid-hrow.gif) #ebeadb repeat-x;
-	border-bottom: 1px solid #99bbe8;
-}
-
-.x-layout-panel-hd-text {
-	color: #15428b;
-	font: bold 11px tahoma,arial,verdana,sans-serif;
-}
-
-.x-layout-split-h{
-	background: #deecfd;
-}
-
-.x-layout-split-v{
-	background: #deecfd;
-}
-
-.x-layout-panel .x-tabs-top .x-tabs-wrap{
-	border: 0 none;
-	border-bottom: 1px solid #8db2e3;
-}
-
-.x-layout-panel .x-tabs-bottom .x-tabs-wrap{
-	border: 0 none;
-	border-top: 1px solid #8db2e3;
-}
-
-.x-layout-nested-layout .x-layout-panel-north {
-	border-bottom: 1px solid #99bbe8;
-}
-
-.x-layout-nested-layout .x-layout-panel-south {
-	border-top: 1px solid #99bbe8;
-}
-
-.x-layout-nested-layout .x-layout-panel-east {
-	border-left: 1px solid #99bbe8;
-}
-
-.x-layout-nested-layout .x-layout-panel-west {
-	border-right: 1px solid #99bbe8;
-}
-
-.x-layout-panel-dragover {
-	border: 2px solid #99bbe8;
-}
-
-.x-layout-panel-proxy {
-	background-image: url(../images/aero/layout/gradient-bg.gif);
-	background-color: #f3f2e7;
-	border: 1px dashed #99bbe8;
-}
-
-.x-layout-container .x-layout-tabs-body{
-	border: 0 none;
-}
-
-/** Resizable */
-.x-resizable-proxy{
-	border: 1px dashed #3b5a82;
-}
-
-/* grid */
-.x-grid-hd-text {
-	color: #15428b;
-	font-weight: bold;
-}
-
-.x-grid-locked .x-grid-body td {
-	background: #fbfdff;
-	border-right: 1px solid #deecfd;
-	border-bottom: 1px solid #deecfd !important;
-}
-
-.x-grid-locked .x-grid-body td .x-grid-cell-inner {
-	border-top: 0 none;
-}
-
-.x-grid-locked .x-grid-row-alt td{
-	background: #f5fafe;
-}
-
-.x-grid-locked .x-grid-row-selected td{
-	color: #ffffff !important;
-	background-color: #316ac5 !important;
-}
-
-.x-grid-hd{
-	border-bottom: 0;
-	background: none;
-}
-
-.x-grid-hd-row{
-	height: auto;
-}
-
-.x-grid-hd-over {
-	border-bottom: 0 none;
-}
-
-.x-grid-hd-over .x-grid-hd-body{
-	background: none;
-	border-bottom: 0 none;
-}
-
-.x-grid-hd-over .x-grid-hd-body{
-	background-color: transparent;
-	border-bottom: 0;
-}
-
-.x-grid-split {
-	background-image: url(../images/aero/grid/grid-blue-split.gif);
-}
-
-.x-grid-header{
-	background: url(../images/aero/grid/grid-hrow.gif);
-	border: 0 none;
-	border-bottom: 1px solid #6f99cf;
-}
-
-.x-grid-row-alt{
-	background-color: #f5f5f5;
-}
-
-.x-grid-row-over td, .x-grid-locked .x-grid-row-over td{
-	background-color: #d9e8fb;
-}
-
-.x-grid-col {
-	border-right: 1px solid #eeeeee;
-	border-bottom: 1px solid #eeeeee;
-}
-
-.x-grid-header .x-grid-hd-inner {
-	padding-bottom: 1px;
-}
-
-.x-grid-header  .x-grid-hd-text {
-	padding-bottom: 3px;
-}
-
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #316ac5;
-	padding-bottom: 0;
-}
-
-.x-grid-hd-over .x-grid-hd-text {
-	background: #d5e4f5;
-	border-bottom: 1px solid #ffffff;
-	padding-bottom: 2px;
-}
-
-.x-grid-header .sort-asc .x-grid-hd-inner, .x-grid-header .sort-desc .x-grid-hd-inner {
-	border-bottom: 1px solid #316ac5;
-	padding-bottom: 0;
-}
-
-.x-grid-header .sort-asc  .x-grid-hd-text, .x-grid-header .sort-desc .x-grid-hd-text {
-	border-bottom: 0 none;
-	padding-bottom: 3px;
-}
-
-.x-grid-header .sort-asc .x-grid-sort-icon {
-	background-image: url(../images/aero/grid/sort_asc.gif);
-}
-
-.x-grid-header .sort-desc .x-grid-sort-icon {
-	background-image: url(../images/aero/grid/sort_desc.gif);
-}
-
-.x-dd-drag-proxy .x-grid-hd-inner{
-	background: url(../images/aero/grid/grid-hrow.gif) #ebeadb repeat-x;
-	height: 22px;
-	width: 120px;
-}
-
-.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
-	background: url(../images/aero/grid/grid-hrow.gif) #ebeadb repeat-x 0 0 !important;
-	vertical-align: middle !important;
-	color: #000000;
-	padding: 0;
-	border-top: 1px solid #ffffff;
-	border-bottom: 1px solid #6f99cf !important;
-	border-right: 1px solid #6f99cf !important;
-	text-align: center;
-}
-
-.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
-	padding: 0 4px;
-	color: #15428b !important;
-	text-align: center;
-}
-
-/** Toolbar */
-.x-toolbar{
-	padding: 2px 2px 2px 2px;
-	background: url(../images/default/toolbar/tb-bg.gif) #d0def0 repeat-x;
-}
-
-.x-toolbar .ytb-sep{
-	background-image: url(../images/aero/grid/grid-blue-split.gif);
-}
-
-.x-toolbar .x-btn-over .x-btn-left{
-	background: url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-
-.x-toolbar .x-btn-over .x-btn-right{
-	background: url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-
-.x-toolbar .x-btn-over .x-btn-center{
-	background: url(../images/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background: url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background: url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background: url(../images/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-/*************** TABS 2 *****************/
-/**
-* Tabs
-*/
-.x-tab-panel-header, .x-tab-panel-footer {
-	background: #deecfd;
-	border: 1px solid #8db2e3;
-}
-
-.x-tab-panel-header {
-	background: #deecfd;
-	border: 1px solid #8db2e3;
-	padding-bottom: 2px;
-}
-
-.x-tab-panel-footer {
-	background: #deecfd;
-	border: 1px solid #8db2e3;
-	padding-top: 2px;
-}
-
-.x-tab-strip-top{
-	padding-top: 1px;
-	background: url(../images/aero/tabs/tab-strip-bg.gif) #cedff5 repeat-x bottom;
-	border-bottom: 1px solid #8db2e3;
-}
-
-.x-tab-strip-bottom{
-	padding-bottom: 1px;
-	background: url(../images/aero/tabs/tab-strip-btm-bg.gif) #cedff5 repeat-x top;
-	border-top: 1px solid #8db2e3;
-	border-bottom: 0 none;
-}
-
-.x-tab-strip .x-tab-strip-text {
-	color: #15428b;
-	font: bold 11px tahoma,arial,verdana,sans-serif;
-}
-
-.x-tab-strip .x-tab-strip-active .x-tab-text {
-	cursor: default;
-	color: #15428b;
-}
-
-.x-tab-strip-top .x-tab-strip-active .x-tab-right {
-	background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right 0;
-}
-
-.x-tab-strip-top .x-tab-strip-active .x-tab-left {
-	background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-
-.x-tab-strip-top .x-tab-right {
-	background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-
-.x-tab-strip-top .x-tab-left {
-	background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-
-.x-tab-strip-bottom .x-tab-right {
-	background: url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
-}
-
-.x-tab-strip-bottom .x-tab-left {
-	background: url(../images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
-}
-
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-right {
-	background: url(../images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-left {
-	background: url(../images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tab-panel-body-top {
-	border: 1px solid #8db2e3;
-	border-top: 0 none;
-}
-
-.x-tab-panel-body-bottom {
-	border: 1px solid #8db2e3;
-	border-bottom: 0 none;
-}
diff --git a/lib/web/extjs/css/ytheme-gray.css b/lib/web/extjs/css/ytheme-gray.css
deleted file mode 100644
index bc054ed51defca23284dcf015460a7477cc4e331..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/ytheme-gray.css
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-.ext-el-mask-msg {
-    border:1px solid #aaa;
-    background: #ddd url(../images/default/box/tb.gif) repeat-x 0 -16px;
-}
-.ext-el-mask-msg div {
-    border:1px solid #ccc;
-}
-
-/*
- Menu
- */
-.x-menu {
-	border-color: #999 #999 #999 #999;
-    background-image:url(../images/gray/menu/menu.gif);
-}
-.x-menu-item-arrow{
-	background-image:url(../images/gray/menu/menu-parent.gif);
-}
-.x-menu-item {
-	color:#222;
-}
-.x-menu-item-active {
-	background:#ddd;
-    border:1px solid #aaa;
-}
-.x-menu-sep {
-	background:#aaa;
-}
-
-/* grid */
-.x-grid-header{
-	background: #ebeadb url(../images/gray/grid/grid-hrow.gif) repeat-x;
-	overflow:hidden;
-	position:relative;
-	cursor:default;
-	width:100%;
-}
-.x-grid-hd-row{
-	height:22px;
-}
-.x-grid-hd {
-	padding-right:1px;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #fcc247;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background: #faf9f4;
-    padding-bottom:1px;
-    border-bottom: 1px solid #f9a900;
-}
-
-.x-grid-hd-text {
-	color:#000000;
-}
-
-.x-grid-col {
-	border-right: 1px solid #f1efe2;
-	border-bottom: 1px solid #f1efe2;
-}
-.x-grid-row-alt{
-	background:#fcfaf6;
-}
-.x-grid-row-over td{
-	background:#f1f1f1;
-}
-
-
-.x-grid-locked .x-grid-body td {
-	background: #f0efe4;
-	border-right: 1px solid #D6D2C2;
-	border-bottom: 1px solid #D6D2C2 !important;
-}
-
-.x-grid-locked .x-grid-header table{
-    border-right:1px solid transparent;
-}
-.x-grid-locked .x-grid-body table{
-    border-right:1px solid #c6c2b2;
-}
-
-.x-grid-bottombar .x-toolbar{
-	border-right:0 none;
-	border-bottom:0 none;
-	border-top:1px solid #f1efe2;
-}
-
-.x-props-grid .x-grid-col-name{
-	 background-color: #f1efe2;
-}
-
-
-
-.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
-    background: #ebeadb url(../images/gray/grid/grid-hrow.gif) repeat-x 0 bottom !important;
-    vertical-align:middle !important;
-    color:black;
-    padding:0;
-    border-top:1px solid white;
-    border-bottom:none !important;
-    border-right:1px solid #d6d2c2 !important;
-    text-align:center;
-}
-.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
-    padding:0 4px;
-    color:black !important;
-    text-align:center;
-}
-
-/**
-* Basic-Dialog 
-*/
-.x-dlg-proxy {
-	background-image: url(../images/gray/layout/gradient-bg.gif);
-	background-color:#EAE8D5;
-	border:1px solid #b3b6b0;
-}
-.x-dlg-shadow{
-	background:#aaaaaa;
-}
-.x-dlg-proxy .tabset{
-    background:url(../images/gray/layout/gradient-bg.gif);
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/gray/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:#333333;
-}
-.x-dlg .x-dlg-hd-left {
-	background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat right 0;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:#efefec;
-	border:1px solid #b3b6b0;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:1px solid #b3b6b0;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #b3b6b0;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .x-dlg-close {
-	background-image:url(../images/gray/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/gray/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/gray/basic-dialog/expand.gif);
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/gray/basic-dialog/e-handle.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/gray/basic-dialog/s-handle.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/gray/basic-dialog/e-handle.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/gray/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/gray/sizer/sw-handle-dark.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/gray/s.gif);
-	border:0 none;
-}
-
-/** 
-* Tabs
-*/
-.x-tabs-wrap {
-	border-bottom:1px solid #aca899;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#333333;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -100px;
-}
-.x-tabs-top .x-tabs-strip .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-top .x-tabs-strip .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -150px;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	background-image:url(../images/gray/layout/tab-close.gif);
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/gray/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/gray/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #aca899;
-    border-top:0 none;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-bottom:0 none;
-	padding-top:0;
-	border-top:1px solid #aca899;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #aca899;
-    border-bottom:0 none;
-}
-
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-/* QuickTips */
-
-.x-tip .x-tip-top {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-left {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-right {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-left {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-right {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-left {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-right {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-
-/* BorderLayout */
-
-.x-layout-container{
-    background-color:#f3f2e7;
-}
-.x-layout-collapsed{
-    background-color:#f3f2e7;
-	 border:1px solid #aca899;
-}
-.x-layout-collapsed-over{
-	 background-color:#fbfbef;
-}
-.x-layout-panel{
-    border:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-split{
-    background-color:#f3f2e7;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/gray/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #aca899;
-}
-.x-layout-tools-button-over{
-    border:1px solid #aca899;
-}
-.x-layout-close{
-    background-image:url(../images/gray/layout/panel-close.gif);
-}
-.x-layout-stick{
-    background-image:url(../images/gray/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/gray/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/gray/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/gray/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/gray/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background-image:url(../images/gray/sizer/e-handle-dark.gif);
-}
-.x-layout-split-v{
-    background-image:url(../images/gray/sizer/s-handle-dark.gif);
-}
-.x-layout-panel .x-tabs-wrap{
-    background:url(../images/gray/layout/gradient-bg.gif);
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #aca899;
-}
-.x-layout-panel-dragover {
-	border: 2px solid #aca899;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/gray/layout/gradient-bg.gif);
-	background-color:#f3f2e7;
-	border:1px dashed #aca899;
-}
-/** Resizable */
-
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/gray/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/gray/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/gray/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/gray/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/gray/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/gray/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/gray/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/gray/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #615e55;
-}
-
-/** Toolbar */
-.x-toolbar{
-	border:0 none;
-	background: #efefe3 url(../images/gray/toolbar/gray-bg.gif) repeat-x;
-	padding:3px;
-}
-.x-toolbar .x-btn-over .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/gray/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/gray/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/gray/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
-	background-position: 0 -47px;
-}
-.x-paging-info {
-    color:#222222;
-}
-
-/* combo box */
-.x-combo-list {
-    border:1px solid #999;
-    background:#dddddd;
-}
-.x-combo-list-hd {
-    color:#222;
-    background-image: url(../images/gray/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #aca899;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #aaa;
-}
-.x-combo-list .x-combo-selected{
-	background:#ddd !important;
-    border:1px solid #aaa;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/css/ytheme-vista.css b/lib/web/extjs/css/ytheme-vista.css
deleted file mode 100644
index 0055ff50fb5650f6f34275ac45c0b2ec049ce6bb..0000000000000000000000000000000000000000
--- a/lib/web/extjs/css/ytheme-vista.css
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Ext JS Library 2.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.ext-el-mask-msg {
-    border:1px solid #aaa;
-    background: #ddd url(../images/default/box/tb.gif) repeat-x 0 -16px;
-}
-.ext-el-mask-msg div {
-    border:1px solid #ccc;
-}
-/*
- Menu
- */
-.x-menu {
-	border-color: #999 #999 #999 #999;
-    background-image:url(../images/gray/menu/menu.gif);
-}
-.x-menu-item-arrow{
-	background-image:url(../images/gray/menu/menu-parent.gif);
-}
-.x-menu-item {
-	color:#222;
-}
-.x-menu-item-active {
-	background:#ddd;
-    border:1px solid #aaa;
-}
-.x-menu-sep {
-	background:#aaa;
-}
-/** 
-* Tabs
-*/
-.x-tabs-wrap {
-	background:#4f4f4f;
-	border-bottom:1px solid #b3b6b0;
-}
-.x-tabs-strip .x-tabs-text {
-	color:white;
-	font-weight:normal;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#333333;
-}
-.x-tabs-top .x-tabs-strip a.x-tabs-right {
-	background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-top .x-tabs-strip a .x-tabs-left{
-	background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat 0px -150px;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/vista/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-left{
-	 background: url(../images/vista/tabs/tab-sprite.gif) no-repeat 0px -100px;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	background-image:url(../images/vista/layout/tab-close.gif);
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/vista/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/vista/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #b3b6b0;
-    border-top:0 none;
-}
-
-.x-tabs-bottom .x-tabs-strip {
-	background:#4f4f4f;
-}
-.x-tabs-bottom .x-tabs-strip a.x-tabs-right {
-	background:transparent url(../images/vista/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip a .x-tabs-left{
-	background:transparent url(../images/vista/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-bottom:0 none;
-	padding-top:0;
-	border-top:1px solid #b3b6b0;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/vista/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/vista/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #b3b6b0;
-    border-bottom:0 none;
-}
-/**
-* Basic-Dialog 
-*/
-.x-dlg-proxy {
-	background:#d3d6d0;
-	border:2px solid #b3b6b0;
-}
-.x-dlg-shadow{
-	background:#cccccc;
-   opacity:.3;
-   -moz-opacity:.3;
-   filter: alpha(opacity=30);
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/vista/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:#333333;
-	zoom:1;
-}
-.x-dlg .x-dlg-hd-left {
-	opacity:.95;-moz-opacity:.95;filter:alpha(opacity=90);
-	background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	zoom:1;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	zoom:1;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:#fff;
-	border:0 none;
-	border-top:0 none;
-	padding:0 0px 0px;
-	position:absolute;
-	top:24px;left:0;
-	z-index:1;
-}
-.x-dlg-auto-tabs .x-dlg-dlg-body{
-	background:transparent;
-}
-.x-dlg-auto-tabs .x-tabs-top .x-tabs-wrap{
-	background:transparent;
-}
-.x-dlg .x-dlg-ft{
-	border-top:1px solid #b3b6b0;
-	background:#F0F0F0;
-	padding-bottom:8px;
-}
-.x-dlg .x-dlg-bg{
-	opacity:.90;-moz-opacity:.90;filter:alpha(opacity=85);
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-left,.x-dlg .x-dlg-bg-center,.x-dlg .x-dlg-bg-right{
-}
-.x-dlg .x-dlg-bg-center {
-	padding: 0px 4px 4px 4px;
-	background:transparent url(../images/vista/basic-dialog/bg-center.gif) repeat-x bottom;
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-left{
-	padding-left:4px;
-	background:transparent url(../images/vista/basic-dialog/bg-left.gif) no-repeat bottom left;
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-right{
-	padding-right:4px;
-	background:transparent url(../images/vista/basic-dialog/bg-right.gif) no-repeat bottom right;
-	zoom:1;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #b3b6b0;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .x-dlg-close {
-    background-image:url(../images/vista/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/vista/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/vista/basic-dialog/expand.gif);
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/vista/s.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/vista/s.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-
-/* QuickTips */
-
-.x-tip .x-tip-top {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-left {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-right {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-left {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-right {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-left {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-right {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-
-.x-tip .x-tip-bd-inner {
-    padding:2px;
-}
-
-/* BorderLayout */
-.x-layout-container{
-    background:#4f4f4f;
-}
-.x-layout-collapsed{
-    background-color:#9f9f9f;
-	 border:1px solid #4c535c;
-}
-.x-layout-collapsed-over{
-	 background-color:#bfbfbf;
-}
-.x-layout-panel{
-    border:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-split{
-    background-color:#f3f2e7;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/vista/layout/panel-title-bg.gif);
-    border-bottom:1px solid #b5bac1;
-    color:white;
-}
-.x-layout-panel-hd-text{
-	color:white;
-}
-.x-layout-tools-button-over{
-    border:1px solid #4c535c;
-	 background:#9f9f9f url(../images/vista/layout/panel-title-bg.gif) repeat-x;
-}
-.x-layout-close{
-    background-image:url(../images/vista/layout/tab-close.gif);
-}
-
-.x-layout-stick{
-    background-image:url(../images/vista/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/vista/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/vista/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/vista/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/vista/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background:#9f9f9f;
-}
-.x-layout-split-v{
-    background:#9f9f9f;
-}
-.x-layout-panel .x-tabs-wrap{
-    background:#4f4f4f;
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #4c535c;
-}
-.x-layout-panel-dragover {
-	border: 2px solid #4c535c;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/vista/layout/gradient-bg.gif);
-	background-color:#f3f2e7;
-	border:1px dashed #4c535c;
-}
-
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-/** Resizable */
-
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/vista/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/vista/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/vista/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/vista/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/vista/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/vista/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/vista/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/vista/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #615e55;
-}
-
-/** Toolbar */
-.x-toolbar{
-	border:0 none;
-	background: #efefe3 url(../images/vista/toolbar/gray-bg.gif) repeat-x;
-	padding:3px;
-}
-.x-toolbar .ytb-button-over{
-	border:1px solid transparent;
-	border-bottom:1px solid #bbbbbb;
-	border-top:1px solid #eeeeee;
-	background:#9f9f9f url(../images/vista/grid/grid-vista-hd.gif) repeat-x;
-}
-
-.x-paging-info {
-    color:#000;
-}
-/* grid */
-.x-grid-topbar .x-toolbar{
-	border:0;
-	border-bottom:1px solid #555;
-}
-.x-grid-bottombar .x-toolbar{
-	border:0;
-	border-top:1px solid #555;
-}
-.x-grid-locked .x-grid-body td {
-	background: #fafafa;
-	border-right: 1px solid #e1e1e1;
-	border-bottom: 1px solid #e1e1e1 !important;
-}
-.x-grid-locked .x-grid-body td .x-grid-cell-inner {
-	border-top:0 none;
-}
-.x-grid-locked .x-grid-row-alt td{
-	background: #f1f1f1;
-}
-.x-grid-locked .x-grid-row-selected td{
-	color: #fff !important;
-	background-color: #316ac5 !important;
-}
-.x-grid-hd{
-	border-bottom:0;
-	background:none;
-}
-.x-grid-hd-row{
-	height:auto;
-}
-.x-grid-split {
-	background-image: url(../images/vista/grid/grid-split.gif);
-}
-.x-grid-header{
-	background: url(../images/vista/grid/grid-vista-hd.gif);
-	border:0 none;
-    border-bottom:1px solid #555;
-}
-.x-grid-row-alt{
-	background-color: #f5f5f5;
-}
-.x-grid-row-over td{
-	background-color:#eeeeee;
-}
-.x-grid-col {
-	border-right: 1px solid #eee;
-	border-bottom: 1px solid #eee;
-}
-.x-grid-header .x-grid-hd-inner {
-	padding-bottom: 1px;
-}
-.x-grid-header  .x-grid-hd-text {
-	padding-bottom: 3px;
-    color:#333333;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #555;
-	padding-bottom: 0;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background-color: #fafafa;
-	border-bottom: 1px solid #555;
-	padding-bottom: 2px;
-}
-.x-grid-header .sort-asc .x-grid-hd-inner, .x-grid-header .sort-desc .x-grid-hd-inner {
-	border-bottom: 1px solid #555;
-	padding-bottom: 0;
-}
-.x-grid-header .sort-asc  .x-grid-hd-text, .x-grid-header .sort-desc .x-grid-hd-text {
-	border-bottom: 1px solid #3b5a82;
-	padding-bottom: 2px;
-}
-.x-dd-drag-proxy .x-grid-hd-inner{
-	background: url(../images/vista/grid/grid-vista-hd.gif) repeat-x;
-	height:22px;
-	width:120px;
-}
-.x-props-grid .x-grid-col-name{
-	 background-color: #eee;
-}
-/* toolbar */
-.x-toolbar .ytb-sep{
-	background-image: url(../images/vista/grid/grid-split.gif);
-}
-
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 0px;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-/* combo box */
-.x-combo-list {
-    border:1px solid #999;
-    background:#dddddd;
-}
-.x-combo-list-hd {
-    background-image: url(../images/vista/layout/panel-title-bg.gif);
-    border-bottom:1px solid #b5bac1;
-    color:white;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #aaa;
-}
-.x-combo-list .x-combo-selected{
-	background:#ddd !important;
-    border:1px solid #aaa;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/defaults.js b/lib/web/extjs/defaults.js
new file mode 100644
index 0000000000000000000000000000000000000000..5203e1a6fe27a74342b9d23a2faf56f39263654a
--- /dev/null
+++ b/lib/web/extjs/defaults.js
@@ -0,0 +1,4 @@
+define(['extjs/ext-tree'], function () {
+    Ext.UpdateManager.defaults.loadScripts = false;
+    Ext.UpdateManager.defaults.disableCaching = true;
+});
\ No newline at end of file
diff --git a/lib/web/extjs/ext-all-debug.js b/lib/web/extjs/ext-all-debug.js
deleted file mode 100644
index df06b46f615a543710f210cdf96ed9e03081d3cc..0000000000000000000000000000000000000000
--- a/lib/web/extjs/ext-all-debug.js
+++ /dev/null
@@ -1,30066 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://www.extjs.com/license
- */
-
-
-Ext.DomHelper = function(){
-    var tempTableEl = null;
-    var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
-
-    // build as innerHTML where available
-
-    var createHtml = function(o){
-        if(typeof o == 'string'){
-            return o;
-        }
-        var b = "";
-        if(!o.tag){
-            o.tag = "div";
-        }
-        b += "<" + o.tag;
-        for(var attr in o){
-            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue;
-            if(attr == "style"){
-                var s = o["style"];
-                if(typeof s == "function"){
-                    s = s.call();
-                }
-                if(typeof s == "string"){
-                    b += ' style="' + s + '"';
-                }else if(typeof s == "object"){
-                    b += ' style="';
-                    for(var key in s){
-                        if(typeof s[key] != "function"){
-                            b += key + ":" + s[key] + ";";
-                        }
-                    }
-                    b += '"';
-                }
-            }else{
-                if(attr == "cls"){
-                    b += ' class="' + o["cls"] + '"';
-                }else if(attr == "htmlFor"){
-                    b += ' for="' + o["htmlFor"] + '"';
-                }else{
-                    b += " " + attr + '="' + o[attr] + '"';
-                }
-            }
-        }
-        if(emptyTags.test(o.tag)){
-            b += "/>";
-        }else{
-            b += ">";
-            var cn = o.children || o.cn;
-            if(cn){
-                if(cn instanceof Array){
-                    for(var i = 0, len = cn.length; i < len; i++) {
-                        b += createHtml(cn[i], b);
-                    }
-                }else{
-                    b += createHtml(cn, b);
-                }
-            }
-            if(o.html){
-                b += o.html;
-            }
-            b += "</" + o.tag + ">";
-        }
-        return b;
-    };
-
-    // build as dom
-
-    var createDom = function(o, parentNode){
-        var el = document.createElement(o.tag);
-        var useSet = el.setAttribute ? true : false; // In IE some elements don't have setAttribute
-        for(var attr in o){
-            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue;
-            if(attr=="cls"){
-                el.className = o["cls"];
-            }else{
-                if(useSet) el.setAttribute(attr, o[attr]);
-                else el[attr] = o[attr];
-            }
-        }
-        Ext.DomHelper.applyStyles(el, o.style);
-        var cn = o.children || o.cn;
-        if(cn){
-            if(cn instanceof Array){
-                for(var i = 0, len = cn.length; i < len; i++) {
-                    createDom(cn[i], el);
-                }
-            }else{
-                createDom(cn, el);
-            }
-        }
-        if(o.html){
-            el.innerHTML = o.html;
-        }
-        if(parentNode){
-           parentNode.appendChild(el);
-        }
-        return el;
-    };
-
-    var ieTable = function(depth, s, h, e){
-        tempTableEl.innerHTML = [s, h, e].join('');
-        var i = -1, el = tempTableEl;
-        while(++i < depth){
-            el = el.firstChild;
-        }
-        return el;
-    };
-
-    // kill repeat to save bytes
-    var ts = '<table>',
-        te = '</table>',
-        tbs = ts+'<tbody>',
-        tbe = '</tbody>'+te,
-        trs = tbs + '<tr>',
-        tre = '</tr>'+tbe;
-
-
-    var insertIntoTable = function(tag, where, el, html){
-        if(!tempTableEl){
-            tempTableEl = document.createElement('div');
-        }
-        var node;
-        var before = null;
-        if(tag == 'td'){
-            if(where == 'afterbegin' || where == 'beforeend'){ // INTO a TD
-                return;
-            }
-            if(where == 'beforebegin'){
-                before = el;
-                el = el.parentNode;
-            } else{
-                before = el.nextSibling;
-                el = el.parentNode;
-            }
-            node = ieTable(4, trs, html, tre);
-        }
-        else if(tag == 'tr'){
-            if(where == 'beforebegin'){
-                before = el;
-                el = el.parentNode;
-                node = ieTable(3, tbs, html, tbe);
-            } else if(where == 'afterend'){
-                before = el.nextSibling;
-                el = el.parentNode;
-                node = ieTable(3, tbs, html, tbe);
-            } else{ // INTO a TR
-                if(where == 'afterbegin'){
-                    before = el.firstChild;
-                }
-                node = ieTable(4, trs, html, tre);
-            }
-        } else if(tag == 'tbody'){
-            if(where == 'beforebegin'){
-                before = el;
-                el = el.parentNode;
-                node = ieTable(2, ts, html, te);
-            } else if(where == 'afterend'){
-                before = el.nextSibling;
-                el = el.parentNode;
-                node = ieTable(2, ts, html, te);
-            } else{
-                if(where == 'afterbegin'){
-                    before = el.firstChild;
-                }
-                node = ieTable(3, tbs, html, tbe);
-            }
-        } else{ // TABLE
-            if(where == 'beforebegin' || where == 'afterend'){ // OUTSIDE the table
-                return;
-            }
-            if(where == 'afterbegin'){
-                before = el.firstChild;
-            }
-            node = ieTable(2, ts, html, te);
-        }
-        el.insertBefore(node, before);
-        return node;
-    };
-
-    return {
-
-    useDom : false,
-
-
-    markup : function(o){
-        return createHtml(o);
-    },
-
-
-    applyStyles : function(el, styles){
-        if(styles){
-           el = Ext.fly(el);
-           if(typeof styles == "string"){
-               var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
-               var matches;
-               while ((matches = re.exec(styles)) != null){
-                   el.setStyle(matches[1], matches[2]);
-               }
-           }else if (typeof styles == "object"){
-               for (var style in styles){
-                  el.setStyle(style, styles[style]);
-               }
-           }else if (typeof styles == "function"){
-                Ext.DomHelper.applyStyles(el, styles.call());
-           }
-        }
-    },
-
-
-    insertHtml : function(where, el, html){
-        where = where.toLowerCase();
-        if(el.insertAdjacentHTML){
-            var tag = el.tagName.toLowerCase();
-            if(tag == "table" || tag == "tbody" || tag == "tr" || tag == 'td'){
-                var rs;
-                if(rs = insertIntoTable(tag, where, el, html)){
-                    return rs;
-                }
-            }
-            switch(where){
-                case "beforebegin":
-                    el.insertAdjacentHTML(where, html);
-                    return el.previousSibling;
-                case "afterbegin":
-                    el.insertAdjacentHTML(where, html);
-                    return el.firstChild;
-                case "beforeend":
-                    el.insertAdjacentHTML(where, html);
-                    return el.lastChild;
-                case "afterend":
-                    el.insertAdjacentHTML(where, html);
-                    return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-        }
-        var range = el.ownerDocument.createRange();
-        var frag;
-        switch(where){
-             case "beforebegin":
-                range.setStartBefore(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el);
-                return el.previousSibling;
-             case "afterbegin":
-                if(el.firstChild){
-                    range.setStartBefore(el.firstChild);
-                    frag = range.createContextualFragment(html);
-                    el.insertBefore(frag, el.firstChild);
-                    return el.firstChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.firstChild;
-                }
-            case "beforeend":
-                if(el.lastChild){
-                    range.setStartAfter(el.lastChild);
-                    frag = range.createContextualFragment(html);
-                    el.appendChild(frag);
-                    return el.lastChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.lastChild;
-                }
-            case "afterend":
-                range.setStartAfter(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el.nextSibling);
-                return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-    },
-
-
-    insertBefore : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "beforeBegin");
-    },
-
-
-    insertAfter : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
-    },
-
-
-    insertFirst : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterBegin");
-    },
-
-    // private
-    doInsert : function(el, o, returnElement, pos, sibling){
-        el = Ext.getDom(el);
-        var newNode;
-        if(this.useDom){
-            newNode = createDom(o, null);
-            el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml(pos, el, html);
-        }
-        return returnElement ? Ext.get(newNode, true) : newNode;
-    },
-
-
-    append : function(el, o, returnElement){
-        el = Ext.getDom(el);
-        var newNode;
-        if(this.useDom){
-            newNode = createDom(o, null);
-            el.appendChild(newNode);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml("beforeEnd", el, html);
-        }
-        return returnElement ? Ext.get(newNode, true) : newNode;
-    },
-
-
-    overwrite : function(el, o, returnElement){
-        el = Ext.getDom(el);
-        el.innerHTML = createHtml(o);
-        return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
-    },
-
-
-    createTemplate : function(o){
-        var html = createHtml(o);
-        return new Ext.Template(html);
-    }
-    };
-}();
-
-
-Ext.Template = function(html){
-    if(html instanceof Array){
-        html = html.join("");
-    }else if(arguments.length > 1){
-        html = Array.prototype.join.call(arguments, "");
-    }
-
-    this.html = html;
-
-};
-Ext.Template.prototype = {
-
-    applyTemplate : function(values){
-        if(this.compiled){
-            return this.compiled(values);
-        }
-        var useF = this.disableFormats !== true;
-        var fm = Ext.util.Format, tpl = this;
-        var fn = function(m, name, format, args){
-            if(format && useF){
-                if(format.substr(0, 5) == "this."){
-                    return tpl.call(format.substr(5), values[name], values);
-                }else{
-                    if(args){
-                        // quoted values are required for strings in compiled templates,
-                        // but for non compiled we need to strip them
-                        // quoted reversed for jsmin
-                        var re = /^\s*['"](.*)["']\s*$/;
-                        args = args.split(',');
-                        for(var i = 0, len = args.length; i < len; i++){
-                            args[i] = args[i].replace(re, "$1");
-                        }
-                        args = [values[name]].concat(args);
-                    }else{
-                        args = [values[name]];
-                    }
-                    return fm[format].apply(fm, args);
-                }
-            }else{
-                return values[name] !== undefined ? values[name] : "";
-            }
-        };
-        return this.html.replace(this.re, fn);
-    },
-
-
-    set : function(html, compile){
-        this.html = html;
-        this.compiled = null;
-        if(compile){
-            this.compile();
-        }
-        return this;
-    },
-
-
-    disableFormats : false,
-
-
-    re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
-
-
-    compile : function(){
-        var fm = Ext.util.Format;
-        var useF = this.disableFormats !== true;
-        var sep = Ext.isGecko ? "+" : ",";
-        var fn = function(m, name, format, args){
-            if(format && useF){
-                args = args ? ',' + args : "";
-                if(format.substr(0, 5) != "this."){
-                    format = "fm." + format + '(';
-                }else{
-                    format = 'this.call("'+ format.substr(5) + '", ';
-                    args = ", values";
-                }
-            }else{
-                args= ''; format = "(values['" + name + "'] == undefined ? '' : ";
-            }
-            return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";
-        };
-        var body;
-        // branched to use + in gecko and [].join() in others
-        if(Ext.isGecko){
-            body = "this.compiled = function(values){ return '" +
-                   this.html.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +
-                    "';};";
-        }else{
-            body = ["this.compiled = function(values){ return ['"];
-            body.push(this.html.replace(/(\r\n|\n)/g, '\\n').replace("'", "\\'").replace(this.re, fn));
-            body.push("'].join('');};");
-            body = body.join('');
-        }
-        eval(body);
-        return this;
-    },
-
-    // private function used to call members
-    call : function(fnName, value, allValues){
-        return this[fnName](value, allValues);
-    },
-
-
-    insertFirst: function(el, values, returnElement){
-        return this.doInsert('afterBegin', el, values, returnElement);
-    },
-
-
-    insertBefore: function(el, values, returnElement){
-        return this.doInsert('beforeBegin', el, values, returnElement);
-    },
-
-
-    insertAfter : function(el, values, returnElement){
-        return this.doInsert('afterEnd', el, values, returnElement);
-    },
-
-
-    append : function(el, values, returnElement){
-        return this.doInsert('beforeEnd', el, values, returnElement);
-    },
-
-    doInsert : function(where, el, values, returnEl){
-        el = Ext.getDom(el);
-        var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values));
-        return returnEl ? Ext.get(newNode, true) : newNode;
-    },
-
-
-    overwrite : function(el, values, returnElement){
-        el = Ext.getDom(el);
-        el.innerHTML = this.applyTemplate(values);
-        return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
-    }
-};
-
-Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;
-
-// backwards compat
-Ext.DomHelper.Template = Ext.Template;
-
-
-Ext.Template.from = function(el){
-    el = Ext.getDom(el);
-    return new Ext.Template(el.value || el.innerHTML);
-};
-
-
-Ext.MasterTemplate = function(){
-    Ext.MasterTemplate.superclass.constructor.apply(this, arguments);
-    this.originalHtml = this.html;
-    var st = {};
-    var m, re = this.subTemplateRe;
-    re.lastIndex = 0;
-    var subIndex = 0;
-    while(m = re.exec(this.html)){
-        var name = m[1], content = m[2];
-        st[subIndex] = {
-            name: name,
-            index: subIndex,
-            buffer: [],
-            tpl : new Ext.Template(content)
-        };
-        if(name){
-            st[name] = st[subIndex];
-        }
-        st[subIndex].tpl.compile();
-        st[subIndex].tpl.call = this.call.createDelegate(this);
-        subIndex++;
-    }
-    this.subCount = subIndex;
-    this.subs = st;
-};
-Ext.extend(Ext.MasterTemplate, Ext.Template, {
-
-    subTemplateRe : /<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,
-
-
-     add : function(name, values){
-        if(arguments.length == 1){
-            values = arguments[0];
-            name = 0;
-        }
-        var s = this.subs[name];
-        s.buffer[s.buffer.length] = s.tpl.apply(values);
-        return this;
-    },
-
-
-    fill : function(name, values, reset){
-        var a = arguments;
-        if(a.length == 1 || (a.length == 2 && typeof a[1] == "boolean")){
-            values = a[0];
-            name = 0;
-            reset = a[1];
-        }
-        if(reset){
-            this.reset();
-        }
-        for(var i = 0, len = values.length; i < len; i++){
-            this.add(name, values[i]);
-        }
-        return this;
-    },
-
-
-     reset : function(){
-        var s = this.subs;
-        for(var i = 0; i < this.subCount; i++){
-            s[i].buffer = [];
-        }
-        return this;
-    },
-
-    applyTemplate : function(values){
-        var s = this.subs;
-        var replaceIndex = -1;
-        this.html = this.originalHtml.replace(this.subTemplateRe, function(m, name){
-            return s[++replaceIndex].buffer.join("");
-        });
-        return Ext.MasterTemplate.superclass.applyTemplate.call(this, values);
-    },
-
-    apply : function(){
-        return this.applyTemplate.apply(this, arguments);
-    },
-
-    compile : function(){return this;}
-});
-
-
-Ext.MasterTemplate.prototype.addAll = Ext.MasterTemplate.prototype.fill;
-
-Ext.MasterTemplate.from = function(el){
-    el = Ext.getDom(el);
-    return new Ext.MasterTemplate(el.value || el.innerHTML);
-};
-
-
-Ext.DomQuery = function(){
-    var cache = {}, simpleCache = {}, valueCache = {};
-    var nonSpace = /\S/;
-    var trimRe = /^\s+|\s+$/g;
-    var tplRe = /\{(\d+)\}/g;
-    var modeRe = /^(\s?[\/>]\s?|\s|$)/;
-    var tagTokenRe = /^(#)?([\w-\*]+)/;
-
-    function child(p, index){
-        var i = 0;
-        var n = p.firstChild;
-        while(n){
-            if(n.nodeType == 1){
-               if(++i == index){
-                   return n;
-               }
-            }
-            n = n.nextSibling;
-        }
-        return null;
-    };
-
-    function next(n){
-        while((n = n.nextSibling) && n.nodeType != 1);
-        return n;
-    };
-
-    function prev(n){
-        while((n = n.previousSibling) && n.nodeType != 1);
-        return n;
-    };
-
-    function clean(d){
-        var n = d.firstChild, ni = -1;
- 	    while(n){
- 	        var nx = n.nextSibling;
- 	        if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
- 	            d.removeChild(n);
- 	        }else{
- 	            n.nodeIndex = ++ni;
- 	        }
- 	        n = nx;
- 	    }
- 	    return this;
- 	};
-
-    function byClassName(c, a, v, re, cn){
-        if(!v){
-            return c;
-        }
-        var r = [];
-        for(var i = 0, ci; ci = c[i]; i++){
-            cn = ci.className;
-            if(cn && (' '+cn+' ').indexOf(v) != -1){
-                r[r.length] = ci;
-            }
-        }
-        return r;
-    };
-
-    function attrValue(n, attr){
-        if(!n.tagName && typeof n.length != "undefined"){
-            n = n[0];
-        }
-        if(!n){
-            return null;
-        }
-        if(attr == "for"){
-            return n.htmlFor;
-        }
-        if(attr == "class" || attr == "className"){
-            return n.className;
-        }
-        return n.getAttribute(attr) || n[attr];
-
-    };
-
-    function getNodes(ns, mode, tagName){
-        var result = [], cs;
-        if(!ns){
-            return result;
-        }
-        mode = mode ? mode.replace(trimRe, "") : "";
-        tagName = tagName || "*";
-        if(typeof ns.getElementsByTagName != "undefined"){
-            ns = [ns];
-        }
-        if(mode != "/" && mode != ">"){
-            for(var i = 0, ni; ni = ns[i]; i++){
-                cs = ni.getElementsByTagName(tagName);
-                for(var j = 0, ci; ci = cs[j]; j++){
-                    result[result.length] = ci;
-                }
-            }
-        }else{
-            for(var i = 0, ni; ni = ns[i]; i++){
-                var cn = ni.getElementsByTagName(tagName);
-                for(var j = 0, cj; cj = cn[j]; j++){
-                    if(cj.parentNode == ni){
-                        result[result.length] = cj;
-                    }
-                }
-            }
-        }
-        return result;
-    };
-
-    function concat(a, b){
-        if(b.slice){
-            return a.concat(b);
-        }
-        for(var i = 0, l = b.length; i < l; i++){
-            a[a.length] = b[i];
-        }
-        return a;
-    }
-
-    function byTag(cs, tagName){
-        if(cs.tagName || cs == document){
-            cs = [cs];
-        }
-        if(!tagName){
-            return cs;
-        }
-        var r = []; tagName = tagName.toLowerCase();
-        for(var i = 0, ci; ci = cs[i]; i++){
-            if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
-                r[r.length] = ci;
-            }
-        }
-        return r;
-    };
-
-    function byId(cs, attr, id){
-        if(cs.tagName || cs == document){
-            cs = [cs];
-        }
-        if(!id){
-            return cs;
-        }
-        var r = [];
-        for(var i = 0,ci; ci = cs[i]; i++){
-            if(ci && ci.id == id){
-                r[r.length] = ci;
-                return r;
-            }
-        }
-        return r;
-    };
-
-    function byAttribute(cs, attr, value, op, custom){
-        var r = [], st = custom=="{";
-        var f = Ext.DomQuery.operators[op];
-        for(var i = 0; ci = cs[i]; i++){
-            var a;
-            if(st){
-                a = Ext.DomQuery.getStyle(ci, attr);
-            }
-            else if(attr == "class" || attr == "className"){
-                a = ci.className;
-            }else if(attr == "for"){
-                a = ci.htmlFor;
-            }else if(attr == "href"){
-                a = ci.getAttribute("href", 2);
-            }else{
-                a = ci.getAttribute(attr);
-            }
-            if((f && f(a, value)) || (!f && a)){
-                r[r.length] = ci;
-            }
-        }
-        return r;
-    };
-
-    function byPseudo(cs, name, value){
-        return Ext.DomQuery.pseudos[name](cs, value);
-    };
-
-    // This is for IE MSXML which does not support expandos.
-    // IE runs the same speed using setAttribute, however FF slows way down
-    // and Safari completely fails so they need to continue to use expandos.
-    var isIE = window.ActiveXObject ? true : false;
-
-    var key = 30803;
-
-    function nodupIEXml(cs){
-        var d = ++key;
-        cs[0].setAttribute("_nodup", d);
-        var r = [cs[0]];
-        for(var i = 1, len = cs.length; i < len; i++){
-            var c = cs[i];
-            if(!c.getAttribute("_nodup") != d){
-                c.setAttribute("_nodup", d);
-                r[r.length] = c;
-            }
-        }
-        for(var i = 0, len = cs.length; i < len; i++){
-            cs[i].removeAttribute("_nodup");
-        }
-        return r;
-    }
-
-    function nodup(cs){
-        if(!cs){
-            return [];
-        }
-        var len = cs.length, c, i, r = cs, cj;
-        if(!len || typeof cs.nodeType != "undefined" || len == 1){
-            return cs;
-        }
-        if(isIE && typeof cs[0].selectSingleNode != "undefined"){
-            return nodupIEXml(cs);
-        }
-        var d = ++key;
-        cs[0]._nodup = d;
-        for(i = 1; c = cs[i]; i++){
-            if(c._nodup != d){
-                c._nodup = d;
-            }else{
-                r = [];
-                for(var j = 0; j < i; j++){
-                    r[r.length] = cs[j];
-                }
-                for(j = i+1; cj = cs[j]; j++){
-                    if(cj._nodup != d){
-                        cj._nodup = d;
-                        r[r.length] = cj;
-                    }
-                }
-                return r;
-            }
-        }
-        return r;
-    }
-
-    function quickDiffIEXml(c1, c2){
-        var d = ++key;
-        for(var i = 0, len = c1.length; i < len; i++){
-            c1[i].setAttribute("_qdiff", d);
-        }
-        var r = [];
-        for(var i = 0, len = c2.length; i < len; i++){
-            if(c2[i].getAttribute("_qdiff") != d){
-                r[r.length] = c2[i];
-            }
-        }
-        for(var i = 0, len = c1.length; i < len; i++){
-           c1[i].removeAttribute("_qdiff");
-        }
-        return r;
-    }
-
-    function quickDiff(c1, c2){
-        var len1 = c1.length;
-        if(!len1){
-            return c2;
-        }
-        if(isIE && c1[0].selectSingleNode){
-            return quickDiffIEXml(c1, c2);
-        }
-        var d = ++key;
-        for(var i = 0; i < len1; i++){
-            c1[i]._qdiff = d;
-        }
-        var r = [];
-        for(var i = 0, len = c2.length; i < len; i++){
-            if(c2[i]._qdiff != d){
-                r[r.length] = c2[i];
-            }
-        }
-        return r;
-    }
-
-    function quickId(ns, mode, root, id){
-        if(ns == root){
-           var d = root.ownerDocument || root;
-           return d.getElementById(id);
-        }
-        ns = getNodes(ns, mode, "*");
-        return byId(ns, null, id);
-    }
-
-    return {
-        getStyle : function(el, name){
-            return Ext.fly(el).getStyle(name);
-        },
-
-        compile : function(path, type){
-            type = type || "select";
-
-            var fn = ["var f = function(root){\n var mode; var n = root || document;\n"];
-            var q = path, mode, lq;
-            var tk = Ext.DomQuery.matchers;
-            var tklen = tk.length;
-            var mm;
-
-            // accept leading mode switch
-            var lmode = q.match(modeRe);
-            if(lmode && lmode[1]){
-                fn[fn.length] = 'mode="'+lmode[1]+'";';
-                q = q.replace(lmode[1], "");
-            }
-            // strip leading slashes
-            while(path.substr(0, 1)=="/"){
-                path = path.substr(1);
-            }
-
-            while(q && lq != q){
-                lq = q;
-                var tm = q.match(tagTokenRe);
-                if(type == "select"){
-                    if(tm){
-                        if(tm[1] == "#"){
-                            fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
-                        }else{
-                            fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
-                        }
-                        q = q.replace(tm[0], "");
-                    }else if(q.substr(0, 1) != '@'){
-                        fn[fn.length] = 'n = getNodes(n, mode, "*");';
-                    }
-                }else{
-                    if(tm){
-                        if(tm[1] == "#"){
-                            fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
-                        }else{
-                            fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
-                        }
-                        q = q.replace(tm[0], "");
-                    }
-                }
-                while(!(mm = q.match(modeRe))){
-                    var matched = false;
-                    for(var j = 0; j < tklen; j++){
-                        var t = tk[j];
-                        var m = q.match(t.re);
-                        if(m){
-                            fn[fn.length] = t.select.replace(tplRe, function(x, i){
-                                                    return m[i];
-                                                });
-                            q = q.replace(m[0], "");
-                            matched = true;
-                            break;
-                        }
-                    }
-                    // prevent infinite loop on bad selector
-                    if(!matched){
-                        throw 'Error parsing selector, parsing failed at "' + q + '"';
-                    }
-                }
-                if(mm[1]){
-                    fn[fn.length] = 'mode="'+mm[1]+'";';
-                    q = q.replace(mm[1], "");
-                }
-            }
-            fn[fn.length] = "return nodup(n);\n}";
-            eval(fn.join(""));
-            return f;
-        },
-
-
-        select : function(path, root, type){
-            if(!root || root == document){
-                root = document;
-            }
-            if(typeof root == "string"){
-                root = document.getElementById(root);
-            }
-            var paths = path.split(",");
-            var results = [];
-            for(var i = 0, len = paths.length; i < len; i++){
-                var p = paths[i].replace(trimRe, "");
-                if(!cache[p]){
-                    cache[p] = Ext.DomQuery.compile(p);
-                    if(!cache[p]){
-                        throw p + " is not a valid selector";
-                    }
-                }
-                var result = cache[p](root);
-                if(result && result != document){
-                    results = results.concat(result);
-                }
-            }
-            return results;
-        },
-
-
-        selectNode : function(path, root){
-            return Ext.DomQuery.select(path, root)[0];
-        },
-
-
-        selectValue : function(path, root, defaultValue){
-            path = path.replace(trimRe, "");
-            if(!valueCache[path]){
-                valueCache[path] = Ext.DomQuery.compile(path, "select");
-            }
-            var n = valueCache[path](root);
-            n = n[0] ? n[0] : n;
-            var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
-            return (v === null ? defaultValue : v);
-        },
-
-
-        selectNumber : function(path, root, defaultValue){
-            var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
-            return parseFloat(v);
-        },
-
-
-        is : function(el, ss){
-            if(typeof el == "string"){
-                el = document.getElementById(el);
-            }
-            var isArray = (el instanceof Array);
-            var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
-            return isArray ? (result.length == el.length) : (result.length > 0);
-        },
-
-
-        filter : function(els, ss, nonMatches){
-            ss = ss.replace(trimRe, "");
-            if(!simpleCache[ss]){
-                simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
-            }
-            var result = simpleCache[ss](els);
-            return nonMatches ? quickDiff(result, els) : result;
-        },
-
-
-        matchers : [{
-                re: /^\.([\w-]+)/,
-                select: 'n = byClassName(n, null, " {1} ");'
-            }, {
-                re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
-                select: 'n = byPseudo(n, "{1}", "{2}");'
-            },{
-                re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
-                select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
-            }, {
-                re: /^#([\w-]+)/,
-                select: 'n = byId(n, null, "{1}");'
-            },{
-                re: /^@([\w-]+)/,
-                select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
-            }
-        ],
-
-
-        operators : {
-            "=" : function(a, v){
-                return a == v;
-            },
-            "!=" : function(a, v){
-                return a != v;
-            },
-            "^=" : function(a, v){
-                return a && a.substr(0, v.length) == v;
-            },
-            "$=" : function(a, v){
-                return a && a.substr(a.length-v.length) == v;
-            },
-            "*=" : function(a, v){
-                return a && a.indexOf(v) !== -1;
-            },
-            "%=" : function(a, v){
-                return (a % v) == 0;
-            }
-        },
-
-
-        pseudos : {
-            "first-child" : function(c){
-                var r = [], n;
-                for(var i = 0, ci; ci = n = c[i]; i++){
-                    while((n = n.previousSibling) && n.nodeType != 1);
-                    if(!n){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "last-child" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = n = c[i]; i++){
-                    while((n = n.nextSibling) && n.nodeType != 1);
-                    if(!n){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "nth-child" : function(c, a){
-                var r = [];
-                if(a != "odd" && a != "even"){
-                    for(var i = 0, ci; ci = c[i]; i++){
-                        var m = child(ci.parentNode, a);
-                        if(m == ci){
-                            r[r.length] = m;
-                        }
-                    }
-                    return r;
-                }
-                var p;
-                // first let's clean up the parent nodes
-                for(var i = 0, l = c.length; i < l; i++){
-                    var cp = c[i].parentNode;
-                    if(cp != p){
-                        clean(cp);
-                        p = cp;
-                    }
-                }
-                // then lets see if we match
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var m = false;
-                    if(a == "odd"){
-                        m = ((ci.nodeIndex+1) % 2 == 1);
-                    }else if(a == "even"){
-                        m = ((ci.nodeIndex+1) % 2 == 0);
-                    }
-                    if(m){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "only-child" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(!prev(ci) && !next(ci)){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "empty" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var cns = ci.childNodes, j = 0, cn, empty = true;
-                    while(cn = cns[j]){
-                        ++j;
-                        if(cn.nodeType == 1 || cn.nodeType == 3){
-                            empty = false;
-                            break;
-                        }
-                    }
-                    if(empty){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "contains" : function(c, v){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(ci.innerHTML.indexOf(v) !== -1){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "nodeValue" : function(c, v){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(ci.firstChild && ci.firstChild.nodeValue == v){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "checked" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(ci.checked == true){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "not" : function(c, ss){
-                return Ext.DomQuery.filter(c, ss, true);
-            },
-
-            "odd" : function(c){
-                return this["nth-child"](c, "odd");
-            },
-
-            "even" : function(c){
-                return this["nth-child"](c, "even");
-            },
-
-            "nth" : function(c, a){
-                return c[a-1] || [];
-            },
-
-            "first" : function(c){
-                return c[0] || [];
-            },
-
-            "last" : function(c){
-                return c[c.length-1] || [];
-            },
-
-            "has" : function(c, ss){
-                var s = Ext.DomQuery.select;
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(s(ss, ci).length > 0){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "next" : function(c, ss){
-                var is = Ext.DomQuery.is;
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var n = next(ci);
-                    if(n && is(n, ss)){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "prev" : function(c, ss){
-                var is = Ext.DomQuery.is;
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var n = prev(ci);
-                    if(n && is(n, ss)){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            }
-        }
-    };
-}();
-
-
-Ext.query = Ext.DomQuery.select;
-
-
-Ext.util.Observable = function(){
-    if(this.listeners){
-        this.on(this.listeners);
-        delete this.listeners;
-    }
-};
-Ext.util.Observable.prototype = {
-
-    fireEvent : function(){
-        var ce = this.events[arguments[0].toLowerCase()];
-        if(typeof ce == "object"){
-            return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
-        }else{
-            return true;
-        }
-    },
-
-    // private
-    filterOptRe : /^(?:scope|delay|buffer|single)$/,
-
-
-    addListener : function(eventName, fn, scope, o){
-        if(typeof eventName == "object"){
-            o = eventName;
-            for(var e in o){
-                if(this.filterOptRe.test(e)){
-                    continue;
-                }
-                if(typeof o[e] == "function"){
-                    // shared options
-                    this.addListener(e, o[e], o.scope,  o);
-                }else{
-                    // individual options
-                    this.addListener(e, o[e].fn, o[e].scope, o[e]);
-                }
-            }
-            return;
-        }
-        o = (!o || typeof o == "boolean") ? {} : o;
-        eventName = eventName.toLowerCase();
-        var ce = this.events[eventName] || true;
-        if(typeof ce == "boolean"){
-            ce = new Ext.util.Event(this, eventName);
-            this.events[eventName] = ce;
-        }
-        ce.addListener(fn, scope, o);
-    },
-
-
-    removeListener : function(eventName, fn, scope){
-        var ce = this.events[eventName.toLowerCase()];
-        if(typeof ce == "object"){
-            ce.removeListener(fn, scope);
-        }
-    },
-
-
-    purgeListeners : function(){
-        for(var evt in this.events){
-            if(typeof this.events[evt] == "object"){
-                 this.events[evt].clearListeners();
-            }
-        }
-    },
-
-    relayEvents : function(o, events){
-        var createHandler = function(ename){
-            return function(){
-                return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0)));
-            };
-        };
-        for(var i = 0, len = events.length; i < len; i++){
-            var ename = events[i];
-            if(!this.events[ename]){ this.events[ename] = true; };
-            o.on(ename, createHandler(ename), this);
-        }
-    },
-
-
-    addEvents : function(o){
-        if(!this.events){
-            this.events = {};
-        }
-        Ext.applyIf(this.events, o);
-    },
-
-
-    hasListener : function(eventName){
-        var e = this.events[eventName];
-        return typeof e == "object" && e.listeners.length > 0;
-    }
-};
-
-Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
-
-Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
-
-
-Ext.util.Observable.capture = function(o, fn, scope){
-    o.fireEvent = o.fireEvent.createInterceptor(fn, scope);
-};
-
-
-Ext.util.Observable.releaseCapture = function(o){
-    o.fireEvent = Ext.util.Observable.prototype.fireEvent;
-};
-
-(function(){
-
-    var createBuffered = function(h, o, scope){
-        var task = new Ext.util.DelayedTask();
-        return function(){
-            task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));
-        };
-    };
-
-    var createSingle = function(h, e, fn, scope){
-        return function(){
-            e.removeListener(fn, scope);
-            return h.apply(scope, arguments);
-        };
-    };
-
-    var createDelayed = function(h, o, scope){
-        return function(){
-            var args = Array.prototype.slice.call(arguments, 0);
-            setTimeout(function(){
-                h.apply(scope, args);
-            }, o.delay || 10);
-        };
-    };
-
-    Ext.util.Event = function(obj, name){
-        this.name = name;
-        this.obj = obj;
-        this.listeners = [];
-    };
-
-    Ext.util.Event.prototype = {
-        addListener : function(fn, scope, options){
-            var o = options || {};
-            scope = scope || this.obj;
-            if(!this.isListening(fn, scope)){
-                var l = {fn: fn, scope: scope, options: o};
-                var h = fn;
-                if(o.delay){
-                    h = createDelayed(h, o, scope);
-                }
-                if(o.single){
-                    h = createSingle(h, this, fn, scope);
-                }
-                if(o.buffer){
-                    h = createBuffered(h, o, scope);
-                }
-                l.fireFn = h;
-                if(!this.firing){ // if we are currently firing this event, don't disturb the listener loop
-                    this.listeners.push(l);
-                }else{
-                    this.listeners = this.listeners.slice(0);
-                    this.listeners.push(l);
-                }
-            }
-        },
-
-        findListener : function(fn, scope){
-            scope = scope || this.obj;
-            var ls = this.listeners;
-            for(var i = 0, len = ls.length; i < len; i++){
-                var l = ls[i];
-                if(l.fn == fn && l.scope == scope){
-                    return i;
-                }
-            }
-            return -1;
-        },
-
-        isListening : function(fn, scope){
-            return this.findListener(fn, scope) != -1;
-        },
-
-        removeListener : function(fn, scope){
-            var index;
-            if((index = this.findListener(fn, scope)) != -1){
-                if(!this.firing){
-                    this.listeners.splice(index, 1);
-                }else{
-                    this.listeners = this.listeners.slice(0);
-                    this.listeners.splice(index, 1);
-                }
-                return true;
-            }
-            return false;
-        },
-
-        clearListeners : function(){
-            this.listeners = [];
-        },
-
-        fire : function(){
-            var ls = this.listeners, scope, len = ls.length;
-            if(len > 0){
-                this.firing = true;
-                var args = Array.prototype.slice.call(arguments, 0);
-                for(var i = 0; i < len; i++){
-                    var l = ls[i];
-                    if(l.fireFn.apply(l.scope, arguments) === false){
-                        this.firing = false;
-                        return false;
-                    }
-                }
-                this.firing = false;
-            }
-            return true;
-        }
-    };
-})();
-
-Ext.EventManager = function(){
-    var docReadyEvent, docReadyProcId, docReadyState = false;
-    var resizeEvent, resizeTask, textEvent, textSize;
-    var E = Ext.lib.Event;
-    var D = Ext.lib.Dom;
-
-
-    var fireDocReady = function(){
-        if(!docReadyState){
-            docReadyState = true;
-            Ext.isReady = true;
-            if(docReadyProcId){
-                clearInterval(docReadyProcId);
-            }
-            if(Ext.isGecko || Ext.isOpera) {
-                document.removeEventListener("DOMContentLoaded", fireDocReady, false);
-            }
-            if(docReadyEvent){
-                docReadyEvent.fire();
-                docReadyEvent.clearListeners();
-            }
-        }
-    };
-
-    var initDocReady = function(){
-        docReadyEvent = new Ext.util.Event();
-        if(Ext.isGecko || Ext.isOpera) {
-            document.addEventListener("DOMContentLoaded", fireDocReady, false);
-        }else if(Ext.isIE){
-            // inspired by  http://www.thefutureoftheweb.com/blog/2006/6/adddomloadevent
-            document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
-            var defer = document.getElementById("ie-deferred-loader");
-            defer.onreadystatechange = function(){
-                if(this.readyState == "complete"){
-                    fireDocReady();
-                    defer.onreadystatechange = null;
-                    defer.parentNode.removeChild(defer);
-                }
-            };
-        }else if(Ext.isSafari){
-            docReadyProcId = setInterval(function(){
-                var rs = document.readyState;
-                if(rs == "complete") {
-                    fireDocReady();
-                 }
-            }, 10);
-        }
-        // no matter what, make sure it fires on load
-        E.on(window, "load", fireDocReady);
-    };
-
-    var createBuffered = function(h, o){
-        var task = new Ext.util.DelayedTask(h);
-        return function(e){
-            // create new event object impl so new events don't wipe out properties
-            e = new Ext.EventObjectImpl(e);
-            task.delay(o.buffer, h, null, [e]);
-        };
-    };
-
-    var createSingle = function(h, el, ename, fn){
-        return function(e){
-            Ext.EventManager.removeListener(el, ename, fn);
-            h(e);
-        };
-    };
-
-    var createDelayed = function(h, o){
-        return function(e){
-            // create new event object impl so new events don't wipe out properties
-            e = new Ext.EventObjectImpl(e);
-            setTimeout(function(){
-                h(e);
-            }, o.delay || 10);
-        };
-    };
-
-    var listen = function(element, ename, opt, fn, scope){
-        var o = (!opt || typeof opt == "boolean") ? {} : opt;
-        fn = fn || o.fn; scope = scope || o.scope;
-        var el = Ext.getDom(element);
-        if(!el){
-            throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';
-        }
-        var h = function(e){
-            e = Ext.EventObject.setEvent(e);
-            var t;
-            if(o.delegate){
-                t = e.getTarget(o.delegate, el);
-                if(!t){
-                    return;
-                }
-            }else{
-                t = e.target;
-            }
-            if(o.stopEvent === true){
-                e.stopEvent();
-            }
-            if(o.preventDefault === true){
-               e.preventDefault();
-            }
-            if(o.stopPropagation === true){
-                e.stopPropagation();
-            }
-
-            if(o.normalized === false){
-                e = e.browserEvent;
-            }
-
-            fn.call(scope || el, e, t, o);
-        };
-        if(o.delay){
-            h = createDelayed(h, o);
-        }
-        if(o.single){
-            h = createSingle(h, el, ename, fn);
-        }
-        if(o.buffer){
-            h = createBuffered(h, o);
-        }
-        fn._handlers = fn._handlers || [];
-        fn._handlers.push([Ext.id(el), ename, h]);
-
-        E.on(el, ename, h);
-        if(ename == "mousewheel" && el.addEventListener){ // workaround for jQuery
-            el.addEventListener("DOMMouseScroll", h, false);
-            E.on(window, 'unload', function(){
-                el.removeEventListener("DOMMouseScroll", h, false);
-            });
-        }
-        if(ename == "mousedown" && el == document){ // fix stopped mousedowns on the document
-            Ext.EventManager.stoppedMouseDownEvent.addListener(h);
-        }
-        return h;
-    };
-
-    var stopListening = function(el, ename, fn){
-        var id = Ext.id(el), hds = fn._handlers, hd = fn;
-        if(hds){
-            for(var i = 0, len = hds.length; i < len; i++){
-                var h = hds[i];
-                if(h[0] == id && h[1] == ename){
-                    hd = h[2];
-                    hds.splice(i, 1);
-                    break;
-                }
-            }
-        }
-        E.un(el, ename, hd);
-        el = Ext.getDom(el);
-        if(ename == "mousewheel" && el.addEventListener){
-            el.removeEventListener("DOMMouseScroll", hd, false);
-        }
-        if(ename == "mousedown" && el == document){ // fix stopped mousedowns on the document
-            Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);
-        }
-    };
-
-    var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized)$/;
-    var pub = {
-
-
-        wrap : function(fn, scope, override){
-            return function(e){
-                Ext.EventObject.setEvent(e);
-                fn.call(override ? scope || window : window, Ext.EventObject, scope);
-            };
-        },
-
-
-        addListener : function(element, eventName, fn, scope, options){
-            if(typeof eventName == "object"){
-                var o = eventName;
-                for(var e in o){
-                    if(propRe.test(e)){
-                        continue;
-                    }
-                    if(typeof o[e] == "function"){
-                        // shared options
-                        listen(element, e, o, o[e], o.scope);
-                    }else{
-                        // individual options
-                        listen(element, e, o[e]);
-                    }
-                }
-                return;
-            }
-            return listen(element, eventName, options, fn, scope);
-        },
-
-
-        removeListener : function(element, eventName, fn){
-            return stopListening(element, eventName, fn);
-        },
-
-
-        onDocumentReady : function(fn, scope, options){
-            if(docReadyState){ // if it already fired
-                fn.call(scope || window, scope);
-                return;
-            }
-            if(!docReadyEvent){
-                initDocReady();
-            }
-            docReadyEvent.addListener(fn, scope, options);
-        },
-
-
-        onWindowResize : function(fn, scope, options){
-            if(!resizeEvent){
-                resizeEvent = new Ext.util.Event();
-                resizeTask = new Ext.util.DelayedTask(function(){
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                });
-                E.on(window, "resize", function(){
-                    if(Ext.isIE){
-                        resizeTask.delay(50);
-                    }else{
-                        resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                    }
-                });
-            }
-            resizeEvent.addListener(fn, scope, options);
-        },
-
-
-        onTextResize : function(fn, scope, options){
-            if(!textEvent){
-                textEvent = new Ext.util.Event();
-                var textEl = new Ext.Element(document.createElement('div'));
-                textEl.dom.className = 'x-text-resize';
-                textEl.dom.innerHTML = 'X';
-                textEl.appendTo(document.body);
-                textSize = textEl.dom.offsetHeight;
-                setInterval(function(){
-                    if(textEl.dom.offsetHeight != textSize){
-                        textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
-                    }
-                }, this.textResizeInterval);
-            }
-            textEvent.addListener(fn, scope, options);
-        },
-
-
-        removeResizeListener : function(fn, scope){
-            if(resizeEvent){
-                resizeEvent.removeListener(fn, scope);
-            }
-        },
-
-        fireResize : function(){
-            if(resizeEvent){
-                resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-            }
-        },
-
-        ieDeferSrc : false,
-        textResizeInterval : 50
-    };
-
-    pub.on = pub.addListener;
-    pub.un = pub.removeListener;
-
-    pub.stoppedMouseDownEvent = new Ext.util.Event();
-    return pub;
-}();
-
-Ext.onReady = Ext.EventManager.onDocumentReady;
-
-Ext.onReady(function(){
-    var bd = Ext.get(document.body);
-    if(!bd){ return; }
-    var cls = Ext.isIE ? "ext-ie"
-            : Ext.isGecko ? "ext-gecko"
-            : Ext.isOpera ? "ext-opera"
-            : Ext.isSafari ? "ext-safari" : "";
-    if(Ext.isBorderBox){
-        cls += ' ext-border-box';
-    }
-    if(Ext.isStrict){
-        cls += ' ext-strict';
-    }
-    bd.addClass(cls);
-});
-
-Ext.EventObject = function(){
-
-    var E = Ext.lib.Event;
-
-    // safari keypress events for special keys return bad keycodes
-    var safariKeys = {
-        63234 : 37, // left
-        63235 : 39, // right
-        63232 : 38, // up
-        63233 : 40, // down
-        63276 : 33, // page up
-        63277 : 34, // page down
-        63272 : 46, // delete
-        63273 : 36, // home
-        63275 : 35  // end
-    };
-
-    // normalize button clicks
-    var btnMap = Ext.isIE ? {1:0,4:1,2:2} :
-                (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
-
-    Ext.EventObjectImpl = function(e){
-        if(e){
-            this.setEvent(e.browserEvent || e);
-        }
-    };
-    Ext.EventObjectImpl.prototype = {
-
-        browserEvent : null,
-
-        button : -1,
-
-        shiftKey : false,
-
-        ctrlKey : false,
-
-        altKey : false,
-
-
-        BACKSPACE : 8,
-
-        TAB : 9,
-
-        RETURN : 13,
-
-        ENTER : 13,
-
-        SHIFT : 16,
-
-        CONTROL : 17,
-
-        ESC : 27,
-
-        SPACE : 32,
-
-        PAGEUP : 33,
-
-        PAGEDOWN : 34,
-
-        END : 35,
-
-        HOME : 36,
-
-        LEFT : 37,
-
-        UP : 38,
-
-        RIGHT : 39,
-
-        DOWN : 40,
-
-        DELETE : 46,
-
-        F5 : 116,
-
-
-        setEvent : function(e){
-            if(e == this || (e && e.browserEvent)){ // already wrapped
-                return e;
-            }
-            this.browserEvent = e;
-            if(e){
-                // normalize buttons
-                this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);
-                if(e.type == 'click' && this.button == -1){
-                    this.button = 0;
-                }
-                this.shiftKey = e.shiftKey;
-                // mac metaKey behaves like ctrlKey
-                this.ctrlKey = e.ctrlKey || e.metaKey;
-                this.altKey = e.altKey;
-                // in getKey these will be normalized for the mac
-                this.keyCode = e.keyCode;
-                this.charCode = e.charCode;
-                // cache the target for the delayed and or buffered events
-                this.target = E.getTarget(e);
-                // same for XY
-                this.xy = E.getXY(e);
-            }else{
-                this.button = -1;
-                this.shiftKey = false;
-                this.ctrlKey = false;
-                this.altKey = false;
-                this.keyCode = 0;
-                this.charCode =0;
-                this.target = null;
-                this.xy = [0, 0];
-            }
-            return this;
-        },
-
-
-        stopEvent : function(){
-            if(this.browserEvent){
-                if(this.browserEvent.type == 'mousedown'){
-                    Ext.EventManager.stoppedMouseDownEvent.fire(this);
-                }
-                E.stopEvent(this.browserEvent);
-            }
-        },
-
-
-        preventDefault : function(){
-            if(this.browserEvent){
-                E.preventDefault(this.browserEvent);
-            }
-        },
-
-
-        isNavKeyPress : function(){
-            var k = this.keyCode;
-            k = Ext.isSafari ? (safariKeys[k] || k) : k;
-            return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC;
-        },
-
-        isSpecialKey : function(){
-            var k = this.keyCode;
-            return k == 9 || k == 13  || k == 40 || k == 27 ||
-            (k == 16) || (k == 17) ||
-            (k >= 18 && k <= 20) ||
-            (k >= 33 && k <= 35) ||
-            (k >= 36 && k <= 39) ||
-            (k >= 44 && k <= 45);
-        },
-
-        stopPropagation : function(){
-            if(this.browserEvent){
-                if(this.browserEvent.type == 'mousedown'){
-                    Ext.EventManager.stoppedMouseDownEvent.fire(this);
-                }
-                E.stopPropagation(this.browserEvent);
-            }
-        },
-
-
-        getCharCode : function(){
-            return this.charCode || this.keyCode;
-        },
-
-
-        getKey : function(){
-            var k = this.keyCode || this.charCode;
-            return Ext.isSafari ? (safariKeys[k] || k) : k;
-        },
-
-
-        getPageX : function(){
-            return this.xy[0];
-        },
-
-
-        getPageY : function(){
-            return this.xy[1];
-        },
-
-
-        getTime : function(){
-            if(this.browserEvent){
-                return E.getTime(this.browserEvent);
-            }
-            return null;
-        },
-
-
-        getXY : function(){
-            return this.xy;
-        },
-
-
-        getTarget : function(selector, maxDepth, returnEl){
-            return selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : this.target;
-        },
-
-        getRelatedTarget : function(){
-            if(this.browserEvent){
-                return E.getRelatedTarget(this.browserEvent);
-            }
-            return null;
-        },
-
-
-        getWheelDelta : function(){
-            var e = this.browserEvent;
-            var delta = 0;
-            if(e.wheelDelta){
-                delta = e.wheelDelta/120;
-
-                if(window.opera) delta = -delta;
-            }else if(e.detail){
-                delta = -e.detail/3;
-            }
-            return delta;
-        },
-
-
-        hasModifier : function(){
-            return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true : false;
-        },
-
-
-        within : function(el, related){
-            var t = this[related ? "getRelatedTarget" : "getTarget"]();
-            return t && Ext.fly(el).contains(t);
-        },
-
-        getPoint : function(){
-            return new Ext.lib.Point(this.xy[0], this.xy[1]);
-        }
-    };
-
-    return new Ext.EventObjectImpl();
-}();
-
-
-
-(function(){
-var D = Ext.lib.Dom;
-var E = Ext.lib.Event;
-var A = Ext.lib.Anim;
-
-// local style camelizing for speed
-var propCache = {};
-var camelRe = /(-[a-z])/gi;
-var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
-var view = document.defaultView;
-
-Ext.Element = function(element, forceNew){
-    var dom = typeof element == "string" ?
-            document.getElementById(element) : element;
-    if(!dom){ // invalid id/element
-        return null;
-    }
-    if(!forceNew && Ext.Element.cache[dom.id]){ // element object already exists
-        return Ext.Element.cache[dom.id];
-    }
-
-    this.dom = dom;
-
-
-    this.id = dom.id || Ext.id(dom);
-};
-
-var El = Ext.Element;
-
-El.prototype = {
-
-    originalDisplay : "",
-
-    visibilityMode : 1,
-
-    defaultUnit : "px",
-
-    setVisibilityMode : function(visMode){
-        this.visibilityMode = visMode;
-        return this;
-    },
-
-    enableDisplayMode : function(display){
-        this.setVisibilityMode(El.DISPLAY);
-        if(typeof display != "undefined") this.originalDisplay = display;
-        return this;
-    },
-
-
-    findParent : function(simpleSelector, maxDepth, returnEl){
-        var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl;
-        maxDepth = maxDepth || 50;
-        if(typeof maxDepth != "number"){
-            stopEl = Ext.getDom(maxDepth);
-            maxDepth = 10;
-        }
-        while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){
-            if(dq.is(p, simpleSelector)){
-                return returnEl ? Ext.get(p) : p;
-            }
-            depth++;
-            p = p.parentNode;
-        }
-        return null;
-    },
-
-
-
-    findParentNode : function(simpleSelector, maxDepth, returnEl){
-        var p = Ext.fly(this.dom.parentNode, '_internal');
-        return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null;
-    },
-
-
-    up : function(simpleSelector, maxDepth){
-        return this.findParentNode(simpleSelector, maxDepth, true);
-    },
-
-
-
-
-    is : function(simpleSelector){
-        return Ext.DomQuery.is(this.dom, simpleSelector);
-    },
-
-
-    animate : function(args, duration, onComplete, easing, animType){
-        this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType);
-        return this;
-    },
-
-
-    anim : function(args, opt, animType, defaultDur, defaultEase, cb){
-        animType = animType || 'run';
-        opt = opt || {};
-        var anim = Ext.lib.Anim[animType](
-            this.dom, args,
-            (opt.duration || defaultDur) || .35,
-            (opt.easing || defaultEase) || 'easeOut',
-            function(){
-                Ext.callback(cb, this);
-                Ext.callback(opt.callback, opt.scope || this, [this, opt]);
-            },
-            this
-        );
-        opt.anim = anim;
-        return anim;
-    },
-
-    // private legacy anim prep
-    preanim : function(a, i){
-        return !a[i] ? false : (typeof a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});
-    },
-
-
-    clean : function(forceReclean){
-        if(this.isCleaned && forceReclean !== true){
-            return this;
-        }
-        var ns = /\S/;
-        var d = this.dom, n = d.firstChild, ni = -1;
- 	    while(n){
- 	        var nx = n.nextSibling;
- 	        if(n.nodeType == 3 && !ns.test(n.nodeValue)){
- 	            d.removeChild(n);
- 	        }else{
- 	            n.nodeIndex = ++ni;
- 	        }
- 	        n = nx;
- 	    }
- 	    this.isCleaned = true;
- 	    return this;
- 	},
-
-    // private
-    calcOffsetsTo : function(el){
-        el = Ext.get(el);
-        var d = el.dom;
-        var restorePos = false;
-        if(el.getStyle('position') == 'static'){
-            el.position('relative');
-            restorePos = true;
-        }
-        var x = 0, y =0;
-        var op = this.dom;
-        while(op && op != d && op.tagName != 'HTML'){
-            x+= op.offsetLeft;
-            y+= op.offsetTop;
-            op = op.offsetParent;
-        }
-        if(restorePos){
-            el.position('static');
-        }
-        return [x, y];
-    },
-
-
-    scrollIntoView : function(container, hscroll){
-        var c = Ext.getDom(container) || document.body;
-        var el = this.dom;
-
-        var o = this.calcOffsetsTo(c),
-            l = o[0],
-            t = o[1],
-            b = t+el.offsetHeight,
-            r = l+el.offsetWidth;
-
-        var ch = c.clientHeight;
-        var ct = parseInt(c.scrollTop, 10);
-        var cl = parseInt(c.scrollLeft, 10);
-        var cb = ct + ch;
-        var cr = cl + c.clientWidth;
-
-        if(t < ct){
-        	c.scrollTop = t;
-        }else if(b > cb){
-            c.scrollTop = b-ch;
-        }
-
-        if(hscroll !== false){
-            if(l < cl){
-                c.scrollLeft = l;
-            }else if(r > cr){
-                c.scrollLeft = r-c.clientWidth;
-            }
-        }
-        return this;
-    },
-
-    // private
-    scrollChildIntoView : function(child, hscroll){
-        Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll);
-    },
-
-
-    autoHeight : function(animate, duration, onComplete, easing){
-        var oldHeight = this.getHeight();
-        this.clip();
-        this.setHeight(1); // force clipping
-        setTimeout(function(){
-            var height = parseInt(this.dom.scrollHeight, 10); // parseInt for Safari
-            if(!animate){
-                this.setHeight(height);
-                this.unclip();
-                if(typeof onComplete == "function"){
-                    onComplete();
-                }
-            }else{
-                this.setHeight(oldHeight); // restore original height
-                this.setHeight(height, animate, duration, function(){
-                    this.unclip();
-                    if(typeof onComplete == "function") onComplete();
-                }.createDelegate(this), easing);
-            }
-        }.createDelegate(this), 0);
-        return this;
-    },
-
-
-    contains : function(el){
-        if(!el){return false;}
-        return D.isAncestor(this.dom, el.dom ? el.dom : el);
-    },
-
-
-    isVisible : function(deep) {
-        var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
-        if(deep !== true || !vis){
-            return vis;
-        }
-        var p = this.dom.parentNode;
-        while(p && p.tagName.toLowerCase() != "body"){
-            if(!Ext.fly(p, '_isVisible').isVisible()){
-                return false;
-            }
-            p = p.parentNode;
-        }
-        return true;
-    },
-
-
-    select : function(selector, unique){
-        return El.select(selector, unique, this.dom);
-    },
-
-
-    query : function(selector, unique){
-        return Ext.DomQuery.select(selector, this.dom);
-    },
-
-
-    child : function(selector, returnDom){
-        var n = Ext.DomQuery.selectNode(selector, this.dom);
-        return returnDom ? n : Ext.get(n);
-    },
-
-
-    down : function(selector, returnDom){
-        var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);
-        return returnDom ? n : Ext.get(n);
-    },
-
-
-    initDD : function(group, config, overrides){
-        var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);
-        return Ext.apply(dd, overrides);
-    },
-
-
-    initDDProxy : function(group, config, overrides){
-        var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);
-        return Ext.apply(dd, overrides);
-    },
-
-
-    initDDTarget : function(group, config, overrides){
-        var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);
-        return Ext.apply(dd, overrides);
-    },
-
-
-     setVisible : function(visible, animate){
-        if(!animate || !A){
-            if(this.visibilityMode == El.DISPLAY){
-                this.setDisplayed(visible);
-            }else{
-                this.fixDisplay();
-                this.dom.style.visibility = visible ? "visible" : "hidden";
-            }
-        }else{
-            // closure for composites
-            var dom = this.dom;
-            var visMode = this.visibilityMode;
-            if(visible){
-                this.setOpacity(.01);
-                this.setVisible(true);
-            }
-            this.anim({opacity: { to: (visible?1:0) }},
-                  this.preanim(arguments, 1),
-                  null, .35, 'easeIn', function(){
-                     if(!visible){
-                         if(visMode == El.DISPLAY){
-                             dom.style.display = "none";
-                         }else{
-                             dom.style.visibility = "hidden";
-                         }
-                         Ext.get(dom).setOpacity(1);
-                     }
-                 });
-        }
-        return this;
-    },
-
-
-    isDisplayed : function() {
-        return this.getStyle("display") != "none";
-    },
-
-
-    toggle : function(animate){
-        this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
-        return this;
-    },
-
-
-    setDisplayed : function(value) {
-        if(typeof value == "boolean"){
-           value = value ? this.originalDisplay : "none";
-        }
-        this.setStyle("display", value);
-        return this;
-    },
-
-
-    focus : function() {
-        try{
-            this.dom.focus();
-        }catch(e){}
-        return this;
-    },
-
-
-    blur : function() {
-        try{
-            this.dom.blur();
-        }catch(e){}
-        return this;
-    },
-
-
-    addClass : function(className){
-        if(className instanceof Array){
-            for(var i = 0, len = className.length; i < len; i++) {
-            	this.addClass(className[i]);
-            }
-        }else{
-            if(className && !this.hasClass(className)){
-                this.dom.className = this.dom.className + " " + className;
-            }
-        }
-        return this;
-    },
-
-
-    radioClass : function(className){
-        var siblings = this.dom.parentNode.childNodes;
-        for(var i = 0; i < siblings.length; i++) {
-        	var s = siblings[i];
-        	if(s.nodeType == 1){
-        	    Ext.get(s).removeClass(className);
-        	}
-        }
-        this.addClass(className);
-        return this;
-    },
-
-
-    removeClass : function(className){
-        if(!className || !this.dom.className){
-            return this;
-        }
-        if(className instanceof Array){
-            for(var i = 0, len = className.length; i < len; i++) {
-            	this.removeClass(className[i]);
-            }
-        }else{
-            if(this.hasClass(className)){
-                var re = this.classReCache[className];
-                if (!re) {
-                   re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', "g");
-                   this.classReCache[className] = re;
-                }
-                this.dom.className =
-                    this.dom.className.replace(re, " ");
-            }
-        }
-        return this;
-    },
-
-    // private
-    classReCache: {},
-
-
-    toggleClass : function(className){
-        if(this.hasClass(className)){
-            this.removeClass(className);
-        }else{
-            this.addClass(className);
-        }
-        return this;
-    },
-
-
-    hasClass : function(className){
-        return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1;
-    },
-
-
-    replaceClass : function(oldClassName, newClassName){
-        this.removeClass(oldClassName);
-        this.addClass(newClassName);
-        return this;
-    },
-
-
-    getStyles : function(){
-        var a = arguments, len = a.length, r = {};
-        for(var i = 0; i < len; i++){
-            r[a[i]] = this.getStyle(a[i]);
-        }
-        return r;
-    },
-
-
-    getStyle : function(){
-        return view && view.getComputedStyle ?
-            function(prop){
-                var el = this.dom, v, cs, camel;
-                if(prop == 'float'){
-                    prop = "cssFloat";
-                }
-                if(v = el.style[prop]){
-                    return v;
-                }
-                if(cs = view.getComputedStyle(el, "")){
-                    if(!(camel = propCache[prop])){
-                        camel = propCache[prop] = prop.replace(camelRe, camelFn);
-                    }
-                    return cs[camel];
-                }
-                return null;
-            } :
-            function(prop){
-                var el = this.dom, v, cs, camel;
-                if(prop == 'opacity'){
-                    if(typeof el.filter == 'string'){
-                        var fv = parseFloat(el.filter.match(/alpha\(opacity=(.*)\)/i)[1]);
-                        if(!isNaN(fv)){
-                            return fv ? fv / 100 : 0;
-                        }
-                    }
-                    return 1;
-                }else if(prop == 'float'){
-                    prop = "styleFloat";
-                }
-                if(!(camel = propCache[prop])){
-                    camel = propCache[prop] = prop.replace(camelRe, camelFn);
-                }
-                if(v = el.style[camel]){
-                    return v;
-                }
-                if(cs = el.currentStyle){
-                    return cs[camel];
-                }
-                return null;
-            };
-    }(),
-
-
-    setStyle : function(prop, value){
-        if(typeof prop == "string"){
-            var camel;
-            if(!(camel = propCache[prop])){
-                camel = propCache[prop] = prop.replace(camelRe, camelFn);
-            }
-            if(camel == 'opacity') {
-                this.setOpacity(value);
-            }else{
-                this.dom.style[camel] = value;
-            }
-        }else{
-            for(var style in prop){
-                if(typeof prop[style] != "function"){
-                   this.setStyle(style, prop[style]);
-                }
-            }
-        }
-        return this;
-    },
-
-
-    applyStyles : function(style){
-        Ext.DomHelper.applyStyles(this.dom, style);
-        return this;
-    },
-
-
-    getX : function(){
-        return D.getX(this.dom);
-    },
-
-
-    getY : function(){
-        return D.getY(this.dom);
-    },
-
-
-    getXY : function(){
-        return D.getXY(this.dom);
-    },
-
-
-    setX : function(x, animate){
-        if(!animate || !A){
-            D.setX(this.dom, x);
-        }else{
-            this.setXY([x, this.getY()], this.preanim(arguments, 1));
-        }
-        return this;
-    },
-
-
-    setY : function(y, animate){
-        if(!animate || !A){
-            D.setY(this.dom, y);
-        }else{
-            this.setXY([this.getX(), y], this.preanim(arguments, 1));
-        }
-        return this;
-    },
-
-
-    setLeft : function(left){
-        this.setStyle("left", this.addUnits(left));
-        return this;
-    },
-
-
-    setTop : function(top){
-        this.setStyle("top", this.addUnits(top));
-        return this;
-    },
-
-
-    setRight : function(right){
-        this.setStyle("right", this.addUnits(right));
-        return this;
-    },
-
-
-    setBottom : function(bottom){
-        this.setStyle("bottom", this.addUnits(bottom));
-        return this;
-    },
-
-
-    setXY : function(pos, animate){
-        if(!animate || !A){
-            D.setXY(this.dom, pos);
-        }else{
-            this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion');
-        }
-        return this;
-    },
-
-
-    setLocation : function(x, y, animate){
-        this.setXY([x, y], this.preanim(arguments, 2));
-        return this;
-    },
-
-
-    moveTo : function(x, y, animate){
-        this.setXY([x, y], this.preanim(arguments, 2));
-        return this;
-    },
-
-
-    getRegion : function(){
-        return D.getRegion(this.dom);
-    },
-
-
-    getHeight : function(contentHeight){
-        var h = this.dom.offsetHeight || 0;
-        return contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");
-    },
-
-
-    getWidth : function(contentWidth){
-        var w = this.dom.offsetWidth || 0;
-        return contentWidth !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");
-    },
-
-
-    getComputedHeight : function(){
-        var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
-        if(!h){
-            h = parseInt(this.getStyle('height'), 10) || 0;
-            if(!this.isBorderBox()){
-                h += this.getFrameWidth('tb');
-            }
-        }
-        return h;
-    },
-
-
-    getComputedWidth : function(){
-        var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
-        if(!w){
-            w = parseInt(this.getStyle('width'), 10) || 0;
-            if(!this.isBorderBox()){
-                w += this.getFrameWidth('lr');
-            }
-        }
-        return w;
-    },
-
-
-    getSize : function(contentSize){
-        return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)};
-    },
-
-
-    getViewSize : function(){
-        var d = this.dom, doc = document, aw = 0, ah = 0;
-        if(d == doc || d == doc.body){
-            return {width : D.getViewWidth(), height: D.getViewHeight()};
-        }else{
-            return {
-                width : d.clientWidth,
-                height: d.clientHeight
-            };
-        }
-    },
-
-
-    getValue : function(asNumber){
-        return asNumber ? parseInt(this.dom.value, 10) : this.dom.value;
-    },
-
-    // private
-    adjustWidth : function(width){
-        if(typeof width == "number"){
-            if(this.autoBoxAdjust && !this.isBorderBox()){
-               width -= (this.getBorderWidth("lr") + this.getPadding("lr"));
-            }
-            if(width < 0){
-                width = 0;
-            }
-        }
-        return width;
-    },
-
-    // private
-    adjustHeight : function(height){
-        if(typeof height == "number"){
-           if(this.autoBoxAdjust && !this.isBorderBox()){
-               height -= (this.getBorderWidth("tb") + this.getPadding("tb"));
-           }
-           if(height < 0){
-               height = 0;
-           }
-        }
-        return height;
-    },
-
-
-    setWidth : function(width, animate){
-        width = this.adjustWidth(width);
-        if(!animate || !A){
-            this.dom.style.width = this.addUnits(width);
-        }else{
-            this.anim({width: {to: width}}, this.preanim(arguments, 1));
-        }
-        return this;
-    },
-
-
-     setHeight : function(height, animate){
-        height = this.adjustHeight(height);
-        if(!animate || !A){
-            this.dom.style.height = this.addUnits(height);
-        }else{
-            this.anim({height: {to: height}}, this.preanim(arguments, 1));
-        }
-        return this;
-    },
-
-
-     setSize : function(width, height, animate){
-        if(typeof width == "object"){ // in case of object from getSize()
-            height = width.height; width = width.width;
-        }
-        width = this.adjustWidth(width); height = this.adjustHeight(height);
-        if(!animate || !A){
-            this.dom.style.width = this.addUnits(width);
-            this.dom.style.height = this.addUnits(height);
-        }else{
-            this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2));
-        }
-        return this;
-    },
-
-
-    setBounds : function(x, y, width, height, animate){
-        if(!animate || !A){
-            this.setSize(width, height);
-            this.setLocation(x, y);
-        }else{
-            width = this.adjustWidth(width); height = this.adjustHeight(height);
-            this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}},
-                          this.preanim(arguments, 4), 'motion');
-        }
-        return this;
-    },
-
-
-    setRegion : function(region, animate){
-        this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1));
-        return this;
-    },
-
-
-    addListener : function(eventName, fn, scope, options){
-        Ext.EventManager.on(this.dom,  eventName, fn, scope || this, options);
-    },
-
-
-    removeListener : function(eventName, fn){
-        Ext.EventManager.removeListener(this.dom,  eventName, fn);
-        return this;
-    },
-
-
-    removeAllListeners : function(){
-        E.purgeElement(this.dom);
-        return this;
-    },
-
-    relayEvent : function(eventName, observable){
-        this.on(eventName, function(e){
-            observable.fireEvent(eventName, e);
-        });
-    },
-
-
-     setOpacity : function(opacity, animate){
-        if(!animate || !A){
-            var s = this.dom.style;
-            if(Ext.isIE){
-                s.zoom = 1;
-                s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") +
-                           (opacity == 1 ? "" : "alpha(opacity=" + opacity * 100 + ")");
-            }else{
-                s.opacity = opacity;
-            }
-        }else{
-            this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn');
-        }
-        return this;
-    },
-
-
-    getLeft : function(local){
-        if(!local){
-            return this.getX();
-        }else{
-            return parseInt(this.getStyle("left"), 10) || 0;
-        }
-    },
-
-
-    getRight : function(local){
-        if(!local){
-            return this.getX() + this.getWidth();
-        }else{
-            return (this.getLeft(true) + this.getWidth()) || 0;
-        }
-    },
-
-
-    getTop : function(local) {
-        if(!local){
-            return this.getY();
-        }else{
-            return parseInt(this.getStyle("top"), 10) || 0;
-        }
-    },
-
-
-    getBottom : function(local){
-        if(!local){
-            return this.getY() + this.getHeight();
-        }else{
-            return (this.getTop(true) + this.getHeight()) || 0;
-        }
-    },
-
-
-    position : function(pos, zIndex, x, y){
-        if(!pos){
-           if(this.getStyle('position') == 'static'){
-               this.setStyle('position', 'relative');
-           }
-        }else{
-            this.setStyle("position", pos);
-        }
-        if(zIndex){
-            this.setStyle("z-index", zIndex);
-        }
-        if(x !== undefined && y !== undefined){
-            this.setXY([x, y]);
-        }else if(x !== undefined){
-            this.setX(x);
-        }else if(y !== undefined){
-            this.setY(y);
-        }
-    },
-
-
-    clearPositioning : function(value){
-        value = value ||'';
-        this.setStyle({
-            "left": value,
-            "right": value,
-            "top": value,
-            "bottom": value,
-            "z-index": "",
-            "position" : "static"
-        });
-        return this;
-    },
-
-
-    getPositioning : function(){
-        var l = this.getStyle("left");
-        var t = this.getStyle("top");
-        return {
-            "position" : this.getStyle("position"),
-            "left" : l,
-            "right" : l ? "" : this.getStyle("right"),
-            "top" : t,
-            "bottom" : t ? "" : this.getStyle("bottom"),
-            "z-index" : this.getStyle("z-index")
-        };
-    },
-
-
-    getBorderWidth : function(side){
-        return this.addStyles(side, El.borders);
-    },
-
-
-    getPadding : function(side){
-        return this.addStyles(side, El.paddings);
-    },
-
-
-    setPositioning : function(pc){
-        this.applyStyles(pc);
-        if(pc.right == "auto"){
-            this.dom.style.right = "";
-        }
-        if(pc.bottom == "auto"){
-            this.dom.style.bottom = "";
-        }
-        return this;
-    },
-
-    // private
-    fixDisplay : function(){
-        if(this.getStyle("display") == "none"){
-            this.setStyle("visibility", "hidden");
-            this.setStyle("display", this.originalDisplay); // first try reverting to default
-            if(this.getStyle("display") == "none"){ // if that fails, default to block
-                this.setStyle("display", "block");
-            }
-        }
-    },
-
-
-     setLeftTop : function(left, top){
-        this.dom.style.left = this.addUnits(left);
-        this.dom.style.top = this.addUnits(top);
-        return this;
-    },
-
-
-     move : function(direction, distance, animate){
-        var xy = this.getXY();
-        direction = direction.toLowerCase();
-        switch(direction){
-            case "l":
-            case "left":
-                this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2));
-                break;
-           case "r":
-           case "right":
-                this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2));
-                break;
-           case "t":
-           case "top":
-           case "up":
-                this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2));
-                break;
-           case "b":
-           case "bottom":
-           case "down":
-                this.moveTo(xy[0], xy[1]+distance, this.preanim(arguments, 2));
-                break;
-        }
-        return this;
-    },
-
-
-    clip : function(){
-        if(!this.isClipped){
-           this.isClipped = true;
-           this.originalClip = {
-               "o": this.getStyle("overflow"),
-               "x": this.getStyle("overflow-x"),
-               "y": this.getStyle("overflow-y")
-           };
-           this.setStyle("overflow", "hidden");
-           this.setStyle("overflow-x", "hidden");
-           this.setStyle("overflow-y", "hidden");
-        }
-        return this;
-    },
-
-
-    unclip : function(){
-        if(this.isClipped){
-            this.isClipped = false;
-            var o = this.originalClip;
-            if(o.o){this.setStyle("overflow", o.o);}
-            if(o.x){this.setStyle("overflow-x", o.x);}
-            if(o.y){this.setStyle("overflow-y", o.y);}
-        }
-        return this;
-    },
-
-
-
-    getAnchorXY : function(anchor, local, s){
-        //Passing a different size is useful for pre-calculating anchors,
-        //especially for anchored animations that change the el size.
-
-        var w, h, vp = false;
-        if(!s){
-            var d = this.dom;
-            if(d == document.body || d == document){
-                vp = true;
-                w = D.getViewWidth(); h = D.getViewHeight();
-            }else{
-                w = this.getWidth(); h = this.getHeight();
-            }
-        }else{
-            w = s.width;  h = s.height;
-        }
-        var x = 0, y = 0, r = Math.round;
-        switch((anchor || "tl").toLowerCase()){
-            case "c":
-                x = r(w*.5);
-                y = r(h*.5);
-            break;
-            case "t":
-                x = r(w*.5);
-                y = 0;
-            break;
-            case "l":
-                x = 0;
-                y = r(h*.5);
-            break;
-            case "r":
-                x = w;
-                y = r(h*.5);
-            break;
-            case "b":
-                x = r(w*.5);
-                y = h;
-            break;
-            case "tl":
-                x = 0;
-                y = 0;
-            break;
-            case "bl":
-                x = 0;
-                y = h;
-            break;
-            case "br":
-                x = w;
-                y = h;
-            break;
-            case "tr":
-                x = w;
-                y = 0;
-            break;
-        }
-        if(local === true){
-            return [x, y];
-        }
-        if(vp){
-            var sc = this.getScroll();
-            return [x + sc.left, y + sc.top];
-        }
-        //Add the element's offset xy
-        var o = this.getXY();
-        return [x+o[0], y+o[1]];
-    },
-
-
-    getAlignToXY : function(el, p, o){
-        el = Ext.get(el);
-        var d = this.dom;
-        if(!el.dom){
-            throw "Element.alignTo with an element that doesn't exist";
-        }
-        var c = false; //constrain to viewport
-        var p1 = "", p2 = "";
-        o = o || [0,0];
-
-        if(!p){
-            p = "tl-bl";
-        }else if(p == "?"){
-            p = "tl-bl?";
-        }else if(p.indexOf("-") == -1){
-            p = "tl-" + p;
-        }
-        p = p.toLowerCase();
-        var m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
-        if(!m){
-           throw "Element.alignTo with an invalid alignment " + p;
-        }
-        p1 = m[1]; p2 = m[2]; c = !!m[3];
-
-        //Subtract the aligned el's internal xy from the target's offset xy
-        //plus custom offset to get the aligned el's new offset xy
-        var a1 = this.getAnchorXY(p1, true);
-        var a2 = el.getAnchorXY(p2, false);
-        var x = a2[0] - a1[0] + o[0];
-        var y = a2[1] - a1[1] + o[1];
-        if(c){
-            //constrain the aligned el to viewport if necessary
-            var w = this.getWidth(), h = this.getHeight(), r = el.getRegion();
-            // 5px of margin for ie
-            var dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;
-
-            //If we are at a viewport boundary and the aligned el is anchored on a target border that is
-            //perpendicular to the vp border, allow the aligned el to slide on that border,
-            //otherwise swap the aligned el to the opposite border of the target.
-            var p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);
-           var p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);
-           var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));
-           var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));
-
-           var doc = document;
-           var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5;
-           var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5;
-
-           if((x+w) > dw + scrollX){
-                x = swapX ? r.left-w : dw+scrollX-w;
-            }
-           if(x < scrollX){
-               x = swapX ? r.right : scrollX;
-           }
-           if((y+h) > dh + scrollY){
-                y = swapY ? r.top-h : dh+scrollY-h;
-            }
-           if (y < scrollY){
-               y = swapY ? r.bottom : scrollY;
-           }
-        }
-        return [x,y];
-    },
-
-    // private
-    getConstrainToXY : function(){
-        var os = {top:0, left:0, bottom:0, right: 0};
-
-        return function(el, local, offsets){
-            el = Ext.get(el);
-            offsets = offsets ? Ext.applyIf(offsets, os) : os;
-
-            var vw, vh, vx = 0, vy = 0;
-            if(el.dom == document.body || el.dom == document){
-                vw = Ext.lib.Dom.getViewWidth();
-                vh = Ext.lib.Dom.getViewHeight();
-            }else{
-                vw = el.dom.clientWidth;
-                vh = el.dom.clientHeight;
-                if(!local){
-                    var vxy = el.getXY();
-                    vx = vxy[0];
-                    vy = vxy[1];
-                }
-            }
-
-            var s = el.getScroll();
-
-            vx += offsets.left + s.left;
-            vy += offsets.top + s.top;
-
-            vw -= offsets.right;
-            vh -= offsets.bottom;
-
-            var vr = vx+vw;
-            var vb = vy+vh;
-
-            var xy = !local ? this.getXY() : [this.getLeft(true), this.getTop(true)];
-            var x = xy[0], y = xy[1];
-            var w = this.dom.offsetWidth, h = this.dom.offsetHeight;
-
-            // only move it if it needs it
-            var moved = false;
-
-            // first validate right/bottom
-            if((x + w) > vr){
-                x = vr - w;
-                moved = true;
-            }
-            if((y + h) > vb){
-                y = vb - h;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < vx){
-                x = vx;
-                moved = true;
-            }
-            if(y < vy){
-                y = vy;
-                moved = true;
-            }
-            return moved ? [x, y] : false;
-        };
-    }(),
-
-
-    alignTo : function(element, position, offsets, animate){
-        var xy = this.getAlignToXY(element, position, offsets);
-        this.setXY(xy, this.preanim(arguments, 3));
-        return this;
-    },
-
-
-    anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){
-        var action = function(){
-            this.alignTo(el, alignment, offsets, animate);
-            Ext.callback(callback, this);
-        };
-        Ext.EventManager.onWindowResize(action, this);
-        var tm = typeof monitorScroll;
-        if(tm != 'undefined'){
-            Ext.EventManager.on(window, 'scroll', action, this,
-                {buffer: tm == 'number' ? monitorScroll : 50});
-        }
-        action.call(this); // align immediately
-        return this;
-    },
-
-    clearOpacity : function(){
-        if (window.ActiveXObject) {
-            if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){
-                this.dom.style.filter = "";
-            }
-        } else {
-            this.dom.style.opacity = "";
-            this.dom.style["-moz-opacity"] = "";
-            this.dom.style["-khtml-opacity"] = "";
-        }
-        return this;
-    },
-
-
-    hide : function(animate){
-        this.setVisible(false, this.preanim(arguments, 0));
-        return this;
-    },
-
-
-    show : function(animate){
-        this.setVisible(true, this.preanim(arguments, 0));
-        return this;
-    },
-
-
-    addUnits : function(size){
-        return Ext.Element.addUnits(size, this.defaultUnit);
-    },
-
-
-    beginMeasure : function(){
-        var el = this.dom;
-        if(el.offsetWidth || el.offsetHeight){
-            return this; // offsets work already
-        }
-        var changed = [];
-        var p = this.dom, b = document.body; // start with this element
-        while((!el.offsetWidth && !el.offsetHeight) && p && p.tagName && p != b){
-            var pe = Ext.get(p);
-            if(pe.getStyle('display') == 'none'){
-                changed.push({el: p, visibility: pe.getStyle("visibility")});
-                p.style.visibility = "hidden";
-                p.style.display = "block";
-            }
-            p = p.parentNode;
-        }
-        this._measureChanged = changed;
-        return this;
-
-    },
-
-
-    endMeasure : function(){
-        var changed = this._measureChanged;
-        if(changed){
-            for(var i = 0, len = changed.length; i < len; i++) {
-            	var r = changed[i];
-            	r.el.style.visibility = r.visibility;
-                r.el.style.display = "none";
-            }
-            this._measureChanged = null;
-        }
-        return this;
-    },
-
-
-    update : function(html, loadScripts, callback){
-        if(typeof html == "undefined"){
-            html = "";
-        }
-        if(loadScripts !== true){
-            this.dom.innerHTML = html;
-            if(typeof callback == "function"){
-                callback();
-            }
-            return this;
-        }
-        var id = Ext.id();
-        var dom = this.dom;
-
-        html += '<span id="' + id + '"></span>';
-
-        E.onAvailable(id, function(){
-            var hd = document.getElementsByTagName("head")[0];
-            var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
-            var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
-            var typeRe = /\stype=([\'\"])(.*?)\1/i;
-
-            var match;
-            while(match = re.exec(html)){
-                var attrs = match[1];
-                var srcMatch = attrs ? attrs.match(srcRe) : false;
-                if(srcMatch && srcMatch[2]){
-                   var s = document.createElement("script");
-                   s.src = srcMatch[2];
-                   var typeMatch = attrs.match(typeRe);
-                   if(typeMatch && typeMatch[2]){
-                       s.type = typeMatch[2];
-                   }
-                   hd.appendChild(s);
-                }else if(match[2] && match[2].length > 0){
-                   eval(match[2]);
-                }
-            }
-            var el = document.getElementById(id);
-            if(el){el.parentNode.removeChild(el);}
-            if(typeof callback == "function"){
-                callback();
-            }
-        });
-        dom.innerHTML = html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
-        return this;
-    },
-
-
-    load : function(){
-        var um = this.getUpdateManager();
-        um.update.apply(um, arguments);
-        return this;
-    },
-
-
-    getUpdateManager : function(){
-        if(!this.updateManager){
-            this.updateManager = new Ext.UpdateManager(this);
-        }
-        return this.updateManager;
-    },
-
-
-    unselectable : function(){
-        this.dom.unselectable = "on";
-        this.swallowEvent("selectstart", true);
-        this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
-        this.addClass("x-unselectable");
-        return this;
-    },
-
-
-    getCenterXY : function(){
-        return this.getAlignToXY(document, 'c-c');
-    },
-
-
-    center : function(centerIn){
-        this.alignTo(centerIn || document, 'c-c');
-        return this;
-    },
-
-
-    isBorderBox : function(){
-        return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox;
-    },
-
-
-    getBox : function(contentBox, local){
-        var xy;
-        if(!local){
-            xy = this.getXY();
-        }else{
-            var left = parseInt(this.getStyle("left"), 10) || 0;
-            var top = parseInt(this.getStyle("top"), 10) || 0;
-            xy = [left, top];
-        }
-        var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
-        if(!contentBox){
-            bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
-        }else{
-            var l = this.getBorderWidth("l")+this.getPadding("l");
-            var r = this.getBorderWidth("r")+this.getPadding("r");
-            var t = this.getBorderWidth("t")+this.getPadding("t");
-            var b = this.getBorderWidth("b")+this.getPadding("b");
-            bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
-        }
-        bx.right = bx.x + bx.width;
-        bx.bottom = bx.y + bx.height;
-        return bx;
-    },
-
-
-    getFrameWidth : function(sides, onlyContentBox){
-        return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
-    },
-
-
-    setBox : function(box, adjust, animate){
-        var w = box.width, h = box.height;
-        if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){
-           w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
-           h -= (this.getBorderWidth("tb") + this.getPadding("tb"));
-        }
-        this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));
-        return this;
-    },
-
-
-     repaint : function(){
-        var dom = this.dom;
-        this.addClass("x-repaint");
-        setTimeout(function(){
-            Ext.get(dom).removeClass("x-repaint");
-        }, 1);
-        return this;
-    },
-
-
-    getMargins : function(side){
-        if(!side){
-            return {
-                top: parseInt(this.getStyle("margin-top"), 10) || 0,
-                left: parseInt(this.getStyle("margin-left"), 10) || 0,
-                bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,
-                right: parseInt(this.getStyle("margin-right"), 10) || 0
-            };
-        }else{
-            return this.addStyles(side, El.margins);
-         }
-    },
-
-    // private
-    addStyles : function(sides, styles){
-        var val = 0;
-        for(var i = 0, len = sides.length; i < len; i++){
-             var w = parseInt(this.getStyle(styles[sides.charAt(i)]), 10);
-             if(!isNaN(w)) val += w;
-        }
-        return val;
-    },
-
-
-    createProxy : function(config, renderTo, matchBox){
-        if(renderTo){
-            renderTo = Ext.getDom(renderTo);
-        }else{
-            renderTo = document.body;
-        }
-        config = typeof config == "object" ?
-            config : {tag : "div", cls: config};
-        var proxy = Ext.DomHelper.append(renderTo, config, true);
-        if(matchBox){
-           proxy.setBox(this.getBox());
-        }
-        return proxy;
-    },
-
-
-    mask : function(msg, msgCls){
-        if(this.getStyle("position") == "static"){
-            this.setStyle("position", "relative");
-        }
-        if(!this._mask){
-            this._mask = Ext.DomHelper.append(this.dom, {tag:"div", cls:"ext-el-mask"}, true);
-        }
-        this.addClass("x-masked");
-        this._mask.setDisplayed(true);
-        if(typeof msg == 'string'){
-            if(!this._maskMsg){
-                this._maskMsg = Ext.DomHelper.append(this.dom, {tag:"div", cls:"ext-el-mask-msg", cn:{tag:'div'}}, true);
-            }
-            var mm = this._maskMsg;
-            mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";
-            mm.dom.firstChild.innerHTML = msg;
-            mm.setDisplayed(true);
-            mm.center(this);
-        }
-        return this._mask;
-    },
-
-
-    unmask : function(removeEl){
-        if(this._mask){
-            if(removeEl === true){
-                this._mask.remove();
-                delete this._mask;
-                if(this._maskMsg){
-                    this._maskMsg.remove();
-                    delete this._maskMsg;
-                }
-            }else{
-                this._mask.setDisplayed(false);
-                if(this._maskMsg){
-                    this._maskMsg.setDisplayed(false);
-                }
-            }
-        }
-        this.removeClass("x-masked");
-    },
-
-
-    isMasked : function(){
-        return this._mask && this._mask.isVisible();
-    },
-
-
-    createShim : function(){
-        var el = document.createElement('iframe');
-        el.frameBorder = 'no';
-        el.className = 'ext-shim';
-        if(Ext.isIE && Ext.isSecure){
-            el.src = Ext.SSL_SECURE_URL;
-        }
-        var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
-        shim.autoBoxAdjust = false;
-        return shim;
-    },
-
-
-    remove : function(){
-        if(this.dom.parentNode){
-            this.dom.parentNode.removeChild(this.dom);
-        }
-        delete El.cache[this.dom.id];
-    },
-
-
-    addClassOnOver : function(className, preventFlicker){
-        this.on("mouseover", function(){
-            Ext.fly(this, '_internal').addClass(className);
-        }, this.dom);
-        var removeFn = function(e){
-            if(preventFlicker !== true || !e.within(this, true)){
-                Ext.fly(this, '_internal').removeClass(className);
-            }
-        };
-        this.on("mouseout", removeFn, this.dom);
-        return this;
-    },
-
-
-    addClassOnFocus : function(className){
-        this.on("focus", function(){
-            Ext.fly(this, '_internal').addClass(className);
-        }, this.dom);
-        this.on("blur", function(){
-            Ext.fly(this, '_internal').removeClass(className);
-        }, this.dom);
-        return this;
-    },
-
-    addClassOnClick : function(className){
-        var dom = this.dom;
-        this.on("mousedown", function(){
-            Ext.fly(dom, '_internal').addClass(className);
-            var d = Ext.get(document);
-            var fn = function(){
-                Ext.fly(dom, '_internal').removeClass(className);
-                d.removeListener("mouseup", fn);
-            };
-            d.on("mouseup", fn);
-        });
-        return this;
-    },
-
-
-    swallowEvent : function(eventName, preventDefault){
-        var fn = function(e){
-            e.stopPropagation();
-            if(preventDefault){
-                e.preventDefault();
-            }
-        };
-        if(eventName instanceof Array){
-            for(var i = 0, len = eventName.length; i < len; i++){
-                 this.on(eventName[i], fn);
-            }
-            return this;
-        }
-        this.on(eventName, fn);
-        return this;
-    },
-
-
-    fitToParent : function(monitorResize, targetParent){
-        var p = Ext.get(targetParent || this.dom.parentNode);
-        this.setSize(p.getComputedWidth()-p.getFrameWidth('lr'), p.getComputedHeight()-p.getFrameWidth('tb'));
-        if(monitorResize === true){
-            Ext.EventManager.onWindowResize(this.fitToParent.createDelegate(this, []));
-        }
-        return this;
-    },
-
-
-    getNextSibling : function(){
-        var n = this.dom.nextSibling;
-        while(n && n.nodeType != 1){
-            n = n.nextSibling;
-        }
-        return n;
-    },
-
-
-    getPrevSibling : function(){
-        var n = this.dom.previousSibling;
-        while(n && n.nodeType != 1){
-            n = n.previousSibling;
-        }
-        return n;
-    },
-
-
-
-    appendChild: function(el){
-        el = Ext.get(el);
-        el.appendTo(this);
-        return this;
-    },
-
-
-    createChild: function(config, insertBefore, returnDom){
-        config = config || {tag:'div'};
-        if(insertBefore){
-            return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true);
-        }
-        return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config,  returnDom !== true);
-    },
-
-
-    appendTo: function(el){
-        el = Ext.getDom(el);
-        el.appendChild(this.dom);
-        return this;
-    },
-
-
-    insertBefore: function(el){
-        el = Ext.getDom(el);
-        el.parentNode.insertBefore(this.dom, el);
-        return this;
-    },
-
-
-    insertAfter: function(el){
-        el = Ext.getDom(el);
-        el.parentNode.insertBefore(this.dom, el.nextSibling);
-        return this;
-    },
-
-
-    insertFirst: function(el, returnDom){
-        el = el || {};
-        if(typeof el == 'object' && !el.nodeType){ // dh config
-            return this.createChild(el, this.dom.firstChild, returnDom);
-        }else{
-            el = Ext.getDom(el);
-            this.dom.insertBefore(el, this.dom.firstChild);
-            return !returnDom ? Ext.get(el) : el;
-        }
-    },
-
-
-    insertSibling: function(el, where, returnDom){
-        where = where ? where.toLowerCase() : 'before';
-        el = el || {};
-        var rt, refNode = where == 'before' ? this.dom : this.dom.nextSibling;
-
-        if(typeof el == 'object' && !el.nodeType){ // dh config
-            if(where == 'after' && !this.dom.nextSibling){
-                rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom);
-            }else{
-                rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom);
-            }
-
-        }else{
-            rt = this.dom.parentNode.insertBefore(Ext.getDom(el),
-                        where == 'before' ? this.dom : this.dom.nextSibling);
-            if(!returnDom){
-                rt = Ext.get(rt);
-            }
-        }
-        return rt;
-    },
-
-
-    wrap: function(config, returnDom){
-        if(!config){
-            config = {tag: "div"};
-        }
-        var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom);
-        newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom);
-        return newEl;
-    },
-
-
-    replace: function(el){
-        el = Ext.get(el);
-        this.insertBefore(el);
-        el.remove();
-        return this;
-    },
-
-
-    insertHtml : function(where, html, returnEl){
-        var el = Ext.DomHelper.insertHtml(where, this.dom, html);
-        return returnEl ? Ext.get(el) : el;
-    },
-
-
-    set : function(o, useSet){
-        var el = this.dom;
-        useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet;
-        for(var attr in o){
-            if(attr == "style" || typeof o[attr] == "function") continue;
-            if(attr=="cls"){
-                el.className = o["cls"];
-            }else{
-                if(useSet) el.setAttribute(attr, o[attr]);
-                else el[attr] = o[attr];
-            }
-        }
-        Ext.DomHelper.applyStyles(el, o.style);
-        return this;
-    },
-
-
-    addKeyListener : function(key, fn, scope){
-        var config;
-        if(typeof key != "object" || key instanceof Array){
-            config = {
-                key: key,
-                fn: fn,
-                scope: scope
-            };
-        }else{
-            config = {
-                key : key.key,
-                shift : key.shift,
-                ctrl : key.ctrl,
-                alt : key.alt,
-                fn: fn,
-                scope: scope
-            };
-        }
-        return new Ext.KeyMap(this, config);
-    },
-
-
-    addKeyMap : function(config){
-        return new Ext.KeyMap(this, config);
-    },
-
-
-     isScrollable : function(){
-        var dom = this.dom;
-        return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth;
-    },
-
-
-
-    scrollTo : function(side, value, animate){
-        var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
-        if(!animate || !A){
-            this.dom[prop] = value;
-        }else{
-            var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];
-            this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');
-        }
-        return this;
-    },
-
-
-     scroll : function(direction, distance, animate){
-         if(!this.isScrollable()){
-             return;
-         }
-         var el = this.dom;
-         var l = el.scrollLeft, t = el.scrollTop;
-         var w = el.scrollWidth, h = el.scrollHeight;
-         var cw = el.clientWidth, ch = el.clientHeight;
-         direction = direction.toLowerCase();
-         var scrolled = false;
-         var a = this.preanim(arguments, 2);
-         switch(direction){
-             case "l":
-             case "left":
-                 if(w - l > cw){
-                     var v = Math.min(l + distance, w-cw);
-                     this.scrollTo("left", v, a);
-                     scrolled = true;
-                 }
-                 break;
-            case "r":
-            case "right":
-                 if(l > 0){
-                     var v = Math.max(l - distance, 0);
-                     this.scrollTo("left", v, a);
-                     scrolled = true;
-                 }
-                 break;
-            case "t":
-            case "top":
-            case "up":
-                 if(t > 0){
-                     var v = Math.max(t - distance, 0);
-                     this.scrollTo("top", v, a);
-                     scrolled = true;
-                 }
-                 break;
-            case "b":
-            case "bottom":
-            case "down":
-                 if(h - t > ch){
-                     var v = Math.min(t + distance, h-ch);
-                     this.scrollTo("top", v, a);
-                     scrolled = true;
-                 }
-                 break;
-         }
-         return scrolled;
-    },
-
-
-    translatePoints : function(x, y){
-        if(typeof x == 'object' || x instanceof Array){
-            y = x[1]; x = x[0];
-        }
-        var p = this.getStyle('position');
-        var o = this.getXY();
-
-        var l = parseInt(this.getStyle('left'), 10);
-        var t = parseInt(this.getStyle('top'), 10);
-
-        if(isNaN(l)){
-            l = (p == "relative") ? 0 : this.dom.offsetLeft;
-        }
-        if(isNaN(t)){
-            t = (p == "relative") ? 0 : this.dom.offsetTop;
-        }
-
-        return {left: (x - o[0] + l), top: (y - o[1] + t)};
-    },
-
-
-    getScroll : function(){
-        var d = this.dom, doc = document;
-        if(d == doc || d == doc.body){
-            var l = window.pageXOffset || doc.documentElement.scrollLeft || doc.body.scrollLeft || 0;
-            var t = window.pageYOffset || doc.documentElement.scrollTop || doc.body.scrollTop || 0;
-            return {left: l, top: t};
-        }else{
-            return {left: d.scrollLeft, top: d.scrollTop};
-        }
-    },
-
-
-    getColor : function(attr, defaultValue, prefix){
-        var v = this.getStyle(attr);
-        if(!v || v == "transparent" || v == "inherit") {
-            return defaultValue;
-        }
-        var color = typeof prefix == "undefined" ? "#" : prefix;
-        if(v.substr(0, 4) == "rgb("){
-            var rvs = v.slice(4, v.length -1).split(",");
-            for(var i = 0; i < 3; i++){
-                var h = parseInt(rvs[i]).toString(16);
-                if(h < 16){
-                    h = "0" + h;
-                }
-                color += h;
-            }
-        } else {
-            if(v.substr(0, 1) == "#"){
-                if(v.length == 4) {
-                    for(var i = 1; i < 4; i++){
-                        var c = v.charAt(i);
-                        color +=  c + c;
-                    }
-                }else if(v.length == 7){
-                    color += v.substr(1);
-                }
-            }
-        }
-        return(color.length > 5 ? color.toLowerCase() : defaultValue);
-    },
-
-
-    boxWrap : function(cls){
-        cls = cls || 'x-box';
-        var el = Ext.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', cls)));
-        el.child('.'+cls+'-mc').dom.appendChild(this.dom);
-        return el;
-    },
-
-
-    getAttributeNS : Ext.isIE ? function(ns, name){
-        var d = this.dom;
-        var type = typeof d[ns+":"+name];
-        if(type != 'undefined' && type != 'unknown'){
-            return d[ns+":"+name];
-        }
-        return d[name];
-    } : function(ns, name){
-        var d = this.dom;
-        return d.getAttributeNS(ns, name) || d.getAttribute(ns+":"+name) || d.getAttribute(name) || d[name];
-    }
-};
-
-var ep = El.prototype;
-
-
-ep.on = ep.addListener;
-    // backwards compat
-ep.mon = ep.addListener;
-
-
-ep.un = ep.removeListener;
-
-
-ep.autoBoxAdjust = true;
-
-ep.autoDisplayMode = true;
-
-// private
-El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
-
-// private
-El.addUnits = function(v, defaultUnit){
-    if(v === "" || v == "auto"){
-        return v;
-    }
-    if(v === undefined){
-        return '';
-    }
-    if(typeof v == "number" || !El.unitPattern.test(v)){
-        return v + (defaultUnit || 'px');
-    }
-    return v;
-};
-
-// special markup used throughout Ext when box wrapping elements
-El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
-
-El.VISIBILITY = 1;
-
-El.DISPLAY = 2;
-
-El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"};
-El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"};
-El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"};
-
-
-
-
-El.cache = {};
-
-var docEl;
-
-
-El.get = function(el){
-    var ex, elm, id;
-    if(!el){ return null; }
-    if(typeof el == "string"){ // element id
-        if(!(elm = document.getElementById(el))){
-            return null;
-        }
-        if(ex = El.cache[el]){
-            ex.dom = elm;
-        }else{
-            ex = El.cache[el] = new El(elm);
-        }
-        return ex;
-    }else if(el.tagName){ // dom element
-        if(!(id = el.id)){
-            id = Ext.id(el);
-        }
-        if(ex = El.cache[id]){
-            ex.dom = el;
-        }else{
-            ex = El.cache[id] = new El(el);
-        }
-        return ex;
-    }else if(el instanceof El){
-        if(el != docEl){
-            el.dom = document.getElementById(el.id) || el.dom; // refresh dom element in case no longer valid,
-                                                          // catch case where it hasn't been appended
-            El.cache[el.id] = el; // in case it was created directly with Element(), let's cache it
-        }
-        return el;
-    }else if(el.isComposite){
-        return el;
-    }else if(el instanceof Array){
-        return El.select(el);
-    }else if(el == document){
-        // create a bogus element object representing the document object
-        if(!docEl){
-            var f = function(){};
-            f.prototype = El.prototype;
-            docEl = new f();
-            docEl.dom = document;
-        }
-        return docEl;
-    }
-    return null;
-};
-
-El.uncache = function(el){
-    for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-        if(a[i]){
-            delete El.cache[a[i].id || a[i]];
-        }
-    }
-};
-
-
-// Garbage collection - uncache elements/purge listeners on orphaned elements
-// so we don't hold a reference and cause the browser to retain them
-El.garbageCollect = function(){
-    if(!Ext.enableGarbageCollector){
-        clearInterval(El.collectorThread);
-        return;
-    }
-    for(var eid in El.cache){
-        var el = El.cache[eid], d = el.dom;
-        // -------------------------------------------------------
-        // Determining what is garbage:
-        // -------------------------------------------------------
-        // !d
-        // dom node is null, definitely garbage
-        // -------------------------------------------------------
-        // !d.parentNode
-        // no parentNode == direct orphan, definitely garbage
-        // -------------------------------------------------------
-        // !d.offsetParent && !document.getElementById(eid)
-        // display none elements have no offsetParent so we will
-        // also try to look it up by it's id. However, check
-        // offsetParent first so we don't do unneeded lookups.
-        // This enables collection of elements that are not orphans
-        // directly, but somewhere up the line they have an orphan
-        // parent.
-        // -------------------------------------------------------
-        if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){
-            delete El.cache[eid];
-            if(Ext.enableListenerCollection){
-                Ext.lib.Dom.purgeElement(d);
-            }
-        }
-    }
-}
-El.collectorThreadId = setInterval(El.garbageCollect, 30000);
-
-
-// dom is optional
-El.Flyweight = function(dom){
-    this.dom = dom;
-};
-El.Flyweight.prototype = El.prototype;
-
-El._flyweights = {};
-
-El.fly = function(el, named){
-    named = named || '_global';
-    el = Ext.getDom(el);
-    if(!el){
-        return null;
-    }
-    if(!El._flyweights[named]){
-        El._flyweights[named] = new El.Flyweight();
-    }
-    El._flyweights[named].dom = el;
-    return El._flyweights[named];
-};
-
-
-Ext.get = El.get;
-
-Ext.fly = El.fly;
-
-// speedy lookup for elements never to box adjust
-var noBoxAdjust = Ext.isStrict ? {
-    select:1
-} : {
-    input:1, select:1, textarea:1
-};
-if(Ext.isIE || Ext.isGecko){
-    noBoxAdjust['button'] = 1;
-}
-
-
-Ext.EventManager.on(window, 'unload', function(){
-    delete El.cache;
-    delete El._flyweights;
-});
-})();
-
-
-
-//Notifies Element that fx methods are available
-Ext.enableFx = true;
-
-
-Ext.Fx = {
-
-    slideIn : function(anchor, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-
-            anchor = anchor || "t";
-
-            // fix display to visibility
-            this.fixDisplay();
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var b = this.getBox();
-            // fixed size for slide
-            this.setSize(b);
-
-            // wrap if needed
-            var wrap = this.fxWrap(r.pos, o, "hidden");
-
-            var st = this.dom.style;
-            st.visibility = "visible";
-            st.position = "absolute";
-
-            // clear out temp styles after slide and unwrap
-            var after = function(){
-                el.fxUnwrap(wrap, r.pos, o);
-                st.width = r.width;
-                st.height = r.height;
-                el.afterFx(o);
-            };
-            // time to calc the positions
-            var a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};
-
-            switch(anchor.toLowerCase()){
-                case "t":
-                    wrap.setSize(b.width, 0);
-                    st.left = st.bottom = "0";
-                    a = {height: bh};
-                break;
-                case "l":
-                    wrap.setSize(0, b.height);
-                    st.right = st.top = "0";
-                    a = {width: bw};
-                break;
-                case "r":
-                    wrap.setSize(0, b.height);
-                    wrap.setX(b.right);
-                    st.left = st.top = "0";
-                    a = {width: bw, points: pt};
-                break;
-                case "b":
-                    wrap.setSize(b.width, 0);
-                    wrap.setY(b.bottom);
-                    st.left = st.top = "0";
-                    a = {height: bh, points: pt};
-                break;
-                case "tl":
-                    wrap.setSize(0, 0);
-                    st.right = st.bottom = "0";
-                    a = {width: bw, height: bh};
-                break;
-                case "bl":
-                    wrap.setSize(0, 0);
-                    wrap.setY(b.y+b.height);
-                    st.right = st.top = "0";
-                    a = {width: bw, height: bh, points: pt};
-                break;
-                case "br":
-                    wrap.setSize(0, 0);
-                    wrap.setXY([b.right, b.bottom]);
-                    st.left = st.top = "0";
-                    a = {width: bw, height: bh, points: pt};
-                break;
-                case "tr":
-                    wrap.setSize(0, 0);
-                    wrap.setX(b.x+b.width);
-                    st.left = st.bottom = "0";
-                    a = {width: bw, height: bh, points: pt};
-                break;
-            }
-            this.dom.style.visibility = "visible";
-            wrap.show();
-
-            arguments.callee.anim = wrap.fxanim(a,
-                o,
-                'motion',
-                .5,
-                'easeOut', after);
-        });
-        return this;
-    },
-
-
-    slideOut : function(anchor, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-
-            anchor = anchor || "t";
-
-            // restore values after effect
-            var r = this.getFxRestore();
-
-            var b = this.getBox();
-            // fixed size for slide
-            this.setSize(b);
-
-            // wrap if needed
-            var wrap = this.fxWrap(r.pos, o, "visible");
-
-            var st = this.dom.style;
-            st.visibility = "visible";
-            st.position = "absolute";
-
-            wrap.setSize(b);
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.fxUnwrap(wrap, r.pos, o);
-
-                st.width = r.width;
-                st.height = r.height;
-
-                el.afterFx(o);
-            };
-
-            var a, zero = {to: 0};
-            switch(anchor.toLowerCase()){
-                case "t":
-                    st.left = st.bottom = "0";
-                    a = {height: zero};
-                break;
-                case "l":
-                    st.right = st.top = "0";
-                    a = {width: zero};
-                break;
-                case "r":
-                    st.left = st.top = "0";
-                    a = {width: zero, points: {to:[b.right, b.y]}};
-                break;
-                case "b":
-                    st.left = st.top = "0";
-                    a = {height: zero, points: {to:[b.x, b.bottom]}};
-                break;
-                case "tl":
-                    st.right = st.bottom = "0";
-                    a = {width: zero, height: zero};
-                break;
-                case "bl":
-                    st.right = st.top = "0";
-                    a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}};
-                break;
-                case "br":
-                    st.left = st.top = "0";
-                    a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}};
-                break;
-                case "tr":
-                    st.left = st.bottom = "0";
-                    a = {width: zero, height: zero, points: {to:[b.right, b.y]}};
-                break;
-            }
-
-            arguments.callee.anim = wrap.fxanim(a,
-                o,
-                'motion',
-                .5,
-                "easeOut", after);
-        });
-        return this;
-    },
-
-
-    puff : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            this.clearOpacity();
-            this.show();
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var st = this.dom.style;
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.clearOpacity();
-
-                el.setPositioning(r.pos);
-                st.width = r.width;
-                st.height = r.height;
-                st.fontSize = '';
-                el.afterFx(o);
-            };
-
-            var width = this.getWidth();
-            var height = this.getHeight();
-
-            arguments.callee.anim = this.fxanim({
-                    width : {to: this.adjustWidth(width * 2)},
-                    height : {to: this.adjustHeight(height * 2)},
-                    points : {by: [-(width * .5), -(height * .5)]},
-                    opacity : {to: 0},
-                    fontSize: {to:200, unit: "%"}
-                },
-                o,
-                'motion',
-                .5,
-                "easeOut", after);
-        });
-        return this;
-    },
-
-
-    switchOff : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            this.clearOpacity();
-            this.clip();
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var st = this.dom.style;
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.clearOpacity();
-                el.setPositioning(r.pos);
-                st.width = r.width;
-                st.height = r.height;
-
-                el.afterFx(o);
-            };
-
-            this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){
-                this.clearOpacity();
-                (function(){
-                    this.fxanim({
-                        height:{to:1},
-                        points:{by:[0, this.getHeight() * .5]}
-                    }, o, 'motion', 0.3, 'easeIn', after);
-                }).defer(100, this);
-            });
-        });
-        return this;
-    },
-
-
-    highlight : function(color, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            color = color || "ffff9c";
-            attr = o.attr || "backgroundColor";
-
-            this.clearOpacity();
-            this.show();
-
-            var origColor = this.getColor(attr);
-            var restoreColor = this.dom.style[attr];
-            endColor = (o.endColor || origColor) || "ffffff";
-
-            var after = function(){
-                el.dom.style[attr] = restoreColor;
-                el.afterFx(o);
-            };
-
-            var a = {};
-            a[attr] = {from: color, to: endColor};
-            arguments.callee.anim = this.fxanim(a,
-                o,
-                'color',
-                1,
-                'easeIn', after);
-        });
-        return this;
-    },
-
-
-    frame : function(color, count, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            color = color || "#C3DAF9";
-            if(color.length == 6){
-                color = "#" + color;
-            }
-            count = count || 1;
-            duration = o.duration || 1;
-            this.show();
-
-            var b = this.getBox();
-            var animFn = function(){
-                var proxy = this.createProxy({
-                     tag:"div",
-                     style:{
-                        visbility:"hidden",
-                        position:"absolute",
-                        "z-index":"35000", // yee haw
-                        border:"0px solid " + color
-                     }
-                  });
-                var scale = Ext.isBorderBox ? 2 : 1;
-                proxy.animate({
-                    top:{from:b.y, to:b.y - 20},
-                    left:{from:b.x, to:b.x - 20},
-                    borderWidth:{from:0, to:10},
-                    opacity:{from:1, to:0},
-                    height:{from:b.height, to:(b.height + (20*scale))},
-                    width:{from:b.width, to:(b.width + (20*scale))}
-                }, duration, function(){
-                    proxy.remove();
-                });
-                if(--count > 0){
-                     animFn.defer((duration/2)*1000, this);
-                }else{
-                    el.afterFx(o);
-                }
-            };
-            animFn.call(this);
-        });
-        return this;
-    },
-
-
-    pause : function(seconds){
-        var el = this.getFxEl();
-        var o = {};
-
-        el.queueFx(o, function(){
-            setTimeout(function(){
-                el.afterFx(o);
-            }, seconds * 1000);
-        });
-        return this;
-    },
-
-
-    fadeIn : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-        el.queueFx(o, function(){
-            this.setOpacity(0);
-            this.fixDisplay();
-            this.dom.style.visibility = 'visible';
-            var to = o.endOpacity || 1;
-            arguments.callee.anim = this.fxanim({opacity:{to:to}},
-                o, null, .5, "easeOut", function(){
-                if(to == 1){
-                    this.clearOpacity();
-                }
-                el.afterFx(o);
-            });
-        });
-        return this;
-    },
-
-
-    fadeOut : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-        el.queueFx(o, function(){
-            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
-                o, null, .5, "easeOut", function(){
-                if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
-                     this.dom.style.display = "none";
-                }else{
-                     this.dom.style.visibility = "hidden";
-                }
-                this.clearOpacity();
-                el.afterFx(o);
-            });
-        });
-        return this;
-    },
-
-
-    scale : function(w, h, o){
-        this.shift(Ext.apply({}, o, {
-            width: w,
-            height: h
-        }));
-        return this;
-    },
-
-
-    shift : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-        el.queueFx(o, function(){
-            var a = {}, w = o.width, h = o.height, x = o.x, y = o.y,  op = o.opacity;
-            if(w !== undefined){
-                a.width = {to: this.adjustWidth(w)};
-            }
-            if(h !== undefined){
-                a.height = {to: this.adjustHeight(h)};
-            }
-            if(x !== undefined || y !== undefined){
-                a.points = {to: [
-                    x !== undefined ? x : this.getX(),
-                    y !== undefined ? y : this.getY()
-                ]};
-            }
-            if(op !== undefined){
-                a.opacity = {to: op};
-            }
-            if(o.xy !== undefined){
-                a.points = {to: o.xy};
-            }
-            arguments.callee.anim = this.fxanim(a,
-                o, 'motion', .35, "easeOut", function(){
-                el.afterFx(o);
-            });
-        });
-        return this;
-    },
-
-
-    ghost : function(anchor, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            anchor = anchor || "b";
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var w = this.getWidth(),
-                h = this.getHeight();
-
-            var st = this.dom.style;
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.clearOpacity();
-                el.setPositioning(r.pos);
-                st.width = r.width;
-                st.height = r.height;
-
-                el.afterFx(o);
-            };
-
-            var a = {opacity: {to: 0}, points: {}}, pt = a.points;
-            switch(anchor.toLowerCase()){
-                case "t":
-                    pt.by = [0, -h];
-                break;
-                case "l":
-                    pt.by = [-w, 0];
-                break;
-                case "r":
-                    pt.by = [w, 0];
-                break;
-                case "b":
-                    pt.by = [0, h];
-                break;
-                case "tl":
-                    pt.by = [-w, -h];
-                break;
-                case "bl":
-                    pt.by = [-w, h];
-                break;
-                case "br":
-                    pt.by = [w, h];
-                break;
-                case "tr":
-                    pt.by = [w, -h];
-                break;
-            }
-
-            arguments.callee.anim = this.fxanim(a,
-                o,
-                'motion',
-                .5,
-                "easeOut", after);
-        });
-        return this;
-    },
-
-
-    syncFx : function(){
-        this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
-            block : false,
-            concurrent : true,
-            stopFx : false
-        });
-        return this;
-    },
-
-
-    sequenceFx : function(){
-        this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
-            block : false,
-            concurrent : false,
-            stopFx : false
-        });
-        return this;
-    },
-
-
-    nextFx : function(){
-        var ef = this.fxQueue[0];
-        if(ef){
-            ef.call(this);
-        }
-    },
-
-
-    hasActiveFx : function(){
-        return this.fxQueue && this.fxQueue[0];
-    },
-
-
-    stopFx : function(){
-        if(this.hasActiveFx()){
-            var cur = this.fxQueue[0];
-            if(cur && cur.anim && cur.anim.isAnimated()){
-                this.fxQueue = [cur]; // clear out others
-                cur.anim.stop(true);
-            }
-        }
-        return this;
-    },
-
-
-    beforeFx : function(o){
-        if(this.hasActiveFx() && !o.concurrent){
-           if(o.stopFx){
-               this.stopFx();
-               return true;
-           }
-           return false;
-        }
-        return true;
-    },
-
-
-    hasFxBlock : function(){
-        var q = this.fxQueue;
-        return q && q[0] && q[0].block;
-    },
-
-
-    queueFx : function(o, fn){
-        if(!this.fxQueue){
-            this.fxQueue = [];
-        }
-        if(!this.hasFxBlock()){
-            Ext.applyIf(o, this.fxDefaults);
-            if(!o.concurrent){
-                var run = this.beforeFx(o);
-                fn.block = o.block;
-                this.fxQueue.push(fn);
-                if(run){
-                    this.nextFx();
-                }
-            }else{
-                fn.call(this);
-            }
-        }
-        return this;
-    },
-
-
-    fxWrap : function(pos, o, vis){
-        var wrap;
-        if(!o.wrap || !(wrap = Ext.get(o.wrap))){
-            var wrapXY;
-            if(o.fixPosition){
-                wrapXY = this.getXY();
-            }
-            var div = document.createElement("div");
-            div.style.visibility = vis;
-            wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom));
-            wrap.setPositioning(pos);
-            if(wrap.getStyle("position") == "static"){
-                wrap.position("relative");
-            }
-            this.clearPositioning('auto');
-            wrap.clip();
-            wrap.dom.appendChild(this.dom);
-            if(wrapXY){
-                wrap.setXY(wrapXY);
-            }
-        }
-        return wrap;
-    },
-
-
-    fxUnwrap : function(wrap, pos, o){
-        this.clearPositioning();
-        this.setPositioning(pos);
-        if(!o.wrap){
-            wrap.dom.parentNode.insertBefore(this.dom, wrap.dom);
-            wrap.remove();
-        }
-    },
-
-
-    getFxRestore : function(){
-        var st = this.dom.style;
-        return {pos: this.getPositioning(), width: st.width, height : st.height};
-    },
-
-
-    afterFx : function(o){
-        if(o.afterStyle){
-            this.applyStyles(o.afterStyle);
-        }
-        if(o.afterCls){
-            this.addClass(o.afterCls);
-        }
-        if(o.remove === true){
-            this.remove();
-        }
-        Ext.callback(o.callback, o.scope, [this]);
-        if(!o.concurrent){
-            this.fxQueue.shift();
-            this.nextFx();
-        }
-    },
-
-
-    getFxEl : function(){ // support for composite element fx
-        return Ext.get(this.dom);
-    },
-
-
-    fxanim : function(args, opt, animType, defaultDur, defaultEase, cb){
-        animType = animType || 'run';
-        opt = opt || {};
-        var anim = Ext.lib.Anim[animType](
-            this.dom, args,
-            (opt.duration || defaultDur) || .35,
-            (opt.easing || defaultEase) || 'easeOut',
-            function(){
-                Ext.callback(cb, this);
-            },
-            this
-        );
-        opt.anim = anim;
-        return anim;
-    }
-};
-
-// backwords compat
-Ext.Fx.resize = Ext.Fx.scale;
-
-//When included, Ext.Fx is automatically applied to Element so that all basic
-//effects are available directly via the Element API
-Ext.apply(Ext.Element.prototype, Ext.Fx);
-
-
-Ext.CompositeElement = function(els){
-    this.elements = [];
-    this.addElements(els);
-};
-Ext.CompositeElement.prototype = {
-    isComposite: true,
-    addElements : function(els){
-        if(!els) return this;
-        if(typeof els == "string"){
-            els = Ext.Element.selectorFunction(els);
-        }
-        var yels = this.elements;
-        var index = yels.length-1;
-        for(var i = 0, len = els.length; i < len; i++) {
-        	yels[++index] = Ext.get(els[i], true);
-        }
-        return this;
-    },
-    invoke : function(fn, args){
-        var els = this.elements;
-        for(var i = 0, len = els.length; i < len; i++) {
-        	Ext.Element.prototype[fn].apply(els[i], args);
-        }
-        return this;
-    },
-
-    add : function(els){
-        if(typeof els == "string"){
-            this.addElements(Ext.Element.selectorFunction(els));
-        }else if(els.length !== undefined){
-            this.addElements(els);
-        }else{
-            this.addElements([els]);
-        }
-        return this;
-    },
-
-    each : function(fn, scope){
-        var els = this.elements;
-        for(var i = 0, len = els.length; i < len; i++){
-            if(fn.call(scope || els[i], els[i], this, i) === false) {
-                break;
-            }
-        }
-        return this;
-    },
-
-
-    item : function(index){
-        return this.elements[index];
-    }
-};
-(function(){
-Ext.CompositeElement.createCall = function(proto, fnName){
-    if(!proto[fnName]){
-        proto[fnName] = function(){
-            return this.invoke(fnName, arguments);
-        };
-    }
-};
-for(var fnName in Ext.Element.prototype){
-    if(typeof Ext.Element.prototype[fnName] == "function"){
-        Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);
-    }
-};
-})();
-
-
-Ext.CompositeElementLite = function(els){
-    Ext.CompositeElementLite.superclass.constructor.call(this, els);
-    var flyEl = function(){};
-    flyEl.prototype = Ext.Element.prototype;
-    this.el = new Ext.Element.Flyweight();
-};
-Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
-    addElements : function(els){
-        if(els){
-            if(els instanceof Array){
-                this.elements = this.elements.concat(els);
-            }else{
-                var yels = this.elements;
-                var index = yels.length-1;
-                for(var i = 0, len = els.length; i < len; i++) {
-                    yels[++index] = els[i];
-                }
-            }
-        }
-        return this;
-    },
-    invoke : function(fn, args){
-        var els = this.elements;
-        var el = this.el;
-        for(var i = 0, len = els.length; i < len; i++) {
-            el.dom = els[i];
-        	Ext.Element.prototype[fn].apply(el, args);
-        }
-        return this;
-    },
-
-    item : function(index){
-        this.el.dom = this.elements[index];
-        return this.el;
-    },
-
-    // fixes scope with flyweight
-    addListener : function(eventName, handler, scope, opt){
-        var els = this.elements;
-        for(var i = 0, len = els.length; i < len; i++) {
-            Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);
-        }
-        return this;
-    },
-
-
-    each : function(fn, scope){
-        var els = this.elements;
-        var el = this.el;
-        for(var i = 0, len = els.length; i < len; i++){
-            el.dom = els[i];
-        	if(fn.call(scope || el, el, this, i) === false){
-                break;
-            }
-        }
-        return this;
-    }
-});
-Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
-if(Ext.DomQuery){
-    Ext.Element.selectorFunction = Ext.DomQuery.select;
-}
-
-Ext.Element.select = function(selector, unique, root){
-    var els;
-    if(typeof selector == "string"){
-        els = Ext.Element.selectorFunction(selector, root);
-    }else if(selector.length !== undefined){
-        els = selector;
-    }else{
-        throw "Invalid selector";
-    }
-    if(unique === true){
-        return new Ext.CompositeElement(els);
-    }else{
-        return new Ext.CompositeElementLite(els);
-    }
-};
-
-Ext.select = Ext.Element.select;
-
-Ext.UpdateManager = function(el, forceNew){
-    el = Ext.get(el);
-    if(!forceNew && el.updateManager){
-        return el.updateManager;
-    }
-
-    this.el = el;
-
-    this.defaultUrl = null;
-
-    this.addEvents({
-
-        "beforeupdate": true,
-
-        "update": true,
-
-        "failure": true
-    });
-    var d = Ext.UpdateManager.defaults;
-
-    this.sslBlankUrl = d.sslBlankUrl;
-
-    this.disableCaching = d.disableCaching;
-
-    this.indicatorText = d.indicatorText;
-
-    this.showLoadIndicator = d.showLoadIndicator;
-
-    this.timeout = d.timeout;
-
-
-    this.loadScripts = d.loadScripts;
-
-
-    this.transaction = null;
-
-
-    this.autoRefreshProcId = null;
-
-    this.refreshDelegate = this.refresh.createDelegate(this);
-
-    this.updateDelegate = this.update.createDelegate(this);
-
-    this.formUpdateDelegate = this.formUpdate.createDelegate(this);
-
-    this.successDelegate = this.processSuccess.createDelegate(this);
-
-    this.failureDelegate = this.processFailure.createDelegate(this);
-
-
-    this.renderer = new Ext.UpdateManager.BasicRenderer();
-
-    Ext.UpdateManager.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.UpdateManager, Ext.util.Observable, {
-
-    getEl : function(){
-        return this.el;
-    },
-
-    update : function(url, params, callback, discardUrl){
-        if(this.fireEvent("beforeupdate", this.el, url, params) !== false){
-            var method = this.method;
-            if(typeof url == "object"){ // must be config object
-                var cfg = url;
-                url = cfg.url;
-                params = params || cfg.params;
-                callback = callback || cfg.callback;
-                discardUrl = discardUrl || cfg.discardUrl;
-                if(callback && cfg.scope){
-                    callback = callback.createDelegate(cfg.scope);
-                }
-                if(typeof cfg.method != "undefined"){method = cfg.method;};
-                if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};
-                if(typeof cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};
-                if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};
-                if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;};
-            }
-            this.showLoading();
-            if(!discardUrl){
-                this.defaultUrl = url;
-            }
-            if(typeof url == "function"){
-                url = url.call(this);
-            }
-            if(typeof params == "function"){
-                params = params();
-            }
-            if(params && typeof params != "string"){ // must be object
-                var buf = [];
-                for(var key in params){
-                    if(typeof params[key] != "function"){
-                        buf.push(encodeURIComponent(key), "=", encodeURIComponent(params[key]), "&");
-                    }
-                }
-                delete buf[buf.length-1];
-                params = buf.join("");
-            }
-            var cb = {
-                success: this.successDelegate,
-                failure: this.failureDelegate,
-                timeout: (this.timeout*1000),
-                argument: {"url": url, "form": null, "callback": callback, "params": params}
-            };
-            method = method || (params ? "POST" : "GET");
-            if(method == "GET"){
-                url = this.prepareUrl(url);
-            }
-            this.transaction = Ext.lib.Ajax.request(method, url, cb, params);
-        }
-    },
-
-
-    formUpdate : function(form, url, reset, callback){
-        if(this.fireEvent("beforeupdate", this.el, form, url) !== false){
-            formEl = Ext.getDom(form);
-            if(typeof url == "function"){
-                url = url.call(this);
-            }
-            if(typeof params == "function"){
-                params = params();
-            }
-            url = url || formEl.action;
-            var cb = {
-                success: this.successDelegate,
-                failure: this.failureDelegate,
-                timeout: (this.timeout*1000),
-                argument: {"url": url, "form": formEl, "callback": callback, "reset": reset}
-            };
-            var isUpload = false;
-            var enctype = formEl.getAttribute("enctype");
-            if(enctype && enctype.toLowerCase() == "multipart/form-data"){
-                isUpload = true;
-                cb.upload = this.successDelegate;
-            }
-            this.transaction = Ext.lib.Ajax.formRequest(formEl, url, cb, null, isUpload, this.sslBlankUrl);
-            this.showLoading.defer(1, this);
-        }
-    },
-
-
-    refresh : function(callback){
-        if(this.defaultUrl == null){
-            return;
-        }
-        this.update(this.defaultUrl, null, callback, true);
-    },
-
-
-    startAutoRefresh : function(interval, url, params, callback, refreshNow){
-        if(refreshNow){
-            this.update(url || this.defaultUrl, params, callback, true);
-        }
-        if(this.autoRefreshProcId){
-            clearInterval(this.autoRefreshProcId);
-        }
-        this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*1000);
-    },
-
-
-     stopAutoRefresh : function(){
-        if(this.autoRefreshProcId){
-            clearInterval(this.autoRefreshProcId);
-            delete this.autoRefreshProcId;
-        }
-    },
-
-    isAutoRefreshing : function(){
-       return this.autoRefreshProcId ? true : false;
-    },
-
-    showLoading : function(){
-        if(this.showLoadIndicator){
-            this.el.update(this.indicatorText);
-        }
-    },
-
-
-    prepareUrl : function(url){
-        if(this.disableCaching){
-            var append = "_dc=" + (new Date().getTime());
-            if(url.indexOf("?") !== -1){
-                url += "&" + append;
-            }else{
-                url += "?" + append;
-            }
-        }
-        return url;
-    },
-
-
-    processSuccess : function(response){
-        this.transaction = null;
-        if(response.argument.form && response.argument.reset){
-            try{ // put in try/catch since some older FF releases had problems with this
-                response.argument.form.reset();
-            }catch(e){}
-        }
-        if(this.loadScripts){
-            this.renderer.render(this.el, response, this,
-                this.updateComplete.createDelegate(this, [response]));
-        }else{
-            this.renderer.render(this.el, response, this);
-            this.updateComplete(response);
-        }
-    },
-
-    updateComplete : function(response){
-        this.fireEvent("update", this.el, response);
-        if(typeof response.argument.callback == "function"){
-            response.argument.callback(this.el, true, response);
-        }
-    },
-
-
-    processFailure : function(response){
-        this.transaction = null;
-        this.fireEvent("failure", this.el, response);
-        if(typeof response.argument.callback == "function"){
-            response.argument.callback(this.el, false, response);
-        }
-    },
-
-
-    setRenderer : function(renderer){
-        this.renderer = renderer;
-    },
-
-    getRenderer : function(){
-       return this.renderer;
-    },
-
-
-    setDefaultUrl : function(defaultUrl){
-        this.defaultUrl = defaultUrl;
-    },
-
-
-    abort : function(){
-        if(this.transaction){
-            Ext.lib.Ajax.abort(this.transaction);
-        }
-    },
-
-
-    isUpdating : function(){
-        if(this.transaction){
-            return Ext.lib.Ajax.isCallInProgress(this.transaction);
-        }
-        return false;
-    }
-});
-
-
-   Ext.UpdateManager.defaults = {
-
-         timeout : 30,
-
-
-        loadScripts : false,
-
-
-        sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),
-
-        disableCaching : false,
-
-        showLoadIndicator : true,
-
-        indicatorText : '<div class="loading-indicator">Loading...</div>'
-   };
-
-
-Ext.UpdateManager.updateElement = function(el, url, params, options){
-    var um = Ext.get(el, true).getUpdateManager();
-    Ext.apply(um, options);
-    um.update(url, params, options ? options.callback : null);
-};
-// alias for backwards compat
-Ext.UpdateManager.update = Ext.UpdateManager.updateElement;
-
-Ext.UpdateManager.BasicRenderer = function(){};
-
-Ext.UpdateManager.BasicRenderer.prototype = {
-
-     render : function(el, response, updateManager, callback){
-        el.update(response.responseText, updateManager.loadScripts, callback);
-    }
-};
-
-
-
-
-
-// private
-Date.parseFunctions = {count:0};
-// private
-Date.parseRegexes = [];
-// private
-Date.formatFunctions = {count:0};
-
-// private
-Date.prototype.dateFormat = function(format) {
-    if (Date.formatFunctions[format] == null) {
-        Date.createNewFormat(format);
-    }
-    var func = Date.formatFunctions[format];
-    return this[func]();
-};
-
-
-
-Date.prototype.format = Date.prototype.dateFormat;
-
-// private
-Date.createNewFormat = function(format) {
-    var funcName = "format" + Date.formatFunctions.count++;
-    Date.formatFunctions[format] = funcName;
-    var code = "Date.prototype." + funcName + " = function(){return ";
-    var special = false;
-    var ch = '';
-    for (var i = 0; i < format.length; ++i) {
-        ch = format.charAt(i);
-        if (!special && ch == "\\") {
-            special = true;
-        }
-        else if (special) {
-            special = false;
-            code += "'" + String.escape(ch) + "' + ";
-        }
-        else {
-            code += Date.getFormatCode(ch);
-        }
-    }
-    eval(code.substring(0, code.length - 3) + ";}");
-};
-
-// private
-Date.getFormatCode = function(character) {
-    switch (character) {
-    case "d":
-        return "String.leftPad(this.getDate(), 2, '0') + ";
-    case "D":
-        return "Date.dayNames[this.getDay()].substring(0, 3) + ";
-    case "j":
-        return "this.getDate() + ";
-    case "l":
-        return "Date.dayNames[this.getDay()] + ";
-    case "S":
-        return "this.getSuffix() + ";
-    case "w":
-        return "this.getDay() + ";
-    case "z":
-        return "this.getDayOfYear() + ";
-    case "W":
-        return "this.getWeekOfYear() + ";
-    case "F":
-        return "Date.monthNames[this.getMonth()] + ";
-    case "m":
-        return "String.leftPad(this.getMonth() + 1, 2, '0') + ";
-    case "M":
-        return "Date.monthNames[this.getMonth()].substring(0, 3) + ";
-    case "n":
-        return "(this.getMonth() + 1) + ";
-    case "t":
-        return "this.getDaysInMonth() + ";
-    case "L":
-        return "(this.isLeapYear() ? 1 : 0) + ";
-    case "Y":
-        return "this.getFullYear() + ";
-    case "y":
-        return "('' + this.getFullYear()).substring(2, 4) + ";
-    case "a":
-        return "(this.getHours() < 12 ? 'am' : 'pm') + ";
-    case "A":
-        return "(this.getHours() < 12 ? 'AM' : 'PM') + ";
-    case "g":
-        return "((this.getHours() %12) ? this.getHours() % 12 : 12) + ";
-    case "G":
-        return "this.getHours() + ";
-    case "h":
-        return "String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";
-    case "H":
-        return "String.leftPad(this.getHours(), 2, '0') + ";
-    case "i":
-        return "String.leftPad(this.getMinutes(), 2, '0') + ";
-    case "s":
-        return "String.leftPad(this.getSeconds(), 2, '0') + ";
-    case "O":
-        return "this.getGMTOffset() + ";
-    case "T":
-        return "this.getTimezone() + ";
-    case "Z":
-        return "(this.getTimezoneOffset() * -60) + ";
-    default:
-        return "'" + String.escape(character) + "' + ";
-    }
-};
-
-
-Date.parseDate = function(input, format) {
-    if (Date.parseFunctions[format] == null) {
-        Date.createParser(format);
-    }
-    var func = Date.parseFunctions[format];
-    return Date[func](input);
-};
-
-// private
-Date.createParser = function(format) {
-    var funcName = "parse" + Date.parseFunctions.count++;
-    var regexNum = Date.parseRegexes.length;
-    var currentGroup = 1;
-    Date.parseFunctions[format] = funcName;
-
-    var code = "Date." + funcName + " = function(input){\n"
-        + "var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"
-        + "var d = new Date();\n"
-        + "y = d.getFullYear();\n"
-        + "m = d.getMonth();\n"
-        + "d = d.getDate();\n"
-        + "var results = input.match(Date.parseRegexes[" + regexNum + "]);\n"
-        + "if (results && results.length > 0) {";
-    var regex = "";
-
-    var special = false;
-    var ch = '';
-    for (var i = 0; i < format.length; ++i) {
-        ch = format.charAt(i);
-        if (!special && ch == "\\") {
-            special = true;
-        }
-        else if (special) {
-            special = false;
-            regex += String.escape(ch);
-        }
-        else {
-            var obj = Date.formatCodeToRegex(ch, currentGroup);
-            currentGroup += obj.g;
-            regex += obj.s;
-            if (obj.g && obj.c) {
-                code += obj.c;
-            }
-        }
-    }
-
-    code += "if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
-        + "{return new Date(y, m, d, h, i, s);}\n"
-        + "else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
-        + "{return new Date(y, m, d, h, i);}\n"
-        + "else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
-        + "{return new Date(y, m, d, h);}\n"
-        + "else if (y > 0 && m >= 0 && d > 0)\n"
-        + "{return new Date(y, m, d);}\n"
-        + "else if (y > 0 && m >= 0)\n"
-        + "{return new Date(y, m);}\n"
-        + "else if (y > 0)\n"
-        + "{return new Date(y);}\n"
-        + "}return null;}";
-
-    Date.parseRegexes[regexNum] = new RegExp("^" + regex + "$");
-    eval(code);
-};
-
-// private
-Date.formatCodeToRegex = function(character, currentGroup) {
-    switch (character) {
-    case "D":
-        return {g:0,
-        c:null,
-        s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};
-    case "j":
-    case "d":
-        return {g:1,
-            c:"d = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{1,2})"};
-    case "l":
-        return {g:0,
-            c:null,
-            s:"(?:" + Date.dayNames.join("|") + ")"};
-    case "S":
-        return {g:0,
-            c:null,
-            s:"(?:st|nd|rd|th)"};
-    case "w":
-        return {g:0,
-            c:null,
-            s:"\\d"};
-    case "z":
-        return {g:0,
-            c:null,
-            s:"(?:\\d{1,3})"};
-    case "W":
-        return {g:0,
-            c:null,
-            s:"(?:\\d{2})"};
-    case "F":
-        return {g:1,
-            c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "].substring(0, 3)], 10);\n",
-            s:"(" + Date.monthNames.join("|") + ")"};
-    case "M":
-        return {g:1,
-            c:"m = parseInt(Date.monthNumbers[results[" + currentGroup + "]], 10);\n",
-            s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};
-    case "n":
-    case "m":
-        return {g:1,
-            c:"m = parseInt(results[" + currentGroup + "], 10) - 1;\n",
-            s:"(\\d{1,2})"};
-    case "t":
-        return {g:0,
-            c:null,
-            s:"\\d{1,2}"};
-    case "L":
-        return {g:0,
-            c:null,
-            s:"(?:1|0)"};
-    case "Y":
-        return {g:1,
-            c:"y = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{4})"};
-    case "y":
-        return {g:1,
-            c:"var ty = parseInt(results[" + currentGroup + "], 10);\n"
-                + "y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",
-            s:"(\\d{1,2})"};
-    case "a":
-        return {g:1,
-            c:"if (results[" + currentGroup + "] == 'am') {\n"
-                + "if (h == 12) { h = 0; }\n"
-                + "} else { if (h < 12) { h += 12; }}",
-            s:"(am|pm)"};
-    case "A":
-        return {g:1,
-            c:"if (results[" + currentGroup + "] == 'AM') {\n"
-                + "if (h == 12) { h = 0; }\n"
-                + "} else { if (h < 12) { h += 12; }}",
-            s:"(AM|PM)"};
-    case "g":
-    case "G":
-    case "h":
-    case "H":
-        return {g:1,
-            c:"h = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{1,2})"};
-    case "i":
-        return {g:1,
-            c:"i = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{2})"};
-    case "s":
-        return {g:1,
-            c:"s = parseInt(results[" + currentGroup + "], 10);\n",
-            s:"(\\d{2})"};
-    case "O":
-        return {g:0,
-            c:null,
-            s:"[+-]\\d{4}"};
-    case "T":
-        return {g:0,
-            c:null,
-            s:"[A-Z]{3}"};
-    case "Z":
-        return {g:0,
-            c:null,
-            s:"[+-]\\d{1,5}"};
-    default:
-        return {g:0,
-            c:null,
-            s:String.escape(character)};
-    }
-};
-
-
-Date.prototype.getTimezone = function() {
-    return this.toString().replace(
-        /^.*? ([A-Z]{3}) [0-9]{4}.*$/, "$1").replace(
-        /^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, "$1$2$3");
-};
-
-
-Date.prototype.getGMTOffset = function() {
-    return (this.getTimezoneOffset() > 0 ? "-" : "+")
-        + String.leftPad(Math.floor(this.getTimezoneOffset() / 60), 2, "0")
-        + String.leftPad(this.getTimezoneOffset() % 60, 2, "0");
-};
-
-
-Date.prototype.getDayOfYear = function() {
-    var num = 0;
-    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
-    for (var i = 0; i < this.getMonth(); ++i) {
-        num += Date.daysInMonth[i];
-    }
-    return num + this.getDate() - 1;
-};
-
-
-Date.prototype.getWeekOfYear = function() {
-    // Skip to Thursday of this week
-    var now = this.getDayOfYear() + (4 - this.getDay());
-    // Find the first Thursday of the year
-    var jan1 = new Date(this.getFullYear(), 0, 1);
-    var then = (7 - jan1.getDay() + 4);
-    return String.leftPad(((now - then) / 7) + 1, 2, "0");
-};
-
-
-Date.prototype.isLeapYear = function() {
-    var year = this.getFullYear();
-    return ((year & 3) == 0 && (year % 100 || (year % 400 == 0 && year)));
-};
-
-
-Date.prototype.getFirstDayOfMonth = function() {
-    var day = (this.getDay() - (this.getDate() - 1)) % 7;
-    return (day < 0) ? (day + 7) : day;
-};
-
-
-Date.prototype.getLastDayOfMonth = function() {
-    var day = (this.getDay() + (Date.daysInMonth[this.getMonth()] - this.getDate())) % 7;
-    return (day < 0) ? (day + 7) : day;
-};
-
-
-
-Date.prototype.getFirstDateOfMonth = function() {
-    return new Date(this.getFullYear(), this.getMonth(), 1);
-};
-
-
-Date.prototype.getLastDateOfMonth = function() {
-    return new Date(this.getFullYear(), this.getMonth(), this.getDaysInMonth());
-};
-
-Date.prototype.getDaysInMonth = function() {
-    Date.daysInMonth[1] = this.isLeapYear() ? 29 : 28;
-    return Date.daysInMonth[this.getMonth()];
-};
-
-
-Date.prototype.getSuffix = function() {
-    switch (this.getDate()) {
-        case 1:
-        case 21:
-        case 31:
-            return "st";
-        case 2:
-        case 22:
-            return "nd";
-        case 3:
-        case 23:
-            return "rd";
-        default:
-            return "th";
-    }
-};
-
-// private
-Date.daysInMonth = [31,28,31,30,31,30,31,31,30,31,30,31];
-
-
-Date.monthNames =
-   ["January",
-    "February",
-    "March",
-    "April",
-    "May",
-    "June",
-    "July",
-    "August",
-    "September",
-    "October",
-    "November",
-    "December"];
-
-
-Date.dayNames =
-   ["Sunday",
-    "Monday",
-    "Tuesday",
-    "Wednesday",
-    "Thursday",
-    "Friday",
-    "Saturday"];
-
-// private
-Date.y2kYear = 50;
-// private
-Date.monthNumbers = {
-    Jan:0,
-    Feb:1,
-    Mar:2,
-    Apr:3,
-    May:4,
-    Jun:5,
-    Jul:6,
-    Aug:7,
-    Sep:8,
-    Oct:9,
-    Nov:10,
-    Dec:11};
-
-
-Date.prototype.clone = function() {
-	return new Date(this.getTime());
-};
-
-
-Date.prototype.clearTime = function(clone){
-    if(clone){
-        return this.clone().clearTime();
-    }
-    this.setHours(0);
-    this.setMinutes(0);
-    this.setSeconds(0);
-    this.setMilliseconds(0);
-    return this;
-};
-
-// private
-// safari setMonth is broken
-if(Ext.isSafari){
-    Date.brokenSetMonth = Date.prototype.setMonth;
-	Date.prototype.setMonth = function(num){
-		if(num <= -1){
-			var n = Math.ceil(-num);
-			var back_year = Math.ceil(n/12);
-			var month = (n % 12) ? 12 - n % 12 : 0 ;
-			this.setFullYear(this.getFullYear() - back_year);
-			return Date.brokenSetMonth.call(this, month);
-		} else {
-			return Date.brokenSetMonth.apply(this, arguments);
-		}
-	};
-}
-
-
-Date.MILLI = "ms";
-
-Date.SECOND = "s";
-
-Date.MINUTE = "mi";
-
-Date.HOUR = "h";
-
-Date.DAY = "d";
-
-Date.MONTH = "mo";
-
-Date.YEAR = "y";
-
-
-Date.prototype.add = function(interval, value){
-  var d = this.clone();
-  if (!interval || value === 0) return d;
-  switch(interval.toLowerCase()){
-    case Date.MILLI:
-      d.setMilliseconds(this.getMilliseconds() + value);
-      break;
-    case Date.SECOND:
-      d.setSeconds(this.getSeconds() + value);
-      break;
-    case Date.MINUTE:
-      d.setMinutes(this.getMinutes() + value);
-      break;
-    case Date.HOUR:
-      d.setHours(this.getHours() + value);
-      break;
-    case Date.DAY:
-      d.setDate(this.getDate() + value);
-      break;
-    case Date.MONTH:
-      var day = this.getDate();
-      if(day > 28){
-          day = Math.min(day, this.getFirstDateOfMonth().add('mo', value).getLastDateOfMonth().getDate());
-      }
-      d.setDate(day);
-      d.setMonth(this.getMonth() + value);
-      break;
-    case Date.YEAR:
-      d.setFullYear(this.getFullYear() + value);
-      break;
-  }
-  return d;
-};
-
-Ext.util.DelayedTask = function(fn, scope, args){
-    var id = null, d, t;
-
-    var call = function(){
-        var now = new Date().getTime();
-        if(now - t >= d){
-            clearInterval(id);
-            id = null;
-            fn.apply(scope, args || []);
-        }
-    };
-
-    this.delay = function(delay, newFn, newScope, newArgs){
-        if(id && delay != d){
-            this.cancel();
-        }
-        d = delay;
-        t = new Date().getTime();
-        fn = newFn || fn;
-        scope = newScope || scope;
-        args = newArgs || args;
-        if(!id){
-            id = setInterval(call, d);
-        }
-    };
-
-
-    this.cancel = function(){
-        if(id){
-            clearInterval(id);
-            id = null;
-        }
-    };
-};
-Ext.util.TaskRunner = function(interval){
-    interval = interval || 10;
-    var tasks = [], removeQueue = [];
-    var id = 0;
-    var running = false;
-
-    var stopThread = function(){
-        running = false;
-        clearInterval(id);
-        id = 0;
-    };
-
-    var startThread = function(){
-        if(!running){
-            running = true;
-            id = setInterval(runTasks, interval);
-        }
-    };
-
-    var removeTask = function(task){
-        removeQueue.push(task);
-        if(task.onStop){
-            task.onStop();
-        }
-    };
-
-    var runTasks = function(){
-        if(removeQueue.length > 0){
-            for(var i = 0, len = removeQueue.length; i < len; i++){
-                tasks.remove(removeQueue[i]);
-            }
-            removeQueue = [];
-            if(tasks.length < 1){
-                stopThread();
-                return;
-            }
-        }
-        var now = new Date().getTime();
-        for(var i = 0, len = tasks.length; i < len; ++i){
-            var t = tasks[i];
-            var itime = now - t.taskRunTime;
-            if(t.interval <= itime){
-                var rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
-                t.taskRunTime = now;
-                if(rt === false || t.taskRunCount === t.repeat){
-                    removeTask(t);
-                    return;
-                }
-            }
-            if(t.duration && t.duration <= (now - t.taskStartTime)){
-                removeTask(t);
-            }
-        }
-    };
-
-
-    this.start = function(task){
-        tasks.push(task);
-        task.taskStartTime = new Date().getTime();
-        task.taskRunTime = 0;
-        task.taskRunCount = 0;
-        startThread();
-        return task;
-    };
-
-    this.stop = function(task){
-        removeTask(task);
-        return task;
-    };
-
-    this.stopAll = function(){
-        stopThread();
-        for(var i = 0, len = tasks.length; i < len; i++){
-            if(tasks[i].onStop){
-                tasks[i].onStop();
-            }
-        }
-        tasks = [];
-        removeQueue = [];
-    };
-};
-
-Ext.TaskMgr = new Ext.util.TaskRunner();
-
-Ext.util.MixedCollection = function(allowFunctions, keyFn){
-    this.items = [];
-    this.map = {};
-    this.keys = [];
-    this.length = 0;
-    this.addEvents({
-
-        "clear" : true,
-
-        "add" : true,
-
-        "replace" : true,
-
-        "remove" : true,
-        "sort" : true
-    });
-    this.allowFunctions = allowFunctions === true;
-    if(keyFn){
-        this.getKey = keyFn;
-    }
-    Ext.util.MixedCollection.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.util.MixedCollection, Ext.util.Observable, {
-    allowFunctions : false,
-
-
-    add : function(key, o){
-        if(arguments.length == 1){
-            o = arguments[0];
-            key = this.getKey(o);
-        }
-        if(typeof key == "undefined" || key === null){
-            this.length++;
-            this.items.push(o);
-            this.keys.push(null);
-        }else{
-            var old = this.map[key];
-            if(old){
-                return this.replace(key, o);
-            }
-            this.length++;
-            this.items.push(o);
-            this.map[key] = o;
-            this.keys.push(key);
-        }
-        this.fireEvent("add", this.length-1, o, key);
-        return o;
-    },
-
-
-    getKey : function(o){
-         return o.id;
-    },
-
-
-    replace : function(key, o){
-        if(arguments.length == 1){
-            o = arguments[0];
-            key = this.getKey(o);
-        }
-        var old = this.item(key);
-        if(typeof key == "undefined" || key === null || typeof old == "undefined"){
-             return this.add(key, o);
-        }
-        var index = this.indexOfKey(key);
-        this.items[index] = o;
-        this.map[key] = o;
-        this.fireEvent("replace", key, old, o);
-        return o;
-    },
-
-
-    addAll : function(objs){
-        if(arguments.length > 1 || objs instanceof Array){
-            var args = arguments.length > 1 ? arguments : objs;
-            for(var i = 0, len = args.length; i < len; i++){
-                this.add(args[i]);
-            }
-        }else{
-            for(var key in objs){
-                if(this.allowFunctions || typeof objs[key] != "function"){
-                    this.add(objs[key], key);
-                }
-            }
-        }
-    },
-
-
-    each : function(fn, scope){
-        var items = [].concat(this.items); // each safe for removal
-        for(var i = 0, len = items.length; i < len; i++){
-            if(fn.call(scope || items[i], items[i], i, len) === false){
-                break;
-            }
-        }
-    },
-
-
-    eachKey : function(fn, scope){
-        for(var i = 0, len = this.keys.length; i < len; i++){
-            fn.call(scope || window, this.keys[i], this.items[i], i, len);
-        }
-    },
-
-
-    find : function(fn, scope){
-        for(var i = 0, len = this.items.length; i < len; i++){
-            if(fn.call(scope || window, this.items[i], this.keys[i])){
-                return this.items[i];
-            }
-        }
-        return null;
-    },
-
-
-    insert : function(index, key, o){
-        if(arguments.length == 2){
-            o = arguments[1];
-            key = this.getKey(o);
-        }
-        if(index >= this.length){
-            return this.add(key, o);
-        }
-        this.length++;
-        this.items.splice(index, 0, o);
-        if(typeof key != "undefined" && key != null){
-            this.map[key] = o;
-        }
-        this.keys.splice(index, 0, key);
-        this.fireEvent("add", index, o, key);
-        return o;
-    },
-
-
-    remove : function(o){
-        return this.removeAt(this.indexOf(o));
-    },
-
-
-    removeAt : function(index){
-        if(index < this.length && index >= 0){
-            this.length--;
-            var o = this.items[index];
-            this.items.splice(index, 1);
-            var key = this.keys[index];
-            if(typeof key != "undefined"){
-                delete this.map[key];
-            }
-            this.keys.splice(index, 1);
-            this.fireEvent("remove", o, key);
-        }
-    },
-
-
-    removeKey : function(key){
-        return this.removeAt(this.indexOfKey(key));
-    },
-
-
-    getCount : function(){
-        return this.length;
-    },
-
-
-    indexOf : function(o){
-        if(!this.items.indexOf){
-            for(var i = 0, len = this.items.length; i < len; i++){
-                if(this.items[i] == o) return i;
-            }
-            return -1;
-        }else{
-            return this.items.indexOf(o);
-        }
-    },
-
-
-    indexOfKey : function(key){
-        if(!this.keys.indexOf){
-            for(var i = 0, len = this.keys.length; i < len; i++){
-                if(this.keys[i] == key) return i;
-            }
-            return -1;
-        }else{
-            return this.keys.indexOf(key);
-        }
-    },
-
-
-    item : function(key){
-        var item = typeof this.map[key] != "undefined" ? this.map[key] : this.items[key];
-        return typeof item != 'function' || this.allowFunctions ? item : null; // for prototype!
-    },
-
-
-    itemAt : function(index){
-        return this.items[index];
-    },
-
-
-    key : function(key){
-        return this.map[key];
-    },
-
-
-    contains : function(o){
-        return this.indexOf(o) != -1;
-    },
-
-
-    containsKey : function(key){
-        return typeof this.map[key] != "undefined";
-    },
-
-
-    clear : function(){
-        this.length = 0;
-        this.items = [];
-        this.keys = [];
-        this.map = {};
-        this.fireEvent("clear");
-    },
-
-
-    first : function(){
-        return this.items[0];
-    },
-
-
-    last : function(){
-        return this.items[this.length-1];
-    },
-
-    _sort : function(property, dir, fn){
-        var dsc = String(dir).toUpperCase() == "DESC" ? -1 : 1;
-        fn = fn || function(a, b){
-            return a-b;
-        };
-        var c = [], k = this.keys, items = this.items;
-        for(var i = 0, len = items.length; i < len; i++){
-            c[c.length] = {key: k[i], value: items[i], index: i};
-        }
-        c.sort(function(a, b){
-            var v = fn(a[property], b[property]) * dsc;
-            if(v == 0){
-                v = (a.index < b.index ? -1 : 1);
-            }
-            return v;
-        });
-        for(var i = 0, len = c.length; i < len; i++){
-            items[i] = c[i].value;
-            k[i] = c[i].key;
-        }
-        this.fireEvent("sort", this);
-    },
-
-
-    sort : function(dir, fn){
-        this._sort("value", dir, fn);
-    },
-
-
-    keySort : function(dir, fn){
-        this._sort("key", dir, fn || function(a, b){
-            return String(a).toUpperCase()-String(b).toUpperCase();
-        });
-    },
-
-
-    getRange : function(start, end){
-        var items = this.items;
-        if(items.length < 1){
-            return [];
-        }
-        start = start || 0;
-        end = Math.min(typeof end == "undefined" ? this.length-1 : end, this.length-1);
-        var r = [];
-        if(start <= end){
-            for(var i = start; i <= end; i++) {
-        	    r[r.length] = items[i];
-            }
-        }else{
-            for(var i = start; i >= end; i--) {
-        	    r[r.length] = items[i];
-            }
-        }
-        return r;
-    },
-
-
-    filter : function(property, value){
-        if(!value.exec){ // not a regex
-            value = String(value);
-            if(value.length == 0){
-                return this.clone();
-            }
-            value = new RegExp("^" + Ext.escapeRe(value), "i");
-        }
-        return this.filterBy(function(o){
-            return o && value.test(o[property]);
-        });
-	},
-
-
-    filterBy : function(fn, scope){
-        var r = new Ext.util.MixedCollection();
-        r.getKey = this.getKey;
-        var k = this.keys, it = this.items;
-        for(var i = 0, len = it.length; i < len; i++){
-            if(fn.call(scope||this, it[i], k[i])){
-				r.add(k[i], it[i]);
-			}
-        }
-        return r;
-    },
-
-
-    clone : function(){
-        var r = new Ext.util.MixedCollection();
-        var k = this.keys, it = this.items;
-        for(var i = 0, len = it.length; i < len; i++){
-            r.add(k[i], it[i]);
-        }
-        r.getKey = this.getKey;
-        return r;
-    }
-});
-
-Ext.util.MixedCollection.prototype.get = Ext.util.MixedCollection.prototype.item;
-
-Ext.util.JSON = new (function(){
-    var useHasOwn = {}.hasOwnProperty ? true : false;
-
-    // crashes Safari in some instances
-    //var validRE = /^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/;
-
-    var pad = function(n) {
-        return n < 10 ? "0" + n : n;
-    };
-
-    var m = {
-        "\b": '\\b',
-        "\t": '\\t',
-        "\n": '\\n',
-        "\f": '\\f',
-        "\r": '\\r',
-        '"' : '\\"',
-        "\\": '\\\\'
-    };
-
-    var encodeString = function(s){
-        if (/["\\\x00-\x1f]/.test(s)) {
-            return '"' + s.replace(/([\x00-\x1f\\"])/g, function(a, b) {
-                var c = m[b];
-                if(c){
-                    return c;
-                }
-                c = b.charCodeAt();
-                return "\\u00" +
-                    Math.floor(c / 16).toString(16) +
-                    (c % 16).toString(16);
-            }) + '"';
-        }
-        return '"' + s + '"';
-    };
-
-    var encodeArray = function(o){
-        var a = ["["], b, i, l = o.length, v;
-            for (i = 0; i < l; i += 1) {
-                v = o[i];
-                switch (typeof v) {
-                    case "undefined":
-                    case "function":
-                    case "unknown":
-                        break;
-                    default:
-                        if (b) {
-                            a.push(',');
-                        }
-                        a.push(v === null ? "null" : Ext.util.JSON.encode(v));
-                        b = true;
-                }
-            }
-            a.push("]");
-            return a.join("");
-    };
-
-    var encodeDate = function(o){
-        return '"' + o.getFullYear() + "-" +
-                pad(o.getMonth() + 1) + "-" +
-                pad(o.getDate()) + "T" +
-                pad(o.getHours()) + ":" +
-                pad(o.getMinutes()) + ":" +
-                pad(o.getSeconds()) + '"';
-    };
-
-
-    this.encode = function(o){
-        if(typeof o == "undefined" || o === null){
-            return "null";
-        }else if(o instanceof Array){
-            return encodeArray(o);
-        }else if(o instanceof Date){
-            return encodeDate(o);
-        }else if(typeof o == "string"){
-            return encodeString(o);
-        }else if(typeof o == "number"){
-            return isFinite(o) ? String(o) : "null";
-        }else if(typeof o == "boolean"){
-            return String(o);
-        }else {
-            var a = ["{"], b, i, v;
-            for (i in o) {
-                if(!useHasOwn || o.hasOwnProperty(i)) {
-                    v = o[i];
-                    switch (typeof v) {
-                    case "undefined":
-                    case "function":
-                    case "unknown":
-                        break;
-                    default:
-                        if(b){
-                            a.push(',');
-                        }
-                        a.push(this.encode(i), ":",
-                                v === null ? "null" : this.encode(v));
-                        b = true;
-                    }
-                }
-            }
-            a.push("}");
-            return a.join("");
-        }
-    };
-
-
-    this.decode = function(json){
-        return eval("(" + json + ')');
-    };
-})();
-
-Ext.encode = Ext.util.JSON.encode;
-
-Ext.decode = Ext.util.JSON.decode;
-
-
-Ext.util.Format = function(){
-    var trimRe = /^\s+|\s+$/g;
-    return {
-
-        ellipsis : function(value, len){
-            if(value && value.length > len){
-                return value.substr(0, len-3)+"...";
-            }
-            return value;
-        },
-
-
-        undef : function(value){
-            return typeof value != "undefined" ? value : "";
-        },
-
-
-        htmlEncode : function(value){
-            return !value ? value : String(value).replace(/&/g, "&amp;").replace(/>/g, "&gt;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
-        },
-
-
-        trim : function(value){
-            return String(value).replace(trimRe, "");
-        },
-
-
-        substr : function(value, start, length){
-            return String(value).substr(start, length);
-        },
-
-
-        lowercase : function(value){
-            return String(value).toLowerCase();
-        },
-
-
-        uppercase : function(value){
-            return String(value).toUpperCase();
-        },
-
-
-        capitalize : function(value){
-            return !value ? value : value.charAt(0).toUpperCase() + value.substr(1).toLowerCase();
-        },
-
-        // private
-        call : function(value, fn){
-            if(arguments.length > 2){
-                var args = Array.prototype.slice.call(arguments, 2);
-                args.unshift(value);
-                return eval(fn).apply(window, args);
-            }else{
-                return eval(fn).call(window, value);
-            }
-        },
-
-
-        usMoney : function(v){
-            v = (Math.round((v-0)*100))/100;
-            v = (v == Math.floor(v)) ? v + ".00" : ((v*10 == Math.floor(v*10)) ? v + "0" : v);
-            return "$" + v ;
-        },
-
-
-        date : function(v, format){
-            if(!v){
-                return "";
-            }
-            if(!(v instanceof Date)){
-                v = new Date(Date.parse(v));
-            }
-            return v.dateFormat(format || "m/d/Y");
-        },
-
-
-        dateRenderer : function(format){
-            return function(v){
-                return Ext.util.Format.date(v, format);
-            };
-        },
-
-        // private
-        stripTagsRE : /<\/?[^>]+>/gi,
-
-
-        stripTags : function(v){
-            return !v ? v : String(v).replace(this.stripTagsRE, "");
-        }
-    };
-}();
-
-Ext.util.CSS = function(){
-	var rules = null;
-   	var doc = document;
-
-    var camelRe = /(-[a-z])/gi;
-    var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
-
-   return {
-
-   createStyleSheet : function(cssText){
-       var ss;
-       if(Ext.isIE){
-           ss = doc.createStyleSheet();
-           ss.cssText = cssText;
-       }else{
-           var head = doc.getElementsByTagName("head")[0];
-           var rules = doc.createElement("style");
-           rules.setAttribute("type", "text/css");
-           try{
-                rules.appendChild(doc.createTextNode(cssText));
-           }catch(e){
-               rules.cssText = cssText;
-           }
-           head.appendChild(rules);
-           ss = rules.styleSheet ? rules.styleSheet : (rules.sheet || doc.styleSheets[doc.styleSheets.length-1]);
-       }
-       this.cacheStyleSheet(ss);
-       return ss;
-   },
-
-
-   removeStyleSheet : function(id){
-       var existing = doc.getElementById(id);
-       if(existing){
-           existing.parentNode.removeChild(existing);
-       }
-   },
-
-
-   swapStyleSheet : function(id, url){
-       this.removeStyleSheet(id);
-       var ss = doc.createElement("link");
-       ss.setAttribute("rel", "stylesheet");
-       ss.setAttribute("type", "text/css");
-       ss.setAttribute("id", id);
-       ss.setAttribute("href", url);
-       doc.getElementsByTagName("head")[0].appendChild(ss);
-   },
-
-
-   refreshCache : function(){
-       return this.getRules(true);
-   },
-
-   // private
-   cacheStyleSheet : function(ss){
-       if(!rules){
-           rules = {};
-       }
-       try{// try catch for cross domain access issue
-           var ssRules = ss.cssRules || ss.rules;
-           for(var j = ssRules.length-1; j >= 0; --j){
-               rules[ssRules[j].selectorText] = ssRules[j];
-           }
-       }catch(e){}
-   },
-
-
-   getRules : function(refreshCache){
-   		if(rules == null || refreshCache){
-   			rules = {};
-   			var ds = doc.styleSheets;
-   			for(var i =0, len = ds.length; i < len; i++){
-   			    try{
-    		        this.cacheStyleSheet(ds[i]);
-    		    }catch(e){}
-	        }
-   		}
-   		return rules;
-   	},
-
-
-   getRule : function(selector, refreshCache){
-   		var rs = this.getRules(refreshCache);
-   		if(!(selector instanceof Array)){
-   		    return rs[selector];
-   		}
-   		for(var i = 0; i < selector.length; i++){
-			if(rs[selector[i]]){
-				return rs[selector[i]];
-			}
-		}
-		return null;
-   	},
-
-
-
-   updateRule : function(selector, property, value){
-   		if(!(selector instanceof Array)){
-   			var rule = this.getRule(selector);
-   			if(rule){
-   				rule.style[property.replace(camelRe, camelFn)] = value;
-   				return true;
-   			}
-   		}else{
-   			for(var i = 0; i < selector.length; i++){
-   				if(this.updateRule(selector[i], property, value)){
-   					return true;
-   				}
-   			}
-   		}
-   		return false;
-   	}
-   };
-}();
-
-Ext.util.ClickRepeater = function(el, config)
-{
-    this.el = Ext.get(el);
-    this.el.unselectable();
-
-    Ext.apply(this, config);
-
-    this.addEvents({
-
-        "mousedown" : true,
-
-        "click" : true,
-
-        "mouseup" : true
-    });
-
-    this.el.on("mousedown", this.handleMouseDown, this);
-    if(this.preventDefault || this.stopDefault){
-        this.el.on("click", function(e){
-            if(this.preventDefault){
-                e.preventDefault();
-            }
-            if(this.stopDefault){
-                e.stopEvent();
-            }
-        }, this);
-    }
-
-    // allow inline handler
-    if(this.handler){
-        this.on("click", this.handler,  this.scope || this);
-    }
-
-    Ext.util.ClickRepeater.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.util.ClickRepeater, Ext.util.Observable, {
-    interval : 20,
-    delay: 250,
-    preventDefault : true,
-    stopDefault : false,
-    timer : 0,
-    docEl : Ext.get(document),
-
-    // private
-    handleMouseDown : function(){
-        clearTimeout(this.timer);
-        this.el.blur();
-        if(this.pressClass){
-            this.el.addClass(this.pressClass);
-        }
-        this.mousedownTime = new Date();
-
-        this.docEl.on("mouseup", this.handleMouseUp, this);
-        this.el.on("mouseout", this.handleMouseOut, this);
-
-        this.fireEvent("mousedown", this);
-        this.fireEvent("click", this);
-
-        this.timer = this.click.defer(this.delay || this.interval, this);
-    },
-
-    // private
-    click : function(){
-        this.fireEvent("click", this);
-        this.timer = this.click.defer(this.getInterval(), this);
-    },
-
-    // private
-    getInterval: function(){
-        if(!this.accelerate){
-            return this.interval;
-        }
-        var pressTime = this.mousedownTime.getElapsed();
-        if(pressTime < 500){
-            return 400;
-        }else if(pressTime < 1700){
-            return 320;
-        }else if(pressTime < 2600){
-            return 250;
-        }else if(pressTime < 3500){
-            return 180;
-        }else if(pressTime < 4400){
-            return 140;
-        }else if(pressTime < 5300){
-            return 80;
-        }else if(pressTime < 6200){
-            return 50;
-        }else{
-            return 10;
-        }
-    },
-
-    // private
-    handleMouseOut : function(){
-        clearTimeout(this.timer);
-        if(this.pressClass){
-            this.el.removeClass(this.pressClass);
-        }
-        this.el.on("mouseover", this.handleMouseReturn, this);
-    },
-
-    // private
-    handleMouseReturn : function(){
-        this.el.un("mouseover", this.handleMouseReturn);
-        if(this.pressClass){
-            this.el.addClass(this.pressClass);
-        }
-        this.click();
-    },
-
-    // private
-    handleMouseUp : function(){
-        clearTimeout(this.timer);
-        this.el.un("mouseover", this.handleMouseReturn);
-        this.el.un("mouseout", this.handleMouseOut);
-        this.docEl.un("mouseup", this.handleMouseUp);
-        this.el.removeClass(this.pressClass);
-        this.fireEvent("mouseup", this);
-    }
-});
-
-Ext.KeyNav = function(el, config){
-    this.el = Ext.get(el);
-    Ext.apply(this, config);
-    if(!this.disabled){
-        this.disabled = true;
-        this.enable();
-    }
-};
-
-Ext.KeyNav.prototype = {
-    disabled : false,
-    defaultEventAction: "stopEvent",
-
-    prepareEvent : function(e){
-        var k = e.getKey();
-        var h = this.keyToHandler[k];
-        //if(h && this[h]){
-        //    e.stopPropagation();
-        //}
-        if(Ext.isSafari && h && k >= 37 && k <= 40){
-            e.stopEvent();
-        }
-    },
-
-    relay : function(e){
-        var k = e.getKey();
-        var h = this.keyToHandler[k];
-        if(h && this[h]){
-            if(this.doRelay(e, this[h], h) !== true){
-                e[this.defaultEventAction]();
-            }
-        }
-    },
-
-    doRelay : function(e, h, hname){
-        return h.call(this.scope || this, e);
-    },
-
-    // possible handlers
-    enter : false,
-    left : false,
-    right : false,
-    up : false,
-    down : false,
-    tab : false,
-    esc : false,
-    pageUp : false,
-    pageDown : false,
-    del : false,
-    home : false,
-    end : false,
-
-    // quick lookup hash
-    keyToHandler : {
-        37 : "left",
-        39 : "right",
-        38 : "up",
-        40 : "down",
-        33 : "pageUp",
-        34 : "pageDown",
-        46 : "del",
-        36 : "home",
-        35 : "end",
-        13 : "enter",
-        27 : "esc",
-        9  : "tab"
-    },
-
-
-	enable: function(){
-		if(this.disabled){
-            // ie won't do special keys on keypress, no one else will repeat keys with keydown
-            // the EventObject will normalize Safari automatically
-            if(Ext.isIE){
-                this.el.on("keydown", this.relay,  this);
-            }else{
-                this.el.on("keydown", this.prepareEvent,  this);
-                this.el.on("keypress", this.relay,  this);
-            }
-		    this.disabled = false;
-		}
-	},
-
-
-	disable: function(){
-		if(!this.disabled){
-		    if(Ext.isIE){
-                this.el.un("keydown", this.relay);
-            }else{
-                this.el.un("keydown", this.prepareEvent);
-                this.el.un("keypress", this.relay);
-            }
-		    this.disabled = true;
-		}
-	}
-};
-
-Ext.KeyMap = function(el, config, eventName){
-    this.el  = Ext.get(el);
-    this.eventName = eventName || "keydown";
-    this.bindings = [];
-    if(config instanceof Array){
-	    for(var i = 0, len = config.length; i < len; i++){
-	        this.addBinding(config[i]);
-	    }
-    }else{
-        this.addBinding(config);
-    }
-    this.keyDownDelegate = Ext.EventManager.wrap(this.handleKeyDown, this, true);
-    this.enable();
-};
-
-Ext.KeyMap.prototype = {
-
-    stopEvent : false,
-
-
-	addBinding : function(config){
-        var keyCode = config.key,
-            shift = config.shift,
-            ctrl = config.ctrl,
-            alt = config.alt,
-            fn = config.fn,
-            scope = config.scope;
-        if(typeof keyCode == "string"){
-            var ks = [];
-            var keyString = keyCode.toUpperCase();
-            for(var j = 0, len = keyString.length; j < len; j++){
-                ks.push(keyString.charCodeAt(j));
-            }
-            keyCode = ks;
-        }
-        var keyArray = keyCode instanceof Array;
-        var handler = function(e){
-            if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) &&  (!alt || e.altKey)){
-                var k = e.getKey();
-                if(keyArray){
-                    for(var i = 0, len = keyCode.length; i < len; i++){
-                        if(keyCode[i] == k){
-                          if(this.stopEvent){
-                              e.stopEvent();
-                          }
-                          fn.call(scope || window, k, e);
-                          return;
-                        }
-                    }
-                }else{
-                    if(k == keyCode){
-                        if(this.stopEvent){
-                           e.stopEvent();
-                        }
-                        fn.call(scope || window, k, e);
-                    }
-                }
-            }
-        };
-        this.bindings.push(handler);
-	},
-
-    // private
-    handleKeyDown : function(e){
-	    if(this.enabled){ //just in case
-    	    var b = this.bindings;
-    	    for(var i = 0, len = b.length; i < len; i++){
-    	        b[i].call(this, e);
-    	    }
-	    }
-	},
-
-
-	isEnabled : function(){
-	    return this.enabled;
-	},
-
-
-	enable: function(){
-		if(!this.enabled){
-		    this.el.on(this.eventName, this.keyDownDelegate);
-		    this.enabled = true;
-		}
-	},
-
-
-	disable: function(){
-		if(this.enabled){
-		    this.el.removeListener(this.eventName, this.keyDownDelegate);
-		    this.enabled = false;
-		}
-	}
-};
-
-Ext.util.TextMetrics = function(){
-    var shared;
-    return {
-
-        measure : function(el, text, fixedWidth){
-            if(!shared){
-                shared = Ext.util.TextMetrics.Instance(el, fixedWidth);
-            }
-            shared.bind(el);
-            shared.setFixedWidth(fixedWidth || 'auto');
-            return shared.getSize(text);
-        },
-
-
-        createInstance : function(el, fixedWidth){
-            return Ext.util.TextMetrics.Instance(el, fixedWidth);
-        }
-    };
-}();
-
-Ext.util.TextMetrics.Instance = function(bindTo, fixedWidth){
-    var ml = new Ext.Element(document.createElement('div'));
-    document.body.appendChild(ml.dom);
-    ml.position('absolute');
-    ml.setLeftTop(-1000, -1000);
-    ml.hide();
-
-    if(fixedWidth){
-        ml.setWidth(fixedWidth);
-    }
-
-    var instance = {
-
-        getSize : function(text){
-            ml.update(text);
-            var s = ml.getSize();
-            ml.update('');
-            return s;
-        },
-
-
-        bind : function(el){
-            ml.setStyle(
-                Ext.fly(el).getStyles('font-size','font-style', 'font-weight', 'font-family','line-height')
-            );
-        },
-
-
-        setFixedWidth : function(width){
-            ml.setWidth(width);
-        },
-
-
-        getWidth : function(text){
-            ml.dom.style.width = 'auto';
-            return this.getSize(text).width;
-        },
-
-
-        getHeight : function(text){
-            return this.getSize(text).height;
-        }
-    };
-
-    instance.bind(bindTo);
-
-    return instance;
-};
-
-// backwards compat
-Ext.Element.measureText = Ext.util.TextMetrics.measure;
-
-Ext.state.Provider = function(){
-    Ext.state.Provider.superclass.constructor.call(this);
-
-    this.addEvents({
-        "statechange": true
-    });
-    this.state = {};
-    Ext.state.Provider.superclass.constructor.call(this);
-};
-Ext.extend(Ext.state.Provider, Ext.util.Observable, {
-
-    get : function(name, defaultValue){
-        return typeof this.state[name] == "undefined" ?
-            defaultValue : this.state[name];
-    },
-
-
-    clear : function(name){
-        delete this.state[name];
-        this.fireEvent("statechange", this, name, null);
-    },
-
-
-    set : function(name, value){
-        this.state[name] = value;
-        this.fireEvent("statechange", this, name, value);
-    },
-
-
-    decodeValue : function(cookie){
-        var re = /^(a|n|d|b|s|o)\:(.*)$/;
-        var matches = re.exec(unescape(cookie));
-        if(!matches || !matches[1]) return; // non state cookie
-        var type = matches[1];
-        var v = matches[2];
-        switch(type){
-            case "n":
-                return parseFloat(v);
-            case "d":
-                return new Date(Date.parse(v));
-            case "b":
-                return (v == "1");
-            case "a":
-                var all = [];
-                var values = v.split("^");
-                for(var i = 0, len = values.length; i < len; i++){
-                    all.push(this.decodeValue(values[i]));
-                }
-                return all;
-           case "o":
-                var all = {};
-                var values = v.split("^");
-                for(var i = 0, len = values.length; i < len; i++){
-                    var kv = values[i].split("=");
-                    all[kv[0]] = this.decodeValue(kv[1]);
-                }
-                return all;
-           default:
-                return v;
-        }
-    },
-
-
-    encodeValue : function(v){
-        var enc;
-        if(typeof v == "number"){
-            enc = "n:" + v;
-        }else if(typeof v == "boolean"){
-            enc = "b:" + (v ? "1" : "0");
-        }else if(v instanceof Date){
-            enc = "d:" + v.toGMTString();
-        }else if(v instanceof Array){
-            var flat = "";
-            for(var i = 0, len = v.length; i < len; i++){
-                flat += this.encodeValue(v[i]);
-                if(i != len-1) flat += "^";
-            }
-            enc = "a:" + flat;
-        }else if(typeof v == "object"){
-            var flat = "";
-            for(var key in v){
-                if(typeof v[key] != "function"){
-                    flat += key + "=" + this.encodeValue(v[key]) + "^";
-                }
-            }
-            enc = "o:" + flat.substring(0, flat.length-1);
-        }else{
-            enc = "s:" + v;
-        }
-        return escape(enc);
-    }
-});
-
-
-Ext.state.Manager = function(){
-    var provider = new Ext.state.Provider();
-
-    return {
-
-        setProvider : function(stateProvider){
-            provider = stateProvider;
-        },
-
-
-        get : function(key, defaultValue){
-            return provider.get(key, defaultValue);
-        },
-
-
-         set : function(key, value){
-            provider.set(key, value);
-        },
-
-
-        clear : function(key){
-            provider.clear(key);
-        },
-
-
-        getProvider : function(){
-            return provider;
-        }
-    };
-}();
-
-
-Ext.state.CookieProvider = function(config){
-    Ext.state.CookieProvider.superclass.constructor.call(this);
-    this.path = "/";
-    this.expires = new Date(new Date().getTime()+(1000*60*60*24*7)); //7 days
-    this.domain = null;
-    this.secure = false;
-    Ext.apply(this, config);
-    this.state = this.readCookies();
-};
-
-Ext.extend(Ext.state.CookieProvider, Ext.state.Provider, {
-    // private
-    set : function(name, value){
-        if(typeof value == "undefined" || value === null){
-            this.clear(name);
-            return;
-        }
-        this.setCookie(name, value);
-        Ext.state.CookieProvider.superclass.set.call(this, name, value);
-    },
-
-    // private
-    clear : function(name){
-        this.clearCookie(name);
-        Ext.state.CookieProvider.superclass.clear.call(this, name);
-    },
-
-    // private
-    readCookies : function(){
-        var cookies = {};
-        var c = document.cookie + ";";
-        var re = /\s?(.*?)=(.*?);/g;
-    	var matches;
-    	while((matches = re.exec(c)) != null){
-            var name = matches[1];
-            var value = matches[2];
-            if(name && name.substring(0,3) == "ys-"){
-                cookies[name.substr(3)] = this.decodeValue(value);
-            }
-        }
-        return cookies;
-    },
-
-    // private
-    setCookie : function(name, value){
-        document.cookie = "ys-"+ name + "=" + this.encodeValue(value) +
-           ((this.expires == null) ? "" : ("; expires=" + this.expires.toGMTString())) +
-           ((this.path == null) ? "" : ("; path=" + this.path)) +
-           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
-           ((this.secure == true) ? "; secure" : "");
-    },
-
-    // private
-    clearCookie : function(name){
-        document.cookie = "ys-" + name + "=null; expires=Thu, 01-Jan-70 00:00:01 GMT" +
-           ((this.path == null) ? "" : ("; path=" + this.path)) +
-           ((this.domain == null) ? "" : ("; domain=" + this.domain)) +
-           ((this.secure == true) ? "; secure" : "");
-    }
-});
-
-
-
-(function() {
-
-var Event=Ext.EventManager;
-var Dom=Ext.lib.Dom;
-
-
-Ext.dd.DragDrop = function(id, sGroup, config) {
-    if (id) {
-        this.init(id, sGroup, config);
-    }
-};
-
-Ext.dd.DragDrop.prototype = {
-
-
-    id: null,
-
-
-    config: null,
-
-
-    dragElId: null,
-
-
-    handleElId: null,
-
-
-    invalidHandleTypes: null,
-
-
-    invalidHandleIds: null,
-
-
-    invalidHandleClasses: null,
-
-
-    startPageX: 0,
-
-
-    startPageY: 0,
-
-
-    groups: null,
-
-
-    locked: false,
-
-
-    lock: function() { this.locked = true; },
-
-
-    unlock: function() { this.locked = false; },
-
-
-    isTarget: true,
-
-
-    padding: null,
-
-
-    _domRef: null,
-
-
-    __ygDragDrop: true,
-
-
-    constrainX: false,
-
-
-    constrainY: false,
-
-
-    minX: 0,
-
-
-    maxX: 0,
-
-
-    minY: 0,
-
-
-    maxY: 0,
-
-
-    maintainOffset: false,
-
-
-    xTicks: null,
-
-
-    yTicks: null,
-
-
-    primaryButtonOnly: true,
-
-
-    available: false,
-
-
-    hasOuterHandles: false,
-
-
-    b4StartDrag: function(x, y) { },
-
-
-    startDrag: function(x, y) {  },
-
-
-    b4Drag: function(e) { },
-
-
-    onDrag: function(e) {  },
-
-
-    onDragEnter: function(e, id) {  },
-
-
-    b4DragOver: function(e) { },
-
-
-    onDragOver: function(e, id) {  },
-
-
-    b4DragOut: function(e) { },
-
-
-    onDragOut: function(e, id) {  },
-
-
-    b4DragDrop: function(e) { },
-
-
-    onDragDrop: function(e, id) {  },
-
-
-    onInvalidDrop: function(e) {  },
-
-
-    b4EndDrag: function(e) { },
-
-
-    endDrag: function(e) {  },
-
-
-    b4MouseDown: function(e) {  },
-
-
-    onMouseDown: function(e) {  },
-
-
-    onMouseUp: function(e) {  },
-
-
-    onAvailable: function () {
-    },
-
-
-    defaultPadding : {left:0, right:0, top:0, bottom:0},
-
-
-    constrainTo : function(constrainTo, pad, inContent){
-        if(typeof pad == "number"){
-            pad = {left: pad, right:pad, top:pad, bottom:pad};
-        }
-        pad = pad || this.defaultPadding;
-        var b = Ext.get(this.getEl()).getBox();
-        var ce = Ext.get(constrainTo);
-        var s = ce.getScroll();
-        var c, cd = ce.dom;
-        if(cd == document.body){
-            c = { x: s.left, y: s.top, width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};
-        }else{
-            xy = ce.getXY();
-            c = {x : xy[0]+s.left, y: xy[1]+s.top, width: cd.clientWidth, height: cd.clientHeight};
-        }
-
-
-        var topSpace = b.y - c.y;
-        var leftSpace = b.x - c.x;
-
-        this.resetConstraints();
-        this.setXConstraint(leftSpace - (pad.left||0), // left
-                c.width - leftSpace - b.width - (pad.right||0) //right
-        );
-        this.setYConstraint(topSpace - (pad.top||0), //top
-                c.height - topSpace - b.height - (pad.bottom||0) //bottom
-        );
-    },
-
-
-    getEl: function() {
-        if (!this._domRef) {
-            this._domRef = Ext.getDom(this.id);
-        }
-
-        return this._domRef;
-    },
-
-
-    getDragEl: function() {
-        return Ext.getDom(this.dragElId);
-    },
-
-
-    init: function(id, sGroup, config) {
-        this.initTarget(id, sGroup, config);
-        Event.on(this.id, "mousedown", this.handleMouseDown, this);
-        // Event.on(this.id, "selectstart", Event.preventDefault);
-    },
-
-
-    initTarget: function(id, sGroup, config) {
-
-        // configuration attributes
-        this.config = config || {};
-
-        // create a local reference to the drag and drop manager
-        this.DDM = Ext.dd.DDM;
-        // initialize the groups array
-        this.groups = {};
-
-        // assume that we have an element reference instead of an id if the
-        // parameter is not a string
-        if (typeof id !== "string") {
-            id = Ext.id(id);
-        }
-
-        // set the id
-        this.id = id;
-
-        // add to an interaction group
-        this.addToGroup((sGroup) ? sGroup : "default");
-
-        // We don't want to register this as the handle with the manager
-        // so we just set the id rather than calling the setter.
-        this.handleElId = id;
-
-        // the linked element is the element that gets dragged by default
-        this.setDragElId(id);
-
-        // by default, clicked anchors will not start drag operations.
-        this.invalidHandleTypes = { A: "A" };
-        this.invalidHandleIds = {};
-        this.invalidHandleClasses = [];
-
-        this.applyConfig();
-
-        this.handleOnAvailable();
-    },
-
-
-    applyConfig: function() {
-
-        // configurable properties:
-        //    padding, isTarget, maintainOffset, primaryButtonOnly
-        this.padding           = this.config.padding || [0, 0, 0, 0];
-        this.isTarget          = (this.config.isTarget !== false);
-        this.maintainOffset    = (this.config.maintainOffset);
-        this.primaryButtonOnly = (this.config.primaryButtonOnly !== false);
-
-    },
-
-
-    handleOnAvailable: function() {
-        this.available = true;
-        this.resetConstraints();
-        this.onAvailable();
-    },
-
-
-    setPadding: function(iTop, iRight, iBot, iLeft) {
-        // this.padding = [iLeft, iRight, iTop, iBot];
-        if (!iRight && 0 !== iRight) {
-            this.padding = [iTop, iTop, iTop, iTop];
-        } else if (!iBot && 0 !== iBot) {
-            this.padding = [iTop, iRight, iTop, iRight];
-        } else {
-            this.padding = [iTop, iRight, iBot, iLeft];
-        }
-    },
-
-
-    setInitPosition: function(diffX, diffY) {
-        var el = this.getEl();
-
-        if (!this.DDM.verifyEl(el)) {
-            return;
-        }
-
-        var dx = diffX || 0;
-        var dy = diffY || 0;
-
-        var p = Dom.getXY( el );
-
-        this.initPageX = p[0] - dx;
-        this.initPageY = p[1] - dy;
-
-        this.lastPageX = p[0];
-        this.lastPageY = p[1];
-
-
-        this.setStartPosition(p);
-    },
-
-
-    setStartPosition: function(pos) {
-        var p = pos || Dom.getXY( this.getEl() );
-        this.deltaSetXY = null;
-
-        this.startPageX = p[0];
-        this.startPageY = p[1];
-    },
-
-
-    addToGroup: function(sGroup) {
-        this.groups[sGroup] = true;
-        this.DDM.regDragDrop(this, sGroup);
-    },
-
-
-    removeFromGroup: function(sGroup) {
-        if (this.groups[sGroup]) {
-            delete this.groups[sGroup];
-        }
-
-        this.DDM.removeDDFromGroup(this, sGroup);
-    },
-
-
-    setDragElId: function(id) {
-        this.dragElId = id;
-    },
-
-
-    setHandleElId: function(id) {
-        if (typeof id !== "string") {
-            id = Ext.id(id);
-        }
-        this.handleElId = id;
-        this.DDM.regHandle(this.id, id);
-    },
-
-
-    setOuterHandleElId: function(id) {
-        if (typeof id !== "string") {
-            id = Ext.id(id);
-        }
-        Event.on(id, "mousedown",
-                this.handleMouseDown, this);
-        this.setHandleElId(id);
-
-        this.hasOuterHandles = true;
-    },
-
-
-    unreg: function() {
-        Event.un(this.id, "mousedown",
-                this.handleMouseDown);
-        this._domRef = null;
-        this.DDM._remove(this);
-    },
-
-    destroy : function(){
-        this.unreg();
-    },
-
-
-    isLocked: function() {
-        return (this.DDM.isLocked() || this.locked);
-    },
-
-
-    handleMouseDown: function(e, oDD){
-        if (this.primaryButtonOnly && e.button != 0) {
-            return;
-        }
-
-        if (this.isLocked()) {
-            return;
-        }
-
-        this.DDM.refreshCache(this.groups);
-
-        var pt = new Ext.lib.Point(Ext.lib.Event.getPageX(e), Ext.lib.Event.getPageY(e));
-        if (!this.hasOuterHandles && !this.DDM.isOverTarget(pt, this) )  {
-        } else {
-            if (this.clickValidator(e)) {
-
-                // set the initial element position
-                this.setStartPosition();
-
-
-                this.b4MouseDown(e);
-                this.onMouseDown(e);
-
-                this.DDM.handleMouseDown(e, this);
-
-                this.DDM.stopEvent(e);
-            } else {
-
-
-            }
-        }
-    },
-
-    clickValidator: function(e) {
-        var target = Ext.lib.Event.getTarget(e);
-        return ( this.isValidHandleChild(target) &&
-                    (this.id == this.handleElId ||
-                        this.DDM.handleWasClicked(target, this.id)) );
-    },
-
-
-    addInvalidHandleType: function(tagName) {
-        var type = tagName.toUpperCase();
-        this.invalidHandleTypes[type] = type;
-    },
-
-
-    addInvalidHandleId: function(id) {
-        if (typeof id !== "string") {
-            id = Ext.id(id);
-        }
-        this.invalidHandleIds[id] = id;
-    },
-
-
-    addInvalidHandleClass: function(cssClass) {
-        this.invalidHandleClasses.push(cssClass);
-    },
-
-
-    removeInvalidHandleType: function(tagName) {
-        var type = tagName.toUpperCase();
-        // this.invalidHandleTypes[type] = null;
-        delete this.invalidHandleTypes[type];
-    },
-
-
-    removeInvalidHandleId: function(id) {
-        if (typeof id !== "string") {
-            id = Ext.id(id);
-        }
-        delete this.invalidHandleIds[id];
-    },
-
-
-    removeInvalidHandleClass: function(cssClass) {
-        for (var i=0, len=this.invalidHandleClasses.length; i<len; ++i) {
-            if (this.invalidHandleClasses[i] == cssClass) {
-                delete this.invalidHandleClasses[i];
-            }
-        }
-    },
-
-
-    isValidHandleChild: function(node) {
-
-        var valid = true;
-        // var n = (node.nodeName == "#text") ? node.parentNode : node;
-        var nodeName;
-        try {
-            nodeName = node.nodeName.toUpperCase();
-        } catch(e) {
-            nodeName = node.nodeName;
-        }
-        valid = valid && !this.invalidHandleTypes[nodeName];
-        valid = valid && !this.invalidHandleIds[node.id];
-
-        for (var i=0, len=this.invalidHandleClasses.length; valid && i<len; ++i) {
-            valid = !Dom.hasClass(node, this.invalidHandleClasses[i]);
-        }
-
-
-        return valid;
-
-    },
-
-
-    setXTicks: function(iStartX, iTickSize) {
-        this.xTicks = [];
-        this.xTickSize = iTickSize;
-
-        var tickMap = {};
-
-        for (var i = this.initPageX; i >= this.minX; i = i - iTickSize) {
-            if (!tickMap[i]) {
-                this.xTicks[this.xTicks.length] = i;
-                tickMap[i] = true;
-            }
-        }
-
-        for (i = this.initPageX; i <= this.maxX; i = i + iTickSize) {
-            if (!tickMap[i]) {
-                this.xTicks[this.xTicks.length] = i;
-                tickMap[i] = true;
-            }
-        }
-
-        this.xTicks.sort(this.DDM.numericSort) ;
-    },
-
-
-    setYTicks: function(iStartY, iTickSize) {
-        this.yTicks = [];
-        this.yTickSize = iTickSize;
-
-        var tickMap = {};
-
-        for (var i = this.initPageY; i >= this.minY; i = i - iTickSize) {
-            if (!tickMap[i]) {
-                this.yTicks[this.yTicks.length] = i;
-                tickMap[i] = true;
-            }
-        }
-
-        for (i = this.initPageY; i <= this.maxY; i = i + iTickSize) {
-            if (!tickMap[i]) {
-                this.yTicks[this.yTicks.length] = i;
-                tickMap[i] = true;
-            }
-        }
-
-        this.yTicks.sort(this.DDM.numericSort) ;
-    },
-
-
-    setXConstraint: function(iLeft, iRight, iTickSize) {
-        this.leftConstraint = iLeft;
-        this.rightConstraint = iRight;
-
-        this.minX = this.initPageX - iLeft;
-        this.maxX = this.initPageX + iRight;
-        if (iTickSize) { this.setXTicks(this.initPageX, iTickSize); }
-
-        this.constrainX = true;
-    },
-
-
-    clearConstraints: function() {
-        this.constrainX = false;
-        this.constrainY = false;
-        this.clearTicks();
-    },
-
-
-    clearTicks: function() {
-        this.xTicks = null;
-        this.yTicks = null;
-        this.xTickSize = 0;
-        this.yTickSize = 0;
-    },
-
-
-    setYConstraint: function(iUp, iDown, iTickSize) {
-        this.topConstraint = iUp;
-        this.bottomConstraint = iDown;
-
-        this.minY = this.initPageY - iUp;
-        this.maxY = this.initPageY + iDown;
-        if (iTickSize) { this.setYTicks(this.initPageY, iTickSize); }
-
-        this.constrainY = true;
-
-    },
-
-
-    resetConstraints: function() {
-
-
-        // Maintain offsets if necessary
-        if (this.initPageX || this.initPageX === 0) {
-            // figure out how much this thing has moved
-            var dx = (this.maintainOffset) ? this.lastPageX - this.initPageX : 0;
-            var dy = (this.maintainOffset) ? this.lastPageY - this.initPageY : 0;
-
-            this.setInitPosition(dx, dy);
-
-        // This is the first time we have detected the element's position
-        } else {
-            this.setInitPosition();
-        }
-
-        if (this.constrainX) {
-            this.setXConstraint( this.leftConstraint,
-                                 this.rightConstraint,
-                                 this.xTickSize        );
-        }
-
-        if (this.constrainY) {
-            this.setYConstraint( this.topConstraint,
-                                 this.bottomConstraint,
-                                 this.yTickSize         );
-        }
-    },
-
-
-    getTick: function(val, tickArray) {
-
-        if (!tickArray) {
-            // If tick interval is not defined, it is effectively 1 pixel,
-            // so we return the value passed to us.
-            return val;
-        } else if (tickArray[0] >= val) {
-            // The value is lower than the first tick, so we return the first
-            // tick.
-            return tickArray[0];
-        } else {
-            for (var i=0, len=tickArray.length; i<len; ++i) {
-                var next = i + 1;
-                if (tickArray[next] && tickArray[next] >= val) {
-                    var diff1 = val - tickArray[i];
-                    var diff2 = tickArray[next] - val;
-                    return (diff2 > diff1) ? tickArray[i] : tickArray[next];
-                }
-            }
-
-            // The value is larger than the last tick, so we return the last
-            // tick.
-            return tickArray[tickArray.length - 1];
-        }
-    },
-
-
-    toString: function() {
-        return ("DragDrop " + this.id);
-    }
-
-};
-
-})();
-
-
-// Only load the library once.  Rewriting the manager class would orphan
-// existing drag and drop instances.
-if (!Ext.dd.DragDropMgr) {
-
-
-Ext.dd.DragDropMgr = function() {
-
-    var Event = Ext.EventManager;
-
-    return {
-
-
-        ids: {},
-
-
-        handleIds: {},
-
-
-        dragCurrent: null,
-
-
-        dragOvers: {},
-
-
-        deltaX: 0,
-
-
-        deltaY: 0,
-
-
-        preventDefault: true,
-
-
-        stopPropagation: true,
-
-
-        initalized: false,
-
-
-        locked: false,
-
-
-        init: function() {
-            this.initialized = true;
-        },
-
-
-        POINT: 0,
-
-
-        INTERSECT: 1,
-
-
-        mode: 0,
-
-
-        _execOnAll: function(sMethod, args) {
-            for (var i in this.ids) {
-                for (var j in this.ids[i]) {
-                    var oDD = this.ids[i][j];
-                    if (! this.isTypeOfDD(oDD)) {
-                        continue;
-                    }
-                    oDD[sMethod].apply(oDD, args);
-                }
-            }
-        },
-
-
-        _onLoad: function() {
-
-            this.init();
-
-
-            Event.on(document, "mouseup",   this.handleMouseUp, this, true);
-            Event.on(document, "mousemove", this.handleMouseMove, this, true);
-            Event.on(window,   "unload",    this._onUnload, this, true);
-            Event.on(window,   "resize",    this._onResize, this, true);
-            // Event.on(window,   "mouseout",    this._test);
-
-        },
-
-
-        _onResize: function(e) {
-            this._execOnAll("resetConstraints", []);
-        },
-
-
-        lock: function() { this.locked = true; },
-
-
-        unlock: function() { this.locked = false; },
-
-
-        isLocked: function() { return this.locked; },
-
-
-        locationCache: {},
-
-
-        useCache: true,
-
-
-        clickPixelThresh: 3,
-
-
-        clickTimeThresh: 350,
-
-
-        dragThreshMet: false,
-
-
-        clickTimeout: null,
-
-
-        startX: 0,
-
-
-        startY: 0,
-
-
-        regDragDrop: function(oDD, sGroup) {
-            if (!this.initialized) { this.init(); }
-
-            if (!this.ids[sGroup]) {
-                this.ids[sGroup] = {};
-            }
-            this.ids[sGroup][oDD.id] = oDD;
-        },
-
-
-        removeDDFromGroup: function(oDD, sGroup) {
-            if (!this.ids[sGroup]) {
-                this.ids[sGroup] = {};
-            }
-
-            var obj = this.ids[sGroup];
-            if (obj && obj[oDD.id]) {
-                delete obj[oDD.id];
-            }
-        },
-
-
-        _remove: function(oDD) {
-            for (var g in oDD.groups) {
-                if (g && this.ids[g][oDD.id]) {
-                    delete this.ids[g][oDD.id];
-                }
-            }
-            delete this.handleIds[oDD.id];
-        },
-
-
-        regHandle: function(sDDId, sHandleId) {
-            if (!this.handleIds[sDDId]) {
-                this.handleIds[sDDId] = {};
-            }
-            this.handleIds[sDDId][sHandleId] = sHandleId;
-        },
-
-
-        isDragDrop: function(id) {
-            return ( this.getDDById(id) ) ? true : false;
-        },
-
-
-        getRelated: function(p_oDD, bTargetsOnly) {
-            var oDDs = [];
-            for (var i in p_oDD.groups) {
-                for (j in this.ids[i]) {
-                    var dd = this.ids[i][j];
-                    if (! this.isTypeOfDD(dd)) {
-                        continue;
-                    }
-                    if (!bTargetsOnly || dd.isTarget) {
-                        oDDs[oDDs.length] = dd;
-                    }
-                }
-            }
-
-            return oDDs;
-        },
-
-
-        isLegalTarget: function (oDD, oTargetDD) {
-            var targets = this.getRelated(oDD, true);
-            for (var i=0, len=targets.length;i<len;++i) {
-                if (targets[i].id == oTargetDD.id) {
-                    return true;
-                }
-            }
-
-            return false;
-        },
-
-
-        isTypeOfDD: function (oDD) {
-            return (oDD && oDD.__ygDragDrop);
-        },
-
-
-        isHandle: function(sDDId, sHandleId) {
-            return ( this.handleIds[sDDId] &&
-                            this.handleIds[sDDId][sHandleId] );
-        },
-
-
-        getDDById: function(id) {
-            for (var i in this.ids) {
-                if (this.ids[i][id]) {
-                    return this.ids[i][id];
-                }
-            }
-            return null;
-        },
-
-
-        handleMouseDown: function(e, oDD) {
-
-            if(Ext.QuickTips){
-                Ext.QuickTips.disable();
-            }
-            this.currentTarget = Ext.lib.Event.getTarget(e);
-
-            this.dragCurrent = oDD;
-
-            var el = oDD.getEl();
-
-            // track start position
-            this.startX = Ext.lib.Event.getPageX(e);
-            this.startY = Ext.lib.Event.getPageY(e);
-
-            this.deltaX = this.startX - el.offsetLeft;
-            this.deltaY = this.startY - el.offsetTop;
-
-            this.dragThreshMet = false;
-
-            this.clickTimeout = setTimeout(
-                    function() {
-                        var DDM = Ext.dd.DDM;
-                        DDM.startDrag(DDM.startX, DDM.startY);
-                    },
-                    this.clickTimeThresh );
-        },
-
-
-        startDrag: function(x, y) {
-            clearTimeout(this.clickTimeout);
-            if (this.dragCurrent) {
-                this.dragCurrent.b4StartDrag(x, y);
-                this.dragCurrent.startDrag(x, y);
-            }
-            this.dragThreshMet = true;
-        },
-
-
-        handleMouseUp: function(e) {
-
-            if(Ext.QuickTips){
-                Ext.QuickTips.enable();
-            }
-            if (! this.dragCurrent) {
-                return;
-            }
-
-            clearTimeout(this.clickTimeout);
-
-            if (this.dragThreshMet) {
-                this.fireEvents(e, true);
-            } else {
-            }
-
-            this.stopDrag(e);
-
-            this.stopEvent(e);
-        },
-
-
-        stopEvent: function(e){
-            if(this.stopPropagation) {
-                e.stopPropagation();
-            }
-
-            if (this.preventDefault) {
-                e.preventDefault();
-            }
-        },
-
-
-        stopDrag: function(e) {
-            // Fire the drag end event for the item that was dragged
-            if (this.dragCurrent) {
-                if (this.dragThreshMet) {
-                    this.dragCurrent.b4EndDrag(e);
-                    this.dragCurrent.endDrag(e);
-                }
-
-                this.dragCurrent.onMouseUp(e);
-            }
-
-            this.dragCurrent = null;
-            this.dragOvers = {};
-        },
-
-
-        handleMouseMove: function(e) {
-            if (! this.dragCurrent) {
-                return true;
-            }
-
-            // var button = e.which || e.button;
-
-            // check for IE mouseup outside of page boundary
-            if (Ext.isIE && (e.button !== 0 && e.button !== 1 && e.button !== 2)) {
-                this.stopEvent(e);
-                return this.handleMouseUp(e);
-            }
-
-            if (!this.dragThreshMet) {
-                var diffX = Math.abs(this.startX - Ext.lib.Event.getPageX(e));
-                var diffY = Math.abs(this.startY - Ext.lib.Event.getPageY(e));
-                if (diffX > this.clickPixelThresh ||
-                            diffY > this.clickPixelThresh) {
-                    this.startDrag(this.startX, this.startY);
-                }
-            }
-
-            if (this.dragThreshMet) {
-                this.dragCurrent.b4Drag(e);
-                this.dragCurrent.onDrag(e);
-                if(!this.dragCurrent.moveOnly){
-                    this.fireEvents(e, false);
-                }
-            }
-
-            this.stopEvent(e);
-
-            return true;
-        },
-
-
-        fireEvents: function(e, isDrop) {
-            var dc = this.dragCurrent;
-
-            // If the user did the mouse up outside of the window, we could
-            // get here even though we have ended the drag.
-            if (!dc || dc.isLocked()) {
-                return;
-            }
-
-            var x = Ext.lib.Event.getPageX(e);
-            var y = Ext.lib.Event.getPageY(e);
-            var pt = new Ext.lib.Point(x,y);
-
-            // cache the previous dragOver array
-            var oldOvers = [];
-
-            var outEvts   = [];
-            var overEvts  = [];
-            var dropEvts  = [];
-            var enterEvts = [];
-
-            // Check to see if the object(s) we were hovering over is no longer
-            // being hovered over so we can fire the onDragOut event
-            for (var i in this.dragOvers) {
-
-                var ddo = this.dragOvers[i];
-
-                if (! this.isTypeOfDD(ddo)) {
-                    continue;
-                }
-
-                if (! this.isOverTarget(pt, ddo, this.mode)) {
-                    outEvts.push( ddo );
-                }
-
-                oldOvers[i] = true;
-                delete this.dragOvers[i];
-            }
-
-            for (var sGroup in dc.groups) {
-
-                if ("string" != typeof sGroup) {
-                    continue;
-                }
-
-                for (i in this.ids[sGroup]) {
-                    var oDD = this.ids[sGroup][i];
-                    if (! this.isTypeOfDD(oDD)) {
-                        continue;
-                    }
-
-                    if (oDD.isTarget && !oDD.isLocked() && oDD != dc) {
-                        if (this.isOverTarget(pt, oDD, this.mode)) {
-                            // look for drop interactions
-                            if (isDrop) {
-                                dropEvts.push( oDD );
-                            // look for drag enter and drag over interactions
-                            } else {
-
-                                // initial drag over: dragEnter fires
-                                if (!oldOvers[oDD.id]) {
-                                    enterEvts.push( oDD );
-                                // subsequent drag overs: dragOver fires
-                                } else {
-                                    overEvts.push( oDD );
-                                }
-
-                                this.dragOvers[oDD.id] = oDD;
-                            }
-                        }
-                    }
-                }
-            }
-
-            if (this.mode) {
-                if (outEvts.length) {
-                    dc.b4DragOut(e, outEvts);
-                    dc.onDragOut(e, outEvts);
-                }
-
-                if (enterEvts.length) {
-                    dc.onDragEnter(e, enterEvts);
-                }
-
-                if (overEvts.length) {
-                    dc.b4DragOver(e, overEvts);
-                    dc.onDragOver(e, overEvts);
-                }
-
-                if (dropEvts.length) {
-                    dc.b4DragDrop(e, dropEvts);
-                    dc.onDragDrop(e, dropEvts);
-                }
-
-            } else {
-                // fire dragout events
-                var len = 0;
-                for (i=0, len=outEvts.length; i<len; ++i) {
-                    dc.b4DragOut(e, outEvts[i].id);
-                    dc.onDragOut(e, outEvts[i].id);
-                }
-
-                // fire enter events
-                for (i=0,len=enterEvts.length; i<len; ++i) {
-                    // dc.b4DragEnter(e, oDD.id);
-                    dc.onDragEnter(e, enterEvts[i].id);
-                }
-
-                // fire over events
-                for (i=0,len=overEvts.length; i<len; ++i) {
-                    dc.b4DragOver(e, overEvts[i].id);
-                    dc.onDragOver(e, overEvts[i].id);
-                }
-
-                // fire drop events
-                for (i=0, len=dropEvts.length; i<len; ++i) {
-                    dc.b4DragDrop(e, dropEvts[i].id);
-                    dc.onDragDrop(e, dropEvts[i].id);
-                }
-
-            }
-
-            // notify about a drop that did not find a target
-            if (isDrop && !dropEvts.length) {
-                dc.onInvalidDrop(e);
-            }
-
-        },
-
-
-        getBestMatch: function(dds) {
-            var winner = null;
-            // Return null if the input is not what we expect
-            //if (!dds || !dds.length || dds.length == 0) {
-               // winner = null;
-            // If there is only one item, it wins
-            //} else if (dds.length == 1) {
-
-            var len = dds.length;
-
-            if (len == 1) {
-                winner = dds[0];
-            } else {
-                // Loop through the targeted items
-                for (var i=0; i<len; ++i) {
-                    var dd = dds[i];
-                    // If the cursor is over the object, it wins.  If the
-                    // cursor is over multiple matches, the first one we come
-                    // to wins.
-                    if (dd.cursorIsOver) {
-                        winner = dd;
-                        break;
-                    // Otherwise the object with the most overlap wins
-                    } else {
-                        if (!winner ||
-                            winner.overlap.getArea() < dd.overlap.getArea()) {
-                            winner = dd;
-                        }
-                    }
-                }
-            }
-
-            return winner;
-        },
-
-
-        refreshCache: function(groups) {
-            for (var sGroup in groups) {
-                if ("string" != typeof sGroup) {
-                    continue;
-                }
-                for (var i in this.ids[sGroup]) {
-                    var oDD = this.ids[sGroup][i];
-
-                    if (this.isTypeOfDD(oDD)) {
-                    // if (this.isTypeOfDD(oDD) && oDD.isTarget) {
-                        var loc = this.getLocation(oDD);
-                        if (loc) {
-                            this.locationCache[oDD.id] = loc;
-                        } else {
-                            delete this.locationCache[oDD.id];
-                            // this will unregister the drag and drop object if
-                            // the element is not in a usable state
-                            // oDD.unreg();
-                        }
-                    }
-                }
-            }
-        },
-
-
-        verifyEl: function(el) {
-            try {
-                if (el) {
-                    var parent = el.offsetParent;
-                    if (parent) {
-                        return true;
-                    }
-                }
-            } catch(e) {
-            }
-
-            return false;
-        },
-
-
-        getLocation: function(oDD) {
-            if (! this.isTypeOfDD(oDD)) {
-                return null;
-            }
-
-            var el = oDD.getEl(), pos, x1, x2, y1, y2, t, r, b, l;
-
-            try {
-                pos= Ext.lib.Dom.getXY(el);
-            } catch (e) { }
-
-            if (!pos) {
-                return null;
-            }
-
-            x1 = pos[0];
-            x2 = x1 + el.offsetWidth;
-            y1 = pos[1];
-            y2 = y1 + el.offsetHeight;
-
-            t = y1 - oDD.padding[0];
-            r = x2 + oDD.padding[1];
-            b = y2 + oDD.padding[2];
-            l = x1 - oDD.padding[3];
-
-            return new Ext.lib.Region( t, r, b, l );
-        },
-
-
-        isOverTarget: function(pt, oTarget, intersect) {
-            // use cache if available
-            var loc = this.locationCache[oTarget.id];
-            if (!loc || !this.useCache) {
-                loc = this.getLocation(oTarget);
-                this.locationCache[oTarget.id] = loc;
-
-            }
-
-            if (!loc) {
-                return false;
-            }
-
-            oTarget.cursorIsOver = loc.contains( pt );
-
-            // DragDrop is using this as a sanity check for the initial mousedown
-            // in this case we are done.  In POINT mode, if the drag obj has no
-            // contraints, we are also done. Otherwise we need to evaluate the
-            // location of the target as related to the actual location of the
-            // dragged element.
-            var dc = this.dragCurrent;
-            if (!dc || !dc.getTargetCoord ||
-                    (!intersect && !dc.constrainX && !dc.constrainY)) {
-                return oTarget.cursorIsOver;
-            }
-
-            oTarget.overlap = null;
-
-            // Get the current location of the drag element, this is the
-            // location of the mouse event less the delta that represents
-            // where the original mousedown happened on the element.  We
-            // need to consider constraints and ticks as well.
-            var pos = dc.getTargetCoord(pt.x, pt.y);
-
-            var el = dc.getDragEl();
-            var curRegion = new Ext.lib.Region( pos.y,
-                                                   pos.x + el.offsetWidth,
-                                                   pos.y + el.offsetHeight,
-                                                   pos.x );
-
-            var overlap = curRegion.intersect(loc);
-
-            if (overlap) {
-                oTarget.overlap = overlap;
-                return (intersect) ? true : oTarget.cursorIsOver;
-            } else {
-                return false;
-            }
-        },
-
-
-        _onUnload: function(e, me) {
-            Ext.dd.DragDropMgr.unregAll();
-        },
-
-
-        unregAll: function() {
-
-            if (this.dragCurrent) {
-                this.stopDrag();
-                this.dragCurrent = null;
-            }
-
-            this._execOnAll("unreg", []);
-
-            for (i in this.elementCache) {
-                delete this.elementCache[i];
-            }
-
-            this.elementCache = {};
-            this.ids = {};
-        },
-
-
-        elementCache: {},
-
-
-        getElWrapper: function(id) {
-            var oWrapper = this.elementCache[id];
-            if (!oWrapper || !oWrapper.el) {
-                oWrapper = this.elementCache[id] =
-                    new this.ElementWrapper(Ext.getDom(id));
-            }
-            return oWrapper;
-        },
-
-
-        getElement: function(id) {
-            return Ext.getDom(id);
-        },
-
-
-        getCss: function(id) {
-            var el = Ext.getDom(id);
-            return (el) ? el.style : null;
-        },
-
-
-        ElementWrapper: function(el) {
-
-                this.el = el || null;
-
-                this.id = this.el && el.id;
-
-                this.css = this.el && el.style;
-            },
-
-
-        getPosX: function(el) {
-            return Ext.lib.Dom.getX(el);
-        },
-
-
-        getPosY: function(el) {
-            return Ext.lib.Dom.getY(el);
-        },
-
-
-        swapNode: function(n1, n2) {
-            if (n1.swapNode) {
-                n1.swapNode(n2);
-            } else {
-                var p = n2.parentNode;
-                var s = n2.nextSibling;
-
-                if (s == n1) {
-                    p.insertBefore(n1, n2);
-                } else if (n2 == n1.nextSibling) {
-                    p.insertBefore(n2, n1);
-                } else {
-                    n1.parentNode.replaceChild(n2, n1);
-                    p.insertBefore(n1, s);
-                }
-            }
-        },
-
-
-        getScroll: function () {
-            var t, l, dde=document.documentElement, db=document.body;
-            if (dde && (dde.scrollTop || dde.scrollLeft)) {
-                t = dde.scrollTop;
-                l = dde.scrollLeft;
-            } else if (db) {
-                t = db.scrollTop;
-                l = db.scrollLeft;
-            } else {
-
-            }
-            return { top: t, left: l };
-        },
-
-
-        getStyle: function(el, styleProp) {
-            return Ext.fly(el).getStyle(styleProp);
-        },
-
-
-        getScrollTop: function () { return this.getScroll().top; },
-
-
-        getScrollLeft: function () { return this.getScroll().left; },
-
-
-        moveToEl: function (moveEl, targetEl) {
-            var aCoord = Ext.lib.Dom.getXY(targetEl);
-            Ext.lib.Dom.setXY(moveEl, aCoord);
-        },
-
-
-        numericSort: function(a, b) { return (a - b); },
-
-
-        _timeoutCount: 0,
-
-
-        _addListeners: function() {
-            var DDM = Ext.dd.DDM;
-            if ( Ext.lib.Event && document ) {
-                DDM._onLoad();
-            } else {
-                if (DDM._timeoutCount > 2000) {
-                } else {
-                    setTimeout(DDM._addListeners, 10);
-                    if (document && document.body) {
-                        DDM._timeoutCount += 1;
-                    }
-                }
-            }
-        },
-
-
-        handleWasClicked: function(node, id) {
-            if (this.isHandle(id, node.id)) {
-                return true;
-            } else {
-                // check to see if this is a text node child of the one we want
-                var p = node.parentNode;
-
-                while (p) {
-                    if (this.isHandle(id, p.id)) {
-                        return true;
-                    } else {
-                        p = p.parentNode;
-                    }
-                }
-            }
-
-            return false;
-        }
-
-    };
-
-}();
-
-// shorter alias, save a few bytes
-Ext.dd.DDM = Ext.dd.DragDropMgr;
-Ext.dd.DDM._addListeners();
-
-}
-
-
-Ext.dd.DD = function(id, sGroup, config) {
-    if (id) {
-        this.init(id, sGroup, config);
-    }
-};
-
-Ext.extend(Ext.dd.DD, Ext.dd.DragDrop, {
-
-
-    scroll: true,
-
-
-    autoOffset: function(iPageX, iPageY) {
-        var x = iPageX - this.startPageX;
-        var y = iPageY - this.startPageY;
-        this.setDelta(x, y);
-    },
-
-
-    setDelta: function(iDeltaX, iDeltaY) {
-        this.deltaX = iDeltaX;
-        this.deltaY = iDeltaY;
-    },
-
-
-    setDragElPos: function(iPageX, iPageY) {
-        // the first time we do this, we are going to check to make sure
-        // the element has css positioning
-
-        var el = this.getDragEl();
-        this.alignElWithMouse(el, iPageX, iPageY);
-    },
-
-
-    alignElWithMouse: function(el, iPageX, iPageY) {
-        var oCoord = this.getTargetCoord(iPageX, iPageY);
-        var fly = el.dom ? el : Ext.fly(el);
-        if (!this.deltaSetXY) {
-            var aCoord = [oCoord.x, oCoord.y];
-            fly.setXY(aCoord);
-            var newLeft = fly.getLeft(true);
-            var newTop  = fly.getTop(true);
-            this.deltaSetXY = [ newLeft - oCoord.x, newTop - oCoord.y ];
-        } else {
-            fly.setLeftTop(oCoord.x + this.deltaSetXY[0], oCoord.y + this.deltaSetXY[1]);
-        }
-
-        this.cachePosition(oCoord.x, oCoord.y);
-        this.autoScroll(oCoord.x, oCoord.y, el.offsetHeight, el.offsetWidth);
-        return oCoord;
-    },
-
-
-    cachePosition: function(iPageX, iPageY) {
-        if (iPageX) {
-            this.lastPageX = iPageX;
-            this.lastPageY = iPageY;
-        } else {
-            var aCoord = Ext.lib.Dom.getXY(this.getEl());
-            this.lastPageX = aCoord[0];
-            this.lastPageY = aCoord[1];
-        }
-    },
-
-
-    autoScroll: function(x, y, h, w) {
-
-        if (this.scroll) {
-            // The client height
-            var clientH = Ext.lib.Dom.getViewWidth();
-
-            // The client width
-            var clientW = Ext.lib.Dom.getViewHeight();
-
-            // The amt scrolled down
-            var st = this.DDM.getScrollTop();
-
-            // The amt scrolled right
-            var sl = this.DDM.getScrollLeft();
-
-            // Location of the bottom of the element
-            var bot = h + y;
-
-            // Location of the right of the element
-            var right = w + x;
-
-            // The distance from the cursor to the bottom of the visible area,
-            // adjusted so that we don't scroll if the cursor is beyond the
-            // element drag constraints
-            var toBot = (clientH + st - y - this.deltaY);
-
-            // The distance from the cursor to the right of the visible area
-            var toRight = (clientW + sl - x - this.deltaX);
-
-
-            // How close to the edge the cursor must be before we scroll
-            // var thresh = (document.all) ? 100 : 40;
-            var thresh = 40;
-
-            // How many pixels to scroll per autoscroll op.  This helps to reduce
-            // clunky scrolling. IE is more sensitive about this ... it needs this
-            // value to be higher.
-            var scrAmt = (document.all) ? 80 : 30;
-
-            // Scroll down if we are near the bottom of the visible page and the
-            // obj extends below the crease
-            if ( bot > clientH && toBot < thresh ) {
-                window.scrollTo(sl, st + scrAmt);
-            }
-
-            // Scroll up if the window is scrolled down and the top of the object
-            // goes above the top border
-            if ( y < st && st > 0 && y - st < thresh ) {
-                window.scrollTo(sl, st - scrAmt);
-            }
-
-            // Scroll right if the obj is beyond the right border and the cursor is
-            // near the border.
-            if ( right > clientW && toRight < thresh ) {
-                window.scrollTo(sl + scrAmt, st);
-            }
-
-            // Scroll left if the window has been scrolled to the right and the obj
-            // extends past the left border
-            if ( x < sl && sl > 0 && x - sl < thresh ) {
-                window.scrollTo(sl - scrAmt, st);
-            }
-        }
-    },
-
-
-    getTargetCoord: function(iPageX, iPageY) {
-
-
-        var x = iPageX - this.deltaX;
-        var y = iPageY - this.deltaY;
-
-        if (this.constrainX) {
-            if (x < this.minX) { x = this.minX; }
-            if (x > this.maxX) { x = this.maxX; }
-        }
-
-        if (this.constrainY) {
-            if (y < this.minY) { y = this.minY; }
-            if (y > this.maxY) { y = this.maxY; }
-        }
-
-        x = this.getTick(x, this.xTicks);
-        y = this.getTick(y, this.yTicks);
-
-
-        return {x:x, y:y};
-    },
-
-
-    applyConfig: function() {
-        Ext.dd.DD.superclass.applyConfig.call(this);
-        this.scroll = (this.config.scroll !== false);
-    },
-
-
-    b4MouseDown: function(e) {
-        // this.resetConstraints();
-        this.autoOffset(Ext.lib.Event.getPageX(e),
-                            Ext.lib.Event.getPageY(e));
-    },
-
-
-    b4Drag: function(e) {
-        this.setDragElPos(Ext.lib.Event.getPageX(e),
-                            Ext.lib.Event.getPageY(e));
-    },
-
-    toString: function() {
-        return ("DD " + this.id);
-    }
-
-    //////////////////////////////////////////////////////////////////////////
-    // Debugging ygDragDrop events that can be overridden
-    //////////////////////////////////////////////////////////////////////////
-
-
-});
-
-Ext.dd.DDProxy = function(id, sGroup, config) {
-    if (id) {
-        this.init(id, sGroup, config);
-        this.initFrame();
-    }
-};
-
-
-Ext.dd.DDProxy.dragElId = "ygddfdiv";
-
-Ext.extend(Ext.dd.DDProxy, Ext.dd.DD, {
-
-
-    resizeFrame: true,
-
-
-    centerFrame: false,
-
-
-    createFrame: function() {
-        var self = this;
-        var body = document.body;
-
-        if (!body || !body.firstChild) {
-            setTimeout( function() { self.createFrame(); }, 50 );
-            return;
-        }
-
-        var div = this.getDragEl();
-
-        if (!div) {
-            div    = document.createElement("div");
-            div.id = this.dragElId;
-            var s  = div.style;
-
-            s.position   = "absolute";
-            s.visibility = "hidden";
-            s.cursor     = "move";
-            s.border     = "2px solid #aaa";
-            s.zIndex     = 999;
-
-            // appendChild can blow up IE if invoked prior to the window load event
-            // while rendering a table.  It is possible there are other scenarios
-            // that would cause this to happen as well.
-            body.insertBefore(div, body.firstChild);
-        }
-    },
-
-
-    initFrame: function() {
-        this.createFrame();
-    },
-
-    applyConfig: function() {
-        Ext.dd.DDProxy.superclass.applyConfig.call(this);
-
-        this.resizeFrame = (this.config.resizeFrame !== false);
-        this.centerFrame = (this.config.centerFrame);
-        this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId);
-    },
-
-
-    showFrame: function(iPageX, iPageY) {
-        var el = this.getEl();
-        var dragEl = this.getDragEl();
-        var s = dragEl.style;
-
-        this._resizeProxy();
-
-        if (this.centerFrame) {
-            this.setDelta( Math.round(parseInt(s.width,  10)/2),
-                           Math.round(parseInt(s.height, 10)/2) );
-        }
-
-        this.setDragElPos(iPageX, iPageY);
-
-        Ext.fly(dragEl).show();
-    },
-
-
-    _resizeProxy: function() {
-        if (this.resizeFrame) {
-            var el = this.getEl();
-            Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight);
-        }
-    },
-
-    // overrides Ext.dd.DragDrop
-    b4MouseDown: function(e) {
-        var x = Ext.lib.Event.getPageX(e);
-        var y = Ext.lib.Event.getPageY(e);
-        this.autoOffset(x, y);
-        this.setDragElPos(x, y);
-    },
-
-    // overrides Ext.dd.DragDrop
-    b4StartDrag: function(x, y) {
-        // show the drag frame
-        this.showFrame(x, y);
-    },
-
-    // overrides Ext.dd.DragDrop
-    b4EndDrag: function(e) {
-        Ext.fly(this.getDragEl()).hide();
-    },
-
-    // overrides Ext.dd.DragDrop
-    // By default we try to move the element to the last location of the frame.
-    // This is so that the default behavior mirrors that of Ext.dd.DD.
-    endDrag: function(e) {
-
-        var lel = this.getEl();
-        var del = this.getDragEl();
-
-        // Show the drag frame briefly so we can get its position
-        del.style.visibility = "";
-
-        this.beforeMove();
-        // Hide the linked element before the move to get around a Safari
-        // rendering bug.
-        lel.style.visibility = "hidden";
-        Ext.dd.DDM.moveToEl(lel, del);
-        del.style.visibility = "hidden";
-        lel.style.visibility = "";
-
-        this.afterDrag();
-    },
-
-    beforeMove : function(){
-
-    },
-
-    afterDrag : function(){
-
-    },
-
-    toString: function() {
-        return ("DDProxy " + this.id);
-    }
-
-});
-
-Ext.dd.DDTarget = function(id, sGroup, config) {
-    if (id) {
-        this.initTarget(id, sGroup, config);
-    }
-};
-
-// Ext.dd.DDTarget.prototype = new Ext.dd.DragDrop();
-Ext.extend(Ext.dd.DDTarget, Ext.dd.DragDrop, {
-    toString: function() {
-        return ("DDTarget " + this.id);
-    }
-});
-
-
-Ext.dd.ScrollManager = function(){
-    var ddm = Ext.dd.DragDropMgr;
-    var els = {};
-    var dragEl = null;
-    var proc = {};
-
-    var onStop = function(e){
-        dragEl = null;
-        clearProc();
-    };
-
-    var triggerRefresh = function(){
-        if(ddm.dragCurrent){
-             ddm.refreshCache(ddm.dragCurrent.groups);
-        }
-    };
-
-    var doScroll = function(){
-        if(ddm.dragCurrent){
-            var dds = Ext.dd.ScrollManager;
-            if(!dds.animate){
-                if(proc.el.scroll(proc.dir, dds.increment)){
-                    triggerRefresh();
-                }
-            }else{
-                proc.el.scroll(proc.dir, dds.increment, true, dds.animDuration, triggerRefresh);
-            }
-        }
-    };
-
-    var clearProc = function(){
-        if(proc.id){
-            clearInterval(proc.id);
-        }
-        proc.id = 0;
-        proc.el = null;
-        proc.dir = "";
-    };
-
-    var startProc = function(el, dir){
-        clearProc();
-        proc.el = el;
-        proc.dir = dir;
-        proc.id = setInterval(doScroll, Ext.dd.ScrollManager.frequency);
-    };
-
-    var onFire = function(e, isDrop){
-        if(isDrop || !ddm.dragCurrent){ return; }
-        var dds = Ext.dd.ScrollManager;
-        if(!dragEl || dragEl != ddm.dragCurrent){
-            dragEl = ddm.dragCurrent;
-            // refresh regions on drag start
-            dds.refreshCache();
-        }
-
-        var xy = Ext.lib.Event.getXY(e);
-        var pt = new Ext.lib.Point(xy[0], xy[1]);
-        for(var id in els){
-            var el = els[id], r = el._region;
-            if(r && r.contains(pt) && el.isScrollable()){
-                if(r.bottom - pt.y <= dds.thresh){
-                    if(proc.el != el){
-                        startProc(el, "down");
-                    }
-                    return;
-                }else if(r.right - pt.x <= dds.thresh){
-                    if(proc.el != el){
-                        startProc(el, "left");
-                    }
-                    return;
-                }else if(pt.y - r.top <= dds.thresh){
-                    if(proc.el != el){
-                        startProc(el, "up");
-                    }
-                    return;
-                }else if(pt.x - r.left <= dds.thresh){
-                    if(proc.el != el){
-                        startProc(el, "right");
-                    }
-                    return;
-                }
-            }
-        }
-        clearProc();
-    };
-
-    ddm.fireEvents = ddm.fireEvents.createSequence(onFire, ddm);
-    ddm.stopDrag = ddm.stopDrag.createSequence(onStop, ddm);
-
-    return {
-
-        register : function(el){
-            if(el instanceof Array){
-                for(var i = 0, len = el.length; i < len; i++) {
-                	this.register(el[i]);
-                }
-            }else{
-                el = Ext.get(el);
-                els[el.id] = el;
-            }
-        },
-
-
-        unregister : function(el){
-            if(el instanceof Array){
-                for(var i = 0, len = el.length; i < len; i++) {
-                	this.unregister(el[i]);
-                }
-            }else{
-                el = Ext.get(el);
-                delete els[el.id];
-            }
-        },
-
-
-        thresh : 25,
-
-
-        increment : 100,
-
-
-        frequency : 500,
-
-
-        animate: true,
-
-
-        animDuration: .4,
-
-
-        refreshCache : function(){
-            for(var id in els){
-                if(typeof els[id] == 'object'){ // for people extending the object prototype
-                    els[id]._region = els[id].getRegion();
-                }
-            }
-        }
-    };
-}();
-
-Ext.dd.Registry = function(){
-    var elements = {};
-    var handles = {};
-    var autoIdSeed = 0;
-
-    var getId = function(el, autogen){
-        if(typeof el == "string"){
-            return el;
-        }
-        var id = el.id;
-        if(!id && autogen !== false){
-            id = "extdd-" + (++autoIdSeed);
-            el.id = id;
-        }
-        return id;
-    };
-
-    return {
-
-        register : function(el, data){
-            data = data || {};
-            if(typeof el == "string"){
-                el = document.getElementById(el);
-            }
-            data.ddel = el;
-            elements[getId(el)] = data;
-            if(data.isHandle !== false){
-                handles[data.ddel.id] = data;
-            }
-            if(data.handles){
-                var hs = data.handles;
-                for(var i = 0, len = hs.length; i < len; i++){
-                	handles[getId(hs[i])] = data;
-                }
-            }
-        },
-
-
-        unregister : function(el){
-            var id = getId(el, false);
-            var data = elements[id];
-            if(data){
-                delete elements[id];
-                if(data.handles){
-                    var hs = data.handles;
-                    for(var i = 0, len = hs.length; i < len; i++){
-                    	delete handles[getId(hs[i], false)];
-                    }
-                }
-            }
-        },
-
-
-        getHandle : function(id){
-            if(typeof id != "string"){ // must be element?
-                id = id.id;
-            }
-            return handles[id];
-        },
-
-
-        getHandleFromEvent : function(e){
-            var t = Ext.lib.Event.getTarget(e);
-            return t ? handles[t.id] : null;
-        },
-
-
-        getTarget : function(id){
-            if(typeof id != "string"){ // must be element?
-                id = id.id;
-            }
-            return elements[id];
-        },
-
-
-        getTargetFromEvent : function(e){
-            var t = Ext.lib.Event.getTarget(e);
-            return t ? elements[t.id] || handles[t.id] : null;
-        }
-    };
-}();
-
-Ext.dd.StatusProxy = function(config){
-    Ext.apply(this, config);
-    this.id = this.id || Ext.id();
-    this.el = new Ext.Layer({
-        dh: {
-            id: this.id, tag: "div", cls: "x-dd-drag-proxy "+this.dropNotAllowed, children: [
-                {tag: "div", cls: "x-dd-drop-icon"},
-                {tag: "div", cls: "x-dd-drag-ghost"}
-            ]
-        },
-        shadow: !config || config.shadow !== false
-    });
-    this.ghost = Ext.get(this.el.dom.childNodes[1]);
-    this.dropStatus = this.dropNotAllowed;
-};
-
-Ext.dd.StatusProxy.prototype = {
-
-    dropAllowed : "x-dd-drop-ok",
-
-    dropNotAllowed : "x-dd-drop-nodrop",
-
-
-    setStatus : function(cssClass){
-        cssClass = cssClass || this.dropNotAllowed;
-        if(this.dropStatus != cssClass){
-            this.el.replaceClass(this.dropStatus, cssClass);
-            this.dropStatus = cssClass;
-        }
-    },
-
-
-    reset : function(clearGhost){
-        this.el.dom.className = "x-dd-drag-proxy " + this.dropNotAllowed;
-        this.dropStatus = this.dropNotAllowed;
-        if(clearGhost){
-            this.ghost.update("");
-        }
-    },
-
-
-    update : function(html){
-        if(typeof html == "string"){
-            this.ghost.update(html);
-        }else{
-            this.ghost.update("");
-            html.style.margin = "0";
-            this.ghost.dom.appendChild(html);
-        }
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    getGhost : function(){
-        return this.ghost;
-    },
-
-
-    hide : function(clear){
-        this.el.hide();
-        if(clear){
-            this.reset(true);
-        }
-    },
-
-
-    stop : function(){
-        if(this.anim && this.anim.isAnimated && this.anim.isAnimated()){
-            this.anim.stop();
-        }
-    },
-
-
-    show : function(){
-        this.el.show();
-    },
-
-
-    sync : function(){
-        this.el.sync();
-    },
-
-
-    repair : function(xy, callback, scope){
-        this.callback = callback;
-        this.scope = scope;
-        if(xy && this.animRepair !== false){
-            this.el.addClass("x-dd-drag-repair");
-            this.el.hideUnders(true);
-            this.anim = this.el.shift({
-                duration: this.repairDuration || .5,
-                easing: 'easeOut',
-                xy: xy,
-                stopFx: true,
-                callback: this.afterRepair,
-                scope: this
-            });
-        }else{
-            this.afterRepair();
-        }
-    },
-
-    // private
-    afterRepair : function(){
-        this.hide(true);
-        if(typeof this.callback == "function"){
-            this.callback.call(this.scope || this);
-        }
-        this.callback = null;
-        this.scope = null;
-    }
-};
-
-Ext.dd.DragSource = function(el, config){
-    this.el = Ext.get(el);
-    this.dragData = {};
-
-    Ext.apply(this, config);
-
-    if(!this.proxy){
-        this.proxy = new Ext.dd.StatusProxy();
-    }
-    Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group,
-          {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true});
-
-    this.dragging = false;
-};
-
-Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
-
-    dropAllowed : "x-dd-drop-ok",
-
-    dropNotAllowed : "x-dd-drop-nodrop",
-
-
-    getDragData : function(e){
-        return this.dragData;
-    },
-
-    // private
-    onDragEnter : function(e, id){
-        var target = Ext.dd.DragDropMgr.getDDById(id);
-        this.cachedTarget = target;
-        if(this.beforeDragEnter(target, e, id) !== false){
-            if(target.isNotifyTarget){
-                var status = target.notifyEnter(this, e, this.dragData);
-                this.proxy.setStatus(status);
-            }else{
-                this.proxy.setStatus(this.dropAllowed);
-            }
-
-            if(this.afterDragEnter){
-
-                this.afterDragEnter(target, e, id);
-            }
-        }
-    },
-
-
-    beforeDragEnter : function(target, e, id){
-        return true;
-    },
-
-    // private
-    alignElWithMouse: function() {
-        Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);
-        this.proxy.sync();
-    },
-
-    // private
-    onDragOver : function(e, id){
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
-        if(this.beforeDragOver(target, e, id) !== false){
-            if(target.isNotifyTarget){
-                var status = target.notifyOver(this, e, this.dragData);
-                this.proxy.setStatus(status);
-            }
-
-            if(this.afterDragOver){
-
-                this.afterDragOver(target, e, id);
-            }
-        }
-    },
-
-
-    beforeDragOver : function(target, e, id){
-        return true;
-    },
-
-    // private
-    onDragOut : function(e, id){
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
-        if(this.beforeDragOut(target, e, id) !== false){
-            if(target.isNotifyTarget){
-                target.notifyOut(this, e, this.dragData);
-            }
-            this.proxy.reset();
-            if(this.afterDragOut){
-
-                this.afterDragOut(target, e, id);
-            }
-        }
-        this.cachedTarget = null;
-    },
-
-
-    beforeDragOut : function(target, e, id){
-        return true;
-    },
-
-    // private
-    onDragDrop : function(e, id){
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
-        if(this.beforeDragDrop(target, e, id) !== false){
-            if(target.isNotifyTarget){
-                if(target.notifyDrop(this, e, this.dragData)){ // valid drop?
-                    this.onValidDrop(target, e, id);
-                }else{
-                    this.onInvalidDrop(target, e, id);
-                }
-            }else{
-                this.onValidDrop(target, e, id);
-            }
-
-            if(this.afterDragDrop){
-
-                this.afterDragDrop(target, e, id);
-            }
-        }
-    },
-
-
-    beforeDragDrop : function(target, e, id){
-        return true;
-    },
-
-    // private
-    onValidDrop : function(target, e, id){
-        this.hideProxy();
-        if(this.afterValidDrop){
-
-            this.afterValidDrop(target, e, id);
-        }
-    },
-
-    // private
-    getRepairXY : function(e, data){
-        return this.el.getXY();
-    },
-
-    // private
-    onInvalidDrop : function(target, e, id){
-        this.beforeInvalidDrop(target, e, id);
-        if(this.cachedTarget){
-            if(this.cachedTarget.isNotifyTarget){
-                this.cachedTarget.notifyOut(this, e, this.dragData);
-            }
-            this.cacheTarget = null;
-        }
-        this.proxy.repair(this.getRepairXY(e, this.dragData), this.afterRepair, this);
-
-        if(this.afterInvalidDrop){
-
-            this.afterInvalidDrop(e, id);
-        }
-    },
-
-    // private
-    afterRepair : function(){
-        if(Ext.enableFx){
-            this.el.highlight(this.hlColor || "c3daf9");
-        }
-        this.dragging = false;
-    },
-
-
-    beforeInvalidDrop : function(target, e, id){
-        return true;
-    },
-
-    // private
-    handleMouseDown : function(e){
-        if(this.dragging) {
-            return;
-        }
-        var data = this.getDragData(e);
-        if(data && this.onBeforeDrag(data, e) !== false){
-            this.dragData = data;
-            this.proxy.stop();
-            Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments);
-        }
-    },
-
-
-    onBeforeDrag : function(data, e){
-        return true;
-    },
-
-
-    onStartDrag : Ext.emptyFn,
-
-    // private - YUI override
-    startDrag : function(x, y){
-        this.proxy.reset();
-        this.dragging = true;
-        this.proxy.update("");
-        this.onInitDrag(x, y);
-        this.proxy.show();
-    },
-
-    // private
-    onInitDrag : function(x, y){
-        var clone = this.el.dom.cloneNode(true);
-        clone.id = Ext.id(); // prevent duplicate ids
-        this.proxy.update(clone);
-        this.onStartDrag(x, y);
-        return true;
-    },
-
-
-    getProxy : function(){
-        return this.proxy;
-    },
-
-
-    hideProxy : function(){
-        this.proxy.hide();
-        this.proxy.reset(true);
-        this.dragging = false;
-    },
-
-    // private
-    triggerCacheRefresh : function(){
-        Ext.dd.DDM.refreshCache(this.groups);
-    },
-
-    // private - override to prevent hiding
-    b4EndDrag: function(e) {
-    },
-
-    // private - override to prevent moving
-    endDrag : function(e){
-        this.onEndDrag(this.dragData, e);
-    },
-
-    // private
-    onEndDrag : function(data, e){
-    },
-
-    // private - pin to cursor
-    autoOffset : function(x, y) {
-        this.setDelta(-12, -20);
-    }
-});
-
-Ext.dd.DropTarget = function(el, config){
-    this.el = Ext.get(el);
-
-    Ext.apply(this, config);
-
-    if(this.containerScroll){
-        Ext.dd.ScrollManager.register(this.el);
-    }
-
-    Ext.dd.DropTarget.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group,
-          {isTarget: true});
-
-};
-
-Ext.extend(Ext.dd.DropTarget, Ext.dd.DDTarget, {
-
-
-    dropAllowed : "x-dd-drop-ok",
-
-    dropNotAllowed : "x-dd-drop-nodrop",
-
-    // private
-    isTarget : true,
-
-    // private
-    isNotifyTarget : true,
-
-
-    notifyEnter : function(dd, e, data){
-        if(this.overClass){
-            this.el.addClass(this.overClass);
-        }
-        return this.dropAllowed;
-    },
-
-
-    notifyOver : function(dd, e, data){
-        return this.dropAllowed;
-    },
-
-
-    notifyOut : function(dd, e, data){
-        if(this.overClass){
-            this.el.removeClass(this.overClass);
-        }
-    },
-
-
-    notifyDrop : function(dd, e, data){
-        return false;
-    }
-});
-
-Ext.dd.DragZone = function(el, config){
-    Ext.dd.DragZone.superclass.constructor.call(this, el, config);
-    if(this.containerScroll){
-        Ext.dd.ScrollManager.register(this.el);
-    }
-};
-
-Ext.extend(Ext.dd.DragZone, Ext.dd.DragSource, {
-
-
-
-
-    getDragData : function(e){
-        return Ext.dd.Registry.getHandleFromEvent(e);
-    },
-
-
-    onInitDrag : function(x, y){
-        this.proxy.update(this.dragData.ddel.cloneNode(true));
-        this.onStartDrag(x, y);
-        return true;
-    },
-
-
-    afterRepair : function(){
-        if(Ext.enableFx){
-            Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor || "c3daf9");
-        }
-        this.dragging = false;
-    },
-
-
-    getRepairXY : function(e){
-        return Ext.Element.fly(this.dragData.ddel).getXY();
-    }
-});
-
-Ext.dd.DropZone = function(el, config){
-    Ext.dd.DropZone.superclass.constructor.call(this, el, config);
-};
-
-Ext.extend(Ext.dd.DropZone, Ext.dd.DropTarget, {
-
-    getTargetFromEvent : function(e){
-        return Ext.dd.Registry.getTargetFromEvent(e);
-    },
-
-
-    onNodeEnter : function(n, dd, e, data){
-
-    },
-
-
-    onNodeOver : function(n, dd, e, data){
-        return this.dropAllowed;
-    },
-
-
-    onNodeOut : function(n, dd, e, data){
-
-    },
-
-
-    onNodeDrop : function(n, dd, e, data){
-        return false;
-    },
-
-
-    onContainerOver : function(dd, e, data){
-        return this.dropNotAllowed;
-    },
-
-
-    onContainerDrop : function(dd, e, data){
-        return false;
-    },
-
-
-    notifyEnter : function(dd, e, data){
-        return this.dropNotAllowed;
-    },
-
-
-    notifyOver : function(dd, e, data){
-        var n = this.getTargetFromEvent(e);
-        if(!n){ // not over valid drop target
-            if(this.lastOverNode){
-                this.onNodeOut(this.lastOverNode, dd, e, data);
-                this.lastOverNode = null;
-            }
-            return this.onContainerOver(dd, e, data);
-        }
-        if(this.lastOverNode != n){
-            if(this.lastOverNode){
-                this.onNodeOut(this.lastOverNode, dd, e, data);
-            }
-            this.onNodeEnter(n, dd, e, data);
-            this.lastOverNode = n;
-        }
-        return this.onNodeOver(n, dd, e, data);
-    },
-
-
-    notifyOut : function(dd, e, data){
-        if(this.lastOverNode){
-            this.onNodeOut(this.lastOverNode, dd, e, data);
-            this.lastOverNode = null;
-        }
-    },
-
-
-    notifyDrop : function(dd, e, data){
-        if(this.lastOverNode){
-            this.onNodeOut(this.lastOverNode, dd, e, data);
-            this.lastOverNode = null;
-        }
-        var n = this.getTargetFromEvent(e);
-        return n ?
-            this.onNodeDrop(n, dd, e, data) :
-            this.onContainerDrop(dd, e, data);
-    },
-
-    // private
-    triggerCacheRefresh : function(){
-        Ext.dd.DDM.refreshCache(this.groups);
-    }
-});
-
-
-Ext.data.SortTypes = {
-
-    none : function(s){
-        return s;
-    },
-
-
-    stripTagsRE : /<\/?[^>]+>/gi,
-
-
-    asText : function(s){
-        return String(s).replace(this.stripTagsRE, "");
-    },
-
-
-    asUCText : function(s){
-        return String(s).toUpperCase().replace(this.stripTagsRE, "");
-    },
-
-
-    asUCString : function(s) {
-    	return String(s).toUpperCase();
-    },
-
-
-    asDate : function(s) {
-        if(!s){
-            return 0;
-        }
-        if(s instanceof Date){
-            return s.getTime();
-        }
-    	return Date.parse(String(s));
-    },
-
-
-    asFloat : function(s) {
-    	var val = parseFloat(String(s).replace(/,/g, ""));
-        if(isNaN(val)) val = 0;
-    	return val;
-    },
-
-
-    asInt : function(s) {
-        var val = parseInt(String(s).replace(/,/g, ""));
-        if(isNaN(val)) val = 0;
-    	return val;
-    }
-};
-
-Ext.data.Record = function(data, id){
-    this.id = (id || id === 0) ? id : ++Ext.data.Record.AUTO_ID;
-    this.data = data;
-};
-
-
-Ext.data.Record.create = function(o){
-    var f = function(){
-        f.superclass.constructor.apply(this, arguments);
-    };
-    Ext.extend(f, Ext.data.Record);
-    var p = f.prototype;
-    p.fields = new Ext.util.MixedCollection(false, function(field){
-        return field.name;
-    });
-    for(var i = 0, len = o.length; i < len; i++){
-        p.fields.add(new Ext.data.Field(o[i]));
-    }
-    f.getField = function(name){
-        return p.fields.get(name);
-    };
-    return f;
-};
-
-Ext.data.Record.AUTO_ID = 1000;
-Ext.data.Record.EDIT = 'edit';
-Ext.data.Record.REJECT = 'reject';
-Ext.data.Record.COMMIT = 'commit';
-
-Ext.data.Record.prototype = {
-
-    dirty : false,
-    editing : false,
-    error: null,
-    modified: null,
-
-    // private
-    join : function(store){
-        this.store = store;
-    },
-
-
-    set : function(name, value){
-        if(this.data[name] == value){
-            return;
-        }
-        this.dirty = true;
-        if(!this.modified){
-            this.modified = {};
-        }
-        if(typeof this.modified[name] == 'undefined'){
-            this.modified[name] = this.data[name];
-        }
-        this.data[name] = value;
-        if(!this.editing){
-            this.store.afterEdit(this);
-        }
-    },
-
-
-    get : function(name){
-        return this.data[name];
-    },
-
-    // private
-    beginEdit : function(){
-        this.editing = true;
-        this.modified = {};
-    },
-
-    // private
-    cancelEdit : function(){
-        this.editing = false;
-        delete this.modified;
-    },
-
-    // private
-    endEdit : function(){
-        this.editing = false;
-        if(this.dirty && this.store){
-            this.store.afterEdit(this);
-        }
-    },
-
-
-    reject : function(){
-        var m = this.modified;
-        for(var n in m){
-            if(typeof m[n] != "function"){
-                this.data[n] = m[n];
-            }
-        }
-        this.dirty = false;
-        delete this.modified;
-        this.editing = false;
-        if(this.store){
-            this.store.afterReject(this);
-        }
-    },
-
-
-    commit : function(){
-        this.dirty = false;
-        delete this.modified;
-        this.editing = false;
-        if(this.store){
-            this.store.afterCommit(this);
-        }
-    },
-
-    // private
-    hasError : function(){
-        return this.error != null;
-    },
-
-    // private
-    clearError : function(){
-        this.error = null;
-    }
-};
-
-Ext.data.Store = function(config){
-    this.data = new Ext.util.MixedCollection(false);
-    this.data.getKey = function(o){
-        return o.id;
-    };
-    this.baseParams = {};
-    // private
-    this.paramNames = {
-        "start" : "start",
-        "limit" : "limit",
-        "sort" : "sort",
-        "dir" : "dir"
-    };
-
-    if(config && config.data){
-        this.inlineData = config.data;
-        delete config.data;
-    }
-
-    Ext.apply(this, config);
-
-    if(this.reader){ // reader passed
-        if(!this.recordType){
-            this.recordType = this.reader.recordType;
-        }
-        if(this.reader.onMetaChange){
-            this.reader.onMetaChange = this.onMetaChange.createDelegate(this);
-        }
-    }
-
-    if(this.recordType){
-        this.fields = this.recordType.prototype.fields;
-    }
-    this.modified = [];
-
-    this.addEvents({
-
-        datachanged : true,
-
-        metachange : true,
-
-        add : true,
-
-        remove : true,
-
-        update : true,
-
-        clear : true,
-
-        beforeload : true,
-
-        load : true,
-
-        loadexception : true
-    });
-
-    if(this.proxy){
-        this.relayEvents(this.proxy,  ["loadexception"]);
-    }
-    this.sortToggle = {};
-
-    Ext.data.Store.superclass.constructor.call(this);
-
-    if(this.inlineData){
-        this.loadData(this.inlineData);
-        delete this.inlineData;
-    }
-};
-Ext.extend(Ext.data.Store, Ext.util.Observable, {
-
-
-
-
-
-
-    remoteSort : false,
-
-    // private
-    lastOptions : null,
-
-
-    add : function(records){
-        records = [].concat(records);
-        for(var i = 0, len = records.length; i < len; i++){
-            records[i].join(this);
-        }
-        var index = this.data.length;
-        this.data.addAll(records);
-        this.fireEvent("add", this, records, index);
-    },
-
-
-    remove : function(record){
-        var index = this.data.indexOf(record);
-        this.data.removeAt(index);
-        this.fireEvent("remove", this, record, index);
-    },
-
-
-    removeAll : function(){
-        this.data.clear();
-        this.fireEvent("clear", this);
-    },
-
-
-    insert : function(index, records){
-        records = [].concat(records);
-        for(var i = 0, len = records.length; i < len; i++){
-            this.data.insert(index, records[i]);
-            records[i].join(this);
-        }
-        this.fireEvent("add", this, records, index);
-    },
-
-
-    indexOf : function(record){
-        return this.data.indexOf(record);
-    },
-
-
-    indexOfId : function(id){
-        return this.data.indexOfKey(id);
-    },
-
-
-    getById : function(id){
-        return this.data.key(id);
-    },
-
-
-    getAt : function(index){
-        return this.data.itemAt(index);
-    },
-
-
-    getRange : function(start, end){
-        return this.data.getRange(start, end);
-    },
-
-    // private
-    storeOptions : function(o){
-        o = Ext.apply({}, o);
-        delete o.callback;
-        delete o.scope;
-        this.lastOptions = o;
-    },
-
-
-    load : function(options){
-        options = options || {};
-        if(this.fireEvent("beforeload", this, options) !== false){
-            this.storeOptions(options);
-            var p = Ext.apply(options.params || {}, this.baseParams);
-            if(this.sortInfo && this.remoteSort){
-                var pn = this.paramNames;
-                p[pn["sort"]] = this.sortInfo.field;
-                p[pn["dir"]] = this.sortInfo.direction;
-            }
-            this.proxy.load(p, this.reader, this.loadRecords, this, options);
-        }
-    },
-
-
-    reload : function(options){
-        this.load(Ext.applyIf(options||{}, this.lastOptions));
-    },
-
-    // private
-    // Called as a callback by the Reader during a load operation.
-    loadRecords : function(o, options, success){
-        if(!o || success === false){
-            if(success !== false){
-                this.fireEvent("load", this, [], options);
-            }
-            if(options.callback){
-                options.callback.call(options.scope || this, [], options, false);
-            }
-            return;
-        }
-        var r = o.records, t = o.totalRecords || r.length;
-        for(var i = 0, len = r.length; i < len; i++){
-            r[i].join(this);
-        }
-        if(!options || options.add !== true){
-            this.data.clear();
-            this.data.addAll(r);
-            this.totalLength = t;
-            this.applySort();
-            this.fireEvent("datachanged", this);
-        }else{
-            this.totalLength = Math.max(t, this.data.length+r.length);
-            this.data.addAll(r);
-        }
-        this.fireEvent("load", this, r, options);
-        if(options.callback){
-            options.callback.call(options.scope || this, r, options, true);
-        }
-    },
-
-
-    loadData : function(o, append){
-        var r = this.reader.readRecords(o);
-        this.loadRecords(r, {add: append}, true);
-    },
-
-
-    getCount : function(){
-        return this.data.length || 0;
-    },
-
-
-    getTotalCount : function(){
-        return this.totalLength || 0;
-    },
-
-
-    getSortState : function(){
-        return this.sortInfo;
-    },
-
-    // private
-    applySort : function(){
-        if(this.sortInfo && !this.remoteSort){
-            var s = this.sortInfo, f = s.field;
-            var st = this.fields.get(f).sortType;
-            var fn = function(r1, r2){
-                var v1 = st(r1.data[f]), v2 = st(r2.data[f]);
-                return v1 > v2 ? 1 : (v1 < v2 ? -1 : 0);
-            };
-            this.data.sort(s.direction, fn);
-            if(this.snapshot && this.snapshot != this.data){
-                this.snapshot.sort(s.direction, fn);
-            }
-        }
-    },
-
-
-    setDefaultSort : function(field, dir){
-        this.sortInfo = {field: field, direction: dir ? dir.toUpperCase() : "ASC"};
-    },
-
-
-    sort : function(fieldName, dir){
-        var f = this.fields.get(fieldName);
-        if(!dir){
-            if(this.sortInfo && this.sortInfo.field == f.name){ // toggle sort dir
-                dir = (this.sortToggle[f.name] || "ASC").toggle("ASC", "DESC");
-            }else{
-                dir = f.sortDir;
-            }
-        }
-        this.sortToggle[f.name] = dir;
-        this.sortInfo = {field: f.name, direction: dir};
-        if(!this.remoteSort){
-            this.applySort();
-            this.fireEvent("datachanged", this);
-        }else{
-            this.load(this.lastOptions);
-        }
-    },
-
-
-    each : function(fn, scope){
-        this.data.each(fn, scope);
-    },
-
-
-    getModifiedRecords : function(){
-        return this.modified;
-    },
-
-
-    filter : function(property, value){
-        if(!value.exec){ // not a regex
-            value = String(value);
-            if(value.length == 0){
-                return this.clearFilter();
-            }
-            value = new RegExp("^" + Ext.escapeRe(value), "i");
-        }
-        this.filterBy(function(r){
-            return value.test(r.data[property]);
-        });
-    },
-
-
-    filterBy : function(fn, scope){
-        var data = this.snapshot || this.data;
-        this.snapshot = data;
-        this.data = data.filterBy(fn, scope);
-        this.fireEvent("datachanged", this);
-    },
-
-
-    clearFilter : function(suppressEvent){
-        if(this.snapshot && this.snapshot != this.data){
-            this.data = this.snapshot;
-            delete this.snapshot;
-            if(suppressEvent !== true){
-                this.fireEvent("datachanged", this);
-            }
-        }
-    },
-
-    // private
-    afterEdit : function(record){
-        if(this.modified.indexOf(record) == -1){
-            this.modified.push(record);
-        }
-        this.fireEvent("update", this, record, Ext.data.Record.EDIT);
-    },
-
-    // private
-    afterReject : function(record){
-        this.modified.remove(record);
-        this.fireEvent("update", this, record, Ext.data.Record.REJECT);
-    },
-
-    // private
-    afterCommit : function(record){
-        this.modified.remove(record);
-        this.fireEvent("update", this, record, Ext.data.Record.COMMIT);
-    },
-
-
-    commitChanges : function(){
-        var m = this.modified.slice(0);
-        this.modified = [];
-        for(var i = 0, len = m.length; i < len; i++){
-            m[i].commit();
-        }
-    },
-
-
-    rejectChanges : function(){
-        var m = this.modified.slice(0);
-        this.modified = [];
-        for(var i = 0, len = m.length; i < len; i++){
-            m[i].reject();
-        }
-    },
-
-    onMetaChange : function(meta, rtype, o){
-        this.recordType = rtype;
-        this.fields = rtype.prototype.fields;
-        delete this.snapshot;
-        this.sortInfo = meta.sortInfo;
-        this.modified = [];
-        this.fireEvent('metachange', this, this.reader.meta);
-    }
-});
-
-Ext.data.SimpleStore = function(config){
-    Ext.data.SimpleStore.superclass.constructor.call(this, {
-        reader: new Ext.data.ArrayReader({
-                id: config.id
-            },
-            Ext.data.Record.create(config.fields)
-        ),
-        proxy : new Ext.data.MemoryProxy(config.data)
-    });
-    this.load();
-};
-Ext.extend(Ext.data.SimpleStore, Ext.data.Store);
-
-Ext.data.Connection = function(config){
-    Ext.apply(this, config);
-    this.addEvents({
-
-        "beforerequest" : true,
-
-        "requestcomplete" : true,
-
-        "requestexception" : true
-    });
-    Ext.data.Connection.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.data.Connection, Ext.util.Observable, {
-
-
-
-
-    timeout : 30000,
-
-
-    request : function(options){
-        if(this.fireEvent("beforerequest", this, options) !== false){
-            var p = options.params;
-            if(typeof p == "object"){
-                p = Ext.urlEncode(Ext.apply(options.params, this.extraParams));
-            }
-            var cb = {
-                success: this.handleResponse,
-                failure: this.handleFailure,
-                scope: this,
-        		argument: {options: options},
-        		timeout : this.timeout
-            };
-            var method = options.method||this.method||(p ? "POST" : "GET");
-            var url = options.url || this.url;
-            if(this.autoAbort !== false){
-                this.abort();
-            }
-            if(method == 'GET' && p){
-                url += (url.indexOf('?') != -1 ? '&' : '?') + p;
-                p = '';
-            }
-            this.transId = Ext.lib.Ajax.request(method, url, cb, p);
-        }else{
-            if(typeof options.callback == "function"){
-                options.callback.call(options.scope||window, options, null, null);
-            }
-        }
-    },
-
-
-    isLoading : function(){
-        return this.transId ? true : false;
-    },
-
-
-    abort : function(){
-        if(this.isLoading()){
-            Ext.lib.Ajax.abort(this.transId);
-        }
-    },
-
-    // private
-    handleResponse : function(response){
-        this.transId = false;
-        var options = response.argument.options;
-        this.fireEvent("requestcomplete", this, response, options);
-        if(typeof options.callback == "function"){
-            options.callback.call(options.scope||window, options, true, response);
-        }
-    },
-
-    // private
-    handleFailure : function(response, e){
-        this.transId = false;
-        var options = response.argument.options;
-        this.fireEvent("requestexception", this, response, options, e);
-        if(typeof options.callback == "function"){
-            options.callback.call(options.scope||window, options, false, response);
-        }
-    }
-});
-Ext.data.Field = function(config){
-    if(typeof config == "string"){
-        config = {name: config};
-    }
-    Ext.apply(this, config);
-
-    if(!this.type){
-        this.type = "auto";
-    }
-
-    var st = Ext.data.SortTypes;
-    // named sortTypes are supported, here we look them up
-    if(typeof this.sortType == "string"){
-        this.sortType = st[this.sortType];
-    }
-
-    // set default sortType for strings and dates
-    if(!this.sortType){
-        switch(this.type){
-            case "string":
-                this.sortType = st.asUCString;
-                break;
-            case "date":
-                this.sortType = st.asDate;
-                break;
-            default:
-                this.sortType = st.none;
-        }
-    }
-
-    // define once
-    var stripRe = /[\$,%]/g;
-
-    // prebuilt conversion function for this field, instead of
-    // switching every time we're reading a value
-    if(!this.convert){
-        var cv, dateFormat = this.dateFormat;
-        switch(this.type){
-            case "":
-            case "auto":
-            case undefined:
-                cv = function(v){ return v; };
-                break;
-            case "string":
-                cv = function(v){ return String(v); };
-                break;
-            case "int":
-                cv = function(v){
-                    return v !== undefined && v !== null && v !== '' ?
-                           parseInt(String(v).replace(stripRe, ""), 10) : '';
-                    };
-                break;
-            case "float":
-                cv = function(v){
-                    return v !== undefined && v !== null && v !== '' ?
-                           parseFloat(String(v).replace(stripRe, ""), 10) : '';
-                    };
-                break;
-            case "bool":
-            case "boolean":
-                cv = function(v){ return v === true || v === "true" || v == 1; };
-                break;
-            case "date":
-                cv = function(v){
-                    if(!v){
-                        return '';
-                    }
-                    if(v instanceof Date){
-                        return v;
-                    }
-                    if(dateFormat){
-                        if(dateFormat == "timestamp"){
-                            return new Date(v*1000);
-                        }
-                        return Date.parseDate(v, dateFormat);
-                    }
-                    var parsed = Date.parse(v);
-                    return parsed ? new Date(parsed) : null;
-                };
-             break;
-
-        }
-        this.convert = cv;
-    }
-};
-
-Ext.data.Field.prototype = {
-    dateFormat: null,
-    defaultValue: "",
-    mapping: null,
-    sortType : null,
-    sortDir : "ASC"
-};
-Ext.data.DataReader = function(meta, recordType){
-    this.meta = meta;
-    this.recordType = recordType instanceof Array ?
-        Ext.data.Record.create(recordType) : recordType;
-};
-
-Ext.data.DataReader.prototype = {
-
-};
-
-Ext.data.DataProxy = function(){
-    this.addEvents({
-
-        beforeload : true,
-
-        load : true,
-
-        loadexception : true
-    });
-    Ext.data.DataProxy.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.data.DataProxy, Ext.util.Observable);
-
-Ext.data.MemoryProxy = function(data){
-    Ext.data.MemoryProxy.superclass.constructor.call(this);
-    this.data = data;
-};
-
-Ext.extend(Ext.data.MemoryProxy, Ext.data.DataProxy, {
-
-    load : function(params, reader, callback, scope, arg){
-        params = params || {};
-        var result;
-        try {
-            result = reader.readRecords(this.data);
-        }catch(e){
-            this.fireEvent("loadexception", this, arg, null, e);
-            callback.call(scope, null, arg, false);
-            return;
-        }
-        callback.call(scope, result, arg, true);
-    },
-
-    // private
-    update : function(params, records){
-
-    }
-});
-
-Ext.data.HttpProxy = function(conn){
-    Ext.data.HttpProxy.superclass.constructor.call(this);
-    // is conn a conn config or a real conn?
-    this.conn = conn.events ? conn : new Ext.data.Connection(conn);
-};
-
-Ext.extend(Ext.data.HttpProxy, Ext.data.DataProxy, {
-
-    getConnection : function(){
-        return this.conn;
-    },
-
-
-    load : function(params, reader, callback, scope, arg){
-        if(this.fireEvent("beforeload", this, params) !== false){
-            this.conn.request({
-                params : params || {},
-                request: {
-                    callback : callback,
-                    scope : scope,
-                    arg : arg
-                },
-                reader: reader,
-                callback : this.loadResponse,
-                scope: this
-            });
-        }else{
-            callback.call(scope||this, null, arg, false);
-        }
-    },
-
-    // private
-    loadResponse : function(o, success, response){
-        if(!success){
-            this.fireEvent("loadexception", this, o, response);
-            o.request.callback.call(o.request.scope, null, o.request.arg, false);
-            return;
-        }
-        var result;
-        try {
-            result = o.reader.read(response);
-        }catch(e){
-            this.fireEvent("loadexception", this, o, response, e);
-            o.request.callback.call(o.request.scope, null, o.request.arg, false);
-            return;
-        }
-        this.fireEvent("load", this, o, o.request.arg);
-        o.request.callback.call(o.request.scope, result, o.request.arg, true);
-    },
-
-    // private
-    update : function(dataSet){
-
-    },
-
-    // private
-    updateResponse : function(dataSet){
-
-    }
-});
-
-Ext.data.ScriptTagProxy = function(config){
-    Ext.data.ScriptTagProxy.superclass.constructor.call(this);
-    Ext.apply(this, config);
-    this.head = document.getElementsByTagName("head")[0];
-};
-
-Ext.data.ScriptTagProxy.TRANS_ID = 1000;
-
-Ext.extend(Ext.data.ScriptTagProxy, Ext.data.DataProxy, {
-
-
-    timeout : 30000,
-
-    callbackParam : "callback",
-
-    nocache : true,
-
-
-    load : function(params, reader, callback, scope, arg){
-        if(this.fireEvent("beforeload", this, params) !== false){
-
-            var p = Ext.urlEncode(Ext.apply(params, this.extraParams));
-
-            var url = this.url;
-            url += (url.indexOf("?") != -1 ? "&" : "?") + p;
-            if(this.nocache){
-                url += "&_dc=" + (new Date().getTime());
-            }
-            var transId = ++Ext.data.ScriptTagProxy.TRANS_ID;
-            var trans = {
-                id : transId,
-                cb : "stcCallback"+transId,
-                scriptId : "stcScript"+transId,
-                params : params,
-                arg : arg,
-                url : url,
-                callback : callback,
-                scope : scope,
-                reader : reader
-            };
-            var conn = this;
-
-            window[trans.cb] = function(o){
-                conn.handleResponse(o, trans);
-            };
-
-            url += String.format("&{0}={1}", this.callbackParam, trans.cb);
-
-            if(this.autoAbort !== false){
-                this.abort();
-            }
-
-            trans.timeoutId = this.handleFailure.defer(this.timeout, this, [trans]);
-
-            var script = document.createElement("script");
-            script.setAttribute("src", url);
-            script.setAttribute("type", "text/javascript");
-            script.setAttribute("id", trans.scriptId);
-            this.head.appendChild(script);
-
-            this.trans = trans;
-        }else{
-            callback.call(scope||this, null, arg, false);
-        }
-    },
-
-    // private
-    isLoading : function(){
-        return this.trans ? true : false;
-    },
-
-
-    abort : function(){
-        if(this.isLoading()){
-            this.destroyTrans(this.trans);
-        }
-    },
-
-    // private
-    destroyTrans : function(trans, isLoaded){
-        this.head.removeChild(document.getElementById(trans.scriptId));
-        clearTimeout(trans.timeoutId);
-        if(isLoaded){
-            window[trans.cb] = undefined;
-            try{
-                delete window[trans.cb];
-            }catch(e){}
-        }else{
-            // if hasn't been loaded, wait for load to remove it to prevent script error
-            window[trans.cb] = function(){
-                window[trans.cb] = undefined;
-                try{
-                    delete window[trans.cb];
-                }catch(e){}
-            };
-        }
-    },
-
-    // private
-    handleResponse : function(o, trans){
-        this.trans = false;
-        this.destroyTrans(trans, true);
-        var result;
-        try {
-            result = trans.reader.readRecords(o);
-        }catch(e){
-            this.fireEvent("loadexception", this, o, trans.arg, e);
-            trans.callback.call(trans.scope||window, null, trans.arg, false);
-            return;
-        }
-        this.fireEvent("load", this, o, trans.arg);
-        trans.callback.call(trans.scope||window, result, trans.arg, true);
-    },
-
-    // private
-    handleFailure : function(trans){
-        this.trans = false;
-        this.destroyTrans(trans, false);
-        this.fireEvent("loadexception", this, null, trans.arg);
-        trans.callback.call(trans.scope||window, null, trans.arg, false);
-    }
-});
-
-Ext.data.JsonReader = function(meta, recordType){
-    Ext.data.JsonReader.superclass.constructor.call(this, meta, recordType);
-};
-Ext.extend(Ext.data.JsonReader, Ext.data.DataReader, {
-
-    read : function(response){
-        var json = response.responseText;
-        var o = eval("("+json+")");
-        if(!o) {
-            throw {message: "JsonReader.read: Json object not found"};
-        }
-        if(o.metaData){
-            delete this.ef;
-            this.meta = o.metaData;
-            this.recordType = Ext.data.Record.create(o.metaData.fields);
-            this.onMetaChange(this.meta, this.recordType, o);
-        }
-        return this.readRecords(o);
-    },
-
-    // private function a store will implement
-    onMetaChange : function(meta, recordType, o){
-
-    },
-
-
-    simpleAccess: function(obj, subsc) {
-    	return obj[subsc];
-    },
-
-
-    getJsonAccessor: function(){
-        var re = /[\[\.]/;
-        return function(expr) {
-            try {
-                return(re.test(expr))
-                    ? new Function("obj", "return obj." + expr)
-                    : function(obj){
-                        return obj[expr];
-                    };
-            } catch(e){}
-            return Ext.emptyFn;
-        };
-    }(),
-
-
-    readRecords : function(o){
-
-        this.jsonData = o;
-        var s = this.meta, Record = this.recordType,
-            f = Record.prototype.fields, fi = f.items, fl = f.length;
-
-//      Generate extraction functions for the totalProperty, the root, the id, and for each field
-        if (!this.ef) {
-            if(s.totalProperty) {
-	            this.getTotal = this.getJsonAccessor(s.totalProperty);
-	        }
-	        if(s.successProperty) {
-	            this.getSuccess = this.getJsonAccessor(s.successProperty);
-	        }
-	        this.getRoot = s.root ? this.getJsonAccessor(s.root) : function(p){return p;};
-	        if (s.id) {
-	        	var g = this.getJsonAccessor(s.id);
-	        	this.getId = function(rec) {
-	        		var r = g(rec);
-		        	return (r === undefined || r === "") ? null : r;
-	        	};
-	        } else {
-	        	this.getId = function(){return null;};
-	        }
-            this.ef = [];
-            for(var i = 0; i < fl; i++){
-                f = fi[i];
-                var map = (f.mapping !== undefined && f.mapping !== null) ? f.mapping : f.name;
-                this.ef[i] = this.getJsonAccessor(map);
-            }
-        }
-
-    	var root = this.getRoot(o), c = root.length, totalRecords = c, success = true;
-    	if(s.totalProperty){
-            var v = parseInt(this.getTotal(o), 10);
-            if(!isNaN(v)){
-                totalRecords = v;
-            }
-        }
-        if(s.successProperty){
-            var v = this.getSuccess(o);
-            if(v === false || v === 'false'){
-                success = false;
-            }
-        }
-        var records = [];
-	    for(var i = 0; i < c; i++){
-		    var n = root[i];
-	        var values = {};
-	        var id = this.getId(n);
-	        for(var j = 0; j < fl; j++){
-	            f = fi[j];
-                var v = this.ef[j](n);
-                values[f.name] = f.convert((v !== undefined) ? v : f.defaultValue);
-	        }
-	        var record = new Record(values, id);
-	        record.json = n;
-	        records[i] = record;
-	    }
-	    return {
-	        success : success,
-	        records : records,
-	        totalRecords : totalRecords
-	    };
-    }
-});
-
-Ext.data.XmlReader = function(meta, recordType){
-    Ext.data.XmlReader.superclass.constructor.call(this, meta, recordType);
-};
-Ext.extend(Ext.data.XmlReader, Ext.data.DataReader, {
-
-    read : function(response){
-        var doc = response.responseXML;
-        if(!doc) {
-            throw {message: "XmlReader.read: XML Document not available"};
-        }
-        return this.readRecords(doc);
-    },
-
-
-    readRecords : function(doc){
-
-        this.xmlData = doc;
-        var root = doc.documentElement || doc;
-    	var q = Ext.DomQuery;
-    	var recordType = this.recordType, fields = recordType.prototype.fields;
-    	var sid = this.meta.id;
-    	var totalRecords = 0, success = true;
-    	if(this.meta.totalRecords){
-    	    totalRecords = q.selectNumber(this.meta.totalRecords, root, 0);
-    	}
-
-        if(this.meta.success){
-            var sv = q.selectValue(this.meta.success, root, true);
-            success = sv !== false && sv !== 'false';
-    	}
-    	var records = [];
-    	var ns = q.select(this.meta.record, root);
-        for(var i = 0, len = ns.length; i < len; i++) {
-	        var n = ns[i];
-	        var values = {};
-	        var id = sid ? q.selectValue(sid, n) : undefined;
-	        for(var j = 0, jlen = fields.length; j < jlen; j++){
-	            var f = fields.items[j];
-                var v = q.selectValue(f.mapping || f.name, n, f.defaultValue);
-	            v = f.convert(v);
-	            values[f.name] = v;
-	        }
-	        var record = new recordType(values, id);
-	        record.node = n;
-	        records[records.length] = record;
-	    }
-
-	    return {
-	        success : success,
-	        records : records,
-	        totalRecords : totalRecords || records.length
-	    };
-    }
-});
-
-Ext.data.ArrayReader = function(meta, recordType){
-    Ext.data.ArrayReader.superclass.constructor.call(this, meta, recordType);
-};
-
-Ext.extend(Ext.data.ArrayReader, Ext.data.JsonReader, {
-
-    readRecords : function(o){
-        var sid = this.meta ? this.meta.id : null;
-    	var recordType = this.recordType, fields = recordType.prototype.fields;
-    	var records = [];
-    	var root = o;
-	    for(var i = 0; i < root.length; i++){
-		    var n = root[i];
-	        var values = {};
-	        var id = ((sid || sid === 0) && n[sid] !== undefined && n[sid] !== "" ? n[sid] : null);
-	        for(var j = 0, jlen = fields.length; j < jlen; j++){
-                var f = fields.items[j];
-                var k = f.mapping !== undefined && f.mapping !== null ? f.mapping : j;
-                var v = n[k] !== undefined ? n[k] : f.defaultValue;
-                v = f.convert(v);
-                values[f.name] = v;
-            }
-	        var record = new recordType(values, id);
-	        record.json = n;
-	        records[records.length] = record;
-	    }
-	    return {
-	        records : records,
-	        totalRecords : records.length
-	    };
-    }
-});
-
-Ext.data.Tree = function(root){
-   this.nodeHash = {};
-
-   this.root = null;
-   if(root){
-       this.setRootNode(root);
-   }
-   this.addEvents({
-
-       "append" : true,
-
-       "remove" : true,
-
-       "move" : true,
-
-       "insert" : true,
-
-       "beforeappend" : true,
-
-       "beforeremove" : true,
-
-       "beforemove" : true,
-
-       "beforeinsert" : true
-   });
-
-    Ext.data.Tree.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.data.Tree, Ext.util.Observable, {
-    pathSeparator: "/",
-
-
-    getRootNode : function(){
-        return this.root;
-    },
-
-
-    setRootNode : function(node){
-        this.root = node;
-        node.ownerTree = this;
-        node.isRoot = true;
-        this.registerNode(node);
-        return node;
-    },
-
-
-    getNodeById : function(id){
-        return this.nodeHash[id];
-    },
-
-    registerNode : function(node){
-        this.nodeHash[node.id] = node;
-    },
-
-    unregisterNode : function(node){
-        delete this.nodeHash[node.id];
-    },
-
-    toString : function(){
-        return "[Tree"+(this.id?" "+this.id:"")+"]";
-    }
-});
-
-
-Ext.data.Node = function(attributes){
-
-    this.attributes = attributes || {};
-    this.leaf = this.attributes.leaf;
-
-    this.id = this.attributes.id;
-    if(!this.id){
-        this.id = Ext.id(null, "ynode-");
-        this.attributes.id = this.id;
-    }
-
-    this.childNodes = [];
-    if(!this.childNodes.indexOf){ // indexOf is a must
-        this.childNodes.indexOf = function(o){
-            for(var i = 0, len = this.length; i < len; i++){
-                if(this[i] == o) return i;
-            }
-            return -1;
-        };
-    }
-
-    this.parentNode = null;
-
-    this.firstChild = null;
-
-    this.lastChild = null;
-
-    this.previousSibling = null;
-
-    this.nextSibling = null;
-
-    this.addEvents({
-
-       "append" : true,
-
-       "remove" : true,
-
-       "move" : true,
-
-       "insert" : true,
-
-       "beforeappend" : true,
-
-       "beforeremove" : true,
-
-       "beforemove" : true,
-
-       "beforeinsert" : true
-   });
-    this.listeners = this.attributes.listeners;
-    Ext.data.Node.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.data.Node, Ext.util.Observable, {
-    fireEvent : function(evtName){
-        // first do standard event for this node
-        if(Ext.data.Node.superclass.fireEvent.apply(this, arguments) === false){
-            return false;
-        }
-        // then bubble it up to the tree if the event wasn't cancelled
-        var ot = this.getOwnerTree();
-        if(ot){
-            if(ot.proxyNodeEvent.apply(ot, arguments) === false){
-                return false;
-            }
-        }
-        return true;
-    },
-
-
-    isLeaf : function(){
-        return this.leaf === true;
-    },
-
-    // private
-    setFirstChild : function(node){
-        this.firstChild = node;
-    },
-
-    //private
-    setLastChild : function(node){
-        this.lastChild = node;
-    },
-
-
-
-    isLast : function(){
-       return (!this.parentNode ? true : this.parentNode.lastChild == this);
-    },
-
-
-    isFirst : function(){
-       return (!this.parentNode ? true : this.parentNode.firstChild == this);
-    },
-
-    hasChildNodes : function(){
-        return !this.isLeaf() && this.childNodes.length > 0;
-    },
-
-
-    appendChild : function(node){
-        var multi = false;
-        if(node instanceof Array){
-            multi = node;
-        }else if(arguments.length > 1){
-            multi = arguments;
-        }
-        // if passed an array or multiple args do them one by one
-        if(multi){
-            for(var i = 0, len = multi.length; i < len; i++) {
-            	this.appendChild(multi[i]);
-            }
-        }else{
-            if(this.fireEvent("beforeappend", this.ownerTree, this, node) === false){
-                return false;
-            }
-            var index = this.childNodes.length;
-            var oldParent = node.parentNode;
-            // it's a move, make sure we move it cleanly
-            if(oldParent){
-                if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index) === false){
-                    return false;
-                }
-                oldParent.removeChild(node);
-            }
-            index = this.childNodes.length;
-            if(index == 0){
-                this.setFirstChild(node);
-            }
-            this.childNodes.push(node);
-            node.parentNode = this;
-            var ps = this.childNodes[index-1];
-            if(ps){
-                node.previousSibling = ps;
-                ps.nextSibling = node;
-            }else{
-                node.previousSibling = null;
-            }
-            node.nextSibling = null;
-            this.setLastChild(node);
-            node.setOwnerTree(this.getOwnerTree());
-            this.fireEvent("append", this.ownerTree, this, node, index);
-            if(oldParent){
-                node.fireEvent("move", this.ownerTree, node, oldParent, this, index);
-            }
-            return node;
-        }
-    },
-
-
-    removeChild : function(node){
-        var index = this.childNodes.indexOf(node);
-        if(index == -1){
-            return false;
-        }
-        if(this.fireEvent("beforeremove", this.ownerTree, this, node) === false){
-            return false;
-        }
-
-        // remove it from childNodes collection
-        this.childNodes.splice(index, 1);
-
-        // update siblings
-        if(node.previousSibling){
-            node.previousSibling.nextSibling = node.nextSibling;
-        }
-        if(node.nextSibling){
-            node.nextSibling.previousSibling = node.previousSibling;
-        }
-
-        // update child refs
-        if(this.firstChild == node){
-            this.setFirstChild(node.nextSibling);
-        }
-        if(this.lastChild == node){
-            this.setLastChild(node.previousSibling);
-        }
-
-        node.setOwnerTree(null);
-        // clear any references from the node
-        node.parentNode = null;
-        node.previousSibling = null;
-        node.nextSibling = null;
-        this.fireEvent("remove", this.ownerTree, this, node);
-        return node;
-    },
-
-
-    insertBefore : function(node, refNode){
-        if(!refNode){ // like standard Dom, refNode can be null for append
-            return this.appendChild(node);
-        }
-        // nothing to do
-        if(node == refNode){
-            return false;
-        }
-
-        if(this.fireEvent("beforeinsert", this.ownerTree, this, node, refNode) === false){
-            return false;
-        }
-        var index = this.childNodes.indexOf(refNode);
-        var oldParent = node.parentNode;
-        var refIndex = index;
-
-        // when moving internally, indexes will change after remove
-        if(oldParent == this && this.childNodes.indexOf(node) < index){
-            refIndex--;
-        }
-
-        // it's a move, make sure we move it cleanly
-        if(oldParent){
-            if(node.fireEvent("beforemove", node.getOwnerTree(), node, oldParent, this, index, refNode) === false){
-                return false;
-            }
-            oldParent.removeChild(node);
-        }
-        if(refIndex == 0){
-            this.setFirstChild(node);
-        }
-        this.childNodes.splice(refIndex, 0, node);
-        node.parentNode = this;
-        var ps = this.childNodes[refIndex-1];
-        if(ps){
-            node.previousSibling = ps;
-            ps.nextSibling = node;
-        }else{
-            node.previousSibling = null;
-        }
-        node.nextSibling = refNode;
-        refNode.previousSibling = node;
-        node.setOwnerTree(this.getOwnerTree());
-        this.fireEvent("insert", this.ownerTree, this, node, refNode);
-        if(oldParent){
-            node.fireEvent("move", this.ownerTree, node, oldParent, this, refIndex, refNode);
-        }
-        return node;
-    },
-
-
-    item : function(index){
-        return this.childNodes[index];
-    },
-
-
-    replaceChild : function(newChild, oldChild){
-        this.insertBefore(newChild, oldChild);
-        this.removeChild(oldChild);
-        return oldChild;
-    },
-
-
-    indexOf : function(child){
-        return this.childNodes.indexOf(child);
-    },
-
-
-    getOwnerTree : function(){
-        // if it doesn't have one, look for one
-        if(!this.ownerTree){
-            var p = this;
-            while(p){
-                if(p.ownerTree){
-                    this.ownerTree = p.ownerTree;
-                    break;
-                }
-                p = p.parentNode;
-            }
-        }
-        return this.ownerTree;
-    },
-
-
-    getDepth : function(){
-        var depth = 0;
-        var p = this;
-        while(p.parentNode){
-            ++depth;
-            p = p.parentNode;
-        }
-        return depth;
-    },
-
-    // private
-    setOwnerTree : function(tree){
-        // if it's move, we need to update everyone
-        if(tree != this.ownerTree){
-            if(this.ownerTree){
-                this.ownerTree.unregisterNode(this);
-            }
-            this.ownerTree = tree;
-            var cs = this.childNodes;
-            for(var i = 0, len = cs.length; i < len; i++) {
-            	cs[i].setOwnerTree(tree);
-            }
-            if(tree){
-                tree.registerNode(this);
-            }
-        }
-    },
-
-
-    getPath : function(attr){
-        attr = attr || "id";
-        var p = this.parentNode;
-        var b = [this.attributes[attr]];
-        while(p){
-            b.unshift(p.attributes[attr]);
-            p = p.parentNode;
-        }
-        var sep = this.getOwnerTree().pathSeparator;
-        return sep + b.join(sep);
-    },
-
-
-    bubble : function(fn, scope, args){
-        var p = this;
-        while(p){
-            if(fn.call(scope || p, args || p) === false){
-                break;
-            }
-            p = p.parentNode;
-        }
-    },
-
-
-    cascade : function(fn, scope, args){
-        if(fn.call(scope || this, args || this) !== false){
-            var cs = this.childNodes;
-            for(var i = 0, len = cs.length; i < len; i++) {
-            	cs[i].cascade(fn, scope, args);
-            }
-        }
-    },
-
-
-    eachChild : function(fn, scope, args){
-        var cs = this.childNodes;
-        for(var i = 0, len = cs.length; i < len; i++) {
-        	if(fn.call(scope || this, args || cs[i]) === false){
-        	    break;
-        	}
-        }
-    },
-
-
-    findChild : function(attribute, value){
-        var cs = this.childNodes;
-        for(var i = 0, len = cs.length; i < len; i++) {
-        	if(cs[i].attributes[attribute] == value){
-        	    return cs[i];
-        	}
-        }
-        return null;
-    },
-
-
-    findChildBy : function(fn, scope){
-        var cs = this.childNodes;
-        for(var i = 0, len = cs.length; i < len; i++) {
-        	if(fn.call(scope||cs[i], cs[i]) === true){
-        	    return cs[i];
-        	}
-        }
-        return null;
-    },
-
-
-    sort : function(fn, scope){
-        var cs = this.childNodes;
-        var len = cs.length;
-        if(len > 0){
-            var sortFn = scope ? function(){fn.apply(scope, arguments);} : fn;
-            cs.sort(sortFn);
-            for(var i = 0; i < len; i++){
-                var n = cs[i];
-                n.previousSibling = cs[i-1];
-                n.nextSibling = cs[i+1];
-                if(i == 0){
-                    this.setFirstChild(n);
-                }
-                if(i == len-1){
-                    this.setLastChild(n);
-                }
-            }
-        }
-    },
-
-
-    contains : function(node){
-        return node.isAncestor(this);
-    },
-
-
-    isAncestor : function(node){
-        var p = this.parentNode;
-        while(p){
-            if(p == node){
-                return true;
-            }
-            p = p.parentNode;
-        }
-        return false;
-    },
-
-    toString : function(){
-        return "[Node"+(this.id?" "+this.id:"")+"]";
-    }
-});
-
-Ext.ComponentMgr = function(){
-    var all = new Ext.util.MixedCollection();
-
-    return {
-        // private
-        register : function(c){
-            all.add(c);
-        },
-
-        // private
-        unregister : function(c){
-            all.remove(c);
-        },
-
-
-        get : function(id){
-            return all.get(id);
-        },
-
-
-        onAvailable : function(id, fn, scope){
-            all.on("add", function(index, o){
-                if(o.id == id){
-                    fn.call(scope || o, o);
-                    all.un("add", fn, scope);
-                }
-            });
-        }
-    };
-}();
-
-
-Ext.Component = function(config){
-    config = config || {};
-    if(config.tagName || config.dom || typeof config == "string"){ // element object
-        config = {el: config, id: config.id || config};
-    }
-    this.initialConfig = config;
-
-    Ext.apply(this, config);
-    this.addEvents({
-
-        disable : true,
-
-        enable : true,
-
-        beforeshow : true,
-
-        show : true,
-
-        beforehide : true,
-
-        hide : true,
-
-        beforerender : true,
-
-        render : true,
-
-        beforedestroy : true,
-
-        destroy : true
-    });
-    if(!this.id){
-        this.id = "ext-comp-" + (++Ext.Component.AUTO_ID);
-    }
-    Ext.ComponentMgr.register(this);
-    Ext.Component.superclass.constructor.call(this);
-    this.initComponent();
-    if(this.renderTo){ // not supported by all components yet. use at your own risk!
-        this.render(this.renderTo);
-        delete this.renderTo;
-    }
-};
-
-// private
-Ext.Component.AUTO_ID = 1000;
-
-Ext.extend(Ext.Component, Ext.util.Observable, {
-
-    hidden : false,
-
-    disabled : false,
-
-    disabledClass : "x-item-disabled",
-
-    rendered : false,
-
-    allowDomMove: true,
-
-    // private
-    ctype : "Ext.Component",
-
-    // private
-    actionMode : "el",
-
-    // private
-    getActionEl : function(){
-        return this[this.actionMode];
-    },
-
-
-    hideMode: 'display',
-
-    initComponent : Ext.emptyFn,
-
-    render : function(container, position){
-        if(!this.rendered && this.fireEvent("beforerender", this) !== false){
-            if(!container && this.el){
-                this.el = Ext.get(this.el);
-                container = this.el.dom.parentNode;
-                this.allowDomMove = false;
-            }
-            this.container = Ext.get(container);
-            this.rendered = true;
-            if(position !== undefined){
-                if(typeof position == 'number'){
-                    position = this.container.dom.childNodes[position];
-                }else{
-                    position = Ext.getDom(position);
-                }
-            }
-            this.onRender(this.container, position || null);
-            if(this.cls){
-                this.el.addClass(this.cls);
-                delete this.cls;
-            }
-            if(this.style){
-                this.el.applyStyles(this.style);
-                delete this.style;
-            }
-            this.fireEvent("render", this);
-            this.afterRender(this.container);
-            if(this.hidden){
-                this.hide();
-            }
-            if(this.disabled){
-                this.disable();
-            }
-        }
-        return this;
-    },
-
-    // private
-    // default function is not really useful
-    onRender : function(ct, position){
-        if(this.el){
-            this.el = Ext.get(this.el);
-            if(this.allowDomMove !== false){
-                ct.dom.insertBefore(this.el.dom, position);
-            }
-        }
-    },
-
-    // private
-    getAutoCreate : function(){
-        var cfg = typeof this.autoCreate == "object" ?
-                      this.autoCreate : Ext.apply({}, this.defaultAutoCreate);
-        if(this.id && !cfg.id){
-            cfg.id = this.id;
-        }
-        return cfg;
-    },
-
-    // private
-    afterRender : Ext.emptyFn,
-
-    // private
-    destroy : function(){
-        if(this.fireEvent("beforedestroy", this) !== false){
-            this.purgeListeners();
-            this.beforeDestroy();
-            if(this.rendered){
-                this.el.removeAllListeners();
-                this.el.remove();
-                if(this.actionMode == "container"){
-                    this.container.remove();
-                }
-            }
-            this.onDestroy();
-            Ext.ComponentMgr.unregister(this);
-            this.fireEvent("destroy", this);
-        }
-    },
-
-    beforeDestroy : function(){
-
-    },
-
-    onDestroy : function(){
-
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    getId : function(){
-        return this.id;
-    },
-
-
-    focus : function(selectText){
-        if(this.rendered){
-            this.el.focus();
-            if(selectText === true){
-                this.el.dom.select();
-            }
-        }
-        return this;
-    },
-
-    // private
-    blur : function(){
-        if(this.rendered){
-            this.el.blur();
-        }
-        return this;
-    },
-
-
-    disable : function(){
-        if(this.rendered){
-            this.onDisable();
-        }
-        this.disabled = true;
-        this.fireEvent("disable", this);
-        return this;
-    },
-
-    onDisable : function(){
-        this.getActionEl().addClass(this.disabledClass);
-        this.el.dom.disabled = true;
-    },
-
-
-    enable : function(){
-        if(this.rendered){
-            this.onEnable();
-        }
-        this.disabled = false;
-        this.fireEvent("enable", this);
-        return this;
-    },
-
-    onEnable : function(){
-        this.getActionEl().removeClass(this.disabledClass);
-        this.el.dom.disabled = false;
-    },
-
-
-    setDisabled : function(disabled){
-        this[disabled ? "disable" : "enable"]();
-    },
-
-
-    show: function(){
-        if(this.fireEvent("beforeshow", this) !== false){
-            this.hidden = false;
-            if(this.rendered){
-                this.onShow();
-            }
-            this.fireEvent("show", this);
-        }
-        return this;
-    },
-
-    // private
-    onShow : function(){
-        var ae = this.getActionEl();
-        if(this.hideMode == 'visibility'){
-            ae.dom.style.visibility = "visible";
-        }else if(this.hideMode == 'offsets'){
-            ae.removeClass('x-hidden');
-        }else{
-            ae.dom.style.display = "";
-        }
-    },
-
-
-    hide: function(){
-        if(this.fireEvent("beforehide", this) !== false){
-            this.hidden = true;
-            if(this.rendered){
-                this.onHide();
-            }
-            this.fireEvent("hide", this);
-        }
-        return this;
-    },
-
-    // private
-    onHide : function(){
-        var ae = this.getActionEl();
-        if(this.hideMode == 'visibility'){
-            ae.dom.style.visibility = "hidden";
-        }else if(this.hideMode == 'offsets'){
-            ae.addClass('x-hidden');
-        }else{
-            ae.dom.style.display = "none";
-        }
-    },
-
-
-    setVisible: function(visible){
-        if(visible) {
-            this.show();
-        }else{
-            this.hide();
-        }
-        return this;
-    },
-
-
-    isVisible : function(){
-        return this.getActionEl().isVisible();
-    },
-
-    cloneConfig : function(overrides){
-        overrides = overrides || {};
-        var id = overrides.id || Ext.id();
-        var cfg = Ext.applyIf(overrides, this.initialConfig);
-        cfg.id = id; // prevent dup id
-        return new this.__extcls(cfg);
-    }
-});
-
-(function(){
-Ext.Layer = function(config, existingEl){
-    config = config || {};
-    var dh = Ext.DomHelper;
-    var cp = config.parentEl, pel = cp ? Ext.getDom(cp) : document.body;
-    if(existingEl){
-        this.dom = Ext.getDom(existingEl);
-    }
-    if(!this.dom){
-        var o = config.dh || {tag: "div", cls: "x-layer"};
-        this.dom = dh.append(pel, o);
-    }
-    if(config.cls){
-        this.addClass(config.cls);
-    }
-    this.constrain = config.constrain !== false;
-    this.visibilityMode = Ext.Element.VISIBILITY;
-    if(config.id){
-        this.id = this.dom.id = config.id;
-    }else{
-        this.id = Ext.id(this.dom);
-    }
-    this.zindex = config.zindex || this.getZIndex();
-    this.position("absolute", this.zindex);
-    if(config.shadow){
-        this.shadowOffset = config.shadowOffset || 4;
-        this.shadow = new Ext.Shadow({
-            offset : this.shadowOffset,
-            mode : config.shadow
-        });
-    }else{
-        this.shadowOffset = 0;
-    }
-    this.useShim = config.shim !== false && Ext.useShims;
-    this.useDisplay = config.useDisplay;
-    this.hide();
-};
-
-var supr = Ext.Element.prototype;
-
-// shims are shared among layer to keep from having 100 iframes
-var shims = [];
-
-Ext.extend(Ext.Layer, Ext.Element, {
-
-    getZIndex : function(){
-        return this.zindex || parseInt(this.getStyle("z-index"), 10) || 11000;
-    },
-
-    getShim : function(){
-        if(!this.useShim){
-            return null;
-        }
-        if(this.shim){
-            return this.shim;
-        }
-        var shim = shims.shift();
-        if(!shim){
-            shim = this.createShim();
-            shim.enableDisplayMode('block');
-            shim.dom.style.display = 'none';
-            shim.dom.style.visibility = 'visible';
-        }
-        var pn = this.dom.parentNode;
-        if(shim.dom.parentNode != pn){
-            pn.insertBefore(shim.dom, this.dom);
-        }
-        shim.setStyle('z-index', this.getZIndex()-2);
-        this.shim = shim;
-        return shim;
-    },
-
-    hideShim : function(){
-        if(this.shim){
-            this.shim.setDisplayed(false);
-            shims.push(this.shim);
-            delete this.shim;
-        }
-    },
-
-    disableShadow : function(){
-        if(this.shadow){
-            this.shadowDisabled = true;
-            this.shadow.hide();
-            this.lastShadowOffset = this.shadowOffset;
-            this.shadowOffset = 0;
-        }
-    },
-
-    enableShadow : function(show){
-        if(this.shadow){
-            this.shadowDisabled = false;
-            this.shadowOffset = this.lastShadowOffset;
-            delete this.lastShadowOffset;
-            if(show){
-                this.sync(true);
-            }
-        }
-    },
-
-    // private
-    // this code can execute repeatedly in milliseconds (i.e. during a drag) so
-    // code size was sacrificed for effeciency (e.g. no getBox/setBox, no XY calls)
-    sync : function(doShow){
-        var sw = this.shadow;
-        if(!this.updating && this.isVisible() && (sw || this.useShim)){
-            var sh = this.getShim();
-
-            var w = this.getWidth(),
-                h = this.getHeight();
-
-            var l = this.getLeft(true),
-                t = this.getTop(true);
-
-            if(sw && !this.shadowDisabled){
-                if(doShow && !sw.isVisible()){
-                    sw.show(this);
-                }else{
-                    sw.realign(l, t, w, h);
-                }
-                if(sh){
-                    if(doShow){
-                       sh.show();
-                    }
-                    // fit the shim behind the shadow, so it is shimmed too
-                    var a = sw.adjusts, s = sh.dom.style;
-                    s.left = (Math.min(l, l+a.l))+"px";
-                    s.top = (Math.min(t, t+a.t))+"px";
-                    s.width = (w+a.w)+"px";
-                    s.height = (h+a.h)+"px";
-                }
-            }else if(sh){
-                if(doShow){
-                   sh.show();
-                }
-                sh.setSize(w, h);
-                sh.setLeftTop(l, t);
-            }
-
-        }
-    },
-
-    // private
-    destroy : function(){
-        this.hideShim();
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        this.removeAllListeners();
-        var pn = this.dom.parentNode;
-        if(pn){
-            pn.removeChild(this.dom);
-        }
-        Ext.Element.uncache(this.id);
-    },
-
-    remove : function(){
-        this.destroy();
-    },
-
-    // private
-    beginUpdate : function(){
-        this.updating = true;
-    },
-
-    // private
-    endUpdate : function(){
-        this.updating = false;
-        this.sync(true);
-    },
-
-    // private
-    hideUnders : function(negOffset){
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        this.hideShim();
-    },
-
-    // private
-    constrainXY : function(){
-        if(this.constrain){
-            var vw = Ext.lib.Dom.getViewWidth(),
-                vh = Ext.lib.Dom.getViewHeight();
-            var s = Ext.get(document).getScroll();
-
-            var xy = this.getXY();
-            var x = xy[0], y = xy[1];
-            var w = this.dom.offsetWidth+this.shadowOffset, h = this.dom.offsetHeight+this.shadowOffset;
-            // only move it if it needs it
-            var moved = false;
-            // first validate right/bottom
-            if((x + w) > vw+s.left){
-                x = vw - w - this.shadowOffset;
-                moved = true;
-            }
-            if((y + h) > vh+s.top){
-                y = vh - h - this.shadowOffset;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < s.left){
-                x = s.left;
-                moved = true;
-            }
-            if(y < s.top){
-                y = s.top;
-                moved = true;
-            }
-            if(moved){
-                if(this.avoidY){
-                    var ay = this.avoidY;
-                    if(y <= ay && (y+h) >= ay){
-                        y = ay-h-5;
-                    }
-                }
-                xy = [x, y];
-                this.storeXY(xy);
-                supr.setXY.call(this, xy);
-                this.sync();
-            }
-        }
-    },
-
-    isVisible : function(){
-        return this.visible;
-    },
-
-    // private
-    showAction : function(){
-        this.visible = true; // track visibility to prevent getStyle calls
-        if(this.useDisplay === true){
-            this.setDisplayed("");
-        }else if(this.lastXY){
-            supr.setXY.call(this, this.lastXY);
-        }else if(this.lastLT){
-            supr.setLeftTop.call(this, this.lastLT[0], this.lastLT[1]);
-        }
-    },
-
-    // private
-    hideAction : function(){
-        this.visible = false;
-        if(this.useDisplay === true){
-            this.setDisplayed(false);
-        }else{
-            this.setLeftTop(-10000,-10000);
-        }
-    },
-
-    // overridden Element method
-    setVisible : function(v, a, d, c, e){
-        if(v){
-            this.showAction();
-        }
-        if(a && v){
-            var cb = function(){
-                this.sync(true);
-                if(c){
-                    c();
-                }
-            }.createDelegate(this);
-            supr.setVisible.call(this, true, true, d, cb, e);
-        }else{
-            if(!v){
-                this.hideUnders(true);
-            }
-            var cb = c;
-            if(a){
-                cb = function(){
-                    this.hideAction();
-                    if(c){
-                        c();
-                    }
-                }.createDelegate(this);
-            }
-            supr.setVisible.call(this, v, a, d, cb, e);
-            if(v){
-                this.sync(true);
-            }else if(!a){
-                this.hideAction();
-            }
-        }
-    },
-
-    storeXY : function(xy){
-        delete this.lastLT;
-        this.lastXY = xy;
-    },
-
-    storeLeftTop : function(left, top){
-        delete this.lastXY;
-        this.lastLT = [left, top];
-    },
-
-    // private
-    beforeFx : function(){
-        this.beforeAction();
-        return Ext.Layer.superclass.beforeFx.apply(this, arguments);
-    },
-
-    // private
-    afterFx : function(){
-        Ext.Layer.superclass.afterFx.apply(this, arguments);
-        this.sync(this.isVisible());
-    },
-
-    // private
-    beforeAction : function(){
-        if(!this.updating && this.shadow){
-            this.shadow.hide();
-        }
-    },
-
-    // overridden Element method
-    setLeft : function(left){
-        this.storeLeftTop(left, this.getTop(true));
-        supr.setLeft.apply(this, arguments);
-        this.sync();
-    },
-
-    setTop : function(top){
-        this.storeLeftTop(this.getLeft(true), top);
-        supr.setTop.apply(this, arguments);
-        this.sync();
-    },
-
-    setLeftTop : function(left, top){
-        this.storeLeftTop(left, top);
-        supr.setLeftTop.apply(this, arguments);
-        this.sync();
-    },
-
-    setXY : function(xy, a, d, c, e){
-        this.fixDisplay();
-        this.beforeAction();
-        this.storeXY(xy);
-        var cb = this.createCB(c);
-        supr.setXY.call(this, xy, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // private
-    createCB : function(c){
-        var el = this;
-        return function(){
-            el.constrainXY();
-            el.sync(true);
-            if(c){
-                c();
-            }
-        };
-    },
-
-    // overridden Element method
-    setX : function(x, a, d, c, e){
-        this.setXY([x, this.getY()], a, d, c, e);
-    },
-
-    // overridden Element method
-    setY : function(y, a, d, c, e){
-        this.setXY([this.getX(), y], a, d, c, e);
-    },
-
-    // overridden Element method
-    setSize : function(w, h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setSize.call(this, w, h, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setWidth : function(w, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setWidth.call(this, w, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setHeight : function(h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        supr.setHeight.call(this, h, a, d, cb, e);
-        if(!a){
-            cb();
-        }
-    },
-
-    // overridden Element method
-    setBounds : function(x, y, w, h, a, d, c, e){
-        this.beforeAction();
-        var cb = this.createCB(c);
-        if(!a){
-            this.storeXY([x, y]);
-            supr.setXY.call(this, [x, y]);
-            supr.setSize.call(this, w, h, a, d, cb, e);
-            cb();
-        }else{
-            supr.setBounds.call(this, x, y, w, h, a, d, cb, e);
-        }
-        return this;
-    },
-
-
-    setZIndex : function(zindex){
-        this.zindex = zindex;
-        this.setStyle("z-index", zindex + 2);
-        if(this.shadow){
-            this.shadow.setZIndex(zindex + 1);
-        }
-        if(this.shim){
-            this.shim.setStyle("z-index", zindex);
-        }
-    }
-});
-})();
-
-Ext.Shadow = function(config){
-    Ext.apply(this, config);
-    if(typeof this.mode != "string"){
-        this.mode = this.defaultMode;
-    }
-    var o = this.offset, a = {h: 0};
-    var rad = Math.floor(this.offset/2);
-    switch(this.mode.toLowerCase()){ // all this hideous nonsense calculates the various offsets for shadows
-        case "drop":
-            a.w = 0;
-            a.l = a.t = o;
-            a.t -= 1;
-            if(Ext.isIE){
-                a.l -= this.offset + rad;
-                a.t -= this.offset + rad;
-                a.w -= rad;
-                a.h -= rad;
-                a.t += 1;
-            }
-        break;
-        case "sides":
-            a.w = (o*2);
-            a.l = -o;
-            a.t = o-1;
-            if(Ext.isIE){
-                a.l -= (this.offset - rad);
-                a.t -= this.offset + rad;
-                a.l += 1;
-                a.w -= (this.offset - rad)*2;
-                a.w -= rad + 1;
-                a.h -= 1;
-            }
-        break;
-        case "frame":
-            a.w = a.h = (o*2);
-            a.l = a.t = -o;
-            a.t += 1;
-            a.h -= 2;
-            if(Ext.isIE){
-                a.l -= (this.offset - rad);
-                a.t -= (this.offset - rad);
-                a.l += 1;
-                a.w -= (this.offset + rad + 1);
-                a.h -= (this.offset + rad);
-                a.h += 1;
-            }
-        break;
-    };
-
-    this.adjusts = a;
-};
-
-Ext.Shadow.prototype = {
-
-
-    offset: 4,
-
-    // private
-    defaultMode: "drop",
-
-
-    show : function(target){
-        target = Ext.get(target);
-        if(!this.el){
-            this.el = Ext.Shadow.Pool.pull();
-            if(this.el.dom.nextSibling != target.dom){
-                this.el.insertBefore(target);
-            }
-        }
-        this.el.setStyle("z-index", this.zIndex || parseInt(target.getStyle("z-index"), 10)-1);
-        if(Ext.isIE){
-            this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";
-        }
-        this.realign(
-            target.getLeft(true),
-            target.getTop(true),
-            target.getWidth(),
-            target.getHeight()
-        );
-        this.el.dom.style.display = "block";
-    },
-
-
-    isVisible : function(){
-        return this.el ? true : false;
-    },
-
-
-    realign : function(l, t, w, h){
-        if(!this.el){
-            return;
-        }
-        var a = this.adjusts, d = this.el.dom, s = d.style;
-        var iea = 0;
-        s.left = (l+a.l)+"px";
-        s.top = (t+a.t)+"px";
-        var sw = (w+a.w), sh = (h+a.h), sws = sw +"px", shs = sh + "px";
-        if(s.width != sws || s.height != shs){
-            s.width = sws;
-            s.height = shs;
-            if(!Ext.isIE){
-                var cn = d.childNodes;
-                var sww = Math.max(0, (sw-12))+"px";
-                cn[0].childNodes[1].style.width = sww;
-                cn[1].childNodes[1].style.width = sww;
-                cn[2].childNodes[1].style.width = sww;
-                cn[1].style.height = Math.max(0, (sh-12))+"px";
-            }
-        }
-    },
-
-
-    hide : function(){
-        if(this.el){
-            this.el.dom.style.display = "none";
-            Ext.Shadow.Pool.push(this.el);
-            delete this.el;
-        }
-    },
-
-
-    setZIndex : function(z){
-        this.zIndex = z;
-        if(this.el){
-            this.el.setStyle("z-index", z);
-        }
-    }
-};
-
-// Private utility class that manages the internal Shadow cache
-Ext.Shadow.Pool = function(){
-    var p = [];
-    var markup = Ext.isIE ?
-                 '<div class="x-ie-shadow"></div>' :
-                 '<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';
-    return {
-        pull : function(){
-            var sh = p.shift();
-            if(!sh){
-                sh = Ext.get(Ext.DomHelper.insertHtml("beforeBegin", document.body.firstChild, markup));
-                sh.autoBoxAdjust = false;
-            }
-            return sh;
-        },
-
-        push : function(sh){
-            p.push(sh);
-        }
-    };
-}();
-Ext.BoxComponent = function(config){
-    Ext.BoxComponent.superclass.constructor.call(this, config);
-    this.addEvents({
-        resize : true,
-        move : true
-    });
-};
-
-Ext.extend(Ext.BoxComponent, Ext.Component, {
-    boxReady : false,
-    // private, used to defer height settings to subclasses
-    deferHeight: false,
-
-    setSize : function(w, h){
-        // support for standard size objects
-        if(typeof w == 'object'){
-            h = w.height;
-            w = w.width;
-        }
-        // not rendered
-        if(!this.boxReady){
-            this.width = w;
-            this.height = h;
-            return this;
-        }
-
-        // prevent recalcs when not needed
-        if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
-            return this;
-        }
-        this.lastSize = {width: w, height: h};
-
-        var adj = this.adjustSize(w, h);
-        var aw = adj.width, ah = adj.height;
-        if(aw !== undefined || ah !== undefined){ // this code is nasty but performs better with floaters
-            var rz = this.getResizeEl();
-            if(!this.deferHeight && aw !== undefined && ah !== undefined){
-                rz.setSize(aw, ah);
-            }else if(!this.deferHeight && ah !== undefined){
-                rz.setHeight(ah);
-            }else if(aw !== undefined){
-                rz.setWidth(aw);
-            }
-            this.onResize(aw, ah, w, h);
-            this.fireEvent('resize', this, aw, ah, w, h);
-        }
-        return this;
-    },
-
-    getSize : function(){
-        return this.el.getSize();
-    },
-
-    getPosition : function(local){
-        if(local === true){
-            return [this.el.getLeft(true), this.el.getTop(true)];
-        }
-        return this.xy || this.el.getXY();
-    },
-
-    getBox : function(local){
-        var s = this.el.getSize();
-        if(local){
-            s.x = this.el.getLeft(true);
-            s.y = this.el.getTop(true);
-        }else{
-            var xy = this.xy || this.el.getXY();
-            s.x = xy[0];
-            s.y = xy[1];
-        }
-        return s;
-    },
-
-    updateBox : function(box){
-        this.setSize(box.width, box.height);
-        this.setPagePosition(box.x, box.y);
-    },
-
-    getResizeEl : function(){
-        return this.resizeEl || this.el;
-    },
-
-    getPositionEl : function(){
-        return this.positionEl || this.el;
-    },
-
-    setPosition : function(x, y){
-        this.x = x;
-        this.y = y;
-        if(!this.boxReady){
-            return this;
-        }
-        var adj = this.adjustPosition(x, y);
-        var ax = adj.x, ay = adj.y;
-
-        var el = this.getPositionEl();
-        if(ax !== undefined || ay !== undefined){
-            if(ax !== undefined && ay !== undefined){
-                el.setLeftTop(ax, ay);
-            }else if(ax !== undefined){
-                el.setLeft(ax);
-            }else if(ay !== undefined){
-                el.setTop(ay);
-            }
-            this.onPosition(ax, ay);
-            this.fireEvent('move', this, ax, ay);
-        }
-        return this;
-    },
-
-    setPagePosition : function(x, y){
-        this.pageX = x;
-        this.pageY = y;
-        if(!this.boxReady){
-            return;
-        }
-        if(x === undefined || y === undefined){ // cannot translate undefined points
-            return;
-        }
-        var p = this.el.translatePoints(x, y);
-        this.setPosition(p.left, p.top);
-        return this;
-    },
-
-    onRender : function(ct, position){
-        Ext.BoxComponent.superclass.onRender.call(this, ct, position);
-        if(this.resizeEl){
-            this.resizeEl = Ext.get(this.resizeEl);
-        }
-        if(this.positionEl){
-            this.positionEl = Ext.get(this.positionEl);
-        }
-    },
-
-    afterRender : function(){
-        Ext.BoxComponent.superclass.afterRender.call(this);
-        this.boxReady = true;
-        this.setSize(this.width, this.height);
-        if(this.x || this.y){
-            this.setPosition(this.x, this.y);
-        }
-        if(this.pageX || this.pageY){
-            this.setPagePosition(this.pageX, this.pageY);
-        }
-    },
-
-    syncSize : function(){
-        this.setSize(this.el.getWidth(), this.el.getHeight());
-    },
-
-    onResize : function(adjWidth, adjHeight, rawWidth, rawHeight){
-
-    },
-
-    onPosition : function(x, y){
-
-    },
-
-    adjustSize : function(w, h){
-        if(this.autoWidth){
-            w = 'auto';
-        }
-        if(this.autoHeight){
-            h = 'auto';
-        }
-        return {width : w, height: h};
-    },
-
-    adjustPosition : function(x, y){
-        return {x : x, y: y};
-    }
-});
-
-Ext.SplitBar = function(dragElement, resizingElement, orientation, placement, existingProxy){
-
-
-    this.el = Ext.get(dragElement, true);
-    this.el.dom.unselectable = "on";
-
-    this.resizingEl = Ext.get(resizingElement, true);
-
-
-    this.orientation = orientation || Ext.SplitBar.HORIZONTAL;
-
-
-    this.minSize = 0;
-
-
-    this.maxSize = 2000;
-
-
-    this.animate = false;
-
-
-    this.useShim = false;
-
-
-    this.shim = null;
-
-    if(!existingProxy){
-
-        this.proxy = Ext.SplitBar.createProxy(this.orientation);
-    }else{
-        this.proxy = Ext.get(existingProxy).dom;
-    }
-
-    this.dd = new Ext.dd.DDProxy(this.el.dom.id, "XSplitBars", {dragElId : this.proxy.id});
-
-
-    this.dd.b4StartDrag = this.onStartProxyDrag.createDelegate(this);
-
-
-    this.dd.endDrag = this.onEndProxyDrag.createDelegate(this);
-
-
-    this.dragSpecs = {};
-
-
-    this.adapter = new Ext.SplitBar.BasicLayoutAdapter();
-    this.adapter.init(this);
-
-    if(this.orientation == Ext.SplitBar.HORIZONTAL){
-
-        this.placement = placement || (this.el.getX() > this.resizingEl.getX() ? Ext.SplitBar.LEFT : Ext.SplitBar.RIGHT);
-        this.el.addClass("x-splitbar-h");
-    }else{
-
-        this.placement = placement || (this.el.getY() > this.resizingEl.getY() ? Ext.SplitBar.TOP : Ext.SplitBar.BOTTOM);
-        this.el.addClass("x-splitbar-v");
-    }
-
-    this.addEvents({
-
-        "resize" : true,
-
-        "moved" : true,
-
-        "beforeresize" : true,
-
-        "beforeapply" : true
-    });
-
-    Ext.SplitBar.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.SplitBar, Ext.util.Observable, {
-    onStartProxyDrag : function(x, y){
-        this.fireEvent("beforeresize", this);
-        if(!this.overlay){
-            var o = Ext.DomHelper.insertFirst(document.body,  {cls: "x-drag-overlay", html: "&#160;"}, true);
-            o.unselectable();
-            o.enableDisplayMode("block");
-            // all splitbars share the same overlay
-            Ext.SplitBar.prototype.overlay = o;
-        }
-        this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-        this.overlay.show();
-        Ext.get(this.proxy).setDisplayed("block");
-        var size = this.adapter.getElementSize(this);
-        this.activeMinSize = this.getMinimumSize();;
-        this.activeMaxSize = this.getMaximumSize();;
-        var c1 = size - this.activeMinSize;
-        var c2 = Math.max(this.activeMaxSize - size, 0);
-        if(this.orientation == Ext.SplitBar.HORIZONTAL){
-            this.dd.resetConstraints();
-            this.dd.setXConstraint(
-                this.placement == Ext.SplitBar.LEFT ? c1 : c2,
-                this.placement == Ext.SplitBar.LEFT ? c2 : c1
-            );
-            this.dd.setYConstraint(0, 0);
-        }else{
-            this.dd.resetConstraints();
-            this.dd.setXConstraint(0, 0);
-            this.dd.setYConstraint(
-                this.placement == Ext.SplitBar.TOP ? c1 : c2,
-                this.placement == Ext.SplitBar.TOP ? c2 : c1
-            );
-         }
-        this.dragSpecs.startSize = size;
-        this.dragSpecs.startPoint = [x, y];
-        Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd, x, y);
-    },
-
-
-    onEndProxyDrag : function(e){
-        Ext.get(this.proxy).setDisplayed(false);
-        var endPoint = Ext.lib.Event.getXY(e);
-        if(this.overlay){
-            this.overlay.hide();
-        }
-        var newSize;
-        if(this.orientation == Ext.SplitBar.HORIZONTAL){
-            newSize = this.dragSpecs.startSize +
-                (this.placement == Ext.SplitBar.LEFT ?
-                    endPoint[0] - this.dragSpecs.startPoint[0] :
-                    this.dragSpecs.startPoint[0] - endPoint[0]
-                );
-        }else{
-            newSize = this.dragSpecs.startSize +
-                (this.placement == Ext.SplitBar.TOP ?
-                    endPoint[1] - this.dragSpecs.startPoint[1] :
-                    this.dragSpecs.startPoint[1] - endPoint[1]
-                );
-        }
-        newSize = Math.min(Math.max(newSize, this.activeMinSize), this.activeMaxSize);
-        if(newSize != this.dragSpecs.startSize){
-            if(this.fireEvent('beforeapply', this, newSize) !== false){
-                this.adapter.setElementSize(this, newSize);
-                this.fireEvent("moved", this, newSize);
-                this.fireEvent("resize", this, newSize);
-            }
-        }
-    },
-
-
-    getAdapter : function(){
-        return this.adapter;
-    },
-
-
-    setAdapter : function(adapter){
-        this.adapter = adapter;
-        this.adapter.init(this);
-    },
-
-
-    getMinimumSize : function(){
-        return this.minSize;
-    },
-
-
-    setMinimumSize : function(minSize){
-        this.minSize = minSize;
-    },
-
-
-    getMaximumSize : function(){
-        return this.maxSize;
-    },
-
-
-    setMaximumSize : function(maxSize){
-        this.maxSize = maxSize;
-    },
-
-
-    setCurrentSize : function(size){
-        var oldAnimate = this.animate;
-        this.animate = false;
-        this.adapter.setElementSize(this, size);
-        this.animate = oldAnimate;
-    },
-
-
-    destroy : function(removeEl){
-        if(this.shim){
-            this.shim.remove();
-        }
-        this.dd.unreg();
-        this.proxy.parentNode.removeChild(this.proxy);
-        if(removeEl){
-            this.el.remove();
-        }
-    }
-});
-
-
-Ext.SplitBar.createProxy = function(dir){
-    var proxy = new Ext.Element(document.createElement("div"));
-    proxy.unselectable();
-    var cls = 'x-splitbar-proxy';
-    proxy.addClass(cls + ' ' + (dir == Ext.SplitBar.HORIZONTAL ? cls +'-h' : cls + '-v'));
-    document.body.appendChild(proxy.dom);
-    return proxy.dom;
-};
-
-
-Ext.SplitBar.BasicLayoutAdapter = function(){
-};
-
-Ext.SplitBar.BasicLayoutAdapter.prototype = {
-    // do nothing for now
-    init : function(s){
-
-    },
-
-     getElementSize : function(s){
-        if(s.orientation == Ext.SplitBar.HORIZONTAL){
-            return s.resizingEl.getWidth();
-        }else{
-            return s.resizingEl.getHeight();
-        }
-    },
-
-
-    setElementSize : function(s, newSize, onComplete){
-        if(s.orientation == Ext.SplitBar.HORIZONTAL){
-            if(!s.animate){
-                s.resizingEl.setWidth(newSize);
-                if(onComplete){
-                    onComplete(s, newSize);
-                }
-            }else{
-                s.resizingEl.setWidth(newSize, true, .1, onComplete, 'easeOut');
-            }
-        }else{
-
-            if(!s.animate){
-                s.resizingEl.setHeight(newSize);
-                if(onComplete){
-                    onComplete(s, newSize);
-                }
-            }else{
-                s.resizingEl.setHeight(newSize, true, .1, onComplete, 'easeOut');
-            }
-        }
-    }
-};
-
-
-Ext.SplitBar.AbsoluteLayoutAdapter = function(container){
-    this.basic = new Ext.SplitBar.BasicLayoutAdapter();
-    this.container = Ext.get(container);
-};
-
-Ext.SplitBar.AbsoluteLayoutAdapter.prototype = {
-    init : function(s){
-        this.basic.init(s);
-    },
-
-    getElementSize : function(s){
-        return this.basic.getElementSize(s);
-    },
-
-    setElementSize : function(s, newSize, onComplete){
-        this.basic.setElementSize(s, newSize, this.moveSplitter.createDelegate(this, [s]));
-    },
-
-    moveSplitter : function(s){
-        var yes = Ext.SplitBar;
-        switch(s.placement){
-            case yes.LEFT:
-                s.el.setX(s.resizingEl.getRight());
-                break;
-            case yes.RIGHT:
-                s.el.setStyle("right", (this.container.getWidth() - s.resizingEl.getLeft()) + "px");
-                break;
-            case yes.TOP:
-                s.el.setY(s.resizingEl.getBottom());
-                break;
-            case yes.BOTTOM:
-                s.el.setY(s.resizingEl.getTop() - s.el.getHeight());
-                break;
-        }
-    }
-};
-
-
-Ext.SplitBar.VERTICAL = 1;
-
-
-Ext.SplitBar.HORIZONTAL = 2;
-
-
-Ext.SplitBar.LEFT = 1;
-
-
-Ext.SplitBar.RIGHT = 2;
-
-
-Ext.SplitBar.TOP = 3;
-
-
-Ext.SplitBar.BOTTOM = 4;
-
-
-Ext.View = function(container, tpl, config){
-    this.el = Ext.get(container);
-    if(typeof tpl == "string"){
-        tpl = new Ext.Template(tpl);
-    }
-    tpl.compile();
-
-    this.tpl = tpl;
-
-    Ext.apply(this, config);
-
-
-    this.addEvents({
-
-        "beforeclick" : true,
-
-        "click" : true,
-
-        "dblclick" : true,
-
-        "contextmenu" : true,
-
-        "selectionchange" : true,
-
-
-        "beforeselect" : true
-    });
-
-    this.el.on({
-        "click": this.onClick,
-        "dblclick": this.onDblClick,
-        "contextmenu": this.onContextMenu,
-        scope:this
-    });
-
-    this.selections = [];
-    this.nodes = [];
-    this.cmp = new Ext.CompositeElementLite([]);
-    if(this.store){
-        this.setStore(this.store, true);
-    }
-    Ext.View.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.View, Ext.util.Observable, {
-
-    selectedClass : "x-view-selected",
-
-    emptyText : "",
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    refresh : function(){
-        var t = this.tpl;
-        this.clearSelections();
-        this.el.update("");
-        var html = [];
-        var records = this.store.getRange();
-        if(records.length < 1){
-            this.el.update(this.emptyText);
-            return;
-        }
-        for(var i = 0, len = records.length; i < len; i++){
-            var data = this.prepareData(records[i].data, i, records[i]);
-            html[html.length] = t.apply(data);
-        }
-        this.el.update(html.join(""));
-        this.nodes = this.el.dom.childNodes;
-        this.updateIndexes(0);
-    },
-
-
-    prepareData : function(data){
-        return data;
-    },
-
-    onUpdate : function(ds, record){
-        this.clearSelections();
-        var index = this.store.indexOf(record);
-        var n = this.nodes[index];
-        this.tpl.insertBefore(n, this.prepareData(record.data));
-        n.parentNode.removeChild(n);
-        this.updateIndexes(index, index);
-    },
-
-    onAdd : function(ds, records, index){
-        this.clearSelections();
-        if(this.nodes.length == 0){
-            this.refresh();
-            return;
-        }
-        var n = this.nodes[index];
-        for(var i = 0, len = records.length; i < len; i++){
-            var d = this.prepareData(records[i].data);
-            if(n){
-                this.tpl.insertBefore(n, d);
-            }else{
-                this.tpl.append(this.el, d);
-            }
-        }
-        this.updateIndexes(index);
-    },
-
-    onRemove : function(ds, record, index){
-        this.clearSelections();
-        this.el.dom.removeChild(this.nodes[index]);
-        this.updateIndexes(index);
-    },
-
-
-    refreshNode : function(index){
-        this.onUpdate(this.store, this.store.getAt(index));
-    },
-
-    updateIndexes : function(startIndex, endIndex){
-        var ns = this.nodes;
-        startIndex = startIndex || 0;
-        endIndex = endIndex || ns.length - 1;
-        for(var i = startIndex; i <= endIndex; i++){
-            ns[i].nodeIndex = i;
-        }
-    },
-
-
-    setStore : function(store, initial){
-        if(!initial && this.store){
-            this.store.un("datachanged", this.refresh);
-            this.store.un("add", this.onAdd);
-            this.store.un("remove", this.onRemove);
-            this.store.un("update", this.onUpdate);
-            this.store.un("clear", this.refresh);
-        }
-        if(store){
-            store.on("datachanged", this.refresh, this);
-            store.on("add", this.onAdd, this);
-            store.on("remove", this.onRemove, this);
-            store.on("update", this.onUpdate, this);
-            store.on("clear", this.refresh, this);
-        }
-        this.store = store;
-        if(store){
-            this.refresh();
-        }
-    },
-
-
-    findItemFromChild : function(node){
-        var el = this.el.dom;
-        if(!node || node.parentNode == el){
-		    return node;
-	    }
-	    var p = node.parentNode;
-	    while(p && p != el){
-            if(p.parentNode == el){
-            	return p;
-            }
-            p = p.parentNode;
-        }
-	    return null;
-    },
-
-
-    onClick : function(e){
-        var item = this.findItemFromChild(e.getTarget());
-        if(item){
-            var index = this.indexOf(item);
-            if(this.onItemClick(item, index, e) !== false){
-                this.fireEvent("click", this, index, item, e);
-            }
-        }else{
-            this.clearSelections();
-        }
-    },
-
-
-    onContextMenu : function(e){
-        var item = this.findItemFromChild(e.getTarget());
-        if(item){
-            this.fireEvent("contextmenu", this, this.indexOf(item), item, e);
-        }
-    },
-
-
-    onDblClick : function(e){
-        var item = this.findItemFromChild(e.getTarget());
-        if(item){
-            this.fireEvent("dblclick", this, this.indexOf(item), item, e);
-        }
-    },
-
-    onItemClick : function(item, index, e){
-        if(this.fireEvent("beforeclick", this, index, item, e) === false){
-            return false;
-        }
-        if(this.multiSelect || this.singleSelect){
-            if(this.multiSelect && e.shiftKey && this.lastSelection){
-                this.select(this.getNodes(this.indexOf(this.lastSelection), index), false);
-            }else{
-                this.select(item, this.multiSelect && e.ctrlKey);
-                this.lastSelection = item;
-            }
-            e.preventDefault();
-        }
-        return true;
-    },
-
-
-    getSelectionCount : function(){
-        return this.selections.length;
-    },
-
-
-    getSelectedNodes : function(){
-        return this.selections;
-    },
-
-
-    getSelectedIndexes : function(){
-        var indexes = [], s = this.selections;
-        for(var i = 0, len = s.length; i < len; i++){
-            indexes.push(s[i].nodeIndex);
-        }
-        return indexes;
-    },
-
-
-    clearSelections : function(suppressEvent){
-        if(this.nodes && (this.multiSelect || this.singleSelect) && this.selections.length > 0){
-            this.cmp.elements = this.selections;
-            this.cmp.removeClass(this.selectedClass);
-            this.selections = [];
-            if(!suppressEvent){
-                this.fireEvent("selectionchange", this, this.selections);
-            }
-        }
-    },
-
-
-    isSelected : function(node){
-        var s = this.selections;
-        if(s.length < 1){
-            return false;
-        }
-        node = this.getNode(node);
-        return s.indexOf(node) !== -1;
-    },
-
-
-    select : function(nodeInfo, keepExisting, suppressEvent){
-        if(nodeInfo instanceof Array){
-            if(!keepExisting){
-                this.clearSelections(true);
-            }
-            for(var i = 0, len = nodeInfo.length; i < len; i++){
-                this.select(nodeInfo[i], true, true);
-            }
-        } else{
-            var node = this.getNode(nodeInfo);
-            if(node && !this.isSelected(node)){
-                if(!keepExisting){
-                    this.clearSelections(true);
-                }
-                if(this.fireEvent("beforeselect", this, node, this.selections) !== false){
-                    Ext.fly(node).addClass(this.selectedClass);
-                    this.selections.push(node);
-                    if(!suppressEvent){
-                        this.fireEvent("selectionchange", this, this.selections);
-                    }
-                }
-            }
-        }
-    },
-
-
-    getNode : function(nodeInfo){
-        if(typeof nodeInfo == "string"){
-            return document.getElementById(nodeInfo);
-        }else if(typeof nodeInfo == "number"){
-            return this.nodes[nodeInfo];
-        }
-        return nodeInfo;
-    },
-
-
-    getNodes : function(start, end){
-        var ns = this.nodes;
-        start = start || 0;
-        end = typeof end == "undefined" ? ns.length - 1 : end;
-        var nodes = [];
-        if(start <= end){
-            for(var i = start; i <= end; i++){
-                nodes.push(ns[i]);
-            }
-        } else{
-            for(var i = start; i >= end; i--){
-                nodes.push(ns[i]);
-            }
-        }
-        return nodes;
-    },
-
-
-    indexOf : function(node){
-        node = this.getNode(node);
-        if(typeof node.nodeIndex == "number"){
-            return node.nodeIndex;
-        }
-        var ns = this.nodes;
-        for(var i = 0, len = ns.length; i < len; i++){
-            if(ns[i] == node){
-                return i;
-            }
-        }
-        return -1;
-    }
-});
-
-
-Ext.JsonView = function(container, tpl, config){
-    Ext.JsonView.superclass.constructor.call(this, container, tpl, config);
-
-    var um = this.el.getUpdateManager();
-    um.setRenderer(this);
-    um.on("update", this.onLoad, this);
-    um.on("failure", this.onLoadException, this);
-
-
-
-
-    this.addEvents({
-        'beforerender' : true,
-        'load' : true,
-        'loadexception' : true
-    });
-};
-Ext.extend(Ext.JsonView, Ext.View, {
-
-    jsonRoot : "",
-
-
-    refresh : function(){
-        this.clearSelections();
-        this.el.update("");
-        var html = [];
-        var o = this.jsonData;
-        if(o && o.length > 0){
-            for(var i = 0, len = o.length; i < len; i++){
-                var data = this.prepareData(o[i], i, o);
-                html[html.length] = this.tpl.apply(data);
-            }
-        }else{
-            html.push(this.emptyText);
-        }
-        this.el.update(html.join(""));
-        this.nodes = this.el.dom.childNodes;
-        this.updateIndexes(0);
-    },
-
-
-    load : function(){
-        var um = this.el.getUpdateManager();
-        um.update.apply(um, arguments);
-    },
-
-    render : function(el, response){
-        this.clearSelections();
-        this.el.update("");
-        var o;
-        try{
-            o = Ext.util.JSON.decode(response.responseText);
-            if(this.jsonRoot){
-                o = eval("o." + this.jsonRoot);
-            }
-        } catch(e){
-        }
-
-        this.jsonData = o;
-        this.beforeRender();
-        this.refresh();
-    },
-
-
-    getCount : function(){
-        return this.jsonData ? this.jsonData.length : 0;
-    },
-
-
-    getNodeData : function(node){
-        if(node instanceof Array){
-            var data = [];
-            for(var i = 0, len = node.length; i < len; i++){
-                data.push(this.getNodeData(node[i]));
-            }
-            return data;
-        }
-        return this.jsonData[this.indexOf(node)] || null;
-    },
-
-    beforeRender : function(){
-        this.snapshot = this.jsonData;
-        if(this.sortInfo){
-            this.sort.apply(this, this.sortInfo);
-        }
-        this.fireEvent("beforerender", this, this.jsonData);
-    },
-
-    onLoad : function(el, o){
-        this.fireEvent("load", this, this.jsonData, o);
-    },
-
-    onLoadException : function(el, o){
-        this.fireEvent("loadexception", this, o);
-    },
-
-
-    filter : function(property, value){
-        if(this.jsonData){
-            var data = [];
-            var ss = this.snapshot;
-            if(typeof value == "string"){
-                var vlen = value.length;
-                if(vlen == 0){
-                    this.clearFilter();
-                    return;
-                }
-                value = value.toLowerCase();
-                for(var i = 0, len = ss.length; i < len; i++){
-                    var o = ss[i];
-                    if(o[property].substr(0, vlen).toLowerCase() == value){
-                        data.push(o);
-                    }
-                }
-            } else if(value.exec){ // regex?
-                for(var i = 0, len = ss.length; i < len; i++){
-                    var o = ss[i];
-                    if(value.test(o[property])){
-                        data.push(o);
-                    }
-                }
-            } else{
-                return;
-            }
-            this.jsonData = data;
-            this.refresh();
-        }
-    },
-
-
-    filterBy : function(fn, scope){
-        if(this.jsonData){
-            var data = [];
-            var ss = this.snapshot;
-            for(var i = 0, len = ss.length; i < len; i++){
-                var o = ss[i];
-                if(fn.call(scope || this, o)){
-                    data.push(o);
-                }
-            }
-            this.jsonData = data;
-            this.refresh();
-        }
-    },
-
-
-    clearFilter : function(){
-        if(this.snapshot && this.jsonData != this.snapshot){
-            this.jsonData = this.snapshot;
-            this.refresh();
-        }
-    },
-
-
-
-    sort : function(property, dir, sortType){
-        this.sortInfo = Array.prototype.slice.call(arguments, 0);
-        if(this.jsonData){
-            var p = property;
-            var dsc = dir && dir.toLowerCase() == "desc";
-            var f = function(o1, o2){
-                var v1 = sortType ? sortType(o1[p]) : o1[p];
-                var v2 = sortType ? sortType(o2[p]) : o2[p];
-                ;
-                if(v1 < v2){
-                    return dsc ? +1 : -1;
-                } else if(v1 > v2){
-                    return dsc ? -1 : +1;
-                } else{
-                    return 0;
-                }
-            };
-            this.jsonData.sort(f);
-            this.refresh();
-            if(this.jsonData != this.snapshot){
-                this.snapshot.sort(f);
-            }
-        }
-    }
-});
-
-Ext.ColorPalette = function(config){
-    Ext.ColorPalette.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        select: true
-    });
-
-    if(this.handler){
-        this.on("select", this.handler, this.scope, true);
-    }
-};
-Ext.extend(Ext.ColorPalette, Ext.Component, {
-
-    itemCls : "x-color-palette",
-
-    value : null,
-    clickEvent:'click',
-    // private
-    ctype: "Ext.ColorPalette",
-
-
-    allowReselect : false,
-
-
-    colors : [
-        "000000", "993300", "333300", "003300", "003366", "000080", "333399", "333333",
-        "800000", "FF6600", "808000", "008000", "008080", "0000FF", "666699", "808080",
-        "FF0000", "FF9900", "99CC00", "339966", "33CCCC", "3366FF", "800080", "969696",
-        "FF00FF", "FFCC00", "FFFF00", "00FF00", "00FFFF", "00CCFF", "993366", "C0C0C0",
-        "FF99CC", "FFCC99", "FFFF99", "CCFFCC", "CCFFFF", "99CCFF", "CC99FF", "FFFFFF"
-    ],
-
-    // private
-    onRender : function(container, position){
-        var t = new Ext.MasterTemplate(
-            '<tpl><a href="#" class="color-{0}" hidefocus="on"><em><span style="background:#{0}" unselectable="on">&#160;</span></em></a></tpl>'
-        );
-        var c = this.colors;
-        for(var i = 0, len = c.length; i < len; i++){
-            t.add([c[i]]);
-        }
-        var el = document.createElement("div");
-        el.className = this.itemCls;
-        t.overwrite(el);
-        container.dom.insertBefore(el, position);
-        this.el = Ext.get(el);
-        this.el.on(this.clickEvent, this.handleClick,  this, {delegate: "a"});
-        if(this.clickEvent != 'click'){
-            this.el.on('click', Ext.emptyFn,  this, {delegate: "a", preventDefault:true});
-        }
-    },
-
-    // private
-    afterRender : function(){
-        Ext.ColorPalette.superclass.afterRender.call(this);
-        if(this.value){
-            var s = this.value;
-            this.value = null;
-            this.select(s);
-        }
-    },
-
-    // private
-    handleClick : function(e, t){
-        e.preventDefault();
-        if(!this.disabled){
-            var c = t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];
-            this.select(c.toUpperCase());
-        }
-    },
-
-
-    select : function(color){
-        color = color.replace("#", "");
-        if(color != this.value || this.allowReselect){
-            var el = this.el;
-            if(this.value){
-                el.child("a.color-"+this.value).removeClass("x-color-palette-sel");
-            }
-            el.child("a.color-"+color).addClass("x-color-palette-sel");
-            this.value = color;
-            this.fireEvent("select", this, color);
-        }
-    }
-});
-
-Ext.DatePicker = function(config){
-    Ext.DatePicker.superclass.constructor.call(this, config);
-
-    this.value = config && config.value ?
-                 config.value.clearTime() : new Date().clearTime();
-
-    this.addEvents({
-
-        select: true
-    });
-
-    if(this.handler){
-        this.on("select", this.handler,  this.scope || this);
-    }
-    // build the disabledDatesRE
-    if(!this.disabledDatesRE && this.disabledDates){
-        var dd = this.disabledDates;
-        var re = "(?:";
-        for(var i = 0; i < dd.length; i++){
-            re += dd[i];
-            if(i != dd.length-1) re += "|";
-        }
-        this.disabledDatesRE = new RegExp(re + ")");
-    }
-};
-
-Ext.extend(Ext.DatePicker, Ext.Component, {
-
-    todayText : "Today",
-
-    okText : "&#160;OK&#160;", // &#160; to give the user extra clicking room
-
-    cancelText : "Cancel",
-
-    todayTip : "{0} (Spacebar)",
-
-    minDate : null,
-
-    maxDate : null,
-
-    minText : "This date is before the minimum date",
-
-    maxText : "This date is after the maximum date",
-
-    format : "m/d/y",
-
-    disabledDays : null,
-
-    disabledDaysText : "",
-
-    disabledDatesRE : null,
-
-    disabledDatesText : "",
-
-    constrainToViewport : true,
-
-    monthNames : Date.monthNames,
-
-    dayNames : Date.dayNames,
-
-    nextText: 'Next Month (Control+Right)',
-
-    prevText: 'Previous Month (Control+Left)',
-
-    monthYearText: 'Choose a month (Control+Up/Down to move years)',
-
-    startDay : 0,
-
-
-    setValue : function(value){
-        var old = this.value;
-        this.value = value.clearTime(true);
-        if(this.el){
-            this.update(this.value);
-        }
-    },
-
-
-    getValue : function(){
-        return this.value;
-    },
-
-    // private
-    focus : function(){
-        if(this.el){
-            this.update(this.activeDate);
-        }
-    },
-
-    // private
-    onRender : function(container, position){
-        var m = [
-             '<table cellspacing="0">',
-                '<tr><td class="x-date-left"><a href="#" title="', this.prevText ,'">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="', this.nextText ,'">&#160;</a></td></tr>',
-                '<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];
-        var dn = this.dayNames;
-        for(var i = 0; i < 7; i++){
-            var d = this.startDay+i;
-            if(d > 6){
-                d = d-7;
-            }
-            m.push("<th><span>", dn[d].substr(0,1), "</span></th>");
-        }
-        m[m.length] = "</tr></thead><tbody><tr>";
-        for(var i = 0; i < 42; i++) {
-            if(i % 7 == 0 && i != 0){
-                m[m.length] = "</tr><tr>";
-            }
-            m[m.length] = '<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';
-        }
-        m[m.length] = '</tr></tbody></table></td></tr><tr><td colspan="3" class="x-date-bottom" align="center"></td></tr></table><div class="x-date-mp"></div>';
-
-        var el = document.createElement("div");
-        el.className = "x-date-picker";
-        el.innerHTML = m.join("");
-
-        container.dom.insertBefore(el, position);
-
-        this.el = Ext.get(el);
-        this.eventEl = Ext.get(el.firstChild);
-
-        new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"), {
-            handler: this.showPrevMonth,
-            scope: this,
-            preventDefault:true,
-            stopDefault:true
-        });
-
-        new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"), {
-            handler: this.showNextMonth,
-            scope: this,
-            preventDefault:true,
-            stopDefault:true
-        });
-
-        this.eventEl.on("mousewheel", this.handleMouseWheel,  this);
-
-        this.monthPicker = this.el.down('div.x-date-mp');
-        this.monthPicker.enableDisplayMode('block');
-
-        var kn = new Ext.KeyNav(this.eventEl, {
-            "left" : function(e){
-                e.ctrlKey ?
-                    this.showPrevMonth() :
-                    this.update(this.activeDate.add("d", -1));
-            },
-
-            "right" : function(e){
-                e.ctrlKey ?
-                    this.showNextMonth() :
-                    this.update(this.activeDate.add("d", 1));
-            },
-
-            "up" : function(e){
-                e.ctrlKey ?
-                    this.showNextYear() :
-                    this.update(this.activeDate.add("d", -7));
-            },
-
-            "down" : function(e){
-                e.ctrlKey ?
-                    this.showPrevYear() :
-                    this.update(this.activeDate.add("d", 7));
-            },
-
-            "pageUp" : function(e){
-                this.showNextMonth();
-            },
-
-            "pageDown" : function(e){
-                this.showPrevMonth();
-            },
-
-            "enter" : function(e){
-                e.stopPropagation();
-                return true;
-            },
-
-            scope : this
-        });
-
-        this.eventEl.on("click", this.handleDateClick,  this, {delegate: "a.x-date-date"});
-
-        this.eventEl.addKeyListener(Ext.EventObject.SPACE, this.selectToday,  this);
-
-        this.el.unselectable();
-
-        this.cells = this.el.select("table.x-date-inner tbody td");
-        this.textNodes = this.el.query("table.x-date-inner tbody span");
-
-        this.mbtn = new Ext.Button(this.el.child("td.x-date-middle", true), {
-            text: "&#160;",
-            tooltip: this.monthYearText
-        });
-
-        this.mbtn.on('click', this.showMonthPicker, this);
-        this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");
-
-
-        var today = (new Date()).dateFormat(this.format);
-        var todayBtn = new Ext.Button(this.el.child("td.x-date-bottom", true), {
-            text: String.format(this.todayText, today),
-            tooltip: String.format(this.todayTip, today),
-            handler: this.selectToday,
-            scope: this
-        });
-
-        if(Ext.isIE){
-            this.el.repaint();
-        }
-        this.update(this.value);
-    },
-
-    createMonthPicker : function(){
-        if(!this.monthPicker.dom.firstChild){
-            var buf = ['<table border="0" cellspacing="0">'];
-            for(var i = 0; i < 6; i++){
-                buf.push(
-                    '<tr><td class="x-date-mp-month"><a href="#">', this.monthNames[i].substr(0, 3), '</a></td>',
-                    '<td class="x-date-mp-month x-date-mp-sep"><a href="#">', this.monthNames[i+6].substr(0, 3), '</a></td>',
-                    i == 0 ?
-                    '<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td>' :
-                    '<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>'
-                );
-            }
-            buf.push(
-                '<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',
-                    this.okText,
-                    '</button><button type="button" class="x-date-mp-cancel">',
-                    this.cancelText,
-                    '</button></td></tr>',
-                '</table>'
-            );
-            this.monthPicker.update(buf.join(''));
-            this.monthPicker.on('click', this.onMonthClick, this);
-            this.monthPicker.on('dblclick', this.onMonthDblClick, this);
-
-            this.mpMonths = this.monthPicker.select('td.x-date-mp-month');
-            this.mpYears = this.monthPicker.select('td.x-date-mp-year');
-
-            this.mpMonths.each(function(m, a, i){
-                i += 1;
-                if((i%2) == 0){
-                    m.dom.xmonth = 5 + Math.round(i * .5);
-                }else{
-                    m.dom.xmonth = Math.round((i-1) * .5);
-                }
-            });
-        }
-    },
-
-    showMonthPicker : function(){
-        this.createMonthPicker();
-        var size = this.el.getSize();
-        this.monthPicker.setSize(size);
-        this.monthPicker.child('table').setSize(size);
-
-        this.mpSelMonth = (this.activeDate || this.value).getMonth();
-        this.updateMPMonth(this.mpSelMonth);
-        this.mpSelYear = (this.activeDate || this.value).getFullYear();
-        this.updateMPYear(this.mpSelYear);
-
-        this.monthPicker.slideIn('t', {duration:.2});
-    },
-
-    updateMPYear : function(y){
-        this.mpyear = y;
-        var ys = this.mpYears.elements;
-        for(var i = 1; i <= 10; i++){
-            var td = ys[i-1], y2;
-            if((i%2) == 0){
-                y2 = y + Math.round(i * .5);
-                td.firstChild.innerHTML = y2;
-                td.xyear = y2;
-            }else{
-                y2 = y - (5-Math.round(i * .5));
-                td.firstChild.innerHTML = y2;
-                td.xyear = y2;
-            }
-            this.mpYears.item(i-1)[y2 == this.mpSelYear ? 'addClass' : 'removeClass']('x-date-mp-sel');
-        }
-    },
-
-    updateMPMonth : function(sm){
-        this.mpMonths.each(function(m, a, i){
-            m[m.dom.xmonth == sm ? 'addClass' : 'removeClass']('x-date-mp-sel');
-        });
-    },
-
-    selectMPMonth: function(m){
-
-    },
-
-    onMonthClick : function(e, t){
-        e.stopEvent();
-        var el = new Ext.Element(t), pn;
-        if(el.is('button.x-date-mp-cancel')){
-            this.hideMonthPicker();
-        }
-        else if(el.is('button.x-date-mp-ok')){
-            this.update(new Date(this.mpSelYear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
-            this.hideMonthPicker();
-        }
-        else if(pn = el.up('td.x-date-mp-month', 2)){
-            this.mpMonths.removeClass('x-date-mp-sel');
-            pn.addClass('x-date-mp-sel');
-            this.mpSelMonth = pn.dom.xmonth;
-        }
-        else if(pn = el.up('td.x-date-mp-year', 2)){
-            this.mpYears.removeClass('x-date-mp-sel');
-            pn.addClass('x-date-mp-sel');
-            this.mpSelYear = pn.dom.xyear;
-        }
-        else if(el.is('a.x-date-mp-prev')){
-            this.updateMPYear(this.mpyear-10);
-        }
-        else if(el.is('a.x-date-mp-next')){
-            this.updateMPYear(this.mpyear+10);
-        }
-    },
-
-    onMonthDblClick : function(e, t){
-        e.stopEvent();
-        var el = new Ext.Element(t), pn;
-        if(pn = el.up('td.x-date-mp-month', 2)){
-            this.update(new Date(this.mpSelYear, pn.dom.xmonth, (this.activeDate || this.value).getDate()));
-            this.hideMonthPicker();
-        }
-        else if(pn = el.up('td.x-date-mp-year', 2)){
-            this.update(new Date(pn.dom.xyear, this.mpSelMonth, (this.activeDate || this.value).getDate()));
-            this.hideMonthPicker();
-        }
-    },
-
-    hideMonthPicker : function(disableAnim){
-        if(this.monthPicker){
-            if(disableAnim === true){
-                this.monthPicker.hide();
-            }else{
-                this.monthPicker.slideOut('t', {duration:.2});
-            }
-        }
-    },
-
-    // private
-    showPrevMonth : function(e){
-        this.update(this.activeDate.add("mo", -1));
-    },
-
-    // private
-    showNextMonth : function(e){
-        this.update(this.activeDate.add("mo", 1));
-    },
-
-    // private
-    showPrevYear : function(){
-        this.update(this.activeDate.add("y", -1));
-    },
-
-    // private
-    showNextYear : function(){
-        this.update(this.activeDate.add("y", 1));
-    },
-
-    // private
-    handleMouseWheel : function(e){
-        var delta = e.getWheelDelta();
-        if(delta > 0){
-            this.showPrevMonth();
-            e.stopEvent();
-        } else if(delta < 0){
-            this.showNextMonth();
-            e.stopEvent();
-        }
-    },
-
-    // private
-    handleDateClick : function(e, t){
-        e.stopEvent();
-        if(t.dateValue && !Ext.fly(t.parentNode).hasClass("x-date-disabled")){
-            this.setValue(new Date(t.dateValue));
-            this.fireEvent("select", this, this.value);
-        }
-    },
-
-    // private
-    selectToday : function(){
-        this.setValue(new Date().clearTime());
-        this.fireEvent("select", this, this.value);
-    },
-
-    // private
-    update : function(date){
-        var vd = this.activeDate;
-        this.activeDate = date;
-        if(vd && this.el){
-            var t = date.getTime();
-            if(vd.getMonth() == date.getMonth() && vd.getFullYear() == date.getFullYear()){
-                this.cells.removeClass("x-date-selected");
-                this.cells.each(function(c){
-                   if(c.dom.firstChild.dateValue == t){
-                       c.addClass("x-date-selected");
-                       setTimeout(function(){
-                            try{c.dom.firstChild.focus();}catch(e){}
-                       }, 50);
-                       return false;
-                   }
-                });
-                return;
-            }
-        }
-        var days = date.getDaysInMonth();
-        var firstOfMonth = date.getFirstDateOfMonth();
-        var startingPos = firstOfMonth.getDay()-this.startDay;
-
-        if(startingPos <= this.startDay){
-            startingPos += 7;
-        }
-
-        var pm = date.add("mo", -1);
-        var prevStart = pm.getDaysInMonth()-startingPos;
-
-        var cells = this.cells.elements;
-        var textEls = this.textNodes;
-        days += startingPos;
-
-        // convert everything to numbers so it's fast
-        var day = 86400000;
-        var d = (new Date(pm.getFullYear(), pm.getMonth(), prevStart)).clearTime();
-        var today = new Date().clearTime().getTime();
-        var sel = date.clearTime().getTime();
-        var min = this.minDate ? this.minDate.clearTime() : Number.NEGATIVE_INFINITY;
-        var max = this.maxDate ? this.maxDate.clearTime() : Number.POSITIVE_INFINITY;
-        var ddMatch = this.disabledDatesRE;
-        var ddText = this.disabledDatesText;
-        var ddays = this.disabledDays ? this.disabledDays.join("") : false;
-        var ddaysText = this.disabledDaysText;
-        var format = this.format;
-
-        var setCellClass = function(cal, cell){
-            cell.title = "";
-            var t = d.getTime();
-            cell.firstChild.dateValue = t;
-            if(t == today){
-                cell.className += " x-date-today";
-                cell.title = cal.todayText;
-            }
-            if(t == sel){
-                cell.className += " x-date-selected";
-                setTimeout(function(){
-                    try{cell.firstChild.focus();}catch(e){}
-                }, 50);
-            }
-            // disabling
-            if(t < min) {
-                cell.className = " x-date-disabled";
-                cell.title = cal.minText;
-                return;
-            }
-            if(t > max) {
-                cell.className = " x-date-disabled";
-                cell.title = cal.maxText;
-                return;
-            }
-            if(ddays){
-                if(ddays.indexOf(d.getDay()) != -1){
-                    cell.title = ddaysText;
-                    cell.className = " x-date-disabled";
-                }
-            }
-            if(ddMatch && format){
-                var fvalue = d.dateFormat(format);
-                if(ddMatch.test(fvalue)){
-                    cell.title = ddText.replace("%0", fvalue);
-                    cell.className = " x-date-disabled";
-                }
-            }
-        };
-
-        var i = 0;
-        for(; i < startingPos; i++) {
-            textEls[i].innerHTML = (++prevStart);
-            d.setDate(d.getDate()+1);
-            cells[i].className = "x-date-prevday";
-            setCellClass(this, cells[i]);
-        }
-        for(; i < days; i++){
-            intDay = i - startingPos + 1;
-            textEls[i].innerHTML = (intDay);
-            d.setDate(d.getDate()+1);
-            cells[i].className = "x-date-active";
-            setCellClass(this, cells[i]);
-        }
-        var extraDays = 0;
-        for(; i < 42; i++) {
-             textEls[i].innerHTML = (++extraDays);
-             d.setDate(d.getDate()+1);
-             cells[i].className = "x-date-nextday";
-             setCellClass(this, cells[i]);
-        }
-
-        this.mbtn.setText(this.monthNames[date.getMonth()] + " " + date.getFullYear());
-
-        if(!this.internalRender){
-            var main = this.el.dom.firstChild;
-            var w = main.offsetWidth;
-            this.el.setWidth(w + this.el.getBorderWidth("lr"));
-            Ext.fly(main).setWidth(w);
-            this.internalRender = true;
-            // opera does not respect the auto grow header center column
-            // then, after it gets a width opera refuses to recalculate
-            // without a second pass
-            if(Ext.isOpera && !this.secondPass){
-                main.rows[0].cells[1].style.width = (w - (main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth)) + "px";
-                this.secondPass = true;
-                this.update.defer(10, this, [date]);
-            }
-        }
-    }
-});
-
-Ext.TabPanel = function(container, config){
-
-    this.el = Ext.get(container, true);
-    if(config){
-        if(typeof config == "boolean"){
-            this.tabPosition = config ? "bottom" : "top";
-        }else{
-            Ext.apply(this, config);
-        }
-    }
-    if(this.tabPosition == "bottom"){
-        this.bodyEl = Ext.get(this.createBody(this.el.dom));
-        this.el.addClass("x-tabs-bottom");
-    }
-    this.stripWrap = Ext.get(this.createStrip(this.el.dom), true);
-    this.stripEl = Ext.get(this.createStripList(this.stripWrap.dom), true);
-    this.stripBody = Ext.get(this.stripWrap.dom.firstChild.firstChild, true);
-    if(Ext.isIE){
-        Ext.fly(this.stripWrap.dom.firstChild).setStyle("overflow-x", "hidden");
-    }
-    if(this.tabPosition != "bottom"){
-
-      this.bodyEl = Ext.get(this.createBody(this.el.dom));
-      this.el.addClass("x-tabs-top");
-    }
-    this.items = [];
-
-    this.bodyEl.setStyle("position", "relative");
-
-    this.active = null;
-    this.activateDelegate = this.activate.createDelegate(this);
-
-    this.addEvents({
-
-        "tabchange": true,
-
-        "beforetabchange" : true
-    });
-
-    Ext.EventManager.onWindowResize(this.onResize, this);
-    this.cpad = this.el.getPadding("lr");
-    this.hiddenCount = 0;
-
-    Ext.TabPanel.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.TabPanel, Ext.util.Observable, {
-
-    tabPosition : "top",
-    currentTabWidth : 0,
-
-    minTabWidth : 40,
-
-    maxTabWidth : 250,
-
-    preferredTabWidth : 175,
-
-    resizeTabs : false,
-
-    monitorResize : true,
-
-
-    addTab : function(id, text, content, closable){
-        var item = new Ext.TabPanelItem(this, id, text, closable);
-        this.addTabItem(item);
-        if(content){
-            item.setContent(content);
-        }
-        return item;
-    },
-
-
-    getTab : function(id){
-        return this.items[id];
-    },
-
-
-    hideTab : function(id){
-        var t = this.items[id];
-        if(!t.isHidden()){
-           t.setHidden(true);
-           this.hiddenCount++;
-           this.autoSizeTabs();
-        }
-    },
-
-
-    unhideTab : function(id){
-        var t = this.items[id];
-        if(t.isHidden()){
-           t.setHidden(false);
-           this.hiddenCount--;
-           this.autoSizeTabs();
-        }
-    },
-
-
-    addTabItem : function(item){
-        this.items[item.id] = item;
-        this.items.push(item);
-        if(this.resizeTabs){
-           item.setWidth(this.currentTabWidth || this.preferredTabWidth);
-           this.autoSizeTabs();
-        }else{
-            item.autoSize();
-        }
-    },
-
-
-    removeTab : function(id){
-        var items = this.items;
-        var tab = items[id];
-        if(!tab) return;
-        var index = items.indexOf(tab);
-        if(this.active == tab && items.length > 1){
-            var newTab = this.getNextAvailable(index);
-            if(newTab)newTab.activate();
-        }
-        this.stripEl.dom.removeChild(tab.pnode.dom);
-        if(tab.bodyEl.dom.parentNode == this.bodyEl.dom){ // if it was moved already prevent error
-            this.bodyEl.dom.removeChild(tab.bodyEl.dom);
-        }
-        items.splice(index, 1);
-        delete this.items[tab.id];
-        tab.fireEvent("close", tab);
-        tab.purgeListeners();
-        this.autoSizeTabs();
-    },
-
-    getNextAvailable : function(start){
-        var items = this.items;
-        var index = start;
-        // look for a next tab that will slide over to
-        // replace the one being removed
-        while(index < items.length){
-            var item = items[++index];
-            if(item && !item.isHidden()){
-                return item;
-            }
-        }
-        // if one isn't found select the previous tab (on the left)
-        index = start;
-        while(index >= 0){
-            var item = items[--index];
-            if(item && !item.isHidden()){
-                return item;
-            }
-        }
-        return null;
-    },
-
-
-    disableTab : function(id){
-        var tab = this.items[id];
-        if(tab && this.active != tab){
-            tab.disable();
-        }
-    },
-
-
-    enableTab : function(id){
-        var tab = this.items[id];
-        tab.enable();
-    },
-
-
-    activate : function(id){
-        var tab = this.items[id];
-        if(!tab){
-            return null;
-        }
-        if(tab == this.active){
-            return tab;
-        }
-        var e = {};
-        this.fireEvent("beforetabchange", this, e, tab);
-        if(e.cancel !== true && !tab.disabled){
-            if(this.active){
-                this.active.hide();
-            }
-            this.active = this.items[id];
-            this.active.show();
-            this.fireEvent("tabchange", this, this.active);
-        }
-        return tab;
-    },
-
-
-    getActiveTab : function(){
-        return this.active;
-    },
-
-
-    syncHeight : function(targetHeight){
-        var height = (targetHeight || this.el.getHeight())-this.el.getBorderWidth("tb")-this.el.getPadding("tb");
-        var bm = this.bodyEl.getMargins();
-        var newHeight = height-(this.stripWrap.getHeight()||0)-(bm.top+bm.bottom);
-        this.bodyEl.setHeight(newHeight);
-        return newHeight;
-    },
-
-    onResize : function(){
-        if(this.monitorResize){
-            this.autoSizeTabs();
-        }
-    },
-
-
-    beginUpdate : function(){
-        this.updating = true;
-    },
-
-
-    endUpdate : function(){
-        this.updating = false;
-        this.autoSizeTabs();
-    },
-
-
-    autoSizeTabs : function(){
-        var count = this.items.length;
-        var vcount = count - this.hiddenCount;
-        if(!this.resizeTabs || count < 1 || vcount < 1 || this.updating) return;
-        var w = Math.max(this.el.getWidth() - this.cpad, 10);
-        var availWidth = Math.floor(w / vcount);
-        var b = this.stripBody;
-        if(b.getWidth() > w){
-            var tabs = this.items;
-            this.setTabWidth(Math.max(availWidth, this.minTabWidth)-2);
-            if(availWidth < this.minTabWidth){
-
-            }
-        }else{
-            if(this.currentTabWidth < this.preferredTabWidth){
-                this.setTabWidth(Math.min(availWidth, this.preferredTabWidth)-2);
-            }
-        }
-    },
-
-
-     getCount : function(){
-         return this.items.length;
-     },
-
-
-    setTabWidth : function(width){
-        this.currentTabWidth = width;
-        for(var i = 0, len = this.items.length; i < len; i++) {
-        	if(!this.items[i].isHidden())this.items[i].setWidth(width);
-        }
-    },
-
-
-    destroy : function(removeEl){
-        Ext.EventManager.removeResizeListener(this.onResize, this);
-        for(var i = 0, len = this.items.length; i < len; i++){
-            this.items[i].purgeListeners();
-        }
-        if(removeEl === true){
-            this.el.update("");
-            this.el.remove();
-        }
-    }
-});
-
-
-Ext.TabPanelItem = function(tabPanel, id, text, closable){
-
-    this.tabPanel = tabPanel;
-
-    this.id = id;
-
-    this.disabled = false;
-
-    this.text = text;
-
-    this.loaded = false;
-    this.closable = closable;
-
-
-    this.bodyEl = Ext.get(tabPanel.createItemBody(tabPanel.bodyEl.dom, id));
-    this.bodyEl.setVisibilityMode(Ext.Element.VISIBILITY);
-    this.bodyEl.setStyle("display", "block");
-    this.bodyEl.setStyle("zoom", "1");
-    this.hideAction();
-
-    var els = tabPanel.createStripElements(tabPanel.stripEl.dom, text, closable);
-
-    this.el = Ext.get(els.el, true);
-    this.inner = Ext.get(els.inner, true);
-    this.textEl = Ext.get(this.el.dom.firstChild.firstChild.firstChild, true);
-    this.pnode = Ext.get(els.el.parentNode, true);
-    this.el.on("mousedown", this.onTabMouseDown, this);
-    this.el.on("click", this.onTabClick, this);
-
-    if(closable){
-        var c = Ext.get(els.close, true);
-        c.dom.title = this.closeText;
-        c.addClassOnOver("close-over");
-        c.on("click", this.closeClick, this);
-     }
-
-    this.addEvents({
-
-        "activate": true,
-
-        "beforeclose": true,
-
-         "close": true,
-
-         "deactivate" : true
-    });
-    this.hidden = false;
-
-    Ext.TabPanelItem.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.TabPanelItem, Ext.util.Observable, {
-    purgeListeners : function(){
-       Ext.util.Observable.prototype.purgeListeners.call(this);
-       this.el.removeAllListeners();
-    },
-
-    show : function(){
-        this.pnode.addClass("on");
-        this.showAction();
-        if(Ext.isOpera){
-            this.tabPanel.stripWrap.repaint();
-        }
-        this.fireEvent("activate", this.tabPanel, this);
-    },
-
-
-    isActive : function(){
-        return this.tabPanel.getActiveTab() == this;
-    },
-
-
-    hide : function(){
-        this.pnode.removeClass("on");
-        this.hideAction();
-        this.fireEvent("deactivate", this.tabPanel, this);
-    },
-
-    hideAction : function(){
-        this.bodyEl.hide();
-        this.bodyEl.setStyle("position", "absolute");
-        this.bodyEl.setLeft("-20000px");
-        this.bodyEl.setTop("-20000px");
-    },
-
-    showAction : function(){
-        this.bodyEl.setStyle("position", "relative");
-        this.bodyEl.setTop("");
-        this.bodyEl.setLeft("");
-        this.bodyEl.show();
-    },
-
-
-    setTooltip : function(text){
-        if(Ext.QuickTips && Ext.QuickTips.isEnabled()){
-            this.textEl.dom.qtip = text;
-            this.textEl.dom.removeAttribute('title');
-        }else{
-            this.textEl.dom.title = text;
-        }
-    },
-
-    onTabClick : function(e){
-        e.preventDefault();
-        this.tabPanel.activate(this.id);
-    },
-
-    onTabMouseDown : function(e){
-        e.preventDefault();
-        this.tabPanel.activate(this.id);
-    },
-
-    getWidth : function(){
-        return this.inner.getWidth();
-    },
-
-    setWidth : function(width){
-        var iwidth = width - this.pnode.getPadding("lr");
-        this.inner.setWidth(iwidth);
-        this.textEl.setWidth(iwidth-this.inner.getPadding("lr"));
-        this.pnode.setWidth(width);
-    },
-
-    setHidden : function(hidden){
-        this.hidden = hidden;
-        this.pnode.setStyle("display", hidden ? "none" : "");
-    },
-
-
-    isHidden : function(){
-        return this.hidden;
-    },
-
-
-    getText : function(){
-        return this.text;
-    },
-
-    autoSize : function(){
-        //this.el.beginMeasure();
-        this.textEl.setWidth(1);
-        this.setWidth(this.textEl.dom.scrollWidth+this.pnode.getPadding("lr")+this.inner.getPadding("lr"));
-        //this.el.endMeasure();
-    },
-
-
-    setText : function(text){
-        this.text = text;
-        this.textEl.update(text);
-        this.setTooltip(text);
-        if(!this.tabPanel.resizeTabs){
-            this.autoSize();
-        }
-    },
-
-    activate : function(){
-        this.tabPanel.activate(this.id);
-    },
-
-
-    disable : function(){
-        if(this.tabPanel.active != this){
-            this.disabled = true;
-            this.pnode.addClass("disabled");
-        }
-    },
-
-
-    enable : function(){
-        this.disabled = false;
-        this.pnode.removeClass("disabled");
-    },
-
-
-    setContent : function(content, loadScripts){
-        this.bodyEl.update(content, loadScripts);
-    },
-
-
-    getUpdateManager : function(){
-        return this.bodyEl.getUpdateManager();
-    },
-
-
-    setUrl : function(url, params, loadOnce){
-        if(this.refreshDelegate){
-            this.un('activate', this.refreshDelegate);
-        }
-        this.refreshDelegate = this._handleRefresh.createDelegate(this, [url, params, loadOnce]);
-        this.on("activate", this.refreshDelegate);
-        return this.bodyEl.getUpdateManager();
-    },
-
-
-    _handleRefresh : function(url, params, loadOnce){
-        if(!loadOnce || !this.loaded){
-            var updater = this.bodyEl.getUpdateManager();
-            updater.update(url, params, this._setLoaded.createDelegate(this));
-        }
-    },
-
-
-    refresh : function(){
-        if(this.refreshDelegate){
-           this.loaded = false;
-           this.refreshDelegate();
-        }
-    },
-
-
-    _setLoaded : function(){
-        this.loaded = true;
-    },
-
-
-    closeClick : function(e){
-        var o = {};
-        e.stopEvent();
-        this.fireEvent("beforeclose", this, o);
-        if(o.cancel !== true){
-            this.tabPanel.removeTab(this.id);
-        }
-    },
-
-    closeText : "Close this tab"
-});
-
-
-Ext.TabPanel.prototype.createStrip = function(container){
-    var strip = document.createElement("div");
-    strip.className = "x-tabs-wrap";
-    container.appendChild(strip);
-    return strip;
-};
-
-Ext.TabPanel.prototype.createStripList = function(strip){
-    // div wrapper for retard IE
-    strip.innerHTML = '<div class="x-tabs-strip-wrap"><table class="x-tabs-strip" cellspacing="0" cellpadding="0" border="0"><tbody><tr></tr></tbody></table></div>';
-    return strip.firstChild.firstChild.firstChild.firstChild;
-};
-
-Ext.TabPanel.prototype.createBody = function(container){
-    var body = document.createElement("div");
-    Ext.id(body, "tab-body");
-    Ext.fly(body).addClass("x-tabs-body");
-    container.appendChild(body);
-    return body;
-};
-
-Ext.TabPanel.prototype.createItemBody = function(bodyEl, id){
-    var body = Ext.getDom(id);
-    if(!body){
-        body = document.createElement("div");
-        body.id = id;
-    }
-    Ext.fly(body).addClass("x-tabs-item-body");
-    bodyEl.insertBefore(body, bodyEl.firstChild);
-    return body;
-};
-
-Ext.TabPanel.prototype.createStripElements = function(stripEl, text, closable){
-    var td = document.createElement("td");
-    stripEl.appendChild(td);
-    if(closable){
-        td.className = "x-tabs-closable";
-        if(!this.closeTpl){
-            this.closeTpl = new Ext.Template(
-               '<a href="#" class="x-tabs-right"><span class="x-tabs-left"><em class="x-tabs-inner">' +
-               '<span unselectable="on"' + (this.disableTooltips ? '' : ' title="{text}"') +' class="x-tabs-text">{text}</span>' +
-               '<div unselectable="on" class="close-icon">&#160;</div></em></span></a>'
-            );
-        }
-        var el = this.closeTpl.overwrite(td, {"text": text});
-        var close = el.getElementsByTagName("div")[0];
-        var inner = el.getElementsByTagName("em")[0];
-        return {"el": el, "close": close, "inner": inner};
-    } else {
-        if(!this.tabTpl){
-            this.tabTpl = new Ext.Template(
-               '<a href="#" class="x-tabs-right"><span class="x-tabs-left"><em class="x-tabs-inner">' +
-               '<span unselectable="on"' + (this.disableTooltips ? '' : ' title="{text}"') +' class="x-tabs-text">{text}</span></em></span></a>'
-            );
-        }
-        var el = this.tabTpl.overwrite(td, {"text": text});
-        var inner = el.getElementsByTagName("em")[0];
-        return {"el": el, "inner": inner};
-    }
-};
-
-Ext.Button = function(renderTo, config){
-    Ext.apply(this, config);
-    this.addEvents({
-
-	    "click" : true,
-
-	    "toggle" : true,
-
-        'mouseover' : true,
-
-        'mouseout': true
-    });
-    if(this.menu){
-        this.menu = Ext.menu.MenuMgr.get(this.menu);
-    }
-    if(renderTo){
-        this.render(renderTo);
-    }
-    Ext.Button.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.Button, Ext.util.Observable, {
-
-    hidden : false,
-
-    disabled : false,
-
-    pressed : false,
-
-
-    tabIndex : undefined,
-
-
-    enableToggle: false,
-
-    menu : undefined,
-
-    menuAlign : "tl-bl?",
-
-
-    iconCls : undefined,
-
-    type : 'button',
-
-    // private
-    menuClassTarget: 'tr',
-
-    clickEvent : 'click',
-    handleMouseEvents : true,
-
-
-    tooltipType : 'qtip',
-
-
-
-
-
-    // private
-    render : function(renderTo){
-        var btn;
-        if(this.hideParent){
-            this.parentEl = Ext.get(renderTo);
-        }
-        if(!this.dhconfig){
-            if(!this.template){
-                if(!Ext.Button.buttonTemplate){
-                    // hideous table template
-                    Ext.Button.buttonTemplate = new Ext.Template(
-                        '<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>',
-                        '<td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i>&#160;</i></td>',
-                        "</tr></tbody></table>");
-                }
-                this.template = Ext.Button.buttonTemplate;
-            }
-            btn = this.template.append(renderTo, [this.text || '&#160;', this.type], true);
-            var btnEl = btn.child("button:first");
-            btnEl.on('focus', this.onFocus, this);
-            btnEl.on('blur', this.onBlur, this);
-            if(this.cls){
-                btn.addClass(this.cls);
-            }
-            if(this.icon){
-                btnEl.setStyle('background-image', 'url(' +this.icon +')');
-            }
-            if(this.iconCls){
-                btnEl.addClass(this.iconCls);
-                if(!this.cls){
-                    btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon');
-                }
-            }
-            if(this.tabIndex !== undefined){
-                btnEl.dom.tabIndex = this.tabIndex;
-            }
-            if(this.tooltip){
-                if(typeof this.tooltip == 'object'){
-                    Ext.QuickTips.tips(Ext.apply({
-                          target: btnEl.id
-                    }, this.tooltip));
-                } else {
-                    btnEl.dom[this.tooltipType] = this.tooltip;
-                }
-            }
-        }else{
-            btn = Ext.DomHelper.append(Ext.get(renderTo).dom, this.dhconfig, true);
-        }
-        this.el = btn;
-        if(this.id){
-            this.el.dom.id = this.el.id = this.id;
-        }
-        if(this.menu){
-            this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");
-            this.menu.on("show", this.onMenuShow, this);
-            this.menu.on("hide", this.onMenuHide, this);
-        }
-        btn.addClass("x-btn");
-        if(Ext.isIE && !Ext.isIE7){
-            this.autoWidth.defer(1, this);
-        }else{
-            this.autoWidth();
-        }
-        if(this.handleMouseEvents){
-            btn.on("mouseover", this.onMouseOver, this);
-            btn.on("mouseout", this.onMouseOut, this);
-            btn.on("mousedown", this.onMouseDown, this);
-        }
-        btn.on(this.clickEvent, this.onClick, this);
-        //btn.on("mouseup", this.onMouseUp, this);
-        if(this.hidden){
-            this.hide();
-        }
-        if(this.disabled){
-            this.disable();
-        }
-        Ext.ButtonToggleMgr.register(this);
-        if(this.pressed){
-            this.el.addClass("x-btn-pressed");
-        }
-        if(this.repeat){
-            var repeater = new Ext.util.ClickRepeater(btn,
-                typeof this.repeat == "object" ? this.repeat : {}
-            );
-            repeater.on("click", this.onClick,  this);
-        }
-    },
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    destroy : function(){
-        Ext.ButtonToggleMgr.unregister(this);
-        this.el.removeAllListeners();
-        this.purgeListeners();
-        this.el.remove();
-    },
-
-    // private
-    autoWidth : function(){
-        if(this.el){
-            this.el.setWidth("auto");
-            if(Ext.isIE7 && Ext.isStrict){
-                var ib = this.el.child('button');
-                if(ib && ib.getWidth() > 20){
-                    ib.clip();
-                    ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
-                }
-            }
-            if(this.minWidth){
-                if(this.hidden){
-                    this.el.beginMeasure();
-                }
-                if(this.el.getWidth() < this.minWidth){
-                    this.el.setWidth(this.minWidth);
-                }
-                if(this.hidden){
-                    this.el.endMeasure();
-                }
-            }
-        }
-    },
-
-
-    setHandler : function(handler, scope){
-        this.handler = handler;
-        this.scope = scope;
-    },
-
-
-    setText : function(text){
-        this.text = text;
-        if(this.el){
-            this.el.child("td.x-btn-center button.x-btn-text").update(text);
-        }
-        this.autoWidth();
-    },
-
-
-    getText : function(){
-        return this.text;
-    },
-
-
-    show: function(){
-        this.hidden = false;
-        if(this.el){
-            this[this.hideParent? 'parentEl' : 'el'].setStyle("display", "");
-        }
-    },
-
-
-    hide: function(){
-        this.hidden = true;
-        if(this.el){
-            this[this.hideParent? 'parentEl' : 'el'].setStyle("display", "none");
-        }
-    },
-
-
-    setVisible: function(visible){
-        if(visible) {
-            this.show();
-        }else{
-            this.hide();
-        }
-    },
-
-
-    toggle : function(state){
-        state = state === undefined ? !this.pressed : state;
-        if(state != this.pressed){
-            if(state){
-                this.el.addClass("x-btn-pressed");
-                this.pressed = true;
-                this.fireEvent("toggle", this, true);
-            }else{
-                this.el.removeClass("x-btn-pressed");
-                this.pressed = false;
-                this.fireEvent("toggle", this, false);
-            }
-            if(this.toggleHandler){
-                this.toggleHandler.call(this.scope || this, this, state);
-            }
-        }
-    },
-
-
-    focus : function(){
-        this.el.child('button:first').focus();
-    },
-
-
-    disable : function(){
-        if(this.el){
-            this.el.addClass("x-btn-disabled");
-        }
-        this.disabled = true;
-    },
-
-
-    enable : function(){
-        if(this.el){
-            this.el.removeClass("x-btn-disabled");
-        }
-        this.disabled = false;
-    },
-
-
-    setDisabled : function(v){
-        this[v !== true ? "enable" : "disable"]();
-    },
-
-    // private
-    onClick : function(e){
-        if(e){
-            e.preventDefault();
-        }
-        if(e.button != 0){
-            return;
-        }
-        if(!this.disabled){
-            if(this.enableToggle){
-                this.toggle();
-            }
-            if(this.menu && !this.menu.isVisible()){
-                this.menu.show(this.el, this.menuAlign);
-            }
-            this.fireEvent("click", this, e);
-            if(this.handler){
-                this.el.removeClass("x-btn-over");
-                this.handler.call(this.scope || this, this, e);
-            }
-        }
-    },
-    // private
-    onMouseOver : function(e){
-        if(!this.disabled){
-            this.el.addClass("x-btn-over");
-            this.fireEvent('mouseover', this, e);
-        }
-    },
-    // private
-    onMouseOut : function(e){
-        if(!e.within(this.el,  true)){
-            this.el.removeClass("x-btn-over");
-            this.fireEvent('mouseout', this, e);
-        }
-    },
-    // private
-    onFocus : function(e){
-        if(!this.disabled){
-            this.el.addClass("x-btn-focus");
-        }
-    },
-    // private
-    onBlur : function(e){
-        this.el.removeClass("x-btn-focus");
-    },
-    // private
-    onMouseDown : function(e){
-        if(!this.disabled && e.button == 0){
-            this.el.addClass("x-btn-click");
-            Ext.get(document).on('mouseup', this.onMouseUp, this);
-        }
-    },
-    // private
-    onMouseUp : function(e){
-        if(e.button == 0){
-            this.el.removeClass("x-btn-click");
-            Ext.get(document).un('mouseup', this.onMouseUp, this);
-        }
-    },
-    // private
-    onMenuShow : function(e){
-        this.el.addClass("x-btn-menu-active");
-    },
-    // private
-    onMenuHide : function(e){
-        this.el.removeClass("x-btn-menu-active");
-    }
-});
-
-// Private utility class used by Button
-Ext.ButtonToggleMgr = function(){
-   var groups = {};
-
-   function toggleGroup(btn, state){
-       if(state){
-           var g = groups[btn.toggleGroup];
-           for(var i = 0, l = g.length; i < l; i++){
-               if(g[i] != btn){
-                   g[i].toggle(false);
-               }
-           }
-       }
-   }
-
-   return {
-       register : function(btn){
-           if(!btn.toggleGroup){
-               return;
-           }
-           var g = groups[btn.toggleGroup];
-           if(!g){
-               g = groups[btn.toggleGroup] = [];
-           }
-           g.push(btn);
-           btn.on("toggle", toggleGroup);
-       },
-
-       unregister : function(btn){
-           if(!btn.toggleGroup){
-               return;
-           }
-           var g = groups[btn.toggleGroup];
-           if(g){
-               g.remove(btn);
-               btn.un("toggle", toggleGroup);
-           }
-       }
-   };
-}();
-
-Ext.MenuButton = function(renderTo, config){
-    Ext.MenuButton.superclass.constructor.call(this, renderTo, config);
-
-    this.addEvents({"arrowclick":true});
-};
-
-Ext.extend(Ext.MenuButton, Ext.Button, {
-    render : function(renderTo){
-        // this is one sweet looking template!
-        var tpl = new Ext.Template(
-            '<table cellspacing="0" class="x-btn-menu-wrap x-btn"><tr><td>',
-            '<table cellspacing="0" class="x-btn-wrap x-btn-menu-text-wrap"><tbody>',
-            '<tr><td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><button class="x-btn-text" type="{1}">{0}</button></td></tr>',
-            "</tbody></table></td><td>",
-            '<table cellspacing="0" class="x-btn-wrap x-btn-menu-arrow-wrap"><tbody>',
-            '<tr><td class="x-btn-center"><button class="x-btn-menu-arrow-el" type="button">&#160;</button></td><td class="x-btn-right"><i>&#160;</i></td></tr>',
-            "</tbody></table></td></tr></table>"
-        );
-        var btn = tpl.append(renderTo, [this.text, this.type], true);
-        if(this.cls){
-            btn.addClass(this.cls);
-        }
-        if(this.icon){
-            btn.child("button").setStyle('background-image', 'url(' +this.icon +')');
-        }
-        this.el = btn;
-        this.autoWidth();
-        if(this.handleMouseEvents){
-            btn.on("mouseover", this.onMouseOver, this);
-            btn.on("mouseout", this.onMouseOut, this);
-            btn.on("mousedown", this.onMouseDown, this);
-            btn.on("mouseup", this.onMouseUp, this);
-        }
-        btn.on(this.clickEvent, this.onClick, this);
-        if(this.tooltip){
-            var btnEl = btn.child("button:first");
-            if(typeof this.tooltip == 'object'){
-                Ext.QuickTips.tips(Ext.apply({
-                      target: btnEl.id
-                }, this.tooltip));
-            } else {
-                btnEl.dom[this.tooltipType] = this.tooltip;
-            }
-        }
-        if(this.arrowTooltip){
-            var btnEl = btn.child("button:nth(2)");
-            btnEl.dom[this.tooltipType] = this.arrowTooltip;
-        }
-        if(this.hidden){
-            this.hide();
-        }
-        if(this.disabled){
-            this.disable();
-        }
-        if(this.menu){
-            this.menu.on("show", this.onMenuShow, this);
-            this.menu.on("hide", this.onMenuHide, this);
-        }
-    },
-
-    // private
-    autoWidth : function(){
-        if(this.el){
-            var tbl = this.el.child("table:first");
-            var tbl2 = this.el.child("table:last");
-            this.el.setWidth("auto");
-            tbl.setWidth("auto");
-            if(Ext.isIE7 && Ext.isStrict){
-                var ib = this.el.child('button:first');
-                if(ib && ib.getWidth() > 20){
-                    ib.clip();
-                    ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
-                }
-            }
-            if(this.minWidth){
-                if(this.hidden){
-                    this.el.beginMeasure();
-                }
-                if((tbl.getWidth()+tbl2.getWidth()) < this.minWidth){
-                    tbl.setWidth(this.minWidth-tbl2.getWidth());
-                }
-                if(this.hidden){
-                    this.el.endMeasure();
-                }
-            }
-            this.el.setWidth(tbl.getWidth()+tbl2.getWidth());
-        }
-    },
-
-    setHandler : function(handler, scope){
-        this.handler = handler;
-        this.scope = scope;
-    },
-
-
-    setArrowHandler : function(handler, scope){
-        this.arrowHandler = handler;
-        this.scope = scope;
-    },
-
-
-    focus : function(){
-        if(this.el){
-            this.el.child("button:first").focus();
-        }
-    },
-
-    // private
-    onClick : function(e){
-        e.preventDefault();
-        if(!this.disabled){
-            if(e.getTarget(".x-btn-menu-arrow-wrap")){
-                if(this.menu && !this.menu.isVisible()){
-                    this.menu.show(this.el, this.menuAlign);
-                }
-                this.fireEvent("arrowclick", this, e);
-                if(this.arrowHandler){
-                    this.arrowHandler.call(this.scope || this, this, e);
-                }
-            }else{
-                this.fireEvent("click", this, e);
-                if(this.handler){
-                    this.handler.call(this.scope || this, this, e);
-                }
-            }
-        }
-    },
-    // private
-    onMouseDown : function(e){
-        if(!this.disabled){
-            Ext.fly(e.getTarget("table")).addClass("x-btn-click");
-        }
-    },
-    // private
-    onMouseUp : function(e){
-        Ext.fly(e.getTarget("table")).removeClass("x-btn-click");
-    }
-});
-
- Ext.Toolbar = function(container, buttons, config){
-     if(container instanceof Array){ // omit the container for later rendering
-         buttons = container;
-         config = buttons;
-         container = null;
-     }
-     Ext.apply(this, config);
-     this.buttons = buttons;
-     if(container){
-         this.render(container);
-     }
-};
-
-Ext.Toolbar.prototype = {
-
-    render : function(ct){
-        this.el = Ext.get(ct);
-        if(this.cls){
-            this.el.addClass(this.cls);
-        }
-        // using a table allows for vertical alignment
-        this.el.update('<div class="x-toolbar x-small-editor"><table cellspacing="0"><tr></tr></table></div>');
-        this.tr = this.el.child("tr", true);
-        var autoId = 0;
-        this.items = new Ext.util.MixedCollection(false, function(o){
-            return o.id || ("item" + (++autoId));
-        });
-        if(this.buttons){
-            this.add.apply(this, this.buttons);
-            delete this.buttons;
-        }
-    },
-
-
-    add : function(){
-        var a = arguments, l = a.length;
-        for(var i = 0; i < l; i++){
-            var el = a[i];
-            if(el.applyTo){ // some kind of form field
-                this.addField(el);
-            }else if(el.render){ // some kind of Toolbar.Item
-                this.addItem(el);
-            }else if(typeof el == "string"){ // string
-                if(el == "separator" || el == "-"){
-                    this.addSeparator();
-                }else if(el == " "){
-                    this.addSpacer();
-                }else if(el == "->"){
-                    this.addFill();
-                }else{
-                    this.addText(el);
-                }
-            }else if(el.tagName){ // element
-                this.addElement(el);
-            }else if(typeof el == "object"){ // must be button config?
-                this.addButton(el);
-            }
-        }
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    addSeparator : function(){
-        return this.addItem(new Ext.Toolbar.Separator());
-    },
-
-
-    addSpacer : function(){
-        return this.addItem(new Ext.Toolbar.Spacer());
-    },
-
-
-    addFill : function(){
-        return this.addItem(new Ext.Toolbar.Fill());
-    },
-
-
-    addElement : function(el){
-        return this.addItem(new Ext.Toolbar.Item(el));
-    },
-
-
-    addItem : function(item){
-        var td = this.nextBlock();
-        item.render(td);
-        this.items.add(item);
-        return item;
-    },
-
-
-    addButton : function(config){
-        if(config instanceof Array){
-            var buttons = [];
-            for(var i = 0, len = config.length; i < len; i++) {
-            	buttons.push(this.addButton(config[i]));
-            }
-            return buttons;
-        }
-        var b = config;
-        if(!(config instanceof Ext.Toolbar.Button)){
-             b = new Ext.Toolbar.Button(config);
-        }
-        var td = this.nextBlock();
-        b.render(td);
-        this.items.add(b);
-        return b;
-    },
-
-
-    addText : function(text){
-        return this.addItem(new Ext.Toolbar.TextItem(text));
-    },
-
-
-    insertButton : function(index, item){
-        if(item instanceof Array){
-            var buttons = [];
-            for(var i = 0, len = item.length; i < len; i++) {
-               buttons.push(this.insertButton(index + i, item[i]));
-            }
-            return buttons;
-        }
-        if (!(item instanceof Ext.Toolbar.Button)){
-           item = new Ext.Toolbar.Button(item);
-        }
-        var td = document.createElement("td");
-        this.tr.insertBefore(td, this.tr.childNodes[index]);
-        item.render(td);
-        this.items.insert(index, item);
-        return item;
-    },
-
-
-    addDom : function(config, returnEl){
-        var td = this.nextBlock();
-        Ext.DomHelper.overwrite(td, config);
-        var ti = new Ext.Toolbar.Item(td.firstChild);
-        ti.render(td);
-        this.items.add(ti);
-        return ti;
-    },
-
-
-    addField : function(field){
-        var td = this.nextBlock();
-        field.render(td);
-        var ti = new Ext.Toolbar.Item(td.firstChild);
-        ti.render(td);
-        this.items.add(ti);
-        return ti;
-    },
-
-    // private
-    nextBlock : function(){
-        var td = document.createElement("td");
-        this.tr.appendChild(td);
-        return td;
-    },
-
-    destroy : function(){
-        if(this.items){ // rendered?
-            Ext.destroy.apply(Ext, this.items.items);
-        }
-        Ext.Element.uncache(this.el, this.tr);
-    }
-};
-
-
-Ext.Toolbar.Item = function(el){
-    this.el = Ext.getDom(el);
-    this.id = Ext.id(this.el);
-    this.hidden = false;
-};
-
-Ext.Toolbar.Item.prototype = {
-
-
-    getEl : function(){
-       return this.el;
-    },
-
-    // private
-    render : function(td){
-        this.td = td;
-        td.appendChild(this.el);
-    },
-
-
-    destroy : function(){
-        this.td.parentNode.removeChild(this.td);
-    },
-
-
-    show: function(){
-        this.hidden = false;
-        this.td.style.display = "";
-    },
-
-
-    hide: function(){
-        this.hidden = true;
-        this.td.style.display = "none";
-    },
-
-
-    setVisible: function(visible){
-        if(visible) {
-            this.show();
-        }else{
-            this.hide();
-        }
-    },
-
-
-    focus : function(){
-        Ext.fly(this.el).focus();
-    },
-
-
-    disable : function(){
-        Ext.fly(this.td).addClass("x-item-disabled");
-        this.disabled = true;
-        this.el.disabled = true;
-    },
-
-
-    enable : function(){
-        Ext.fly(this.td).removeClass("x-item-disabled");
-        this.disabled = false;
-        this.el.disabled = false;
-    }
-};
-
-
-
-Ext.Toolbar.Separator = function(){
-    var s = document.createElement("span");
-    s.className = "ytb-sep";
-    Ext.Toolbar.Separator.superclass.constructor.call(this, s);
-};
-Ext.extend(Ext.Toolbar.Separator, Ext.Toolbar.Item, {
-    enable:Ext.emptyFn,
-    disable:Ext.emptyFn,
-    focus:Ext.emptyFn
-});
-
-
-Ext.Toolbar.Spacer = function(){
-    var s = document.createElement("div");
-    s.className = "ytb-spacer";
-    Ext.Toolbar.Spacer.superclass.constructor.call(this, s);
-};
-Ext.extend(Ext.Toolbar.Spacer, Ext.Toolbar.Item, {
-    enable:Ext.emptyFn,
-    disable:Ext.emptyFn,
-    focus:Ext.emptyFn
-});
-
-
-Ext.Toolbar.Fill = Ext.extend(Ext.Toolbar.Spacer, {
-    // private
-    render : function(td){
-        td.style.width = '100%';
-        Ext.Toolbar.Fill.superclass.render.call(this, td);
-    }
-});
-
-
-Ext.Toolbar.TextItem = function(text){
-    var s = document.createElement("span");
-    s.className = "ytb-text";
-    s.innerHTML = text;
-    Ext.Toolbar.TextItem.superclass.constructor.call(this, s);
-};
-Ext.extend(Ext.Toolbar.TextItem, Ext.Toolbar.Item, {
-    enable:Ext.emptyFn,
-    disable:Ext.emptyFn,
-    focus:Ext.emptyFn
-});
-
-
-Ext.Toolbar.Button = function(config){
-    Ext.Toolbar.Button.superclass.constructor.call(this, null, config);
-};
-Ext.extend(Ext.Toolbar.Button, Ext.Button, {
-    render : function(td){
-        this.td = td;
-        Ext.Toolbar.Button.superclass.render.call(this, td);
-    },
-
-
-    destroy : function(){
-        Ext.Toolbar.Button.superclass.destroy.call(this);
-        this.td.parentNode.removeChild(this.td);
-    },
-
-
-    show: function(){
-        this.hidden = false;
-        this.td.style.display = "";
-    },
-
-
-    hide: function(){
-        this.hidden = true;
-        this.td.style.display = "none";
-    },
-
-
-    disable : function(){
-        Ext.fly(this.td).addClass("x-item-disabled");
-        this.disabled = true;
-    },
-
-
-    enable : function(){
-        Ext.fly(this.td).removeClass("x-item-disabled");
-        this.disabled = false;
-    }
-});
-// backwards compat
-Ext.ToolbarButton = Ext.Toolbar.Button;
-
-
-Ext.Toolbar.MenuButton = function(config){
-    Ext.Toolbar.MenuButton.superclass.constructor.call(this, null, config);
-};
-Ext.extend(Ext.Toolbar.MenuButton, Ext.MenuButton, {
-    render : function(td){
-        this.td = td;
-        Ext.Toolbar.MenuButton.superclass.render.call(this, td);
-    },
-
-
-    destroy : function(){
-        Ext.Toolbar.MenuButton.superclass.destroy.call(this);
-        this.td.parentNode.removeChild(this.td);
-    },
-
-
-    show: function(){
-        this.hidden = false;
-        this.td.style.display = "";
-    },
-
-
-    hide: function(){
-        this.hidden = true;
-        this.td.style.display = "none";
-    }
-});
-
-
-
-Ext.PagingToolbar = function(el, ds, config){
-    Ext.PagingToolbar.superclass.constructor.call(this, el, null, config);
-    this.ds = ds;
-    this.cursor = 0;
-    this.renderButtons(this.el);
-    this.bind(ds);
-};
-
-Ext.extend(Ext.PagingToolbar, Ext.Toolbar, {
-
-    pageSize: 20,
-
-    displayMsg : 'Displaying {0} - {1} of {2}',
-
-    emptyMsg : 'No data to display',
-
-    beforePageText : "Page",
-
-    afterPageText : "of {0}",
-
-    firstText : "First Page",
-
-    prevText : "Previous Page",
-
-    nextText : "Next Page",
-
-    lastText : "Last Page",
-
-    refreshText : "Refresh",
-
-    // private
-    renderButtons : function(el){
-        Ext.PagingToolbar.superclass.render.call(this, el);
-        this.first = this.addButton({
-            tooltip: this.firstText,
-            cls: "x-btn-icon x-grid-page-first",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["first"])
-        });
-        this.prev = this.addButton({
-            tooltip: this.prevText,
-            cls: "x-btn-icon x-grid-page-prev",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["prev"])
-        });
-        this.addSeparator();
-        this.add(this.beforePageText);
-        this.field = Ext.get(this.addDom({
-           tag: "input",
-           type: "text",
-           size: "3",
-           value: "1",
-           cls: "x-grid-page-number"
-        }).el);
-        this.field.on("keydown", this.onPagingKeydown, this);
-        this.field.on("focus", function(){this.dom.select();});
-        this.afterTextEl = this.addText(String.format(this.afterPageText, 1));
-        this.field.setHeight(18);
-        this.addSeparator();
-        this.next = this.addButton({
-            tooltip: this.nextText,
-            cls: "x-btn-icon x-grid-page-next",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["next"])
-        });
-        this.last = this.addButton({
-            tooltip: this.lastText,
-            cls: "x-btn-icon x-grid-page-last",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["last"])
-        });
-        this.addSeparator();
-        this.loading = this.addButton({
-            tooltip: this.refreshText,
-            cls: "x-btn-icon x-grid-loading",
-            disabled: true,
-            handler: this.onClick.createDelegate(this, ["refresh"])
-        });
-
-        if(this.displayInfo){
-            this.displayEl = Ext.fly(this.el.dom.firstChild).createChild({cls:'x-paging-info'});
-        }
-    },
-
-    // private
-    updateInfo : function(){
-        if(this.displayEl){
-            var count = this.ds.getCount();
-            var msg = count == 0 ?
-                this.emptyMsg :
-                String.format(
-                    this.displayMsg,
-                    this.cursor+1, this.cursor+count, this.ds.getTotalCount()
-                );
-            this.displayEl.update(msg);
-        }
-    },
-
-    // private
-    onLoad : function(ds, r, o){
-       this.cursor = o.params ? o.params.start : 0;
-       var d = this.getPageData(), ap = d.activePage, ps = d.pages;
-
-       this.afterTextEl.el.innerHTML = String.format(this.afterPageText, d.pages);
-       this.field.dom.value = ap;
-       this.first.setDisabled(ap == 1);
-       this.prev.setDisabled(ap == 1);
-       this.next.setDisabled(ap == ps);
-       this.last.setDisabled(ap == ps);
-       this.loading.enable();
-       this.updateInfo();
-    },
-
-    // private
-    getPageData : function(){
-        var total = this.ds.getTotalCount();
-        return {
-            total : total,
-            activePage : Math.ceil((this.cursor+this.pageSize)/this.pageSize),
-            pages :  total < this.pageSize ? 1 : Math.ceil(total/this.pageSize)
-        };
-    },
-
-    // private
-    onLoadError : function(){
-        this.loading.enable();
-    },
-
-    // private
-    onPagingKeydown : function(e){
-        var k = e.getKey();
-        var d = this.getPageData();
-        if(k == e.RETURN){
-            var v = this.field.dom.value, pageNum;
-            if(!v || isNaN(pageNum = parseInt(v, 10))){
-                this.field.dom.value = d.activePage;
-                return;
-            }
-            pageNum = Math.min(Math.max(1, pageNum), d.pages) - 1;
-            this.ds.load({params:{start: pageNum * this.pageSize, limit: this.pageSize}});
-            e.stopEvent();
-        }
-        else if(k == e.HOME || (k == e.UP && e.ctrlKey) || (k == e.PAGEUP && e.ctrlKey) || (k == e.RIGHT && e.ctrlKey) || k == e.END || (k == e.DOWN && e.ctrlKey) || (k == e.LEFT && e.ctrlKey) || (k == e.PAGEDOWN && e.ctrlKey))
-        {
-          var pageNum = (k == e.HOME || (k == e.DOWN && e.ctrlKey) || (k == e.LEFT && e.ctrlKey) || (k == e.PAGEDOWN && e.ctrlKey)) ? 1 : d.pages;
-          this.field.dom.value = pageNum;
-          this.ds.load({params:{start: (pageNum - 1) * this.pageSize, limit: this.pageSize}});
-          e.stopEvent();
-        }
-        else if(k == e.UP || k == e.RIGHT || k == e.PAGEUP || k == e.DOWN || k == e.LEFT || k == e.PAGEDOWN)
-        {
-          var v = this.field.dom.value, pageNum;
-          var increment = (e.shiftKey) ? 10 : 1;
-          if(k == e.DOWN || k == e.LEFT || k == e.PAGEDOWN)
-            increment *= -1;
-          if(!v || isNaN(pageNum = parseInt(v, 10))) {
-            this.field.dom.value = d.activePage;
-            return;
-          }
-          else if(parseInt(v, 10) + increment >= 1 & parseInt(v, 10) + increment <= d.pages)
-          {
-            this.field.dom.value = parseInt(v, 10) + increment;
-            pageNum = Math.min(Math.max(1, pageNum + increment), d.pages) - 1;
-            this.ds.load({params:{start: pageNum * this.pageSize, limit: this.pageSize}});
-          }
-          e.stopEvent();
-        }
-    },
-
-    // private
-    beforeLoad : function(){
-        if(this.loading){
-            this.loading.disable();
-        }
-    },
-
-    // private
-    onClick : function(which){
-        var ds = this.ds;
-        switch(which){
-            case "first":
-                ds.load({params:{start: 0, limit: this.pageSize}});
-            break;
-            case "prev":
-                ds.load({params:{start: Math.max(0, this.cursor-this.pageSize), limit: this.pageSize}});
-            break;
-            case "next":
-                ds.load({params:{start: this.cursor+this.pageSize, limit: this.pageSize}});
-            break;
-            case "last":
-                var total = ds.getTotalCount();
-                var extra = total % this.pageSize;
-                var lastStart = extra ? (total - extra) : total-this.pageSize;
-                ds.load({params:{start: lastStart, limit: this.pageSize}});
-            break;
-            case "refresh":
-                ds.load({params:{start: this.cursor, limit: this.pageSize}});
-            break;
-        }
-    },
-
-
-    unbind : function(ds){
-        ds.un("beforeload", this.beforeLoad, this);
-        ds.un("load", this.onLoad, this);
-        ds.un("loadexception", this.onLoadError, this);
-        this.ds = undefined;
-    },
-
-
-    bind : function(ds){
-        ds.on("beforeload", this.beforeLoad, this);
-        ds.on("load", this.onLoad, this);
-        ds.on("loadexception", this.onLoadError, this);
-        this.ds = ds;
-    }
-});
-
-Ext.Resizable = function(el, config){
-    this.el = Ext.get(el);
-
-    if(config && config.wrap){
-        config.resizeChild = this.el;
-        this.el = this.el.wrap(typeof config.wrap == "object" ? config.wrap : {cls:"xresizable-wrap"});
-        this.el.id = this.el.dom.id = config.resizeChild.id + "-rzwrap";
-        this.el.setStyle("overflow", "hidden");
-        this.el.setPositioning(config.resizeChild.getPositioning());
-        config.resizeChild.clearPositioning();
-        if(!config.width || !config.height){
-            var csize = config.resizeChild.getSize();
-            this.el.setSize(csize.width, csize.height);
-        }
-        if(config.pinned && !config.adjustments){
-            config.adjustments = "auto";
-        }
-    }
-
-    this.proxy = this.el.createProxy({tag: "div", cls: "x-resizable-proxy", id: this.el.id + "-rzproxy"});
-    this.proxy.unselectable();
-    this.proxy.enableDisplayMode('block');
-
-    Ext.apply(this, config);
-
-    if(this.pinned){
-        this.disableTrackOver = true;
-        this.el.addClass("x-resizable-pinned");
-    }
-    // if the element isn't positioned, make it relative
-    var position = this.el.getStyle("position");
-    if(position != "absolute" && position != "fixed"){
-        this.el.setStyle("position", "relative");
-    }
-    if(!this.handles){ // no handles passed, must be legacy style
-        this.handles = 's,e,se';
-        if(this.multiDirectional){
-            this.handles += ',n,w';
-        }
-    }
-    if(this.handles == "all"){
-        this.handles = "n s e w ne nw se sw";
-    }
-    var hs = this.handles.split(/\s*?[,;]\s*?| /);
-    var ps = Ext.Resizable.positions;
-    for(var i = 0, len = hs.length; i < len; i++){
-        if(hs[i] && ps[hs[i]]){
-            var pos = ps[hs[i]];
-            this[pos] = new Ext.Resizable.Handle(this, pos, this.disableTrackOver, this.transparent);
-        }
-    }
-    // legacy
-    this.corner = this.southeast;
-
-    if(this.handles.indexOf("n") != -1 || this.handles.indexOf("w") != -1){
-        this.updateBox = true;
-    }
-
-    this.activeHandle = null;
-
-    if(this.resizeChild){
-        if(typeof this.resizeChild == "boolean"){
-            this.resizeChild = Ext.get(this.el.dom.firstChild, true);
-        }else{
-            this.resizeChild = Ext.get(this.resizeChild, true);
-        }
-    }
-
-    if(this.adjustments == "auto"){
-        var rc = this.resizeChild;
-        var hw = this.west, he = this.east, hn = this.north, hs = this.south;
-        if(rc && (hw || hn)){
-            rc.position("relative");
-            rc.setLeft(hw ? hw.el.getWidth() : 0);
-            rc.setTop(hn ? hn.el.getHeight() : 0);
-        }
-        this.adjustments = [
-            (he ? -he.el.getWidth() : 0) + (hw ? -hw.el.getWidth() : 0),
-            (hn ? -hn.el.getHeight() : 0) + (hs ? -hs.el.getHeight() : 0) -1
-        ];
-    }
-
-    if(this.draggable){
-        this.dd = this.dynamic ?
-            this.el.initDD(null) : this.el.initDDProxy(null, {dragElId: this.proxy.id});
-        this.dd.setHandleElId(this.resizeChild ? this.resizeChild.id : this.el.id);
-    }
-
-    // public events
-    this.addEvents({
-
-        "beforeresize" : true,
-
-        "resize" : true
-    });
-
-    if(this.width !== null && this.height !== null){
-        this.resizeTo(this.width, this.height);
-    }else{
-        this.updateChildSize();
-    }
-    if(Ext.isIE){
-        this.el.dom.style.zoom = 1;
-    }
-    Ext.Resizable.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.Resizable, Ext.util.Observable, {
-        resizeChild : false,
-        adjustments : [0, 0],
-        minWidth : 5,
-        minHeight : 5,
-        maxWidth : 10000,
-        maxHeight : 10000,
-        enabled : true,
-        animate : false,
-        duration : .35,
-        dynamic : false,
-        handles : false,
-        multiDirectional : false,
-        disableTrackOver : false,
-        easing : 'easeOutStrong',
-        widthIncrement : 0,
-        heightIncrement : 0,
-        pinned : false,
-        width : null,
-        height : null,
-        preserveRatio : false,
-        transparent: false,
-        minX: 0,
-        minY: 0,
-        draggable: false,
-
-
-        constrainTo: undefined,
-
-        resizeRegion: undefined,
-
-
-
-    resizeTo : function(width, height){
-        this.el.setSize(width, height);
-        this.updateChildSize();
-        this.fireEvent("resize", this, width, height, null);
-    },
-
-    // private
-    startSizing : function(e, handle){
-        this.fireEvent("beforeresize", this, e);
-        if(this.enabled){ // 2nd enabled check in case disabled before beforeresize handler
-
-            if(!this.overlay){
-                this.overlay = this.el.createProxy({tag: "div", cls: "x-resizable-overlay", html: "&#160;"});
-                this.overlay.unselectable();
-                this.overlay.enableDisplayMode("block");
-                this.overlay.on("mousemove", this.onMouseMove, this);
-                this.overlay.on("mouseup", this.onMouseUp, this);
-            }
-            this.overlay.setStyle("cursor", handle.el.getStyle("cursor"));
-
-            this.resizing = true;
-            this.startBox = this.el.getBox();
-            this.startPoint = e.getXY();
-            this.offsets = [(this.startBox.x + this.startBox.width) - this.startPoint[0],
-                            (this.startBox.y + this.startBox.height) - this.startPoint[1]];
-
-            this.overlay.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-            this.overlay.show();
-
-            if(this.constrainTo) {
-                var ct = Ext.get(this.constrainTo);
-                this.resizeRegion = ct.getRegion().adjust(
-                    ct.getFrameWidth('t'),
-                    ct.getFrameWidth('l'),
-                    -ct.getFrameWidth('b'),
-                    -ct.getFrameWidth('r')
-                );
-            }
-
-            this.proxy.setStyle('visibility', 'hidden'); // workaround display none
-            this.proxy.show();
-            this.proxy.setBox(this.startBox);
-            if(!this.dynamic){
-                this.proxy.setStyle('visibility', 'visible');
-            }
-        }
-    },
-
-    // private
-    onMouseDown : function(handle, e){
-        if(this.enabled){
-            e.stopEvent();
-            this.activeHandle = handle;
-            this.startSizing(e, handle);
-        }
-    },
-
-    // private
-    onMouseUp : function(e){
-        var size = this.resizeElement();
-        this.resizing = false;
-        this.handleOut();
-        this.overlay.hide();
-        this.proxy.hide();
-        this.fireEvent("resize", this, size.width, size.height, e);
-    },
-
-    // private
-    updateChildSize : function(){
-        if(this.resizeChild){
-            var el = this.el;
-            var child = this.resizeChild;
-            var adj = this.adjustments;
-            if(el.dom.offsetWidth){
-                var b = el.getSize(true);
-                child.setSize(b.width+adj[0], b.height+adj[1]);
-            }
-            // Second call here for IE
-            // The first call enables instant resizing and
-            // the second call corrects scroll bars if they
-            // exist
-            if(Ext.isIE){
-                setTimeout(function(){
-                    if(el.dom.offsetWidth){
-                        var b = el.getSize(true);
-                        child.setSize(b.width+adj[0], b.height+adj[1]);
-                    }
-                }, 10);
-            }
-        }
-    },
-
-    // private
-    snap : function(value, inc, min){
-        if(!inc || !value) return value;
-        var newValue = value;
-        var m = value % inc;
-        if(m > 0){
-            if(m > (inc/2)){
-                newValue = value + (inc-m);
-            }else{
-                newValue = value - m;
-            }
-        }
-        return Math.max(min, newValue);
-    },
-
-    // private
-    resizeElement : function(){
-        var box = this.proxy.getBox();
-        if(this.updateBox){
-            this.el.setBox(box, false, this.animate, this.duration, null, this.easing);
-        }else{
-            this.el.setSize(box.width, box.height, this.animate, this.duration, null, this.easing);
-        }
-        this.updateChildSize();
-        if(!this.dynamic){
-            this.proxy.hide();
-        }
-        return box;
-    },
-
-    // private
-    constrain : function(v, diff, m, mx){
-        if(v - diff < m){
-            diff = v - m;
-        }else if(v - diff > mx){
-            diff = mx - v;
-        }
-        return diff;
-    },
-
-    // private
-    onMouseMove : function(e){
-        if(this.enabled){
-            try{// try catch so if something goes wrong the user doesn't get hung
-
-            if(this.resizeRegion && !this.resizeRegion.contains(e.getPoint())) {
-            	return;
-            }
-
-            //var curXY = this.startPoint;
-            var curSize = this.curSize || this.startBox;
-            var x = this.startBox.x, y = this.startBox.y;
-            var ox = x, oy = y;
-            var w = curSize.width, h = curSize.height;
-            var ow = w, oh = h;
-            var mw = this.minWidth, mh = this.minHeight;
-            var mxw = this.maxWidth, mxh = this.maxHeight;
-            var wi = this.widthIncrement;
-            var hi = this.heightIncrement;
-
-            var eventXY = e.getXY();
-            var diffX = -(this.startPoint[0] - Math.max(this.minX, eventXY[0]));
-            var diffY = -(this.startPoint[1] - Math.max(this.minY, eventXY[1]));
-
-            var pos = this.activeHandle.position;
-
-            switch(pos){
-                case "east":
-                    w += diffX;
-                    w = Math.min(Math.max(mw, w), mxw);
-                    break;
-                case "south":
-                    h += diffY;
-                    h = Math.min(Math.max(mh, h), mxh);
-                    break;
-                case "southeast":
-                    w += diffX;
-                    h += diffY;
-                    w = Math.min(Math.max(mw, w), mxw);
-                    h = Math.min(Math.max(mh, h), mxh);
-                    break;
-                case "north":
-                    diffY = this.constrain(h, diffY, mh, mxh);
-                    y += diffY;
-                    h -= diffY;
-                    break;
-                case "west":
-                    diffX = this.constrain(w, diffX, mw, mxw);
-                    x += diffX;
-                    w -= diffX;
-                    break;
-                case "northeast":
-                    w += diffX;
-                    w = Math.min(Math.max(mw, w), mxw);
-                    diffY = this.constrain(h, diffY, mh, mxh);
-                    y += diffY;
-                    h -= diffY;
-                    break;
-                case "northwest":
-                    diffX = this.constrain(w, diffX, mw, mxw);
-                    diffY = this.constrain(h, diffY, mh, mxh);
-                    y += diffY;
-                    h -= diffY;
-                    x += diffX;
-                    w -= diffX;
-                    break;
-               case "southwest":
-                    diffX = this.constrain(w, diffX, mw, mxw);
-                    h += diffY;
-                    h = Math.min(Math.max(mh, h), mxh);
-                    x += diffX;
-                    w -= diffX;
-                    break;
-            }
-
-            var sw = this.snap(w, wi, mw);
-            var sh = this.snap(h, hi, mh);
-            if(sw != w || sh != h){
-                switch(pos){
-                    case "northeast":
-                        y -= sh - h;
-                    break;
-                    case "north":
-                        y -= sh - h;
-                        break;
-                    case "southwest":
-                        x -= sw - w;
-                    break;
-                    case "west":
-                        x -= sw - w;
-                        break;
-                    case "northwest":
-                        x -= sw - w;
-                        y -= sh - h;
-                    break;
-                }
-                w = sw;
-                h = sh;
-            }
-
-            if(this.preserveRatio){
-                switch(pos){
-                    case "southeast":
-                    case "east":
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        w = ow * (h/oh);
-                       break;
-                    case "south":
-                        w = ow * (h/oh);
-                        w = Math.min(Math.max(mw, w), mxw);
-                        h = oh * (w/ow);
-                        break;
-                    case "northeast":
-                        w = ow * (h/oh);
-                        w = Math.min(Math.max(mw, w), mxw);
-                        h = oh * (w/ow);
-                    break;
-                    case "north":
-                        var tw = w;
-                        w = ow * (h/oh);
-                        w = Math.min(Math.max(mw, w), mxw);
-                        h = oh * (w/ow);
-                        x += (tw - w) / 2;
-                        break;
-                    case "southwest":
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        var tw = w;
-                        w = ow * (h/oh);
-                        x += tw - w;
-                        break;
-                    case "west":
-                        var th = h;
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        y += (th - h) / 2;
-                        var tw = w;
-                        w = ow * (h/oh);
-                        x += tw - w;
-                       break;
-                    case "northwest":
-                        var tw = w;
-                        var th = h;
-                        h = oh * (w/ow);
-                        h = Math.min(Math.max(mh, h), mxh);
-                        w = ow * (h/oh);
-                        y += th - h;
-                         x += tw - w;
-                       break;
-
-                }
-            }
-            this.proxy.setBounds(x, y, w, h);
-            if(this.dynamic){
-                this.resizeElement();
-            }
-            }catch(e){}
-        }
-    },
-
-    // private
-    handleOver : function(){
-        if(this.enabled){
-            this.el.addClass("x-resizable-over");
-        }
-    },
-
-    // private
-    handleOut : function(){
-        if(!this.resizing){
-            this.el.removeClass("x-resizable-over");
-        }
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    getResizeChild : function(){
-        return this.resizeChild;
-    },
-
-
-    destroy : function(removeEl){
-        this.proxy.remove();
-        if(this.overlay){
-            this.overlay.removeAllListeners();
-            this.overlay.remove();
-        }
-        var ps = Ext.Resizable.positions;
-        for(var k in ps){
-            if(typeof ps[k] != "function" && this[ps[k]]){
-                var h = this[ps[k]];
-                h.el.removeAllListeners();
-                h.el.remove();
-            }
-        }
-        if(removeEl){
-            this.el.update("");
-            this.el.remove();
-        }
-    }
-});
-
-// private
-// hash to map config positions to true positions
-Ext.Resizable.positions = {
-    n: "north", s: "south", e: "east", w: "west", se: "southeast", sw: "southwest", nw: "northwest", ne: "northeast"
-};
-
-// private
-Ext.Resizable.Handle = function(rz, pos, disableTrackOver, transparent){
-    if(!this.tpl){
-        // only initialize the template if resizable is used
-        var tpl = Ext.DomHelper.createTemplate(
-            {tag: "div", cls: "x-resizable-handle x-resizable-handle-{0}"}
-        );
-        tpl.compile();
-        Ext.Resizable.Handle.prototype.tpl = tpl;
-    }
-    this.position = pos;
-    this.rz = rz;
-    this.el = this.tpl.append(rz.el.dom, [this.position], true);
-    this.el.unselectable();
-    if(transparent){
-        this.el.setOpacity(0);
-    }
-    this.el.on("mousedown", this.onMouseDown, this);
-    if(!disableTrackOver){
-        this.el.on("mouseover", this.onMouseOver, this);
-        this.el.on("mouseout", this.onMouseOut, this);
-    }
-};
-
-// private
-Ext.Resizable.Handle.prototype = {
-    afterResize : function(rz){
-        // do nothing
-    },
-    // private
-    onMouseDown : function(e){
-        this.rz.onMouseDown(this, e);
-    },
-    // private
-    onMouseOver : function(e){
-        this.rz.handleOver(this, e);
-    },
-    // private
-    onMouseOut : function(e){
-        this.rz.handleOut(this, e);
-    }
-};
-
-Ext.Editor = function(field, config){
-    Ext.Editor.superclass.constructor.call(this, config);
-    this.field = field;
-    this.addEvents({
-
-        "beforestartedit" : true,
-
-        "startedit" : true,
-
-        "beforecomplete" : true,
-
-        "complete" : true,
-
-        "specialkey" : true
-    });
-};
-
-Ext.extend(Ext.Editor, Ext.Component, {
-
-
-
-
-
-    value : "",
-
-    alignment: "c-c?",
-
-    shadow : "frame",
-
-    constrain : false,
-
-    // private
-    updateEl : false,
-
-    // private
-    onRender : function(ct, position){
-        this.el = new Ext.Layer({
-            shadow: this.shadow,
-            cls: "x-editor",
-            parentEl : ct,
-            shim : this.shim,
-            shadowOffset:4,
-            id: this.id
-        });
-        this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
-        if(this.field.msgTarget != 'title'){
-            this.field.msgTarget = 'qtip';
-        }
-        this.field.render(this.el);
-        if(Ext.isGecko){
-            this.field.el.dom.setAttribute('autocomplete', 'off');
-        }
-        this.field.show();
-        this.field.on("blur", this.onBlur, this);
-        this.relayEvents(this.field,  ["specialkey"]);
-        if(this.field.grow){
-            this.field.on("autosize", this.el.sync,  this.el, {delay:1});
-        }
-    },
-
-    // private
-    startEdit : function(el, value){
-        if(this.editing){
-            this.completeEdit();
-        }
-        this.boundEl = Ext.get(el);
-        var v = value !== undefined ? value : this.boundEl.dom.innerHTML;
-        if(!this.rendered){
-            this.render(this.parentEl || document.body);
-        }
-        if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){
-            return;
-        }
-        this.startValue = v;
-        this.field.setValue(v);
-        if(this.autoSize){
-            var sz = this.boundEl.getSize();
-            switch(this.autoSize){
-                case "width":
-                this.setSize(sz.width,  "");
-                break;
-                case "height":
-                this.setSize("",  sz.height);
-                break;
-                default:
-                this.setSize(sz.width,  sz.height);
-            }
-        }
-        this.el.alignTo(this.boundEl, this.alignment);
-        this.editing = true;
-        if(Ext.QuickTips){
-            Ext.QuickTips.disable();
-        }
-        this.show();
-    },
-
-
-    setSize : function(w, h){
-        this.field.setSize(w, h);
-        if(this.el){
-            this.el.sync();
-        }
-    },
-
-
-    realign : function(){
-        this.el.alignTo(this.boundEl, this.alignment);
-    },
-
-
-    completeEdit : function(remainVisible){
-        if(!this.editing){
-            return;
-        }
-        var v = this.getValue();
-        if(this.revertInvalid !== false && !this.field.isValid()){
-            v = this.startValue;
-            this.cancelEdit(true);
-        }
-        if(String(v) == String(this.startValue) && this.ignoreNoChange){
-            this.editing = false;
-            this.hide();
-            return;
-        }
-        if(this.fireEvent("beforecomplete", this, v, this.startValue) !== false){
-            this.editing = false;
-            if(this.updateEl && this.boundEl){
-                this.boundEl.update(v);
-            }
-            if(remainVisible !== true){
-                this.hide();
-            }
-            this.fireEvent("complete", this, v, this.startValue);
-        }
-    },
-
-    // private
-    onShow : function(){
-        this.el.show();
-        if(this.hideEl !== false){
-            this.boundEl.hide();
-        }
-        this.field.show();
-        if(Ext.isIE && !this.fixIEFocus){ // IE has problems with focusing the first time
-            this.fixIEFocus = true;
-            this.deferredFocus.defer(50, this);
-        }else{
-            this.field.focus();
-        }
-        this.fireEvent("startedit", this.boundEl, this.startValue);
-    },
-
-    deferredFocus : function(){
-        if(this.editing){
-            this.field.focus();
-        }
-    },
-
-
-    cancelEdit : function(remainVisible){
-        if(this.editing){
-            this.setValue(this.startValue);
-            if(remainVisible !== true){
-                this.hide();
-            }
-        }
-    },
-
-    // private
-    onBlur : function(){
-        if(this.allowBlur !== true && this.editing){
-            this.completeEdit();
-        }
-    },
-
-    // private
-    onHide : function(){
-        if(this.editing){
-            this.completeEdit();
-            return;
-        }
-        this.field.blur();
-        if(this.field.collapse){
-            this.field.collapse();
-        }
-        this.el.hide();
-        if(this.hideEl !== false){
-            this.boundEl.show();
-        }
-        if(Ext.QuickTips){
-            Ext.QuickTips.enable();
-        }
-    },
-
-
-    setValue : function(v){
-        this.field.setValue(v);
-    },
-
-
-    getValue : function(){
-        return this.field.getValue();
-    }
-});
-
-Ext.BasicDialog = function(el, config){
-    this.el = Ext.get(el);
-    var dh = Ext.DomHelper;
-    if(!this.el && config && config.autoCreate){
-        if(typeof config.autoCreate == "object"){
-            if(!config.autoCreate.id){
-                config.autoCreate.id = el;
-            }
-            this.el = dh.append(document.body,
-                        config.autoCreate, true);
-        }else{
-            this.el = dh.append(document.body,
-                        {tag: "div", id: el, style:'visibility:hidden;'}, true);
-        }
-    }
-    el = this.el;
-    el.setDisplayed(true);
-    el.hide = this.hideAction;
-    this.id = el.id;
-    el.addClass("x-dlg");
-
-    Ext.apply(this, config);
-
-    this.proxy = el.createProxy("x-dlg-proxy");
-    this.proxy.hide = this.hideAction;
-    this.proxy.setOpacity(.5);
-    this.proxy.hide();
-
-    if(config.width){
-        el.setWidth(config.width);
-    }
-    if(config.height){
-        el.setHeight(config.height);
-    }
-    this.size = el.getSize();
-    if(typeof config.x != "undefined" && typeof config.y != "undefined"){
-        this.xy = [config.x,config.y];
-    }else{
-        this.xy = el.getCenterXY(true);
-    }
-
-    this.header = el.child("> .x-dlg-hd");
-
-    this.body = el.child("> .x-dlg-bd");
-
-    this.footer = el.child("> .x-dlg-ft");
-
-    if(!this.header){
-        this.header = el.createChild({tag: "div", cls:"x-dlg-hd", html: "&#160;"}, this.body ? this.body.dom : null);
-    }
-    if(!this.body){
-        this.body = el.createChild({tag: "div", cls:"x-dlg-bd"});
-    }
-
-    this.header.unselectable();
-    if(this.title){
-        this.header.update(this.title);
-    }
-    // this element allows the dialog to be focused for keyboard event
-    this.focusEl = el.createChild({tag: "a", href:"#", cls:"x-dlg-focus", tabIndex:"-1"});
-    this.focusEl.swallowEvent("click", true);
-
-    this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"}, true);
-
-    // wrap the body and footer for special rendering
-    this.bwrap = this.body.wrap({tag: "div", cls:"x-dlg-dlg-body"});
-    if(this.footer){
-        this.bwrap.dom.appendChild(this.footer.dom);
-    }
-
-    this.bg = this.el.createChild({
-        tag: "div", cls:"x-dlg-bg",
-        html: '<div class="x-dlg-bg-left"><div class="x-dlg-bg-right"><div class="x-dlg-bg-center">&#160;</div></div></div>'
-    });
-    this.centerBg = this.bg.child("div.x-dlg-bg-center");
-
-
-    if(this.autoScroll !== false && !this.autoTabs){
-        this.body.setStyle("overflow", "auto");
-    }
-
-    this.toolbox = this.el.createChild({cls: "x-dlg-toolbox"});
-
-    if(this.closable !== false){
-        this.el.addClass("x-dlg-closable");
-        this.close = this.toolbox.createChild({cls:"x-dlg-close"});
-        this.close.on("click", this.closeClick, this);
-        this.close.addClassOnOver("x-dlg-close-over");
-    }
-    if(this.collapsible !== false){
-        this.collapseBtn = this.toolbox.createChild({cls:"x-dlg-collapse"});
-        this.collapseBtn.on("click", this.collapseClick, this);
-        this.collapseBtn.addClassOnOver("x-dlg-collapse-over");
-        this.header.on("dblclick", this.collapseClick, this);
-    }
-    if(this.resizable !== false){
-        this.el.addClass("x-dlg-resizable");
-        this.resizer = new Ext.Resizable(el, {
-            minWidth: this.minWidth || 80,
-            minHeight:this.minHeight || 80,
-            handles: this.resizeHandles || "all",
-            pinned: true
-        });
-        this.resizer.on("beforeresize", this.beforeResize, this);
-        this.resizer.on("resize", this.onResize, this);
-    }
-    if(this.draggable !== false){
-        el.addClass("x-dlg-draggable");
-        if (!this.proxyDrag) {
-            var dd = new Ext.dd.DD(el.dom.id, "WindowDrag");
-        }
-        else {
-            var dd = new Ext.dd.DDProxy(el.dom.id, "WindowDrag", {dragElId: this.proxy.id});
-        }
-        dd.setHandleElId(this.header.id);
-        dd.endDrag = this.endMove.createDelegate(this);
-        dd.startDrag = this.startMove.createDelegate(this);
-        dd.onDrag = this.onDrag.createDelegate(this);
-        dd.scroll = false;
-        this.dd = dd;
-    }
-    if(this.modal){
-        this.mask = dh.append(document.body, {tag: "div", cls:"x-dlg-mask"}, true);
-        this.mask.enableDisplayMode("block");
-        this.mask.hide();
-        this.el.addClass("x-dlg-modal");
-    }
-    if(this.shadow){
-        this.shadow = new Ext.Shadow({
-            mode : typeof this.shadow == "string" ? this.shadow : "sides",
-            offset : this.shadowOffset
-        });
-    }else{
-        this.shadowOffset = 0;
-    }
-    if(Ext.useShims && this.shim !== false){
-        this.shim = this.el.createShim();
-        this.shim.hide = this.hideAction;
-        this.shim.hide();
-    }else{
-        this.shim = false;
-    }
-    if(this.autoTabs){
-        this.initTabs();
-    }
-    this.addEvents({
-
-        "keydown" : true,
-
-        "move" : true,
-
-        "resize" : true,
-
-        "beforehide" : true,
-
-        "hide" : true,
-
-        "beforeshow" : true,
-
-        "show" : true
-    });
-    el.on("keydown", this.onKeyDown, this);
-    el.on("mousedown", this.toFront, this);
-    Ext.EventManager.onWindowResize(this.adjustViewport, this, true);
-    this.el.hide();
-    Ext.DialogManager.register(this);
-    Ext.BasicDialog.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.BasicDialog, Ext.util.Observable, {
-    shadowOffset: Ext.isIE ? 6 : 5,
-    minHeight: 80,
-    minWidth: 200,
-    minButtonWidth: 75,
-    defaultButton: null,
-    buttonAlign: "right",
-    tabTag: 'div',
-    firstShow: true,
-
-
-    setTitle : function(text){
-        this.header.update(text);
-        return this;
-    },
-
-    // private
-    closeClick : function(){
-        this.hide();
-    },
-
-    // private
-    collapseClick : function(){
-        this[this.collapsed ? "expand" : "collapse"]();
-    },
-
-
-    collapse : function(){
-        if(!this.collapsed){
-            this.collapsed = true;
-            this.el.addClass("x-dlg-collapsed");
-            this.restoreHeight = this.el.getHeight();
-            this.resizeTo(this.el.getWidth(), this.header.getHeight());
-        }
-    },
-
-
-    expand : function(){
-        if(this.collapsed){
-            this.collapsed = false;
-            this.el.removeClass("x-dlg-collapsed");
-            this.resizeTo(this.el.getWidth(), this.restoreHeight);
-        }
-    },
-
-
-    initTabs : function(){
-        var tabs = this.getTabs();
-        while(tabs.getTab(0)){
-            tabs.removeTab(0);
-        }
-        this.el.select(this.tabTag+'.x-dlg-tab').each(function(el){
-            var dom = el.dom;
-            tabs.addTab(Ext.id(dom), dom.title);
-            dom.title = "";
-        });
-        tabs.activate(0);
-        return tabs;
-    },
-
-    // private
-    beforeResize : function(){
-        this.resizer.minHeight = Math.max(this.minHeight, this.getHeaderFooterHeight(true)+40);
-    },
-
-    // private
-    onResize : function(){
-        this.refreshSize();
-        this.syncBodyHeight();
-        this.adjustAssets();
-        this.focus();
-        this.fireEvent("resize", this, this.size.width, this.size.height);
-    },
-
-    // private
-    onKeyDown : function(e){
-        if(this.isVisible()){
-            this.fireEvent("keydown", this, e);
-        }
-    },
-
-
-    resizeTo : function(width, height){
-        this.el.setSize(width, height);
-        this.size = {width: width, height: height};
-        this.syncBodyHeight();
-        if(this.fixedcenter){
-            this.center();
-        }
-        if(this.isVisible()){
-            this.constrainXY();
-            this.adjustAssets();
-        }
-        this.fireEvent("resize", this, width, height);
-        return this;
-    },
-
-
-
-    setContentSize : function(w, h){
-        h += this.getHeaderFooterHeight() + this.body.getMargins("tb");
-        w += this.body.getMargins("lr") + this.bwrap.getMargins("lr") + this.centerBg.getPadding("lr");
-        //if(!this.el.isBorderBox()){
-            h +=  this.body.getPadding("tb") + this.bwrap.getBorderWidth("tb") + this.body.getBorderWidth("tb") + this.el.getBorderWidth("tb");
-            w += this.body.getPadding("lr") + this.bwrap.getBorderWidth("lr") + this.body.getBorderWidth("lr") + this.bwrap.getPadding("lr") + this.el.getBorderWidth("lr");
-        //}
-        if(this.tabs){
-            h += this.tabs.stripWrap.getHeight() + this.tabs.bodyEl.getMargins("tb") + this.tabs.bodyEl.getPadding("tb");
-            w += this.tabs.bodyEl.getMargins("lr") + this.tabs.bodyEl.getPadding("lr");
-        }
-        this.resizeTo(w, h);
-        return this;
-    },
-
-
-    addKeyListener : function(key, fn, scope){
-        var keyCode, shift, ctrl, alt;
-        if(typeof key == "object" && !(key instanceof Array)){
-            keyCode = key["key"];
-            shift = key["shift"];
-            ctrl = key["ctrl"];
-            alt = key["alt"];
-        }else{
-            keyCode = key;
-        }
-        var handler = function(dlg, e){
-            if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) &&  (!alt || e.altKey)){
-                var k = e.getKey();
-                if(keyCode instanceof Array){
-                    for(var i = 0, len = keyCode.length; i < len; i++){
-                        if(keyCode[i] == k){
-                          fn.call(scope || window, dlg, k, e);
-                          return;
-                        }
-                    }
-                }else{
-                    if(k == keyCode){
-                        fn.call(scope || window, dlg, k, e);
-                    }
-                }
-            }
-        };
-        this.on("keydown", handler);
-        return this;
-    },
-
-
-    getTabs : function(){
-        if(!this.tabs){
-            this.el.addClass("x-dlg-auto-tabs");
-            this.body.addClass(this.tabPosition == "bottom" ? "x-tabs-bottom" : "x-tabs-top");
-            this.tabs = new Ext.TabPanel(this.body.dom, this.tabPosition == "bottom");
-        }
-        return this.tabs;
-    },
-
-
-    addButton : function(config, handler, scope){
-        var dh = Ext.DomHelper;
-        if(!this.footer){
-            this.footer = dh.append(this.bwrap, {tag: "div", cls:"x-dlg-ft"}, true);
-        }
-        if(!this.btnContainer){
-            var tb = this.footer.createChild({
-                tag:"div",
-                cls:"x-dlg-btns x-dlg-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }, null, true);
-            this.btnContainer = tb.firstChild.firstChild.firstChild;
-        }
-        var bconfig = {
-            handler: handler,
-            scope: scope,
-            minWidth: this.minButtonWidth,
-            hideParent:true
-        };
-        if(typeof config == "string"){
-            bconfig.text = config;
-        }else{
-            if(config.tag){
-                bconfig.dhconfig = config;
-            }else{
-                Ext.apply(bconfig, config);
-            }
-        }
-        var btn = new Ext.Button(
-            this.btnContainer.appendChild(document.createElement("td")),
-            bconfig
-        );
-        this.syncBodyHeight();
-        if(!this.buttons){
-
-            this.buttons = [];
-        }
-        this.buttons.push(btn);
-        return btn;
-    },
-
-
-    setDefaultButton : function(btn){
-        this.defaultButton = btn;
-        return this;
-    },
-
-    // private
-    getHeaderFooterHeight : function(safe){
-        var height = 0;
-        if(this.header){
-           height += this.header.getHeight();
-        }
-        if(this.footer){
-           var fm = this.footer.getMargins();
-            height += (this.footer.getHeight()+fm.top+fm.bottom);
-        }
-        height += this.bwrap.getPadding("tb")+this.bwrap.getBorderWidth("tb");
-        height += this.centerBg.getPadding("tb");
-        return height;
-    },
-
-    // private
-    syncBodyHeight : function(){
-        var bd = this.body, cb = this.centerBg, bw = this.bwrap;
-        var height = this.size.height - this.getHeaderFooterHeight(false);
-        bd.setHeight(height-bd.getMargins("tb"));
-        var hh = this.header.getHeight();
-        var h = this.size.height-hh;
-        cb.setHeight(h);
-        bw.setLeftTop(cb.getPadding("l"), hh+cb.getPadding("t"));
-        bw.setHeight(h-cb.getPadding("tb"));
-        bw.setWidth(this.el.getWidth(true)-cb.getPadding("lr"));
-        bd.setWidth(bw.getWidth(true));
-        if(this.tabs){
-            this.tabs.syncHeight();
-            if(Ext.isIE){
-                this.tabs.el.repaint();
-            }
-        }
-    },
-
-
-    restoreState : function(){
-        var box = Ext.state.Manager.get(this.stateId || (this.el.id + "-state"));
-        if(box && box.width){
-            this.xy = [box.x, box.y];
-            this.resizeTo(box.width, box.height);
-        }
-        return this;
-    },
-
-    // private
-    beforeShow : function(){
-        this.expand();
-        if(this.fixedcenter){
-            this.xy = this.el.getCenterXY(true);
-        }
-        if(this.modal){
-            Ext.get(document.body).addClass("x-body-masked");
-            this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-            this.mask.show();
-        }
-        this.constrainXY();
-    },
-
-    // private
-    animShow : function(){
-        var b = Ext.get(this.animateTarget, true).getBox();
-        this.proxy.setSize(b.width, b.height);
-        this.proxy.setLocation(b.x, b.y);
-        this.proxy.show();
-        this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height,
-                    true, .35, this.showEl.createDelegate(this));
-    },
-
-
-    show : function(animateTarget){
-        if (this.fireEvent("beforeshow", this) === false){
-            return;
-        }
-        if(this.syncHeightBeforeShow){
-            this.syncBodyHeight();
-        }else if(this.firstShow){
-            this.firstShow = false;
-            this.syncBodyHeight(); // sync the height on the first show instead of in the constructor
-        }
-        this.animateTarget = animateTarget || this.animateTarget;
-        if(!this.el.isVisible()){
-            this.beforeShow();
-            if(this.animateTarget){
-                this.animShow();
-            }else{
-                this.showEl();
-            }
-        }
-        return this;
-    },
-
-    // private
-    showEl : function(){
-        this.proxy.hide();
-        this.el.setXY(this.xy);
-        this.el.show();
-        this.adjustAssets(true);
-        this.toFront();
-        this.focus();
-        // IE peekaboo bug - fix found by Dave Fenwick
-        if(Ext.isIE){
-            this.el.repaint();
-        }
-        this.fireEvent("show", this);
-    },
-
-
-    focus : function(){
-        if(this.defaultButton){
-            this.defaultButton.focus();
-        }else{
-            this.focusEl.focus();
-        }
-    },
-
-    // private
-    constrainXY : function(){
-        if(this.constraintoviewport !== false){
-            if(!this.viewSize){
-                if(this.container){
-                    var s = this.container.getSize();
-                    this.viewSize = [s.width, s.height];
-                }else{
-                    this.viewSize = [Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()];
-                }
-            }
-            var s = Ext.get(this.container||document).getScroll();
-
-            var x = this.xy[0], y = this.xy[1];
-            var w = this.size.width, h = this.size.height;
-            var vw = this.viewSize[0], vh = this.viewSize[1];
-            // only move it if it needs it
-            var moved = false;
-            // first validate right/bottom
-            if(x + w > vw+s.left){
-                x = vw - w;
-                moved = true;
-            }
-            if(y + h > vh+s.top){
-                y = vh - h;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < s.left){
-                x = s.left;
-                moved = true;
-            }
-            if(y < s.top){
-                y = s.top;
-                moved = true;
-            }
-            if(moved){
-                // cache xy
-                this.xy = [x, y];
-                if(this.isVisible()){
-                    this.el.setLocation(x, y);
-                    this.adjustAssets();
-                }
-            }
-        }
-    },
-
-    // private
-    onDrag : function(){
-        if(!this.proxyDrag){
-            this.xy = this.el.getXY();
-            this.adjustAssets();
-        }
-    },
-
-    // private
-    adjustAssets : function(doShow){
-        var x = this.xy[0], y = this.xy[1];
-        var w = this.size.width, h = this.size.height;
-        if(doShow === true){
-            if(this.shadow){
-                this.shadow.show(this.el);
-            }
-            if(this.shim){
-                this.shim.show();
-            }
-        }
-        if(this.shadow && this.shadow.isVisible()){
-            this.shadow.show(this.el);
-        }
-        if(this.shim && this.shim.isVisible()){
-            this.shim.setBounds(x, y, w, h);
-        }
-    },
-
-    // private
-    adjustViewport : function(w, h){
-        if(!w || !h){
-            w = Ext.lib.Dom.getViewWidth();
-            h = Ext.lib.Dom.getViewHeight();
-        }
-        // cache the size
-        this.viewSize = [w, h];
-        if(this.modal && this.mask.isVisible()){
-            this.mask.setSize(w, h); // first make sure the mask isn't causing overflow
-            this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-        }
-        if(this.isVisible()){
-            this.constrainXY();
-        }
-    },
-
-
-    destroy : function(removeEl){
-        if(this.isVisible()){
-            this.animateTarget = null;
-            this.hide();
-        }
-        Ext.EventManager.removeResizeListener(this.adjustViewport, this);
-        if(this.tabs){
-            this.tabs.destroy(removeEl);
-        }
-        Ext.destroy(
-             this.shim,
-             this.proxy,
-             this.resizer,
-             this.close,
-             this.mask
-        );
-        if(this.dd){
-            this.dd.unreg();
-        }
-        if(this.buttons){
-           for(var i = 0, len = this.buttons.length; i < len; i++){
-               this.buttons[i].destroy();
-           }
-        }
-        this.el.removeAllListeners();
-        if(removeEl === true){
-            this.el.update("");
-            this.el.remove();
-        }
-        Ext.DialogManager.unregister(this);
-    },
-
-    // private
-    startMove : function(){
-        if(this.proxyDrag){
-            this.proxy.show();
-        }
-        if(this.constraintoviewport !== false){
-            this.dd.constrainTo(document.body, {right: this.shadowOffset, bottom: this.shadowOffset});
-        }
-    },
-
-    // private
-    endMove : function(){
-        if(!this.proxyDrag){
-            Ext.dd.DD.prototype.endDrag.apply(this.dd, arguments);
-        }else{
-            Ext.dd.DDProxy.prototype.endDrag.apply(this.dd, arguments);
-            this.proxy.hide();
-        }
-        this.refreshSize();
-        this.adjustAssets();
-        this.focus();
-        this.fireEvent("move", this, this.xy[0], this.xy[1]);
-    },
-
-
-    toFront : function(){
-        Ext.DialogManager.bringToFront(this);
-        return this;
-    },
-
-
-    toBack : function(){
-        Ext.DialogManager.sendToBack(this);
-        return this;
-    },
-
-
-    center : function(){
-        var xy = this.el.getCenterXY(true);
-        this.moveTo(xy[0], xy[1]);
-        return this;
-    },
-
-
-    moveTo : function(x, y){
-        this.xy = [x,y];
-        if(this.isVisible()){
-            this.el.setXY(this.xy);
-            this.adjustAssets();
-        }
-        return this;
-    },
-
-
-    alignTo : function(element, position, offsets){
-        this.xy = this.el.getAlignToXY(element, position, offsets);
-        if(this.isVisible()){
-            this.el.setXY(this.xy);
-            this.adjustAssets();
-        }
-        return this;
-    },
-
-
-    anchorTo : function(el, alignment, offsets, monitorScroll){
-        var action = function(){
-            this.alignTo(el, alignment, offsets);
-        };
-        Ext.EventManager.onWindowResize(action, this);
-        var tm = typeof monitorScroll;
-        if(tm != 'undefined'){
-            Ext.EventManager.on(window, 'scroll', action, this,
-                {buffer: tm == 'number' ? monitorScroll : 50});
-        }
-        action.call(this);
-        return this;
-    },
-
-
-    isVisible : function(){
-        return this.el.isVisible();
-    },
-
-    // private
-    animHide : function(callback){
-        var b = Ext.get(this.animateTarget).getBox();
-        this.proxy.show();
-        this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height);
-        this.el.hide();
-        this.proxy.setBounds(b.x, b.y, b.width, b.height, true, .35,
-                    this.hideEl.createDelegate(this, [callback]));
-    },
-
-
-    hide : function(callback){
-        if (this.fireEvent("beforehide", this) === false){
-            return;
-        }
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        if(this.shim) {
-          this.shim.hide();
-        }
-        if(this.animateTarget){
-           this.animHide(callback);
-        }else{
-            this.el.hide();
-            this.hideEl(callback);
-        }
-        return this;
-    },
-
-    // private
-    hideEl : function(callback){
-        this.proxy.hide();
-        if(this.modal){
-            this.mask.hide();
-            Ext.get(document.body).removeClass("x-body-masked");
-        }
-        this.fireEvent("hide", this);
-        if(typeof callback == "function"){
-            callback();
-        }
-    },
-
-    // private
-    hideAction : function(){
-        this.setLeft("-10000px");
-        this.setTop("-10000px");
-        this.setStyle("visibility", "hidden");
-    },
-
-    // private
-    refreshSize : function(){
-        this.size = this.el.getSize();
-        this.xy = this.el.getXY();
-        Ext.state.Manager.set(this.stateId || this.el.id + "-state", this.el.getBox());
-    },
-
-    // private
-    // z-index is managed by the DialogManager and may be overwritten at any time
-    setZIndex : function(index){
-        if(this.modal){
-            this.mask.setStyle("z-index", index);
-        }
-        if(this.shim){
-            this.shim.setStyle("z-index", ++index);
-        }
-        if(this.shadow){
-            this.shadow.setZIndex(++index);
-        }
-        this.el.setStyle("z-index", ++index);
-        if(this.proxy){
-            this.proxy.setStyle("z-index", ++index);
-        }
-        if(this.resizer){
-            this.resizer.proxy.setStyle("z-index", ++index);
-        }
-
-        this.lastZIndex = index;
-    },
-
-
-    getEl : function(){
-        return this.el;
-    }
-});
-
-
-Ext.DialogManager = function(){
-    var list = {};
-    var accessList = [];
-    var front = null;
-
-    // private
-    var sortDialogs = function(d1, d2){
-        return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
-    };
-
-    // private
-    var orderDialogs = function(){
-        accessList.sort(sortDialogs);
-        var seed = Ext.DialogManager.zseed;
-        for(var i = 0, len = accessList.length; i < len; i++){
-            var dlg = accessList[i];
-            if(dlg){
-                dlg.setZIndex(seed + (i*10));
-            }
-        }
-    };
-
-    return {
-
-        zseed : 9000,
-
-        // private
-        register : function(dlg){
-            list[dlg.id] = dlg;
-            accessList.push(dlg);
-        },
-
-        // private
-        unregister : function(dlg){
-            delete list[dlg.id];
-            if(!accessList.indexOf){
-                for(var i = 0, len = accessList.length; i < len; i++){
-                    if(accessList[i] == dlg){
-                        accessList.splice(i, 1);
-                        return;
-                    }
-                }
-            }else{
-                var i = accessList.indexOf(dlg);
-                if(i != -1){
-                    accessList.splice(i, 1);
-                }
-            }
-        },
-
-
-        get : function(id){
-            return typeof id == "object" ? id : list[id];
-        },
-
-
-        bringToFront : function(dlg){
-            dlg = this.get(dlg);
-            if(dlg != front){
-                front = dlg;
-                dlg._lastAccess = new Date().getTime();
-                orderDialogs();
-            }
-            return dlg;
-        },
-
-
-        sendToBack : function(dlg){
-            dlg = this.get(dlg);
-            dlg._lastAccess = -(new Date().getTime());
-            orderDialogs();
-            return dlg;
-        },
-
-
-        hideAll : function(){
-            for(var id in list){
-                if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
-                    list[id].hide();
-                }
-            }
-        }
-    };
-}();
-
-
-Ext.LayoutDialog = function(el, config){
-    config.autoTabs = false;
-    Ext.LayoutDialog.superclass.constructor.call(this, el, config);
-    this.body.setStyle({overflow:"hidden", position:"relative"});
-    this.layout = new Ext.BorderLayout(this.body.dom, config);
-    this.layout.monitorWindowResize = false;
-    this.el.addClass("x-dlg-auto-layout");
-    // fix case when center region overwrites center function
-    this.center = Ext.BasicDialog.prototype.center;
-    this.on("show", this.layout.layout, this.layout, true);
-};
-Ext.extend(Ext.LayoutDialog, Ext.BasicDialog, {
-
-    endUpdate : function(){
-        this.layout.endUpdate();
-    },
-
-
-    beginUpdate : function(){
-        this.layout.beginUpdate();
-    },
-
-
-    getLayout : function(){
-        return this.layout;
-    },
-
-    showEl : function(){
-        Ext.LayoutDialog.superclass.showEl.apply(this, arguments);
-        if(Ext.isIE7){
-            this.layout.layout();
-        }
-    },
-
-    // private
-    // Use the syncHeightBeforeShow config option to control this automatically
-    syncBodyHeight : function(){
-        Ext.LayoutDialog.superclass.syncBodyHeight.call(this);
-        if(this.layout){this.layout.layout();}
-    }
-});
-
-Ext.MessageBox = function(){
-    var dlg, opt, mask, waitTimer;
-    var bodyEl, msgEl, textboxEl, textareaEl, progressEl, pp;
-    var buttons, activeTextEl, bwidth;
-
-    // private
-    var handleButton = function(button){
-        dlg.hide();
-        Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value], 1);
-    };
-
-    // private
-    var handleHide = function(){
-        if(opt && opt.cls){
-            dlg.el.removeClass(opt.cls);
-        }
-        if(waitTimer){
-            Ext.TaskMgr.stop(waitTimer);
-            waitTimer = null;
-        }
-    };
-
-    // private
-    var updateButtons = function(b){
-        var width = 0;
-        if(!b){
-            buttons["ok"].hide();
-            buttons["cancel"].hide();
-            buttons["yes"].hide();
-            buttons["no"].hide();
-            dlg.footer.dom.style.display = 'none';
-            return width;
-        }
-        dlg.footer.dom.style.display = '';
-        for(var k in buttons){
-            if(typeof buttons[k] != "function"){
-                if(b[k]){
-                    buttons[k].show();
-                    buttons[k].setText(typeof b[k] == "string" ? b[k] : Ext.MessageBox.buttonText[k]);
-                    width += buttons[k].el.getWidth()+15;
-                }else{
-                    buttons[k].hide();
-                }
-            }
-        }
-        return width;
-    };
-
-    // private
-    var handleEsc = function(d, k, e){
-        if(opt && opt.closable !== false){
-            dlg.hide();
-        }
-        if(e){
-            e.stopEvent();
-        }
-    };
-
-    return {
-
-        getDialog : function(){
-           if(!dlg){
-                dlg = new Ext.BasicDialog("x-msg-box", {
-                    autoCreate : true,
-                    shadow: true,
-                    draggable: true,
-                    resizable:false,
-                    constraintoviewport:false,
-                    fixedcenter:true,
-                    collapsible : false,
-                    shim:true,
-                    modal: true,
-                    width:400, height:100,
-                    buttonAlign:"center",
-                    closeClick : function(){
-                        if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){
-                            handleButton("no");
-                        }else{
-                            handleButton("cancel");
-                        }
-                    }
-                });
-                dlg.on("hide", handleHide);
-                mask = dlg.mask;
-                dlg.addKeyListener(27, handleEsc);
-                buttons = {};
-                var bt = this.buttonText;
-                buttons["ok"] = dlg.addButton(bt["ok"], handleButton.createCallback("ok"));
-                buttons["yes"] = dlg.addButton(bt["yes"], handleButton.createCallback("yes"));
-                buttons["no"] = dlg.addButton(bt["no"], handleButton.createCallback("no"));
-                buttons["cancel"] = dlg.addButton(bt["cancel"], handleButton.createCallback("cancel"));
-                bodyEl = dlg.body.createChild({
-                    tag:"div",
-                    html:'<span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea><div class="ext-mb-progress-wrap"><div class="ext-mb-progress"><div class="ext-mb-progress-bar">&#160;</div></div></div>'
-                });
-                msgEl = bodyEl.dom.firstChild;
-                textboxEl = Ext.get(bodyEl.dom.childNodes[2]);
-                textboxEl.enableDisplayMode();
-                textboxEl.addKeyListener([10,13], function(){
-                    if(dlg.isVisible() && opt && opt.buttons){
-                        if(opt.buttons.ok){
-                            handleButton("ok");
-                        }else if(opt.buttons.yes){
-                            handleButton("yes");
-                        }
-                    }
-                });
-                textareaEl = Ext.get(bodyEl.dom.childNodes[3]);
-                textareaEl.enableDisplayMode();
-                progressEl = Ext.get(bodyEl.dom.childNodes[4]);
-                progressEl.enableDisplayMode();
-                var pf = progressEl.dom.firstChild;
-                pp = Ext.get(pf.firstChild);
-                pp.setHeight(pf.offsetHeight);
-            }
-            return dlg;
-        },
-
-
-        updateText : function(text){
-            if(!dlg.isVisible() && !opt.width){
-                dlg.resizeTo(this.maxWidth, 100); // resize first so content is never clipped from previous shows
-            }
-            msgEl.innerHTML = text || '&#160;';
-            var w = Math.max(Math.min(opt.width || msgEl.offsetWidth, this.maxWidth),
-                        Math.max(opt.minWidth || this.minWidth, bwidth));
-            if(opt.prompt){
-                activeTextEl.setWidth(w);
-            }
-            if(dlg.isVisible()){
-                dlg.fixedcenter = false;
-            }
-            dlg.setContentSize(w, bodyEl.getHeight());
-            if(dlg.isVisible()){
-                dlg.fixedcenter = true;
-            }
-            return this;
-        },
-
-
-        updateProgress : function(value, text){
-            if(text){
-                this.updateText(text);
-            }
-            pp.setWidth(Math.floor(value*progressEl.dom.firstChild.offsetWidth));
-            return this;
-        },
-
-
-        isVisible : function(){
-            return dlg && dlg.isVisible();
-        },
-
-
-        hide : function(){
-            if(this.isVisible()){
-                dlg.hide();
-            }
-        },
-
-
-        show : function(options){
-            if(this.isVisible()){
-                this.hide();
-            }
-            var d = this.getDialog();
-            opt = options;
-            d.setTitle(opt.title || "&#160;");
-            d.close.setDisplayed(opt.closable !== false);
-            activeTextEl = textboxEl;
-            opt.prompt = opt.prompt || (opt.multiline ? true : false);
-            if(opt.prompt){
-                if(opt.multiline){
-                    textboxEl.hide();
-                    textareaEl.show();
-                    textareaEl.setHeight(typeof opt.multiline == "number" ?
-                        opt.multiline : this.defaultTextHeight);
-                    activeTextEl = textareaEl;
-                }else{
-                    textboxEl.show();
-                    textareaEl.hide();
-                }
-            }else{
-                textboxEl.hide();
-                textareaEl.hide();
-            }
-            progressEl.setDisplayed(opt.progress === true);
-            this.updateProgress(0);
-            activeTextEl.dom.value = opt.value || "";
-            if(opt.prompt){
-                dlg.setDefaultButton(activeTextEl);
-            }else{
-                var bs = opt.buttons;
-                var db = null;
-                if(bs && bs.ok){
-                    db = buttons["ok"];
-                }else if(bs && bs.yes){
-                    db = buttons["yes"];
-                }
-                dlg.setDefaultButton(db);
-            }
-            bwidth = updateButtons(opt.buttons);
-            this.updateText(opt.msg);
-            if(opt.cls){
-                d.el.addClass(opt.cls);
-            }
-            d.proxyDrag = opt.proxyDrag === true;
-            d.modal = opt.modal !== false;
-            d.mask = opt.modal !== false ? mask : false;
-            if(!d.isVisible()){
-                // force it to the end of the z-index stack so it gets a cursor in FF
-                document.body.appendChild(dlg.el.dom);
-                d.animateTarget = null;
-                d.show(options.animEl);
-            }
-            return this;
-        },
-
-
-        progress : function(title, msg){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: false,
-                progress:true,
-                closable:false,
-                minWidth: this.minProgressWidth
-            });
-            return this;
-        },
-
-
-        alert : function(title, msg, fn, scope){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: this.OK,
-                fn: fn,
-                scope : scope
-            });
-            return this;
-        },
-
-
-        wait : function(msg, title){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: false,
-                closable:false,
-                progress:true,
-                modal:true,
-                width:300,
-                wait:true
-            });
-            waitTimer = Ext.TaskMgr.start({
-                run: function(i){
-                    Ext.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);
-                },
-                interval: 1000
-            });
-            return this;
-        },
-
-
-        confirm : function(title, msg, fn, scope){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: this.YESNO,
-                fn: fn,
-                scope : scope
-            });
-            return this;
-        },
-
-
-        prompt : function(title, msg, fn, scope, multiline){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: this.OKCANCEL,
-                fn: fn,
-                minWidth:250,
-                scope : scope,
-                prompt:true,
-                multiline: multiline
-            });
-            return this;
-        },
-
-
-        OK : {ok:true},
-
-        YESNO : {yes:true, no:true},
-
-        OKCANCEL : {ok:true, cancel:true},
-
-        YESNOCANCEL : {yes:true, no:true, cancel:true},
-
-
-        defaultTextHeight : 75,
-
-        maxWidth : 600,
-
-        minWidth : 100,
-
-        minProgressWidth : 250,
-
-        buttonText : {
-            ok : "OK",
-            cancel : "Cancel",
-            yes : "Yes",
-            no : "No"
-        }
-    };
-}();
-
-
-Ext.Msg = Ext.MessageBox;
-
-Ext.QuickTips = function(){
-    var el, tipBody, tipBodyText, tipTitle, tm, cfg, close, tagEls = {}, esc, removeCls = null, bdLeft, bdRight;
-    var ce, bd, xy, dd;
-    var visible = false, disabled = true, inited = false;
-    var showProc = 1, hideProc = 1, dismissProc = 1, locks = [];
-
-    var onOver = function(e){
-        if(disabled){
-            return;
-        }
-        var t = e.getTarget();
-        if(!t || t.nodeType !== 1 || t == document || t == document.body){
-            return;
-        }
-        if(ce && t == ce.el){
-            clearTimeout(hideProc);
-            return;
-        }
-        if(t && tagEls[t.id]){
-            tagEls[t.id].el = t;
-            showProc = show.defer(tm.showDelay, tm, [tagEls[t.id]]);
-            return;
-        }
-        var ttp, et = Ext.fly(t);
-        var ns = cfg.namespace;
-        if(tm.interceptTitles && t.title){
-            ttp = t.title;
-            t.qtip = ttp;
-            t.removeAttribute("title");
-            e.preventDefault();
-        }else{
-            ttp = t.qtip || et.getAttributeNS(ns, cfg.attribute);
-        }
-        if(ttp){
-            showProc = show.defer(tm.showDelay, tm, [{
-                el: t,
-                text: ttp,
-                width: et.getAttributeNS(ns, cfg.width),
-                autoHide: et.getAttributeNS(ns, cfg.hide) != "user",
-                title: et.getAttributeNS(ns, cfg.title),
-           	    cls: et.getAttributeNS(ns, cfg.cls)
-            }]);
-        }
-    };
-
-    var onOut = function(e){
-        clearTimeout(showProc);
-        var t = e.getTarget();
-        if(t && ce && ce.el == t && (tm.autoHide && ce.autoHide !== false)){
-            hideProc = setTimeout(hide, tm.hideDelay);
-        }
-    };
-
-    var onMove = function(e){
-        if(disabled){
-            return;
-        }
-        xy = e.getXY();
-        xy[1] += 18;
-        if(tm.trackMouse && ce){
-            el.setXY(xy);
-        }
-    };
-
-    var onDown = function(e){
-        clearTimeout(showProc);
-        clearTimeout(hideProc);
-        if(!e.within(el)){
-            if(tm.hideOnClick){
-                hide();
-                tm.disable();
-            }
-        }
-    };
-
-    var onUp = function(e){
-        tm.enable();
-    };
-
-    var getPad = function(){
-        return bdLeft.getPadding('l')+bdRight.getPadding('r');
-    };
-
-    var show = function(o){
-        if(disabled){
-            return;
-        }
-        clearTimeout(dismissProc);
-        ce = o;
-        if(removeCls){ // in case manually hidden
-            el.removeClass(removeCls);
-            removeCls = null;
-        }
-        if(ce.cls){
-            el.addClass(ce.cls);
-            removeCls = ce.cls;
-        }
-        if(ce.title){
-            tipTitle.update(ce.title);
-            tipTitle.show();
-        }else{
-            tipTitle.update('');
-            tipTitle.hide();
-        }
-        el.dom.style.width  = tm.maxWidth+'px';
-        //tipBody.dom.style.width = '';
-        tipBodyText.update(o.text);
-        var p = getPad(), w = ce.width;
-        if(!w){
-            var td = tipBodyText.dom;
-            var aw = Math.max(td.offsetWidth, td.clientWidth, td.scrollWidth);
-            if(aw > tm.maxWidth){
-                w = tm.maxWidth;
-            }else if(aw < tm.minWidth){
-                w = tm.minWidth;
-            }else{
-                w = aw;
-            }
-        }
-        //tipBody.setWidth(w);
-        el.setWidth(parseInt(w, 10) + p);
-        if(ce.autoHide === false){
-            close.setDisplayed(true);
-            if(dd){
-                dd.unlock();
-            }
-        }else{
-            close.setDisplayed(false);
-            if(dd){
-                dd.lock();
-            }
-        }
-        if(xy){
-            el.avoidY = xy[1]-18;
-            el.setXY(xy);
-        }
-        if(tm.animate){
-            el.setOpacity(.1);
-            el.setStyle("visibility", "visible");
-            el.fadeIn({callback: afterShow});
-        }else{
-            afterShow();
-        }
-    };
-
-    var afterShow = function(){
-        if(ce){
-            el.show();
-            esc.enable();
-            if(tm.autoDismiss && ce.autoHide !== false){
-                dismissProc = setTimeout(hide, tm.autoDismissDelay);
-            }
-        }
-    };
-
-    var hide = function(noanim){
-        clearTimeout(dismissProc);
-        clearTimeout(hideProc);
-        ce = null;
-        if(el.isVisible()){
-            esc.disable();
-            if(noanim !== true && tm.animate){
-                el.fadeOut({callback: afterHide});
-            }else{
-                afterHide();
-            }
-        }
-    };
-
-    var afterHide = function(){
-        el.hide();
-        if(removeCls){
-            el.removeClass(removeCls);
-            removeCls = null;
-        }
-    };
-
-    return {
-
-       minWidth : 40,
-
-       maxWidth : 300,
-
-       interceptTitles : false,
-
-       trackMouse : false,
-
-       hideOnClick : true,
-
-       showDelay : 500,
-
-       hideDelay : 200,
-
-       autoHide : true,
-
-       autoDismiss : true,
-
-       autoDismissDelay : 5000,
-
-       animate : false,
-
-        // private
-       init : function(){
-          tm = Ext.QuickTips;
-          cfg = tm.tagConfig;
-          if(!inited){
-              if(!Ext.isReady){ // allow calling of init() before onReady
-                  Ext.onReady(Ext.QuickTips.init, Ext.QuickTips);
-                  return;
-              }
-              el = new Ext.Layer({cls:"x-tip", shadow:"drop", shim: true, constrain:true, shadowOffset:4});
-              el.fxDefaults = {stopFx: true};
-              // maximum custom styling
-              el.update('<div class="x-tip-top-left"><div class="x-tip-top-right"><div class="x-tip-top"></div></div></div><div class="x-tip-bd-left"><div class="x-tip-bd-right"><div class="x-tip-bd"><div class="x-tip-close"></div><h3></h3><div class="x-tip-bd-inner"></div><div class="x-clear"></div></div></div></div><div class="x-tip-ft-left"><div class="x-tip-ft-right"><div class="x-tip-ft"></div></div></div>');
-              tipTitle = el.child('h3');
-              tipTitle.enableDisplayMode("block");
-              tipBody = el.child('div.x-tip-bd');
-              tipBodyText = el.child('div.x-tip-bd-inner');
-              bdLeft = el.child('div.x-tip-bd-left');
-              bdRight = el.child('div.x-tip-bd-right');
-              close = el.child('div.x-tip-close');
-              close.enableDisplayMode("block");
-              close.on("click", hide);
-              var d = Ext.get(document);
-              d.on("mousedown", onDown);
-              d.on("mouseup", onUp);
-              d.on("mouseover", onOver);
-              d.on("mouseout", onOut);
-              d.on("mousemove", onMove);
-              esc = d.addKeyListener(27, hide);
-              esc.disable();
-              if(Ext.dd.DD){
-                  dd = el.initDD("default", null, {
-                      onDrag : function(){
-                          el.sync();
-                      }
-                  });
-                  dd.setHandleElId(tipTitle.id);
-                  dd.lock();
-              }
-              inited = true;
-          }
-          this.enable();
-       },
-
-
-       register : function(config){
-           var cs = config instanceof Array ? config : arguments;
-           for(var i = 0, len = cs.length; i < len; i++) {
-               var c = cs[i];
-               var target = c.target;
-               if(target){
-                   if(target instanceof Array){
-                       for(var j = 0, jlen = target.length; j < jlen; j++){
-                           tagEls[target[j]] = c;
-                       }
-                   }else{
-                       tagEls[typeof target == 'string' ? target : Ext.id(target.id)] = c;
-                   }
-               }
-           }
-       },
-
-
-       unregister : function(el){
-           delete tagEls[Ext.id(el)];
-       },
-
-
-       enable : function(){
-           if(inited){
-               locks.pop();
-               if(locks.length < 1){
-                   disabled = false;
-               }
-           }
-       },
-
-
-       disable : function(){
-          disabled = true;
-          clearTimeout(showProc);
-          clearTimeout(hideProc);
-          clearTimeout(dismissProc);
-          if(ce){
-              hide(true);
-          }
-          locks.push(1);
-       },
-
-
-       isEnabled : function(){
-            return !disabled;
-       },
-
-        // private
-       tagConfig : {
-           namespace : "ext",
-           attribute : "qtip",
-           width : "width",
-           target : "target",
-           title : "qtitle",
-           hide : "hide",
-           cls : "qclass"
-       }
-   };
-}();
-
-// backwards compat
-Ext.QuickTips.tips = Ext.QuickTips.register;
-
-Ext.tree.TreePanel = function(el, config){
-   Ext.apply(this, config);
-   Ext.tree.TreePanel.superclass.constructor.call(this);
-   this.el = Ext.get(el);
-    this.el.addClass('x-tree');
-
-   this.id = this.el.id;
-   this.addEvents({
-
-        "beforeload" : true,
-
-        "load" : true,
-
-        "textchange" : true,
-
-        "beforeexpand" : true,
-
-        "beforecollapse" : true,
-
-        "expand" : true,
-
-        "disabledchange" : true,
-
-        "collapse" : true,
-
-        "beforeclick":true,
-
-        "click":true,
-
-        "dblclick":true,
-
-        "contextmenu":true,
-
-        "beforechildrenrendered":true,
-
-	    "startdrag" : true,
-
-	    "enddrag" : true,
-
-	    "dragdrop" : true,
-
-	    "beforenodedrop" : true,
-
-	    "nodedrop" : true,
-
-	    "nodedragover" : true
-   });
-   if(this.singleExpand){
-       this.on("beforeexpand", this.restrictExpand, this);
-   }
-};
-Ext.extend(Ext.tree.TreePanel, Ext.data.Tree, {
-    rootVisible : true,
-    animate: Ext.enableFx,
-    lines : true,
-    enableDD : false,
-    hlDrop : Ext.enableFx,
-
-    proxyNodeEvent : function(){
-        this.fireEvent.apply(this, arguments);
-    },
-
-    // private
-    restrictExpand : function(node){
-        var p = node.parentNode;
-        if(p){
-            if(p.expandedChild && p.expandedChild.parentNode == p){
-                p.expandedChild.collapse();
-            }
-            p.expandedChild = node;
-        }
-    },
-
-    // private override
-    setRootNode : function(node){
-        Ext.tree.TreePanel.superclass.setRootNode.call(this, node);
-        if(!this.rootVisible){
-            node.ui = new Ext.tree.RootTreeNodeUI(node);
-        }
-        return node;
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    getLoader : function(){
-        return this.loader;
-    },
-
-
-    expandAll : function(){
-        this.root.expand(true);
-    },
-
-
-    collapseAll : function(){
-        this.root.collapse(true);
-    },
-
-
-    getSelectionModel : function(){
-        if(!this.selModel){
-            this.selModel = new Ext.tree.DefaultSelectionModel();
-        }
-        return this.selModel;
-    },
-
-
-    expandPath : function(path, attr, callback){
-        attr = attr || "id";
-        var keys = path.split(this.pathSeparator);
-        var curNode = this.root;
-        if(curNode.attributes[attr] != keys[1]){ // invalid root
-            if(callback){
-                callback(false, null);
-            }
-            return;
-        }
-        var index = 1;
-        var f = function(){
-            if(++index == keys.length){
-                if(callback){
-                    callback(true, curNode);
-                }
-                return;
-            }
-            var c = curNode.findChild(attr, keys[index]);
-            if(!c){
-                if(callback){
-                    callback(false, curNode);
-                }
-                return;
-            }
-            curNode = c;
-            c.expand(false, false, f);
-        };
-        curNode.expand(false, false, f);
-    },
-
-
-    selectPath : function(path, attr, callback){
-        attr = attr || "id";
-        var keys = path.split(this.pathSeparator);
-        var v = keys.pop();
-        if(keys.length > 0){
-            var f = function(success, node){
-                if(success && node){
-                    var n = node.findChild(attr, v);
-                    if(n){
-                        n.select();
-                        if(callback){
-                            callback(true, n);
-                        }
-                    }
-                }else{
-                    if(callback){
-                        callback(false, n);
-                    }
-                }
-            };
-            this.expandPath(keys.join(this.pathSeparator), attr, f);
-        }else{
-            this.root.select();
-            if(callback){
-                callback(true, this.root);
-            }
-        }
-    },
-
-    getTreeEl : function(){
-        return this.el;
-    },
-
-
-    render : function(){
-        this.innerCt = this.el.createChild({tag:"ul",
-               cls:"x-tree-root-ct " +
-               (this.lines ? "x-tree-lines" : "x-tree-no-lines")});
-
-        if(this.containerScroll){
-            Ext.dd.ScrollManager.register(this.el);
-        }
-        if((this.enableDD || this.enableDrop) && !this.dropZone){
-
-             this.dropZone = new Ext.tree.TreeDropZone(this, this.dropConfig || {
-               ddGroup: this.ddGroup || "TreeDD", appendOnly: this.ddAppendOnly === true
-           });
-        }
-        if((this.enableDD || this.enableDrag) && !this.dragZone){
-
-            this.dragZone = new Ext.tree.TreeDragZone(this, this.dragConfig || {
-               ddGroup: this.ddGroup || "TreeDD",
-               scroll: this.ddScroll
-           });
-        }
-        this.getSelectionModel().init(this);
-        this.root.render();
-        if(!this.rootVisible){
-            this.root.renderChildren();
-        }
-        return this;
-    }
-});
-
-Ext.tree.DefaultSelectionModel = function(){
-   this.selNode = null;
-
-   this.addEvents({
-
-       "selectionchange" : true,
-
-
-       "beforeselect" : true
-   });
-};
-
-Ext.extend(Ext.tree.DefaultSelectionModel, Ext.util.Observable, {
-    init : function(tree){
-        this.tree = tree;
-        tree.getTreeEl().on("keydown", this.onKeyDown, this);
-        tree.on("click", this.onNodeClick, this);
-    },
-
-    onNodeClick : function(node, e){
-        this.select(node);
-    },
-
-
-    select : function(node){
-        var last = this.selNode;
-        if(last != node && this.fireEvent('beforeselect', this, node, last) !== false){
-            if(last){
-                last.ui.onSelectedChange(false);
-            }
-            this.selNode = node;
-            node.ui.onSelectedChange(true);
-            this.fireEvent("selectionchange", this, node, last);
-        }
-        return node;
-    },
-
-
-    unselect : function(node){
-        if(this.selNode == node){
-            this.clearSelections();
-        }
-    },
-
-
-    clearSelections : function(){
-        var n = this.selNode;
-        if(n){
-            n.ui.onSelectedChange(false);
-            this.selNode = null;
-            this.fireEvent("selectionchange", this, null);
-        }
-        return n;
-    },
-
-
-    getSelectedNode : function(){
-        return this.selNode;
-    },
-
-
-    isSelected : function(node){
-        return this.selNode == node;
-    },
-
-
-    selectPrevious : function(){
-        var s = this.selNode || this.lastSelNode;
-        if(!s){
-            return null;
-        }
-        var ps = s.previousSibling;
-        if(ps){
-            if(!ps.isExpanded() || ps.childNodes.length < 1){
-                return this.select(ps);
-            } else{
-                var lc = ps.lastChild;
-                while(lc && lc.isExpanded() && lc.childNodes.length > 0){
-                    lc = lc.lastChild;
-                }
-                return this.select(lc);
-            }
-        } else if(s.parentNode && (this.tree.rootVisible || !s.parentNode.isRoot)){
-            return this.select(s.parentNode);
-        }
-        return null;
-    },
-
-
-    selectNext : function(){
-        var s = this.selNode || this.lastSelNode;
-        if(!s){
-            return null;
-        }
-        if(s.firstChild && s.isExpanded()){
-             return this.select(s.firstChild);
-         }else if(s.nextSibling){
-             return this.select(s.nextSibling);
-         }else if(s.parentNode){
-            var newS = null;
-            s.parentNode.bubble(function(){
-                if(this.nextSibling){
-                    newS = this.getOwnerTree().selModel.select(this.nextSibling);
-                    return false;
-                }
-            });
-            return newS;
-         }
-        return null;
-    },
-
-    onKeyDown : function(e){
-        var s = this.selNode || this.lastSelNode;
-        // undesirable, but required
-        var sm = this;
-        if(!s){
-            return;
-        }
-        var k = e.getKey();
-        switch(k){
-             case e.DOWN:
-                 e.stopEvent();
-                 this.selectNext();
-             break;
-             case e.UP:
-                 e.stopEvent();
-                 this.selectPrevious();
-             break;
-             case e.RIGHT:
-                 e.preventDefault();
-                 if(s.hasChildNodes()){
-                     if(!s.isExpanded()){
-                         s.expand();
-                     }else if(s.firstChild){
-                         this.select(s.firstChild, e);
-                     }
-                 }
-             break;
-             case e.LEFT:
-                 e.preventDefault();
-                 if(s.hasChildNodes() && s.isExpanded()){
-                     s.collapse();
-                 }else if(s.parentNode && (this.tree.rootVisible || s.parentNode != this.tree.getRootNode())){
-                     this.select(s.parentNode, e);
-                 }
-             break;
-        };
-    }
-});
-
-
-Ext.tree.MultiSelectionModel = function(){
-   this.selNodes = [];
-   this.selMap = {};
-   this.addEvents({
-
-       "selectionchange" : true
-   });
-};
-
-Ext.extend(Ext.tree.MultiSelectionModel, Ext.util.Observable, {
-    init : function(tree){
-        this.tree = tree;
-        tree.getTreeEl().on("keydown", this.onKeyDown, this);
-        tree.on("click", this.onNodeClick, this);
-    },
-
-    onNodeClick : function(node, e){
-        this.select(node, e, e.ctrlKey);
-    },
-
-
-    select : function(node, e, keepExisting){
-        if(keepExisting !== true){
-            this.clearSelections(true);
-        }
-        if(this.isSelected(node)){
-            this.lastSelNode = node;
-            return node;
-        }
-        this.selNodes.push(node);
-        this.selMap[node.id] = node;
-        this.lastSelNode = node;
-        node.ui.onSelectedChange(true);
-        this.fireEvent("selectionchange", this, this.selNodes);
-        return node;
-    },
-
-
-    unselect : function(node){
-        if(this.selMap[node.id]){
-            node.ui.onSelectedChange(false);
-            var sn = this.selNodes;
-            var index = -1;
-            if(sn.indexOf){
-                index = sn.indexOf(node);
-            }else{
-                for(var i = 0, len = sn.length; i < len; i++){
-                    if(sn[i] == node){
-                        index = i;
-                        break;
-                    }
-                }
-            }
-            if(index != -1){
-                this.selNodes.splice(index, 1);
-            }
-            delete this.selMap[node.id];
-            this.fireEvent("selectionchange", this, this.selNodes);
-        }
-    },
-
-
-    clearSelections : function(suppressEvent){
-        var sn = this.selNodes;
-        if(sn.length > 0){
-            for(var i = 0, len = sn.length; i < len; i++){
-                sn[i].ui.onSelectedChange(false);
-            }
-            this.selNodes = [];
-            this.selMap = {};
-            if(suppressEvent !== true){
-                this.fireEvent("selectionchange", this, this.selNodes);
-            }
-        }
-    },
-
-
-    isSelected : function(node){
-        return this.selMap[node.id] ? true : false;
-    },
-
-
-    getSelectedNodes : function(){
-        return this.selNodes;
-    },
-
-    onKeyDown : Ext.tree.DefaultSelectionModel.prototype.onKeyDown,
-
-    selectNext : Ext.tree.DefaultSelectionModel.prototype.selectNext,
-
-    selectPrevious : Ext.tree.DefaultSelectionModel.prototype.selectPrevious
-});
-
-Ext.tree.TreeNode = function(attributes){
-    attributes = attributes || {};
-    if(typeof attributes == "string"){
-        attributes = {text: attributes};
-    }
-    this.childrenRendered = false;
-    this.rendered = false;
-    Ext.tree.TreeNode.superclass.constructor.call(this, attributes);
-    this.expanded = attributes.expanded === true;
-    this.isTarget = attributes.isTarget !== false;
-    this.draggable = attributes.draggable !== false && attributes.allowDrag !== false;
-    this.allowChildren = attributes.allowChildren !== false && attributes.allowDrop !== false;
-
-
-    this.text = attributes.text;
-
-    this.disabled = attributes.disabled === true;
-
-    this.addEvents({
-
-        "textchange" : true,
-
-        "beforeexpand" : true,
-
-        "beforecollapse" : true,
-
-        "expand" : true,
-
-        "disabledchange" : true,
-
-        "collapse" : true,
-
-        "beforeclick":true,
-
-        "click":true,
-
-        "dblclick":true,
-
-        "contextmenu":true,
-
-        "beforechildrenrendered":true
-    });
-
-    var uiClass = this.attributes.uiProvider || Ext.tree.TreeNodeUI;
-
-
-    this.ui = new uiClass(this);
-};
-Ext.extend(Ext.tree.TreeNode, Ext.data.Node, {
-    preventHScroll: true,
-
-    isExpanded : function(){
-        return this.expanded;
-    },
-
-
-    getUI : function(){
-        return this.ui;
-    },
-
-    // private override
-    setFirstChild : function(node){
-        var of = this.firstChild;
-        Ext.tree.TreeNode.superclass.setFirstChild.call(this, node);
-        if(this.childrenRendered && of && node != of){
-            of.renderIndent(true, true);
-        }
-        if(this.rendered){
-            this.renderIndent(true, true);
-        }
-    },
-
-    // private override
-    setLastChild : function(node){
-        var ol = this.lastChild;
-        Ext.tree.TreeNode.superclass.setLastChild.call(this, node);
-        if(this.childrenRendered && ol && node != ol){
-            ol.renderIndent(true, true);
-        }
-        if(this.rendered){
-            this.renderIndent(true, true);
-        }
-    },
-
-    // these methods are overridden to provide lazy rendering support
-    // private override
-    appendChild : function(){
-        var node = Ext.tree.TreeNode.superclass.appendChild.apply(this, arguments);
-        if(node && this.childrenRendered){
-            node.render();
-        }
-        this.ui.updateExpandIcon();
-        return node;
-    },
-
-    // private override
-    removeChild : function(node){
-        this.ownerTree.getSelectionModel().unselect(node);
-        Ext.tree.TreeNode.superclass.removeChild.apply(this, arguments);
-        // if it's been rendered remove dom node
-        if(this.childrenRendered){
-            node.ui.remove();
-        }
-        if(this.childNodes.length < 1){
-            this.collapse(false, false);
-        }else{
-            this.ui.updateExpandIcon();
-        }
-        return node;
-    },
-
-    // private override
-    insertBefore : function(node, refNode){
-        var newNode = Ext.tree.TreeNode.superclass.insertBefore.apply(this, arguments);
-        if(newNode && refNode && this.childrenRendered){
-            node.render();
-        }
-        this.ui.updateExpandIcon();
-        return newNode;
-    },
-
-
-    setText : function(text){
-        var oldText = this.text;
-        this.text = text;
-        this.attributes.text = text;
-        if(this.rendered){ // event without subscribing
-            this.ui.onTextChange(this, text, oldText);
-        }
-        this.fireEvent("textchange", this, text, oldText);
-    },
-
-
-    select : function(){
-        this.getOwnerTree().getSelectionModel().select(this);
-    },
-
-
-    unselect : function(){
-        this.getOwnerTree().getSelectionModel().unselect(this);
-    },
-
-
-    isSelected : function(){
-        return this.getOwnerTree().getSelectionModel().isSelected(this);
-    },
-
-
-    expand : function(deep, anim, callback){
-        if(!this.expanded){
-            if(this.fireEvent("beforeexpand", this, deep, anim) === false){
-                return;
-            }
-            if(!this.childrenRendered){
-                this.renderChildren();
-            }
-            this.expanded = true;
-            if(!this.isHiddenRoot() && (this.getOwnerTree().animate && anim !== false) || anim){
-                this.ui.animExpand(function(){
-                    this.fireEvent("expand", this);
-                    if(typeof callback == "function"){
-                        callback(this);
-                    }
-                    if(deep === true){
-                        this.expandChildNodes(true);
-                    }
-                }.createDelegate(this));
-                return;
-            }else{
-                this.ui.expand();
-                this.fireEvent("expand", this);
-                if(typeof callback == "function"){
-                    callback(this);
-                }
-            }
-        }else{
-           if(typeof callback == "function"){
-               callback(this);
-           }
-        }
-        if(deep === true){
-            this.expandChildNodes(true);
-        }
-    },
-
-    isHiddenRoot : function(){
-        return this.isRoot && !this.getOwnerTree().rootVisible;
-    },
-
-
-    collapse : function(deep, anim){
-        if(this.expanded && !this.isHiddenRoot()){
-            if(this.fireEvent("beforecollapse", this, deep, anim) === false){
-                return;
-            }
-            this.expanded = false;
-            if((this.getOwnerTree().animate && anim !== false) || anim){
-                this.ui.animCollapse(function(){
-                    this.fireEvent("collapse", this);
-                    if(deep === true){
-                        this.collapseChildNodes(true);
-                    }
-                }.createDelegate(this));
-                return;
-            }else{
-                this.ui.collapse();
-                this.fireEvent("collapse", this);
-            }
-        }
-        if(deep === true){
-            var cs = this.childNodes;
-            for(var i = 0, len = cs.length; i < len; i++) {
-            	cs[i].collapse(true, false);
-            }
-        }
-    },
-
-    // private
-    delayedExpand : function(delay){
-        if(!this.expandProcId){
-            this.expandProcId = this.expand.defer(delay, this);
-        }
-    },
-
-    // private
-    cancelExpand : function(){
-        if(this.expandProcId){
-            clearTimeout(this.expandProcId);
-        }
-        this.expandProcId = false;
-    },
-
-
-    toggle : function(){
-        if(this.expanded){
-            this.collapse();
-        }else{
-            this.expand();
-        }
-    },
-
-
-    ensureVisible : function(callback){
-        var tree = this.getOwnerTree();
-        tree.expandPath(this.getPath(), false, function(){
-            tree.getTreeEl().scrollChildIntoView(this.ui.anchor);
-            Ext.callback(callback);
-        }.createDelegate(this));
-    },
-
-
-    expandChildNodes : function(deep){
-        var cs = this.childNodes;
-        for(var i = 0, len = cs.length; i < len; i++) {
-        	cs[i].expand(deep);
-        }
-    },
-
-
-    collapseChildNodes : function(deep){
-        var cs = this.childNodes;
-        for(var i = 0, len = cs.length; i < len; i++) {
-        	cs[i].collapse(deep);
-        }
-    },
-
-
-    disable : function(){
-        this.disabled = true;
-        this.unselect();
-        if(this.rendered && this.ui.onDisableChange){ // event without subscribing
-            this.ui.onDisableChange(this, true);
-        }
-        this.fireEvent("disabledchange", this, true);
-    },
-
-
-    enable : function(){
-        this.disabled = false;
-        if(this.rendered && this.ui.onDisableChange){ // event without subscribing
-            this.ui.onDisableChange(this, false);
-        }
-        this.fireEvent("disabledchange", this, false);
-    },
-
-    // private
-    renderChildren : function(suppressEvent){
-        if(suppressEvent !== false){
-            this.fireEvent("beforechildrenrendered", this);
-        }
-        var cs = this.childNodes;
-        for(var i = 0, len = cs.length; i < len; i++){
-            cs[i].render(true);
-        }
-        this.childrenRendered = true;
-    },
-
-    // private
-    sort : function(fn, scope){
-        Ext.tree.TreeNode.superclass.sort.apply(this, arguments);
-        if(this.childrenRendered){
-            var cs = this.childNodes;
-            for(var i = 0, len = cs.length; i < len; i++){
-                cs[i].render(true);
-            }
-        }
-    },
-
-    // private
-    render : function(bulkRender){
-        this.ui.render(bulkRender);
-        if(!this.rendered){
-            this.rendered = true;
-            if(this.expanded){
-                this.expanded = false;
-                this.expand(false, false);
-            }
-        }
-    },
-
-    // private
-    renderIndent : function(deep, refresh){
-        if(refresh){
-            this.ui.childIndent = null;
-        }
-        this.ui.renderIndent();
-        if(deep === true && this.childrenRendered){
-            var cs = this.childNodes;
-            for(var i = 0, len = cs.length; i < len; i++){
-                cs[i].renderIndent(true, refresh);
-            }
-        }
-    }
-});
-
- Ext.tree.AsyncTreeNode = function(config){
-    this.loaded = false;
-    this.loading = false;
-    Ext.tree.AsyncTreeNode.superclass.constructor.apply(this, arguments);
-
-    this.addEvents({'beforeload':true, 'load': true});
-
-
-};
-Ext.extend(Ext.tree.AsyncTreeNode, Ext.tree.TreeNode, {
-    expand : function(deep, anim, callback){
-        if(this.loading){ // if an async load is already running, waiting til it's done
-            var timer;
-            var f = function(){
-                if(!this.loading){ // done loading
-                    clearInterval(timer);
-                    this.expand(deep, anim, callback);
-                }
-            }.createDelegate(this);
-            timer = setInterval(f, 200);
-            return;
-        }
-        if(!this.loaded){
-            if(this.fireEvent("beforeload", this) === false){
-                return;
-            }
-            this.loading = true;
-            this.ui.beforeLoad(this);
-            var loader = this.loader || this.attributes.loader || this.getOwnerTree().getLoader();
-            if(loader){
-                loader.load(this, this.loadComplete.createDelegate(this, [deep, anim, callback]));
-                return;
-            }
-        }
-        Ext.tree.AsyncTreeNode.superclass.expand.call(this, deep, anim, callback);
-    },
-
-
-    isLoading : function(){
-        return this.loading;
-    },
-
-    loadComplete : function(deep, anim, callback){
-        this.loading = false;
-        this.loaded = true;
-        this.ui.afterLoad(this);
-        this.fireEvent("load", this);
-        this.expand(deep, anim, callback);
-    },
-
-
-    isLoaded : function(){
-        return this.loaded;
-    },
-
-    hasChildNodes : function(){
-        if(!this.isLeaf() && !this.loaded){
-            return true;
-        }else{
-            return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this);
-        }
-    },
-
-
-    reload : function(callback){
-        this.collapse(false, false);
-        while(this.firstChild){
-            this.removeChild(this.firstChild);
-        }
-        this.childrenRendered = false;
-        this.loaded = false;
-        if(this.isHiddenRoot()){
-            this.expanded = false;
-        }
-        this.expand(false, false, callback);
-    }
-});
-
-Ext.tree.TreeNodeUI = function(node){
-    this.node = node;
-    this.rendered = false;
-    this.animating = false;
-    this.emptyIcon = Ext.BLANK_IMAGE_URL;
-};
-
-Ext.tree.TreeNodeUI.prototype = {
-    removeChild : function(node){
-        if(this.rendered){
-            this.ctNode.removeChild(node.ui.getEl());
-        }
-    },
-
-    beforeLoad : function(){
-         this.addClass("x-tree-node-loading");
-    },
-
-    afterLoad : function(){
-         this.removeClass("x-tree-node-loading");
-    },
-
-    onTextChange : function(node, text, oldText){
-        if(this.rendered){
-            this.textNode.innerHTML = text;
-        }
-    },
-
-    onDisableChange : function(node, state){
-        this.disabled = state;
-        if(state){
-            this.addClass("x-tree-node-disabled");
-        }else{
-            this.removeClass("x-tree-node-disabled");
-        }
-    },
-
-    onSelectedChange : function(state){
-        if(state){
-            this.focus();
-            this.addClass("x-tree-selected");
-        }else{
-            //this.blur();
-            this.removeClass("x-tree-selected");
-        }
-    },
-
-    onMove : function(tree, node, oldParent, newParent, index, refNode){
-        this.childIndent = null;
-        if(this.rendered){
-            var targetNode = newParent.ui.getContainer();
-            if(!targetNode){//target not rendered
-                this.holder = document.createElement("div");
-                this.holder.appendChild(this.wrap);
-                return;
-            }
-            var insertBefore = refNode ? refNode.ui.getEl() : null;
-            if(insertBefore){
-                targetNode.insertBefore(this.wrap, insertBefore);
-            }else{
-                targetNode.appendChild(this.wrap);
-            }
-            this.node.renderIndent(true);
-        }
-    },
-
-    addClass : function(cls){
-        if(this.elNode){
-            Ext.fly(this.elNode).addClass(cls);
-        }
-    },
-
-    removeClass : function(cls){
-        if(this.elNode){
-            Ext.fly(this.elNode).removeClass(cls);
-        }
-    },
-
-    remove : function(){
-        if(this.rendered){
-            this.holder = document.createElement("div");
-            this.holder.appendChild(this.wrap);
-        }
-    },
-
-    fireEvent : function(){
-        return this.node.fireEvent.apply(this.node, arguments);
-    },
-
-    initEvents : function(){
-        this.node.on("move", this.onMove, this);
-        var E = Ext.EventManager;
-        var a = this.anchor;
-
-        var el = Ext.fly(a);
-
-        if(Ext.isOpera){ // opera render bug ignores the CSS
-            el.setStyle("text-decoration", "none");
-        }
-
-        el.on("click", this.onClick, this);
-        el.on("dblclick", this.onDblClick, this);
-        el.on("contextmenu", this.onContextMenu, this);
-
-        var icon = Ext.fly(this.iconNode);
-        icon.on("click", this.onClick, this);
-        icon.on("dblclick", this.onDblClick, this);
-        icon.on("contextmenu", this.onContextMenu, this);
-        E.on(this.ecNode, "click", this.ecClick, this, true);
-
-        if(this.node.disabled){
-            this.addClass("x-tree-node-disabled");
-        }
-        if(this.node.hidden){
-            this.addClass("x-tree-node-disabled");
-        }
-        var ot = this.node.getOwnerTree();
-        var dd = ot.enableDD || ot.enableDrag || ot.enableDrop;
-        if(dd && (!this.node.isRoot || ot.rootVisible)){
-            Ext.dd.Registry.register(this.elNode, {
-                node: this.node,
-                handles: [this.iconNode, this.textNode],
-                isHandle: false
-            });
-        }
-    },
-
-    hide : function(){
-        if(this.rendered){
-            this.wrap.style.display = "none";
-        }
-    },
-
-    show : function(){
-        if(this.rendered){
-            this.wrap.style.display = "";
-        }
-    },
-
-    onContextMenu : function(e){
-        e.preventDefault();
-        this.focus();
-        this.fireEvent("contextmenu", this.node, e);
-    },
-
-    onClick : function(e){
-        if(this.dropping){
-            return;
-        }
-        if(this.fireEvent("beforeclick", this.node, e) !== false){
-            if(!this.disabled && this.node.attributes.href){
-                this.fireEvent("click", this.node, e);
-                return;
-            }
-            e.preventDefault();
-            if(this.disabled){
-                return;
-            }
-
-            if(this.node.attributes.singleClickExpand && !this.animating && this.node.hasChildNodes()){
-                this.node.toggle();
-            }
-
-            this.fireEvent("click", this.node, e);
-        }else{
-            e.stopEvent();
-        }
-    },
-
-    onDblClick : function(e){
-        e.preventDefault();
-        if(this.disabled){
-            return;
-        }
-        if(!this.animating && this.node.hasChildNodes()){
-            this.node.toggle();
-        }
-        this.fireEvent("dblclick", this.node, e);
-    },
-
-    ecClick : function(e){
-        if(!this.animating && this.node.hasChildNodes()){
-            this.node.toggle();
-        }
-    },
-
-    startDrop : function(){
-        this.dropping = true;
-    },
-
-    // delayed drop so the click event doesn't get fired on a drop
-    endDrop : function(){
-       setTimeout(function(){
-           this.dropping = false;
-       }.createDelegate(this), 50);
-    },
-
-    expand : function(){
-        this.updateExpandIcon();
-        this.ctNode.style.display = "";
-    },
-
-    focus : function(){
-        if(!this.node.preventHScroll){
-            try{this.anchor.focus();
-            }catch(e){}
-        }else if(!Ext.isIE){
-            try{
-                var noscroll = this.node.getOwnerTree().getTreeEl().dom;
-                var l = noscroll.scrollLeft;
-                this.anchor.focus();
-                noscroll.scrollLeft = l;
-            }catch(e){}
-        }
-    },
-
-    blur : function(){
-        try{
-            this.anchor.blur();
-        }catch(e){}
-    },
-
-    animExpand : function(callback){
-        var ct = Ext.get(this.ctNode);
-        ct.stopFx();
-        if(!this.node.hasChildNodes()){
-            this.updateExpandIcon();
-            this.ctNode.style.display = "";
-            Ext.callback(callback);
-            return;
-        }
-        this.animating = true;
-        this.updateExpandIcon();
-
-        ct.slideIn('t', {
-           callback : function(){
-               this.animating = false;
-               Ext.callback(callback);
-            },
-            scope: this,
-            duration: this.node.ownerTree.duration || .25
-        });
-    },
-
-    highlight : function(){
-        var tree = this.node.getOwnerTree();
-        Ext.fly(this.wrap).highlight(
-            tree.hlColor || "C3DAF9",
-            {endColor: tree.hlBaseColor}
-        );
-    },
-
-    collapse : function(){
-        this.updateExpandIcon();
-        this.ctNode.style.display = "none";
-    },
-
-    animCollapse : function(callback){
-        var ct = Ext.get(this.ctNode);
-        ct.enableDisplayMode('block');
-        ct.stopFx();
-
-        this.animating = true;
-        this.updateExpandIcon();
-
-        ct.slideOut('t', {
-            callback : function(){
-               this.animating = false;
-               Ext.callback(callback);
-            },
-            scope: this,
-            duration: this.node.ownerTree.duration || .25
-        });
-    },
-
-    getContainer : function(){
-        return this.ctNode;
-    },
-
-    getEl : function(){
-        return this.wrap;
-    },
-
-    appendDDGhost : function(ghostNode){
-        ghostNode.appendChild(this.elNode.cloneNode(true));
-    },
-
-    getDDRepairXY : function(){
-        return Ext.lib.Dom.getXY(this.iconNode);
-    },
-
-    onRender : function(){
-        this.render();
-    },
-
-    render : function(bulkRender){
-        var n = this.node, a = n.attributes;
-        var targetNode = n.parentNode ?
-              n.parentNode.ui.getContainer() : n.ownerTree.innerCt.dom;
-        if(!this.rendered){
-            this.rendered = true;
-
-            this.renderElements(n, a, targetNode, bulkRender);
-
-            if(a.qtip){
-               if(this.textNode.setAttributeNS){
-                   this.textNode.setAttributeNS("ext", "qtip", a.qtip);
-                   if(a.qtipTitle){
-                       this.textNode.setAttributeNS("ext", "qtitle", a.qtipTitle);
-                   }
-               }else{
-                   this.textNode.setAttribute("ext:qtip", a.qtip);
-                   if(a.qtipTitle){
-                       this.textNode.setAttribute("ext:qtitle", a.qtipTitle);
-                   }
-               }
-            }else if(a.qtipCfg){
-                a.qtipCfg.target = Ext.id(this.textNode);
-                Ext.QuickTips.register(a.qtipCfg);
-            }
-            this.initEvents();
-            if(!this.node.expanded){
-                this.updateExpandIcon();
-            }
-        }else{
-            if(bulkRender === true) {
-                targetNode.appendChild(this.wrap);
-            }
-        }
-    },
-
-    renderElements : function(n, a, targetNode, bulkRender){
-        // add some indent caching, this helps performance when rendering a large tree
-        this.indentMarkup = n.parentNode ? n.parentNode.ui.getChildIndent() : '';
-
-        var buf = ['<li class="x-tree-node"><div class="x-tree-node-el ', a.cls,'">',
-            '<span class="x-tree-node-indent">',this.indentMarkup,"</span>",
-            '<img src="', this.emptyIcon, '" class="x-tree-ec-icon">',
-            '<img src="', a.icon || this.emptyIcon, '" class="x-tree-node-icon',(a.icon ? " x-tree-node-inline-icon" : ""),(a.iconCls ? " "+a.iconCls : ""),'" unselectable="on">',
-            '<a hidefocus="on" href="',a.href ? a.href : "#",'" tabIndex="1" ',
-             a.hrefTarget ? ' target="'+a.hrefTarget+'"' : "", '><span unselectable="on">',n.text,"</span></a></div>",
-            '<ul class="x-tree-node-ct" style="display:none;"></ul>',
-            "</li>"];
-
-        if(bulkRender !== true && n.nextSibling && n.nextSibling.ui.getEl()){
-            this.wrap = Ext.DomHelper.insertHtml("beforeBegin",
-                                n.nextSibling.ui.getEl(), buf.join(""));
-        }else{
-            this.wrap = Ext.DomHelper.insertHtml("beforeEnd", targetNode, buf.join(""));
-        }
-
-        this.elNode = this.wrap.childNodes[0];
-        this.ctNode = this.wrap.childNodes[1];
-        var cs = this.elNode.childNodes;
-        this.indentNode = cs[0];
-        this.ecNode = cs[1];
-        this.iconNode = cs[2];
-        this.anchor = cs[3];
-        this.textNode = cs[3].firstChild;
-    },
-
-    getAnchor : function(){
-        return this.anchor;
-    },
-
-    getTextEl : function(){
-        return this.textNode;
-    },
-
-    getIconEl : function(){
-        return this.iconNode;
-    },
-
-    updateExpandIcon : function(){
-        if(this.rendered){
-            var n = this.node, c1, c2;
-            //console.log(n.id)
-            var cls = n.isLast() ? "x-tree-elbow-end" : "x-tree-elbow";
-            var hasChild = n.hasChildNodes();
-            if(hasChild){
-                if(n.expanded){
-                    cls += "-minus";
-                    c1 = "x-tree-node-collapsed";
-                    c2 = "x-tree-node-expanded";
-                }else{
-                    cls += "-plus";
-                    c1 = "x-tree-node-expanded";
-                    c2 = "x-tree-node-collapsed";
-                }
-                if(this.wasLeaf){
-                    this.removeClass("x-tree-node-leaf");
-                    this.wasLeaf = false;
-                }
-                if(this.c1 != c1 || this.c2 != c2){
-                    Ext.fly(this.elNode).replaceClass(c1, c2);
-                    this.c1 = c1; this.c2 = c2;
-                }
-            }else{
-                if(!this.wasLeaf){
-                    Ext.fly(this.elNode).replaceClass("x-tree-node-expanded", "x-tree-node-leaf");
-                    delete this.c1;
-                    delete this.c2;
-                    this.wasLeaf = true;
-                }
-            }
-            var ecc = "x-tree-ec-icon "+cls;
-            if(this.ecc != ecc){
-                this.ecNode.className = ecc;
-                this.ecc = ecc;
-            }
-        }
-    },
-
-    getChildIndent : function(){
-        if(!this.childIndent){
-            var buf = [];
-            var p = this.node;
-            while(p){
-                if(!p.isRoot || (p.isRoot && p.ownerTree.rootVisible)){
-                    if(!p.isLast()) {
-                        buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-elbow-line">');
-                    } else {
-                        buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-icon">');
-                    }
-                }
-                p = p.parentNode;
-            }
-            this.childIndent = buf.join("");
-        }
-        return this.childIndent;
-    },
-
-    renderIndent : function(){
-        if(this.rendered){
-            var indent = "";
-            var p = this.node.parentNode;
-            if(p){
-                indent = p.ui.getChildIndent();
-            }
-            if(this.indentMarkup != indent){ // don't rerender if not required
-                this.indentNode.innerHTML = indent;
-                this.indentMarkup = indent;
-            }
-            this.updateExpandIcon();
-        }
-    }
-};
-
-Ext.tree.RootTreeNodeUI = function(){
-    Ext.tree.RootTreeNodeUI.superclass.constructor.apply(this, arguments);
-};
-Ext.extend(Ext.tree.RootTreeNodeUI, Ext.tree.TreeNodeUI, {
-    render : function(){
-        if(!this.rendered){
-            var targetNode = this.node.ownerTree.innerCt.dom;
-            this.node.expanded = true;
-            targetNode.innerHTML = '<div class="x-tree-root-node"></div>';
-            this.wrap = this.ctNode = targetNode.firstChild;
-        }
-    },
-    collapse : function(){
-    },
-    expand : function(){
-    }
-});
-
-Ext.tree.TreeLoader = function(config){
-    this.baseParams = {};
-    this.requestMethod = "POST";
-    Ext.apply(this, config);
-
-    this.addEvents({
-
-        "beforeload" : true,
-
-        "load" : true,
-
-        "loadexception" : true
-    });
-
-    Ext.tree.TreeLoader.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.tree.TreeLoader, Ext.util.Observable, {
-
-
-
-
-    uiProviders : {},
-
-
-    clearOnLoad : true,
-
-
-    load : function(node, callback){
-        if(this.clearOnLoad){
-            while(node.firstChild){
-                node.removeChild(node.firstChild);
-            }
-        }
-        if(node.attributes.children){ // preloaded json children
-            var cs = node.attributes.children;
-            for(var i = 0, len = cs.length; i < len; i++){
-                node.appendChild(this.createNode(cs[i]));
-            }
-            if(typeof callback == "function"){
-                callback();
-            }
-        }else if(this.dataUrl){
-            this.requestData(node, callback);
-        }
-    },
-
-    getParams: function(node){
-        var buf = [], bp = this.baseParams;
-        for(var key in bp){
-            if(typeof bp[key] != "function"){
-                buf.push(encodeURIComponent(key), "=", encodeURIComponent(bp[key]), "&");
-            }
-        }
-        buf.push("node=", encodeURIComponent(node.id));
-        return buf.join("");
-    },
-
-    requestData : function(node, callback){
-        if(this.fireEvent("beforeload", this, node, callback) !== false){
-            var params = this.getParams(node);
-            var cb = {
-                success: this.handleResponse,
-                failure: this.handleFailure,
-                scope: this,
-        		argument: {callback: callback, node: node}
-            };
-            this.transId = Ext.lib.Ajax.request(this.requestMethod, this.dataUrl, cb, params);
-        }else{
-            // if the load is cancelled, make sure we notify
-            // the node that we are done
-            if(typeof callback == "function"){
-                callback();
-            }
-        }
-    },
-
-    isLoading : function(){
-        return this.transId ? true : false;
-    },
-
-    abort : function(){
-        if(this.isLoading()){
-            Ext.lib.Ajax.abort(this.transId);
-        }
-    },
-
-
-    createNode : function(attr){
-        if(this.applyLoader !== false){
-            attr.loader = this;
-        }
-        if(typeof attr.uiProvider == 'string'){
-           attr.uiProvider = this.uiProviders[attr.uiProvider] || eval(attr.uiProvider);
-        }
-        return(attr.leaf ?
-                        new Ext.tree.TreeNode(attr) :
-                        new Ext.tree.AsyncTreeNode(attr));
-    },
-
-    processResponse : function(response, node, callback){
-        var json = response.responseText;
-        try {
-            var o = eval("("+json+")");
-	        for(var i = 0, len = o.length; i < len; i++){
-                var n = this.createNode(o[i]);
-                if(n){
-                    node.appendChild(n);
-                }
-	        }
-	        if(typeof callback == "function"){
-                callback(this, node);
-            }
-        }catch(e){
-            this.handleFailure(response);
-        }
-    },
-
-    handleResponse : function(response){
-        this.transId = false;
-        var a = response.argument;
-        this.processResponse(response, a.node, a.callback);
-        this.fireEvent("load", this, a.node, response);
-    },
-
-    handleFailure : function(response){
-        this.transId = false;
-        var a = response.argument;
-        this.fireEvent("loadexception", this, a.node, response);
-        if(typeof a.callback == "function"){
-            a.callback(this, a.node);
-        }
-    }
-});
-
-Ext.tree.TreeFilter = function(tree, config){
-    this.tree = tree;
-    this.filtered = {};
-    Ext.apply(this, config, {
-        clearBlank:false,
-        reverse:false,
-        autoClear:false,
-        remove:false
-    });
-};
-
-Ext.tree.TreeFilter.prototype = {
-
-    filter : function(value, attr, startNode){
-        attr = attr || "text";
-        var f;
-        if(typeof value == "string"){
-            var vlen = value.length;
-            // auto clear empty filter
-            if(vlen == 0 && this.clearBlank){
-                this.clearFilter();
-                return;
-            }
-            value = value.toLowerCase();
-            f = function(n){
-                return n.attributes[attr].substr(0, vlen).toLowerCase() == value;
-            };
-        }else if(value.exec){ // regex?
-            f = function(n){
-                return value.test(n.attributes[attr]);
-            };
-        }else{
-            throw 'Illegal filter type, must be string or regex';
-        }
-        this.filterBy(f, null, startNode);
-	},
-
-
-    filterBy : function(fn, scope, startNode){
-        startNode = startNode || this.tree.root;
-        if(this.autoClear){
-            this.clearFilter();
-        }
-        var af = this.filtered, rv = this.reverse;
-        var f = function(n){
-            if(n == startNode){
-                return true;
-            }
-            if(af[n.id]){
-                return false;
-            }
-            var m = fn.call(scope || n, n);
-            if(!m || rv){
-                af[n.id] = n;
-                n.ui.hide();
-                return false;
-            }
-            return true;
-        };
-        startNode.cascade(f);
-        if(this.remove){
-           for(var id in af){
-               if(typeof id != "function"){
-                   var n = af[id];
-                   if(n && n.parentNode){
-                       n.parentNode.removeChild(n);
-                   }
-               }
-           }
-        }
-    },
-
-
-    clear : function(){
-        var t = this.tree;
-        var af = this.filtered;
-        for(var id in af){
-            if(typeof id != "function"){
-                var n = af[id];
-                if(n){
-                    n.ui.show();
-                }
-            }
-        }
-        this.filtered = {};
-    }
-};
-
-
-Ext.tree.TreeSorter = function(tree, config){
-    Ext.apply(this, config);
-    tree.on("beforechildrenrendered", this.doSort, this);
-    tree.on("append", this.updateSort, this);
-    tree.on("insert", this.updateSort, this);
-
-    var dsc = this.dir && this.dir.toLowerCase() == "desc";
-    var p = this.property || "text";
-    var sortType = this.sortType;
-    var fs = this.folderSort;
-    var cs = this.caseSensitive === true;
-    var leafAttr = this.leafAttr || 'leaf';
-
-    this.sortFn = function(n1, n2){
-        if(fs){
-            if(n1.attributes[leafAttr] && !n2.attributes[leafAttr]){
-                return 1;
-            }
-            if(!n1.attributes[leafAttr] && n2.attributes[leafAttr]){
-                return -1;
-            }
-        }
-    	var v1 = sortType ? sortType(n1) : (cs ? n1[p] : n1[p].toUpperCase());
-    	var v2 = sortType ? sortType(n2) : (cs ? n2[p] : n2[p].toUpperCase());
-    	if(v1 < v2){
-			return dsc ? +1 : -1;
-		}else if(v1 > v2){
-			return dsc ? -1 : +1;
-        }else{
-	    	return 0;
-        }
-    };
-};
-
-Ext.tree.TreeSorter.prototype = {
-    doSort : function(node){
-        node.sort(this.sortFn);
-    },
-
-    compareNodes : function(n1, n2){
-
-        return (n1.text.toUpperCase() > n2.text.toUpperCase() ? 1 : -1);
-    },
-
-    updateSort : function(tree, node){
-        if(node.childrenRendered){
-            this.doSort.defer(1, this, [node]);
-        }
-    }
-};
-if(Ext.dd.DropZone){
-
-Ext.tree.TreeDropZone = function(tree, config){
-    this.allowParentInsert = false;
-    this.allowContainerDrop = false;
-    this.appendOnly = false;
-    Ext.tree.TreeDropZone.superclass.constructor.call(this, tree.innerCt, config);
-    this.tree = tree;
-    this.lastInsertClass = "x-tree-no-status";
-    this.dragOverData = {};
-};
-
-Ext.extend(Ext.tree.TreeDropZone, Ext.dd.DropZone, {
-    ddGroup : "TreeDD",
-
-    expandDelay : 1000,
-
-    expandNode : function(node){
-        if(node.hasChildNodes() && !node.isExpanded()){
-            node.expand(false, null, this.triggerCacheRefresh.createDelegate(this));
-        }
-    },
-
-    queueExpand : function(node){
-        this.expandProcId = this.expandNode.defer(this.expandDelay, this, [node]);
-    },
-
-    cancelExpand : function(){
-        if(this.expandProcId){
-            clearTimeout(this.expandProcId);
-            this.expandProcId = false;
-        }
-    },
-
-    isValidDropPoint : function(n, pt, dd, e, data){
-        if(!n || !data){ return false; }
-        var targetNode = n.node;
-        var dropNode = data.node;
-        // default drop rules
-        if(!(targetNode && targetNode.isTarget && pt)){
-            return false;
-        }
-        if(pt == "append" && targetNode.allowChildren === false){
-            return false;
-        }
-        if((pt == "above" || pt == "below") && (targetNode.parentNode && targetNode.parentNode.allowChildren === false)){
-            return false;
-        }
-        if(dropNode && (targetNode == dropNode || dropNode.contains(targetNode))){
-            return false;
-        }
-        // reuse the object
-        var overEvent = this.dragOverData;
-        overEvent.tree = this.tree;
-        overEvent.target = targetNode;
-        overEvent.data = data;
-        overEvent.point = pt;
-        overEvent.source = dd;
-        overEvent.rawEvent = e;
-        overEvent.dropNode = dropNode;
-        overEvent.cancel = false;
-        var result = this.tree.fireEvent("nodedragover", overEvent);
-        return overEvent.cancel === false && result !== false;
-    },
-
-    getDropPoint : function(e, n, dd){
-        var tn = n.node;
-        if(tn.isRoot){
-            return tn.allowChildren !== false ? "append" : false; // always append for root
-        }
-        var dragEl = n.ddel;
-        var t = Ext.lib.Dom.getY(dragEl), b = t + dragEl.offsetHeight;
-        var y = Ext.lib.Event.getPageY(e);
-        var noAppend = tn.allowChildren === false || tn.isLeaf();
-        if(this.appendOnly || tn.parentNode.allowChildren === false){
-            return noAppend ? false : "append";
-        }
-        var noBelow = false;
-        if(!this.allowParentInsert){
-            noBelow = tn.hasChildNodes() && tn.isExpanded();
-        }
-        var q = (b - t) / (noAppend ? 2 : 3);
-        if(y >= t && y < (t + q)){
-            return "above";
-        }else if(!noBelow && (noAppend || y >= b-q && y <= b)){
-            return "below";
-        }else{
-            return "append";
-        }
-    },
-
-    onNodeEnter : function(n, dd, e, data){
-        this.cancelExpand();
-    },
-
-    onNodeOver : function(n, dd, e, data){
-        var pt = this.getDropPoint(e, n, dd);
-        var node = n.node;
-
-        // auto node expand check
-        if(!this.expandProcId && pt == "append" && node.hasChildNodes() && !n.node.isExpanded()){
-            this.queueExpand(node);
-        }else if(pt != "append"){
-            this.cancelExpand();
-        }
-
-        // set the insert point style on the target node
-        var returnCls = this.dropNotAllowed;
-        if(this.isValidDropPoint(n, pt, dd, e, data)){
-           if(pt){
-               var el = n.ddel;
-               var cls;
-               if(pt == "above"){
-                   returnCls = n.node.isFirst() ? "x-tree-drop-ok-above" : "x-tree-drop-ok-between";
-                   cls = "x-tree-drag-insert-above";
-               }else if(pt == "below"){
-                   returnCls = n.node.isLast() ? "x-tree-drop-ok-below" : "x-tree-drop-ok-between";
-                   cls = "x-tree-drag-insert-below";
-               }else{
-                   returnCls = "x-tree-drop-ok-append";
-                   cls = "x-tree-drag-append";
-               }
-               if(this.lastInsertClass != cls){
-                   Ext.fly(el).replaceClass(this.lastInsertClass, cls);
-                   this.lastInsertClass = cls;
-               }
-           }
-       }
-       return returnCls;
-    },
-
-    onNodeOut : function(n, dd, e, data){
-        this.cancelExpand();
-        this.removeDropIndicators(n);
-    },
-
-    onNodeDrop : function(n, dd, e, data){
-        var point = this.getDropPoint(e, n, dd);
-        var targetNode = n.node;
-        targetNode.ui.startDrop();
-        if(!this.isValidDropPoint(n, point, dd, e, data)){
-            targetNode.ui.endDrop();
-            return false;
-        }
-        // first try to find the drop node
-        var dropNode = data.node || (dd.getTreeNode ? dd.getTreeNode(data, targetNode, point, e) : null);
-        var dropEvent = {
-            tree : this.tree,
-            target: targetNode,
-            data: data,
-            point: point,
-            source: dd,
-            rawEvent: e,
-            dropNode: dropNode,
-            cancel: !dropNode
-        };
-        var retval = this.tree.fireEvent("beforenodedrop", dropEvent);
-        if(retval === false || dropEvent.cancel === true || !dropEvent.dropNode){
-            targetNode.ui.endDrop();
-            return false;
-        }
-        // allow target changing
-        targetNode = dropEvent.target;
-        if(point == "append" && !targetNode.isExpanded()){
-            targetNode.expand(false, null, function(){
-                this.completeDrop(dropEvent);
-            }.createDelegate(this));
-        }else{
-            this.completeDrop(dropEvent);
-        }
-        return true;
-    },
-
-    completeDrop : function(de){
-        var ns = de.dropNode, p = de.point, t = de.target;
-        if(!(ns instanceof Array)){
-            ns = [ns];
-        }
-        var n;
-        for(var i = 0, len = ns.length; i < len; i++){
-            n = ns[i];
-            if(p == "above"){
-                t.parentNode.insertBefore(n, t);
-            }else if(p == "below"){
-                t.parentNode.insertBefore(n, t.nextSibling);
-            }else{
-                t.appendChild(n);
-            }
-        }
-        n.ui.focus();
-        if(this.tree.hlDrop){
-            n.ui.highlight();
-        }
-        t.ui.endDrop();
-        this.tree.fireEvent("nodedrop", de);
-    },
-
-    afterNodeMoved : function(dd, data, e, targetNode, dropNode){
-        if(this.tree.hlDrop){
-            dropNode.ui.focus();
-            dropNode.ui.highlight();
-        }
-        this.tree.fireEvent("nodedrop", this.tree, targetNode, data, dd, e);
-    },
-
-    getTree : function(){
-        return this.tree;
-    },
-
-    removeDropIndicators : function(n){
-        if(n && n.ddel){
-            var el = n.ddel;
-            Ext.fly(el).removeClass([
-                    "x-tree-drag-insert-above",
-                    "x-tree-drag-insert-below",
-                    "x-tree-drag-append"]);
-            this.lastInsertClass = "_noclass";
-        }
-    },
-
-    beforeDragDrop : function(target, e, id){
-        this.cancelExpand();
-        return true;
-    },
-
-    afterRepair : function(data){
-        if(data && Ext.enableFx){
-            data.node.ui.highlight();
-        }
-        this.hideProxy();
-    }
-});
-
-}
-if(Ext.dd.DragZone){
-Ext.tree.TreeDragZone = function(tree, config){
-    Ext.tree.TreeDragZone.superclass.constructor.call(this, tree.getTreeEl(), config);
-    this.tree = tree;
-};
-
-Ext.extend(Ext.tree.TreeDragZone, Ext.dd.DragZone, {
-    ddGroup : "TreeDD",
-
-    onBeforeDrag : function(data, e){
-        var n = data.node;
-        return n && n.draggable && !n.disabled;
-    },
-
-    onInitDrag : function(e){
-        var data = this.dragData;
-        this.tree.getSelectionModel().select(data.node);
-        this.proxy.update("");
-        data.node.ui.appendDDGhost(this.proxy.ghost.dom);
-        this.tree.fireEvent("startdrag", this.tree, data.node, e);
-    },
-
-    getRepairXY : function(e, data){
-        return data.node.ui.getDDRepairXY();
-    },
-
-    onEndDrag : function(data, e){
-        this.tree.fireEvent("enddrag", this.tree, data.node, e);
-    },
-
-    onValidDrop : function(dd, e, id){
-        this.tree.fireEvent("dragdrop", this.tree, this.dragData.node, dd, e);
-        this.hideProxy();
-    },
-
-    beforeInvalidDrop : function(e, id){
-        // this scrolls the original position back into view
-        var sm = this.tree.getSelectionModel();
-        sm.clearSelections();
-        sm.select(this.dragData.node);
-    }
-});
-}
-
-Ext.tree.TreeEditor = function(tree, config){
-    config = config || {};
-    var field = config.events ? config : new Ext.form.TextField(config);
-    Ext.tree.TreeEditor.superclass.constructor.call(this, field);
-
-    this.tree = tree;
-
-    tree.on('beforeclick', this.beforeNodeClick, this);
-    tree.getTreeEl().on('mousedown', this.hide, this);
-    this.on('complete', this.updateNode, this);
-    this.on('beforestartedit', this.fitToTree, this);
-    this.on('startedit', this.bindScroll, this, {delay:10});
-    this.on('specialkey', this.onSpecialKey, this);
-};
-
-Ext.extend(Ext.tree.TreeEditor, Ext.Editor, {
-
-    alignment: "l-l",
-    // inherit
-    autoSize: false,
-
-    hideEl : false,
-
-    cls: "x-small-editor x-tree-editor",
-
-    shim:false,
-    // inherit
-    shadow:"frame",
-
-    maxWidth: 250,
-
-    // private
-    fitToTree : function(ed, el){
-        var td = this.tree.getTreeEl().dom, nd = el.dom;
-        if(td.scrollLeft >  nd.offsetLeft){ // ensure the node left point is visible
-            td.scrollLeft = nd.offsetLeft;
-        }
-        var w = Math.min(
-                this.maxWidth,
-                (td.clientWidth > 20 ? td.clientWidth : td.offsetWidth) - Math.max(0, nd.offsetLeft-td.scrollLeft) - 5);
-        this.setSize(w, '');
-    },
-
-    // private
-    triggerEdit : function(node){
-        this.completeEdit();
-        this.editNode = node;
-        this.startEdit(node.ui.textNode, node.text);
-    },
-
-    // private
-    bindScroll : function(){
-        this.tree.getTreeEl().on('scroll', this.cancelEdit, this);
-    },
-
-    // private
-    beforeNodeClick : function(node){
-        if(this.tree.getSelectionModel().isSelected(node)){
-            this.triggerEdit(node);
-            return false;
-        }
-    },
-
-    // private
-    updateNode : function(ed, value){
-        this.tree.getTreeEl().un('scroll', this.cancelEdit, this);
-        this.editNode.setText(value);
-    },
-
-    // private
-    onSpecialKey : function(field, e){
-        var k = e.getKey();
-        if(k == e.ESC){
-            e.stopEvent();
-            this.cancelEdit();
-        }else if(k == e.ENTER && !e.hasModifier()){
-            e.stopEvent();
-            this.completeEdit();
-        }
-    }
-});
-
-Ext.menu.Menu = function(config){
-    Ext.apply(this, config);
-    this.id = this.id || Ext.id();
-    this.addEvents({
-
-        beforeshow : true,
-
-        beforehide : true,
-
-        show : true,
-
-        hide : true,
-
-        click : true,
-
-        mouseover : true,
-
-        mouseout : true,
-
-        itemclick: true
-    });
-    Ext.menu.MenuMgr.register(this);
-    var mis = this.items;
-    this.items = new Ext.util.MixedCollection();
-    if(mis){
-        this.add.apply(this, mis);
-    }
-};
-
-Ext.extend(Ext.menu.Menu, Ext.util.Observable, {
-
-    minWidth : 120,
-
-    shadow : "sides",
-
-    subMenuAlign : "tl-tr?",
-
-    defaultAlign : "tl-bl?",
-
-    allowOtherMenus : false,
-
-    hidden:true,
-
-    // private
-    render : function(){
-        if(this.el){
-            return;
-        }
-        var el = this.el = new Ext.Layer({
-            cls: "x-menu",
-            shadow:this.shadow,
-            constrain: false,
-            parentEl: this.parentEl || document.body,
-            zindex:15000
-        });
-
-        this.keyNav = new Ext.menu.MenuNav(this);
-
-        if(this.plain){
-            el.addClass("x-menu-plain");
-        }
-        if(this.cls){
-            el.addClass(this.cls);
-        }
-        // generic focus element
-        this.focusEl = el.createChild({
-            tag: "a", cls: "x-menu-focus", href: "#", onclick: "return false;", tabIndex:"-1"
-        });
-        var ul = el.createChild({tag: "ul", cls: "x-menu-list"});
-        ul.on("click", this.onClick, this);
-        ul.on("mouseover", this.onMouseOver, this);
-        ul.on("mouseout", this.onMouseOut, this);
-        this.items.each(function(item){
-            var li = document.createElement("li");
-            li.className = "x-menu-list-item";
-            ul.dom.appendChild(li);
-            item.render(li, this);
-        }, this);
-        this.ul = ul;
-        this.autoWidth();
-    },
-
-    // private
-    autoWidth : function(){
-        var el = this.el, ul = this.ul;
-        if(!el){
-            return;
-        }
-        var w = this.width;
-        if(w){
-            el.setWidth(w);
-        }else if(Ext.isIE){
-            el.setWidth(this.minWidth);
-            var t = el.dom.offsetWidth; // force recalc
-            el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));
-        }
-    },
-
-    // private
-    delayAutoWidth : function(){
-        if(this.rendered){
-            if(!this.awTask){
-                this.awTask = new Ext.util.DelayedTask(this.autoWidth, this);
-            }
-            this.awTask.delay(20);
-        }
-    },
-
-    // private
-    findTargetItem : function(e){
-        var t = e.getTarget(".x-menu-list-item", this.ul,  true);
-        if(t && t.menuItemId){
-            return this.items.get(t.menuItemId);
-        }
-    },
-
-    // private
-    onClick : function(e){
-        var t;
-        if(t = this.findTargetItem(e)){
-            t.onClick(e);
-            this.fireEvent("click", this, t, e);
-        }
-    },
-
-    // private
-    setActiveItem : function(item, autoExpand){
-        if(item != this.activeItem){
-            if(this.activeItem){
-                this.activeItem.deactivate();
-            }
-            this.activeItem = item;
-            item.activate(autoExpand);
-        }else if(autoExpand){
-            item.expandMenu();
-        }
-    },
-
-    // private
-    tryActivate : function(start, step){
-        var items = this.items;
-        for(var i = start, len = items.length; i >= 0 && i < len; i+= step){
-            var item = items.get(i);
-            if(!item.disabled && item.canActivate){
-                this.setActiveItem(item, false);
-                return item;
-            }
-        }
-        return false;
-    },
-
-    // private
-    onMouseOver : function(e){
-        var t;
-        if(t = this.findTargetItem(e)){
-            if(t.canActivate && !t.disabled){
-                this.setActiveItem(t, true);
-            }
-        }
-        this.fireEvent("mouseover", this, e, t);
-    },
-
-    // private
-    onMouseOut : function(e){
-        var t;
-        if(t = this.findTargetItem(e)){
-            if(t == this.activeItem && t.shouldDeactivate(e)){
-                this.activeItem.deactivate();
-                delete this.activeItem;
-            }
-        }
-        this.fireEvent("mouseout", this, e, t);
-    },
-
-
-    isVisible : function(){
-        return this.el && !this.hidden;
-    },
-
-
-    show : function(el, pos, parentMenu){
-        this.parentMenu = parentMenu;
-        if(!this.el){
-            this.render();
-        }
-        this.fireEvent("beforeshow", this);
-        this.showAt(this.el.getAlignToXY(el, pos || this.defaultAlign), parentMenu, false);
-    },
-
-
-    showAt : function(xy, parentMenu, _fireBefore){
-        this.parentMenu = parentMenu;
-        if(!this.el){
-            this.render();
-        }
-        if(_fireBefore !== false){
-            this.fireEvent("beforeshow", this);
-        }
-        this.el.setXY(xy);
-        this.el.show();
-        this.hidden = false;
-        this.focus();
-        this.fireEvent("show", this);
-    },
-
-    focus : function(){
-        if(!this.hidden){
-            this.doFocus.defer(50, this);
-        }
-    },
-
-    doFocus : function(){
-        if(!this.hidden){
-            this.focusEl.focus();
-        }
-    },
-
-
-    hide : function(deep){
-        if(this.el && this.isVisible()){
-            this.fireEvent("beforehide", this);
-            if(this.activeItem){
-                this.activeItem.deactivate();
-                this.activeItem = null;
-            }
-            this.el.hide();
-            this.hidden = true;
-            this.fireEvent("hide", this);
-        }
-        if(deep === true && this.parentMenu){
-            this.parentMenu.hide(true);
-        }
-    },
-
-
-    add : function(){
-        var a = arguments, l = a.length, item;
-        for(var i = 0; i < l; i++){
-            var el = a[i];
-            if(el.render){ // some kind of Item
-                item = this.addItem(el);
-            }else if(typeof el == "string"){ // string
-                if(el == "separator" || el == "-"){
-                    item = this.addSeparator();
-                }else{
-                    item = this.addText(el);
-                }
-            }else if(el.tagName || el.el){ // element
-                item = this.addElement(el);
-            }else if(typeof el == "object"){ // must be menu item config?
-                item = this.addMenuItem(el);
-            }
-        }
-        return item;
-    },
-
-
-    getEl : function(){
-        if(!this.el){
-            this.render();
-        }
-        return this.el;
-    },
-
-
-    addSeparator : function(){
-        return this.addItem(new Ext.menu.Separator());
-    },
-
-
-    addElement : function(el){
-        return this.addItem(new Ext.menu.BaseItem(el));
-    },
-
-
-    addItem : function(item){
-        this.items.add(item);
-        if(this.ul){
-            var li = document.createElement("li");
-            li.className = "x-menu-list-item";
-            this.ul.dom.appendChild(li);
-            item.render(li, this);
-            this.delayAutoWidth();
-        }
-        return item;
-    },
-
-
-    addMenuItem : function(config){
-        if(!(config instanceof Ext.menu.Item)){
-            if(typeof config.checked == "boolean"){ // must be check menu item config?
-                config = new Ext.menu.CheckItem(config);
-            }else{
-                config = new Ext.menu.Item(config);
-            }
-        }
-        return this.addItem(config);
-    },
-
-
-    addText : function(text){
-        return this.addItem(new Ext.menu.TextItem(text));
-    },
-
-
-    insert : function(index, item){
-        this.items.insert(index, item);
-        if(this.ul){
-            var li = document.createElement("li");
-            li.className = "x-menu-list-item";
-            this.ul.dom.insertBefore(li, this.ul.dom.childNodes[index]);
-            item.render(li, this);
-            this.delayAutoWidth();
-        }
-        return item;
-    },
-
-
-    remove : function(item){
-        this.items.removeKey(item.id);
-        item.destroy();
-    },
-
-
-    removeAll : function(){
-        var f;
-        while(f = this.items.first()){
-            this.remove(f);
-        }
-    }
-});
-
-// MenuNav is a private utility class used internally by the Menu
-Ext.menu.MenuNav = function(menu){
-    Ext.menu.MenuNav.superclass.constructor.call(this, menu.el);
-    this.scope = this.menu = menu;
-};
-
-Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, {
-    doRelay : function(e, h){
-        var k = e.getKey();
-        if(!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN){
-            this.menu.tryActivate(0, 1);
-            return false;
-        }
-        return h.call(this.scope || this, e, this.menu);
-    },
-
-    up : function(e, m){
-        if(!m.tryActivate(m.items.indexOf(m.activeItem)-1, -1)){
-            m.tryActivate(m.items.length-1, -1);
-        }
-    },
-
-    down : function(e, m){
-        if(!m.tryActivate(m.items.indexOf(m.activeItem)+1, 1)){
-            m.tryActivate(0, 1);
-        }
-    },
-
-    right : function(e, m){
-        if(m.activeItem){
-            m.activeItem.expandMenu(true);
-        }
-    },
-
-    left : function(e, m){
-        m.hide();
-        if(m.parentMenu && m.parentMenu.activeItem){
-            m.parentMenu.activeItem.activate();
-        }
-    },
-
-    enter : function(e, m){
-        if(m.activeItem){
-            e.stopPropagation();
-            m.activeItem.onClick(e);
-            m.fireEvent("click", this, m.activeItem);
-            return true;
-        }
-    }
-});
-
-Ext.menu.MenuMgr = function(){
-   var menus, active, groups = {}, attached = false, lastShow = new Date();
-
-   // private - called when first menu is created
-   function init(){
-       menus = {}, active = new Ext.util.MixedCollection();
-       Ext.get(document).addKeyListener(27, function(){
-           if(active.length > 0){
-               hideAll();
-           }
-       });
-   }
-
-   // private
-   function hideAll(){
-       if(active.length > 0){
-           var c = active.clone();
-           c.each(function(m){
-               m.hide();
-           });
-       }
-   }
-
-   // private
-   function onHide(m){
-       active.remove(m);
-       if(active.length < 1){
-           Ext.get(document).un("mousedown", onMouseDown);
-           attached = false;
-       }
-   }
-
-   // private
-   function onShow(m){
-       var last = active.last();
-       lastShow = new Date();
-       active.add(m);
-       if(!attached){
-           Ext.get(document).on("mousedown", onMouseDown);
-           attached = true;
-       }
-       if(m.parentMenu){
-          m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"), 10) + 3);
-          m.parentMenu.activeChild = m;
-       }else if(last && last.isVisible()){
-          m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"), 10) + 3);
-       }
-   }
-
-   // private
-   function onBeforeHide(m){
-       if(m.activeChild){
-           m.activeChild.hide();
-       }
-       if(m.autoHideTimer){
-           clearTimeout(m.autoHideTimer);
-           delete m.autoHideTimer;
-       }
-   }
-
-   // private
-   function onBeforeShow(m){
-       var pm = m.parentMenu;
-       if(!pm && !m.allowOtherMenus){
-           hideAll();
-       }else if(pm && pm.activeChild){
-           pm.activeChild.hide();
-       }
-   }
-
-   // private
-   function onMouseDown(e){
-       if(lastShow.getElapsed() > 50 && active.length > 0 && !e.getTarget(".x-menu")){
-           hideAll();
-       }
-   }
-
-   // private
-   function onBeforeCheck(mi, state){
-       if(state){
-           var g = groups[mi.group];
-           for(var i = 0, l = g.length; i < l; i++){
-               if(g[i] != mi){
-                   g[i].setChecked(false);
-               }
-           }
-       }
-   }
-
-   return {
-
-
-       hideAll : function(){
-            hideAll();
-       },
-
-       // private
-       register : function(menu){
-           if(!menus){
-               init();
-           }
-           menus[menu.id] = menu;
-           menu.on("beforehide", onBeforeHide);
-           menu.on("hide", onHide);
-           menu.on("beforeshow", onBeforeShow);
-           menu.on("show", onShow);
-           var g = menu.group;
-           if(g && menu.events["checkchange"]){
-               if(!groups[g]){
-                   groups[g] = [];
-               }
-               groups[g].push(menu);
-               menu.on("checkchange", onCheck);
-           }
-       },
-
-
-       get : function(menu){
-           if(typeof menu == "string"){ // menu id
-               return menus[menu];
-           }else if(menu.events){  // menu instance
-               return menu;
-           }else if(typeof menu.length == 'number'){ // array of menu items?
-               return new Ext.menu.Menu({items:menu});
-           }else{ // otherwise, must be a config
-               return new Ext.menu.Menu(menu);
-           }
-       },
-
-       // private
-       unregister : function(menu){
-           delete menus[menu.id];
-           menu.un("beforehide", onBeforeHide);
-           menu.un("hide", onHide);
-           menu.un("beforeshow", onBeforeShow);
-           menu.un("show", onShow);
-           var g = menu.group;
-           if(g && menu.events["checkchange"]){
-               groups[g].remove(menu);
-               menu.un("checkchange", onCheck);
-           }
-       },
-
-       // private
-       registerCheckable : function(menuItem){
-           var g = menuItem.group;
-           if(g){
-               if(!groups[g]){
-                   groups[g] = [];
-               }
-               groups[g].push(menuItem);
-               menuItem.on("beforecheckchange", onBeforeCheck);
-           }
-       },
-
-       // private
-       unregisterCheckable : function(menuItem){
-           var g = menuItem.group;
-           if(g){
-               groups[g].remove(menuItem);
-               menuItem.un("beforecheckchange", onBeforeCheck);
-           }
-       }
-   };
-}();
-
-
-Ext.menu.BaseItem = function(config){
-    Ext.menu.BaseItem.superclass.constructor.call(this, config);
-
-    this.addEvents({
-
-        click: true,
-
-        activate : true,
-
-        deactivate : true
-    });
-
-    if(this.handler){
-        this.on("click", this.handler, this.scope, true);
-    }
-};
-
-Ext.extend(Ext.menu.BaseItem, Ext.Component, {
-
-
-    canActivate : false,
-
-    activeClass : "x-menu-item-active",
-
-    hideOnClick : true,
-
-    hideDelay : 100,
-
-    // private
-    ctype: "Ext.menu.BaseItem",
-
-    // private
-    actionMode : "container",
-
-    // private
-    render : function(container, parentMenu){
-        this.parentMenu = parentMenu;
-        Ext.menu.BaseItem.superclass.render.call(this, container);
-        this.container.menuItemId = this.id;
-    },
-
-    // private
-    onRender : function(container, position){
-        this.el = Ext.get(this.el);
-        container.dom.appendChild(this.el.dom);
-    },
-
-    // private
-    onClick : function(e){
-        if(!this.disabled && this.fireEvent("click", this, e) !== false
-                && this.parentMenu.fireEvent("itemclick", this, e) !== false){
-            this.handleClick(e);
-        }else{
-            e.stopEvent();
-        }
-    },
-
-    // private
-    activate : function(){
-        if(this.disabled){
-            return false;
-        }
-        var li = this.container;
-        li.addClass(this.activeClass);
-        this.region = li.getRegion().adjust(2, 2, -2, -2);
-        this.fireEvent("activate", this);
-        return true;
-    },
-
-    // private
-    deactivate : function(){
-        this.container.removeClass(this.activeClass);
-        this.fireEvent("deactivate", this);
-    },
-
-    // private
-    shouldDeactivate : function(e){
-        return !this.region || !this.region.contains(e.getPoint());
-    },
-
-    // private
-    handleClick : function(e){
-        if(this.hideOnClick){
-            this.parentMenu.hide.defer(this.hideDelay, this.parentMenu, [true]);
-        }
-    },
-
-    // private
-    expandMenu : function(autoActivate){
-        // do nothing
-    },
-
-    // private
-    hideMenu : function(){
-        // do nothing
-    }
-});
-
-Ext.menu.TextItem = function(text){
-    this.text = text;
-    Ext.menu.TextItem.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.menu.TextItem, Ext.menu.BaseItem, {
-
-    hideOnClick : false,
-
-    itemCls : "x-menu-text",
-
-    // private
-    onRender : function(){
-        var s = document.createElement("span");
-        s.className = this.itemCls;
-        s.innerHTML = this.text;
-        this.el = s;
-        Ext.menu.TextItem.superclass.onRender.apply(this, arguments);
-    }
-});
-
-Ext.menu.Separator = function(config){
-    Ext.menu.Separator.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.menu.Separator, Ext.menu.BaseItem, {
-
-    itemCls : "x-menu-sep",
-
-    hideOnClick : false,
-
-    // private
-    onRender : function(li){
-        var s = document.createElement("span");
-        s.className = this.itemCls;
-        s.innerHTML = "&#160;";
-        this.el = s;
-        li.addClass("x-menu-sep-li");
-        Ext.menu.Separator.superclass.onRender.apply(this, arguments);
-    }
-});
-
-Ext.menu.Item = function(config){
-    Ext.menu.Item.superclass.constructor.call(this, config);
-    if(this.menu){
-        this.menu = Ext.menu.MenuMgr.get(this.menu);
-    }
-};
-Ext.extend(Ext.menu.Item, Ext.menu.BaseItem, {
-
-
-    itemCls : "x-menu-item",
-
-    canActivate : true,
-
-    // private
-    ctype: "Ext.menu.Item",
-
-    // private
-    onRender : function(container, position){
-        var el = document.createElement("a");
-        el.hideFocus = true;
-        el.unselectable = "on";
-        el.href = this.href || "#";
-        if(this.hrefTarget){
-            el.target = this.hrefTarget;
-        }
-        el.className = this.itemCls + (this.menu ?  " x-menu-item-arrow" : "") + (this.cls ?  " " + this.cls : "");
-        el.innerHTML = String.format(
-                '<img src="{0}" class="x-menu-item-icon {2}" />{1}',
-                this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || '');
-        this.el = el;
-        Ext.menu.Item.superclass.onRender.call(this, container, position);
-    },
-
-
-    setText : function(text){
-        this.text = text;
-        if(this.rendered){
-            this.el.update(String.format(
-                '<img src="{0}" class="x-menu-item-icon {2}">{1}',
-                this.icon || Ext.BLANK_IMAGE_URL, this.text, this.iconCls || ''));
-            this.parentMenu.autoWidth();
-        }
-    },
-
-    // private
-    handleClick : function(e){
-        if(!this.href){ // if no link defined, stop the event automatically
-            e.stopEvent();
-        }
-        Ext.menu.Item.superclass.handleClick.apply(this, arguments);
-    },
-
-    // private
-    activate : function(autoExpand){
-        if(Ext.menu.Item.superclass.activate.apply(this, arguments)){
-            this.focus();
-            if(autoExpand){
-                this.expandMenu();
-            }
-        }
-        return true;
-    },
-
-    // private
-    shouldDeactivate : function(e){
-        if(Ext.menu.Item.superclass.shouldDeactivate.call(this, e)){
-            if(this.menu && this.menu.isVisible()){
-                return !this.menu.getEl().getRegion().contains(e.getPoint());
-            }
-            return true;
-        }
-        return false;
-    },
-
-    // private
-    deactivate : function(){
-        Ext.menu.Item.superclass.deactivate.apply(this, arguments);
-        this.hideMenu();
-    },
-
-    // private
-    expandMenu : function(autoActivate){
-        if(!this.disabled && this.menu){
-            if(!this.menu.isVisible()){
-                this.menu.show(this.container, this.parentMenu.subMenuAlign || "tl-tr?", this.parentMenu);
-            }
-            if(autoActivate){
-                this.menu.tryActivate(0, 1);
-            }
-        }
-    },
-
-    // private
-    hideMenu : function(){
-        if(this.menu && this.menu.isVisible()){
-            this.menu.hide();
-        }
-    }
-});
-
-Ext.menu.CheckItem = function(config){
-    Ext.menu.CheckItem.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        "beforecheckchange" : true,
-
-        "checkchange" : true
-    });
-    if(this.checkHandler){
-        this.on('checkchange', this.checkHandler, this.scope);
-    }
-};
-Ext.extend(Ext.menu.CheckItem, Ext.menu.Item, {
-
-
-    itemCls : "x-menu-item x-menu-check-item",
-
-    groupClass : "x-menu-group-item",
-
-
-    checked: false,
-
-    // private
-    ctype: "Ext.menu.CheckItem",
-
-    // private
-    onRender : function(c){
-        Ext.menu.CheckItem.superclass.onRender.apply(this, arguments);
-        if(this.group){
-            this.el.addClass(this.groupClass);
-        }
-        Ext.menu.MenuMgr.registerCheckable(this);
-        if(this.checked){
-            this.checked = false;
-            this.setChecked(true, true);
-        }
-    },
-
-    // private
-    destroy : function(){
-        if(this.rendered){
-            Ext.menu.MenuMgr.unregisterCheckable(this);
-        }
-        Ext.menu.CheckItem.superclass.destroy.apply(this, arguments);
-    },
-
-
-    setChecked : function(state, suppressEvent){
-        if(this.checked != state && this.fireEvent("beforecheckchange", this, state) !== false){
-            if(this.container){
-                this.container[state ? "addClass" : "removeClass"]("x-menu-item-checked");
-            }
-            this.checked = state;
-            if(suppressEvent !== true){
-                this.fireEvent("checkchange", this, state);
-            }
-        }
-    },
-
-    // private
-    handleClick : function(e){
-       if(!this.disabled && !(this.checked && this.group)){// disable unselect on radio item
-           this.setChecked(!this.checked);
-       }
-       Ext.menu.CheckItem.superclass.handleClick.apply(this, arguments);
-    }
-});
-
-Ext.menu.Adapter = function(component, config){
-    Ext.menu.Adapter.superclass.constructor.call(this, config);
-    this.component = component;
-};
-Ext.extend(Ext.menu.Adapter, Ext.menu.BaseItem, {
-    // private
-    canActivate : true,
-
-    // private
-    onRender : function(container, position){
-        this.component.render(container);
-        this.el = this.component.getEl();
-    },
-
-    // private
-    activate : function(){
-        if(this.disabled){
-            return false;
-        }
-        this.component.focus();
-        this.fireEvent("activate", this);
-        return true;
-    },
-
-    // private
-    deactivate : function(){
-        this.fireEvent("deactivate", this);
-    },
-
-    // private
-    disable : function(){
-        this.component.disable();
-        Ext.menu.Adapter.superclass.disable.call(this);
-    },
-
-    // private
-    enable : function(){
-        this.component.enable();
-        Ext.menu.Adapter.superclass.enable.call(this);
-    }
-});
-
-Ext.menu.DateItem = function(config){
-    Ext.menu.DateItem.superclass.constructor.call(this, new Ext.DatePicker(config), config);
-
-    this.picker = this.component;
-    this.addEvents({select: true});
-
-    this.picker.on("render", function(picker){
-        picker.getEl().swallowEvent("click");
-        picker.container.addClass("x-menu-date-item");
-    });
-
-    this.picker.on("select", this.onSelect, this);
-};
-
-Ext.extend(Ext.menu.DateItem, Ext.menu.Adapter, {
-    // private
-    onSelect : function(picker, date){
-        this.fireEvent("select", this, date, picker);
-        Ext.menu.DateItem.superclass.handleClick.call(this);
-    }
-});
-
-Ext.menu.ColorItem = function(config){
-    Ext.menu.ColorItem.superclass.constructor.call(this, new Ext.ColorPalette(config), config);
-
-    this.palette = this.component;
-    this.relayEvents(this.palette, ["select"]);
-    if(this.selectHandler){
-        this.on('select', this.selectHandler, this.scope);
-    }
-};
-Ext.extend(Ext.menu.ColorItem, Ext.menu.Adapter);
-
-Ext.menu.DateMenu = function(config){
-    Ext.menu.DateMenu.superclass.constructor.call(this, config);
-    this.plain = true;
-    var di = new Ext.menu.DateItem(config);
-    this.add(di);
-
-    this.picker = di.picker;
-
-    this.relayEvents(di, ["select"]);
-
-    this.on('beforeshow', function(){
-        if(this.picker){
-            this.picker.hideMonthPicker(true);
-        }
-    }, this);
-};
-Ext.extend(Ext.menu.DateMenu, Ext.menu.Menu, {
-    cls:'x-date-menu'
-});
-
-Ext.menu.ColorMenu = function(config){
-    Ext.menu.ColorMenu.superclass.constructor.call(this, config);
-    this.plain = true;
-    var ci = new Ext.menu.ColorItem(config);
-    this.add(ci);
-
-    this.palette = ci.palette;
-
-    this.relayEvents(ci, ["select"]);
-};
-Ext.extend(Ext.menu.ColorMenu, Ext.menu.Menu);
-
-Ext.form.Field = function(config){
-    Ext.form.Field.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.Field, Ext.BoxComponent,  {
-
-    invalidClass : "x-form-invalid",
-
-    invalidText : "The value in this field is invalid",
-
-    focusClass : "x-form-focus",
-
-    validationEvent : "keyup",
-
-    validateOnBlur : true,
-
-    validationDelay : 250,
-
-    defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"},
-
-    fieldClass: "x-form-field",
-
-    msgTarget: 'qtip',
-
-    msgFx : 'normal',
-
-
-
-
-    inputType : undefined,
-
-    // private
-    isFormField : true,
-
-    // private
-    hasFocus : false,
-
-
-    value : undefined,
-
-
-    initComponent : function(){
-        Ext.form.Field.superclass.initComponent.call(this);
-        this.addEvents({
-
-            focus : true,
-
-            blur : true,
-
-            specialkey : true,
-
-            change : true,
-
-            invalid : true,
-
-            valid : true
-        });
-    },
-
-
-    getName: function(){
-         return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || '');
-    },
-
-
-    applyTo : function(target){
-        this.allowDomMove = false;
-        this.el = Ext.get(target);
-        this.render(this.el.dom.parentNode);
-        return this;
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.Field.superclass.onRender.call(this, ct, position);
-        if(!this.el){
-            var cfg = this.getAutoCreate();
-            if(!cfg.name){
-                cfg.name = this.name || this.id;
-            }
-            if(this.inputType){
-                cfg.type = this.inputType;
-            }
-            if(this.tabIndex !== undefined){
-                cfg.tabIndex = this.tabIndex;
-            }
-            this.el = ct.createChild(cfg, position);
-        }
-        var type = this.el.dom.type;
-        if(type){
-            if(type == 'password'){
-                type = 'text';
-            }
-            this.el.addClass('x-form-'+type);
-        }
-        if(this.readOnly){
-            this.el.dom.readOnly = true;
-        }
-
-        this.el.addClass([this.fieldClass, this.cls]);
-        this.initValue();
-    },
-
-    // private
-    initValue : function(){
-        if(this.value !== undefined){
-            this.setValue(this.value);
-        }else if(this.el.dom.value.length > 0){
-            this.setValue(this.el.dom.value);
-        }
-    },
-
-
-    isDirty : function() {
-        if(this.disabled) {
-            return false;
-        }
-        return String(this.getValue()) !== String(this.originalValue);
-    },
-
-    // private
-    afterRender : function(){
-        Ext.form.Field.superclass.afterRender.call(this);
-        this.initEvents();
-    },
-
-    // private
-    fireKey : function(e){
-        if(e.isNavKeyPress()){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-
-    reset : function(){
-        this.setValue(this.originalValue);
-        this.clearInvalid();
-    },
-
-    // private
-    initEvents : function(){
-        this.el.on(Ext.isIE ? "keydown" : "keypress", this.fireKey,  this);
-        this.el.on("focus", this.onFocus,  this);
-        this.el.on("blur", this.onBlur,  this);
-
-        // reference to original value for reset
-        this.originalValue = this.getValue();
-    },
-
-    // private
-    onFocus : function(){
-        if(!Ext.isOpera){ // don't touch in Opera
-            this.el.addClass(this.focusClass);
-        }
-        this.hasFocus = true;
-        this.startValue = this.getValue();
-        this.fireEvent("focus", this);
-    },
-
-    // private
-    onBlur : function(){
-        this.el.removeClass(this.focusClass);
-        this.hasFocus = false;
-        if(this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur"){
-            this.validate();
-        }
-        var v = this.getValue();
-        if(v != this.startValue){
-            this.fireEvent('change', this, v, this.startValue);
-        }
-        this.fireEvent("blur", this);
-    },
-
-
-    isValid : function(preventMark){
-        if(this.disabled){
-            return true;
-        }
-        var restore = this.preventMark;
-        this.preventMark = preventMark === true;
-        var v = this.validateValue(this.getRawValue());
-        this.preventMark = restore;
-        return v;
-    },
-
-
-    validate : function(){
-        if(this.disabled || this.validateValue(this.getRawValue())){
-            this.clearInvalid();
-            return true;
-        }
-        return false;
-    },
-
-    // private
-    // Subclasses should provide the validation implementation by overriding this
-    validateValue : function(value){
-        return true;
-    },
-
-
-    markInvalid : function(msg){
-        if(!this.rendered || this.preventMark){ // not rendered
-            return;
-        }
-        this.el.addClass(this.invalidClass);
-        msg = msg || this.invalidText;
-        switch(this.msgTarget){
-            case 'qtip':
-                this.el.dom.qtip = msg;
-                this.el.dom.qclass = 'x-form-invalid-tip';
-                break;
-            case 'title':
-                this.el.dom.title = msg;
-                break;
-            case 'under':
-                if(!this.errorEl){
-                    var elp = this.el.findParent('.x-form-element', 5, true);
-                    this.errorEl = elp.createChild({cls:'x-form-invalid-msg'});
-                    this.errorEl.setWidth(elp.getWidth(true)-20);
-                }
-                this.errorEl.update(msg);
-                Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);
-                break;
-            case 'side':
-                if(!this.errorIcon){
-                    var elp = this.el.findParent('.x-form-element', 5, true);
-                    this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});
-                }
-                this.alignErrorIcon();
-                this.errorIcon.dom.qtip = msg;
-                this.errorIcon.dom.qclass = 'x-form-invalid-tip';
-                this.errorIcon.show();
-                break;
-            default:
-                var t = Ext.getDom(this.msgTarget);
-                t.innerHTML = msg;
-                t.style.display = this.msgDisplay;
-                break;
-        }
-        this.fireEvent('invalid', this, msg);
-    },
-
-    // private
-    alignErrorIcon : function(){
-        this.errorIcon.alignTo(this.el, 'tl-tr', [2, 0]);
-    },
-
-
-    clearInvalid : function(){
-        if(!this.rendered || this.preventMark){ // not rendered
-            return;
-        }
-        this.el.removeClass(this.invalidClass);
-        switch(this.msgTarget){
-            case 'qtip':
-                this.el.dom.qtip = '';
-                break;
-            case 'title':
-                this.el.dom.title = '';
-                break;
-            case 'under':
-                if(this.errorEl){
-                    Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);
-                }
-                break;
-            case 'side':
-                if(this.errorIcon){
-                    this.errorIcon.dom.qtip = '';
-                    this.errorIcon.hide();
-                }
-                break;
-            default:
-                var t = Ext.getDom(this.msgTarget);
-                t.innerHTML = '';
-                t.style.display = 'none';
-                break;
-        }
-        this.fireEvent('valid', this);
-    },
-
-
-    getRawValue : function(){
-        return this.el.getValue();
-    },
-
-
-    getValue : function(){
-        var v = this.el.getValue();
-        if(v == this.emptyText || v === undefined){
-            v = '';
-        }
-        return v;
-    },
-
-
-    setRawValue : function(v){
-        return this.el.dom.value = (v === null || v === undefined ? '' : v);
-    },
-
-
-    setValue : function(v){
-        this.value = v;
-        if(this.rendered){
-            this.el.dom.value = (v === null || v === undefined ? '' : v);
-            this.validate();
-        }
-    },
-
-    adjustSize : function(w, h){
-        var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
-        s.width = this.adjustWidth(this.el.dom.tagName, s.width);
-        return s;
-    },
-
-    adjustWidth : function(tag, w){
-        tag = tag.toLowerCase();
-        if(typeof w == 'number' && Ext.isStrict && !Ext.isSafari){
-            if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
-                if(tag == 'input'){
-                    return w + 2;
-                }
-                if(tag = 'textarea'){
-                    return w-2;
-                }
-            }else if(Ext.isGecko && tag == 'textarea'){
-                return w-6;
-            }else if(Ext.isOpera){
-                if(tag == 'input'){
-                    return w + 2;
-                }
-                if(tag = 'textarea'){
-                    return w-2;
-                }
-            }
-        }
-        return w;
-    }
-});
-
-
-// anything other than normal should be considered experimental
-Ext.form.Field.msgFx = {
-    normal : {
-        show: function(msgEl, f){
-            msgEl.setDisplayed('block');
-        },
-
-        hide : function(msgEl, f){
-            msgEl.setDisplayed(false).update('');
-        }
-    },
-
-    slide : {
-        show: function(msgEl, f){
-            msgEl.slideIn('t', {stopFx:true});
-        },
-
-        hide : function(msgEl, f){
-            msgEl.slideOut('t', {stopFx:true,useDisplay:true});
-        }
-    },
-
-    slideRight : {
-        show: function(msgEl, f){
-            msgEl.fixDisplay();
-            msgEl.alignTo(f.el, 'tl-tr');
-            msgEl.slideIn('l', {stopFx:true});
-        },
-
-        hide : function(msgEl, f){
-            msgEl.slideOut('l', {stopFx:true,useDisplay:true});
-        }
-    }
-};
-
-
-Ext.form.TextField = function(config){
-    Ext.form.TextField.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        autosize : true
-    });
-};
-
-Ext.extend(Ext.form.TextField, Ext.form.Field,  {
-
-    grow : false,
-
-    growMin : 30,
-
-    growMax : 800,
-
-    vtype : null,
-
-    maskRe : null,
-
-    disableKeyFilter : false,
-
-    allowBlank : true,
-
-    minLength : 0,
-
-    maxLength : Number.MAX_VALUE,
-
-    minLengthText : "The minimum length for this field is {0}",
-
-    maxLengthText : "The maximum length for this field is {0}",
-
-    selectOnFocus : false,
-
-    blankText : "This field is required",
-
-    validator : null,
-
-    regex : null,
-
-    regexText : "",
-
-    emptyText : null,
-
-    emptyClass : 'x-form-empty-field',
-
-    // private
-    initEvents : function(){
-        Ext.form.TextField.superclass.initEvents.call(this);
-        if(this.validationEvent == 'keyup'){
-            this.validationTask = new Ext.util.DelayedTask(this.validate, this);
-            this.el.on('keyup', this.filterValidation, this);
-        }
-        else if(this.validationEvent !== false){
-            this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay});
-        }
-        if(this.selectOnFocus || this.emptyText){
-            this.on("focus", this.preFocus, this);
-            if(this.emptyText){
-                this.on('blur', this.postBlur, this);
-                this.applyEmptyText();
-            }
-        }
-        if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){
-            this.el.on("keypress", this.filterKeys, this);
-        }
-        if(this.grow){
-            this.el.on("keyup", this.onKeyUp,  this, {buffer:50});
-            this.el.on("click", this.autoSize,  this);
-        }
-    },
-
-    filterValidation : function(e){
-        if(!e.isNavKeyPress()){
-            this.validationTask.delay(this.validationDelay);
-        }
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(!e.isNavKeyPress()){
-            this.autoSize();
-        }
-    },
-
-
-    reset : function(){
-        Ext.form.TextField.superclass.reset.call(this);
-        this.applyEmptyText();
-    },
-
-    applyEmptyText : function(){
-        if(this.rendered && this.emptyText && this.getRawValue().length < 1){
-            this.setRawValue(this.emptyText);
-            this.el.addClass(this.emptyClass);
-        }
-    },
-
-    // private
-    preFocus : function(){
-        if(this.emptyText){
-            if(this.getRawValue() == this.emptyText){
-                this.setRawValue('');
-            }
-            this.el.removeClass(this.emptyClass);
-        }
-        if(this.selectOnFocus){
-            this.el.dom.select();
-        }
-    },
-
-    // private
-    postBlur : function(){
-        this.applyEmptyText();
-    },
-
-    // private
-    filterKeys : function(e){
-        var k = e.getKey();
-        if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
-            return;
-        }
-        if(Ext.isIE && (k == e.BACKSPACE || k == e.DELETE || e.isNavKeyPress() || k == e.HOME || k == e.END)){
-            return;
-        }
-        var c = e.getCharCode();
-        if(!this.maskRe.test(String.fromCharCode(c) || '')){
-            e.stopEvent();
-        }
-    },
-
-    setValue : function(v){
-        if(this.emptyText && v !== undefined && v !== null && v !== ''){
-            this.el.removeClass(this.emptyClass);
-        }
-        Ext.form.TextField.superclass.setValue.apply(this, arguments);
-    },
-
-
-    validateValue : function(value){
-        if(value.length < 1 || value === this.emptyText){ // if it's blank
-             if(this.allowBlank){
-                 this.clearInvalid();
-                 return true;
-             }else{
-                 this.markInvalid(this.blankText);
-                 return false;
-             }
-        }
-        if(value.length < this.minLength){
-            this.markInvalid(String.format(this.minLengthText, this.minLength));
-            return false;
-        }
-        if(value.length > this.maxLength){
-            this.markInvalid(String.format(this.maxLengthText, this.maxLength));
-            return false;
-        }
-        if(this.vtype){
-            var vt = Ext.form.VTypes;
-            if(!vt[this.vtype](value, this)){
-                this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
-                return false;
-            }
-        }
-        if(typeof this.validator == "function"){
-            var msg = this.validator(value);
-            if(msg !== true){
-                this.markInvalid(msg);
-                return false;
-            }
-        }
-        if(this.regex && !this.regex.test(value)){
-            this.markInvalid(this.regexText);
-            return false;
-        }
-        return true;
-    },
-
-
-    selectText : function(start, end){
-        var v = this.getRawValue();
-        if(v.length > 0){
-            start = start === undefined ? 0 : start;
-            end = end === undefined ? v.length : end;
-            var d = this.el.dom;
-            if(d.setSelectionRange){
-                d.setSelectionRange(start, end);
-            }else if(d.createTextRange){
-                var range = d.createTextRange();
-                range.moveStart("character", start);
-                range.moveEnd("character", v.length-end);
-                range.select();
-            }
-        }
-    },
-
-
-    autoSize : function(){
-        if(!this.grow || !this.rendered){
-            return;
-        }
-        if(!this.metrics){
-            this.metrics = Ext.util.TextMetrics.createInstance(this.el);
-        }
-        var el = this.el;
-        var v = el.dom.value + "&#160;";
-        var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) +  10, this.growMin));
-        this.el.setWidth(w);
-        this.fireEvent("autosize", this, w);
-    }
-});
-
-Ext.form.TriggerField = function(config){
-    Ext.form.TriggerField.superclass.constructor.call(this, config);
-    this.mimicing = false;
-    this.on('disable', this.disableWrapper, this);
-    this.on('enable', this.enableWrapper, this);
-};
-
-Ext.extend(Ext.form.TriggerField, Ext.form.TextField,  {
-
-    // private
-    defaultAutoCreate : {tag: "input", type: "text", size: "16", autocomplete: "off"},
-
-    hideTrigger:false,
-
-
-
-
-
-
-    autoSize: Ext.emptyFn,
-
-    monitorTab : true,
-
-    deferHeight : true,
-
-    // private
-    onResize : function(w, h){
-        Ext.form.TriggerField.superclass.onResize.apply(this, arguments);
-        if(typeof w == 'number'){
-            this.el.setWidth(this.adjustWidth('input', w - this.trigger.getWidth()));
-        }
-    },
-
-    adjustSize : Ext.BoxComponent.prototype.adjustSize,
-
-    getResizeEl : function(){
-        return this.wrap;
-    },
-
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    alignErrorIcon : function(){
-        this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.TriggerField.superclass.onRender.call(this, ct, position);
-        this.wrap = this.el.wrap({cls: "x-form-field-wrap"});
-        this.trigger = this.wrap.createChild(this.triggerConfig ||
-                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass});
-        if(this.hideTrigger){
-            this.trigger.setDisplayed(false);
-        }
-        this.initTrigger();
-        if(!this.width){
-            this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
-        }
-    },
-
-    initTrigger : function(){
-        this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
-        this.trigger.addClassOnOver('x-form-trigger-over');
-        this.trigger.addClassOnClick('x-form-trigger-click');
-    },
-
-    onDestroy : function(){
-        if(this.trigger){
-            this.trigger.removeAllListeners();
-            this.trigger.remove();
-        }
-        if(this.wrap){
-            this.wrap.remove();
-        }
-        Ext.form.TriggerField.superclass.onDestroy.call(this);
-    },
-
-    // private
-    onFocus : function(){
-        Ext.form.TriggerField.superclass.onFocus.call(this);
-        if(!this.mimicing){
-            this.wrap.addClass('x-trigger-wrap-focus');
-            this.mimicing = true;
-            Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this);
-            if(this.monitorTab){
-                this.el.on("keydown", this.checkTab, this);
-            }
-        }
-    },
-
-    // private
-    checkTab : function(e){
-        if(e.getKey() == e.TAB){
-            this.triggerBlur();
-        }
-    },
-
-    // private
-    onBlur : function(){
-        // do nothing
-    },
-
-    // private
-    mimicBlur : function(e, t){
-        if(!this.wrap.contains(t) && this.validateBlur()){
-            this.triggerBlur();
-        }
-    },
-
-    // private
-    triggerBlur : function(){
-        this.mimicing = false;
-        Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur);
-        if(this.monitorTab){
-            this.el.un("keydown", this.checkTab, this);
-        }
-        this.beforeBlur();
-        this.wrap.removeClass('x-trigger-wrap-focus');
-        Ext.form.TriggerField.superclass.onBlur.call(this);
-    },
-
-    beforeBlur : Ext.emptyFn,
-
-    // private
-    // This should be overridden by any subclass that needs to check whether or not the field can be blurred.
-    validateBlur : function(e, t){
-        return true;
-    },
-
-    // private
-    disableWrapper : function(){
-        if(this.wrap){
-            this.wrap.addClass('x-item-disabled');
-        }
-    },
-
-    // private
-    enableWrapper : function(){
-        if(this.wrap){
-            this.wrap.removeClass('x-item-disabled');
-        }
-    },
-
-    // private
-    onShow : function(){
-        if(this.wrap){
-            this.wrap.dom.style.display = '';
-            this.wrap.dom.style.visibility = 'visible';
-        }
-    },
-
-    // private
-    onHide : function(){
-        this.wrap.dom.style.display = 'none';
-    },
-
-
-    onTriggerClick : Ext.emptyFn
-});
-
-Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {
-    initComponent : function(){
-        Ext.form.TwinTriggerField.superclass.initComponent.call(this);
-
-        this.triggerConfig = {
-            tag:'span', cls:'x-form-twin-triggers', cn:[
-            {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class},
-            {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger2Class}
-        ]};
-    },
-
-    getTrigger : function(index){
-        return this.triggers[index];
-    },
-
-    initTrigger : function(){
-        var ts = this.trigger.select('.x-form-trigger', true);
-        this.wrap.setStyle('overflow', 'hidden');
-        var triggerField = this;
-        ts.each(function(t, all, index){
-            t.hide = function(){
-                var w = triggerField.wrap.getWidth();
-                this.dom.style.display = 'none';
-                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
-            };
-            t.show = function(){
-                var w = triggerField.wrap.getWidth();
-                this.dom.style.display = '';
-                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
-            };
-            var triggerIndex = 'Trigger'+(index+1);
-
-            if(this['hide'+triggerIndex]){
-                t.dom.style.display = 'none';
-            }
-            t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
-            t.addClassOnOver('x-form-trigger-over');
-            t.addClassOnClick('x-form-trigger-click');
-        }, this);
-        this.triggers = ts.elements;
-    },
-
-    onTrigger1Click : Ext.emptyFn,
-    onTrigger2Click : Ext.emptyFn
-});
-
-Ext.form.TextArea = function(config){
-    Ext.form.TextArea.superclass.constructor.call(this, config);
-    // these are provided exchanges for backwards compat
-    // minHeight/maxHeight were replaced by growMin/growMax to be
-    // compatible with TextField growing config values
-    if(this.minHeight !== undefined){
-        this.growMin = this.minHeight;
-    }
-    if(this.maxHeight !== undefined){
-        this.growMax = this.maxHeight;
-    }
-};
-
-Ext.extend(Ext.form.TextArea, Ext.form.TextField,  {
-
-    growMin : 60,
-
-    growMax: 1000,
-
-    preventScrollbars: false,
-
-    // private
-    onRender : function(ct, position){
-        if(!this.el){
-            this.defaultAutoCreate = {
-                tag: "textarea",
-                style:"width:300px;height:60px;",
-                autocomplete: "off"
-            };
-        }
-        Ext.form.TextArea.superclass.onRender.call(this, ct, position);
-        if(this.grow){
-            this.textSizeEl = Ext.DomHelper.append(document.body, {
-                tag: "pre", cls: "x-form-grow-sizer"
-            });
-            if(this.preventScrollbars){
-                this.el.setStyle("overflow", "hidden");
-            }
-            this.el.setHeight(this.growMin);
-        }
-    },
-
-    onDestroy : function(){
-        if(this.textSizeEl){
-            this.textSizeEl.remove();
-        }
-        Ext.form.TextArea.superclass.onDestroy.call(this);
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(!e.isNavKeyPress() || e.getKey() == e.ENTER){
-            this.autoSize();
-        }
-    },
-
-
-    autoSize : function(){
-        if(!this.grow || !this.textSizeEl){
-            return;
-        }
-        var el = this.el;
-        var v = el.dom.value;
-        var ts = this.textSizeEl;
-        Ext.fly(ts).setWidth(this.el.getWidth());
-        if(v.length < 1){
-            v = "&#160;&#160;";
-        }else{
-            if(Ext.isIE){
-                v = v.replace(/\n/g, '<p>&#160;</p>');
-            }
-            v += "&#160;\n&#160;";
-        }
-        ts.innerHTML = v;
-        var h = Math.min(this.growMax, Math.max(ts.offsetHeight, this.growMin));
-        if(h != this.lastHeight){
-            this.lastHeight = h;
-            this.el.setHeight(h);
-            this.fireEvent("autosize", this, h);
-        }
-    },
-
-    // private
-    setValue : function(v){
-        Ext.form.TextArea.superclass.setValue.call(this, v);
-        this.autoSize();
-    }
-});
-
-Ext.form.NumberField = function(config){
-    Ext.form.NumberField.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.NumberField, Ext.form.TextField,  {
-
-    fieldClass: "x-form-field x-form-num-field",
-
-    allowDecimals : true,
-
-    decimalSeparator : ".",
-
-    decimalPrecision : 2,
-
-    allowNegative : true,
-
-    minValue : Number.NEGATIVE_INFINITY,
-
-    maxValue : Number.MAX_VALUE,
-
-    minText : "The minimum value for this field is {0}",
-
-    maxText : "The maximum value for this field is {0}",
-
-    nanText : "{0} is not a valid number",
-
-    // private
-    initEvents : function(){
-        Ext.form.NumberField.superclass.initEvents.call(this);
-        var allowed = "0123456789";
-        if(this.allowDecimals){
-            allowed += this.decimalSeparator;
-        }
-        if(this.allowNegative){
-            allowed += "-";
-        }
-        var keyPress = function(e){
-            var k = e.getKey();
-            if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
-                return;
-            }
-            var c = e.getCharCode();
-            if(allowed.indexOf(String.fromCharCode(c)) === -1){
-                e.stopEvent();
-            }
-        };
-        this.el.on("keypress", keyPress, this);
-    },
-
-    // private
-    validateValue : function(value){
-        if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){
-            return false;
-        }
-        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
-             return true;
-        }
-        value = String(value).replace(this.decimalSeparator, ".");
-        if(isNaN(value)){
-            this.markInvalid(String.format(this.nanText, value));
-            return false;
-        }
-        var num = this.parseValue(value);
-        if(num < this.minValue){
-            this.markInvalid(String.format(this.minText, this.minValue));
-            return false;
-        }
-        if(num > this.maxValue){
-            this.markInvalid(String.format(this.maxText, this.maxValue));
-            return false;
-        }
-        return true;
-    },
-
-    // private
-    parseValue : function(value){
-        return parseFloat(String(value).replace(this.decimalSeparator, "."));
-    },
-
-    // private
-    fixPrecision : function(value){
-       if(!this.allowDecimals || this.decimalPrecision == -1 || isNaN(value) || value == 0 || !value){
-           return value;
-       }
-       // this should work but doesn't due to precision error in JS
-       // var scale = Math.pow(10, this.decimalPrecision);
-       // var fixed = this.decimalPrecisionFcn(value * scale);
-       // return fixed / scale;
-       //
-       // so here's our workaround:
-       var scale = Math.pow(10, this.decimalPrecision+1);
-       var fixed = this.decimalPrecisionFcn(value * scale);
-       fixed = this.decimalPrecisionFcn(fixed/10);
-       return fixed / (scale/10);
-    },
-
-    // private
-    decimalPrecisionFcn : function(v){
-        return Math.floor(v);
-    }
-});
-
-Ext.form.DateField = function(config){
-    Ext.form.DateField.superclass.constructor.call(this, config);
-    if(typeof this.minValue == "string") this.minValue = this.parseDate(this.minValue);
-    if(typeof this.maxValue == "string") this.maxValue = this.parseDate(this.maxValue);
-    this.ddMatch = null;
-    if(this.disabledDates){
-        var dd = this.disabledDates;
-        var re = "(?:";
-        for(var i = 0; i < dd.length; i++){
-            re += dd[i];
-            if(i != dd.length-1) re += "|";
-        }
-        this.ddMatch = new RegExp(re + ")");
-    }
-};
-
-Ext.extend(Ext.form.DateField, Ext.form.TriggerField,  {
-
-    format : "m/d/y",
-
-    altFormats : "m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",
-
-    disabledDays : null,
-
-    disabledDaysText : "Disabled",
-
-    disabledDates : null,
-
-    disabledDatesText : "Disabled",
-
-    minValue : null,
-
-    maxValue : null,
-
-    minText : "The date in this field must be after {0}",
-
-    maxText : "The date in this field must be before {0}",
-
-    invalidText : "{0} is not a valid date - it must be in the format {1}",
-
-    triggerClass : 'x-form-date-trigger',
-
-
-    // private
-    defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"},
-
-    // private
-    validateValue : function(value){
-        value = this.formatDate(value);
-        if(!Ext.form.DateField.superclass.validateValue.call(this, value)){
-            return false;
-        }
-        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
-             return true;
-        }
-        var svalue = value;
-        value = this.parseDate(value);
-        if(!value){
-            this.markInvalid(String.format(this.invalidText, svalue, this.format));
-            return false;
-        }
-        var time = value.getTime();
-        if(this.minValue && time < this.minValue.getTime()){
-            this.markInvalid(String.format(this.minText, this.formatDate(this.minValue)));
-            return false;
-        }
-        if(this.maxValue && time > this.maxValue.getTime()){
-            this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue)));
-            return false;
-        }
-        if(this.disabledDays){
-            var day = value.getDay();
-            for(var i = 0; i < this.disabledDays.length; i++) {
-            	if(day === this.disabledDays[i]){
-            	    this.markInvalid(this.disabledDaysText);
-                    return false;
-            	}
-            }
-        }
-        var fvalue = this.formatDate(value);
-        if(this.ddMatch && this.ddMatch.test(fvalue)){
-            this.markInvalid(String.format(this.disabledDatesText, fvalue));
-            return false;
-        }
-        return true;
-    },
-
-    // private
-    // Provides logic to override the default TriggerField.validateBlur which just returns true
-    validateBlur : function(){
-        return !this.menu || !this.menu.isVisible();
-    },
-
-
-    getValue : function(){
-        return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || "";
-    },
-
-
-    setValue : function(date){
-        Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
-    },
-
-    // private
-    parseDate : function(value){
-        if(!value || value instanceof Date){
-            return value;
-        }
-        var v = Date.parseDate(value, this.format);
-        if(!v && this.altFormats){
-            if(!this.altFormatsArray){
-                this.altFormatsArray = this.altFormats.split("|");
-            }
-            for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){
-                v = Date.parseDate(value, this.altFormatsArray[i]);
-            }
-        }
-        return v;
-    },
-
-    // private
-    formatDate : function(date){
-        return (!date || !(date instanceof Date)) ?
-               date : date.dateFormat(this.format);
-    },
-
-    // private
-    menuListeners : {
-        select: function(m, d){
-            this.setValue(d);
-        },
-        show : function(){ // retain focus styling
-            this.onFocus();
-        },
-        hide : function(){
-            this.focus.defer(10, this);
-            var ml = this.menuListeners;
-            this.menu.un("select", ml.select,  this);
-            this.menu.un("show", ml.show,  this);
-            this.menu.un("hide", ml.hide,  this);
-        }
-    },
-
-    // private
-    // Implements the default empty TriggerField.onTriggerClick function to display the DatePicker
-    onTriggerClick : function(){
-        if(this.disabled){
-            return;
-        }
-        if(this.menu == null){
-            this.menu = new Ext.menu.DateMenu();
-        }
-        Ext.apply(this.menu.picker,  {
-            minDate : this.minValue,
-            maxDate : this.maxValue,
-            disabledDatesRE : this.ddMatch,
-            disabledDatesText : this.disabledDatesText,
-            disabledDays : this.disabledDays,
-            disabledDaysText : this.disabledDaysText,
-            format : this.format,
-            minText : String.format(this.minText, this.formatDate(this.minValue)),
-            maxText : String.format(this.maxText, this.formatDate(this.maxValue))
-        });
-        this.menu.on(Ext.apply({}, this.menuListeners, {
-            scope:this
-        }));
-        this.menu.picker.setValue(this.getValue() || new Date());
-        this.menu.show(this.el, "tl-bl?");
-    },
-
-    beforeBlur : function(){
-        var v = this.parseDate(this.getRawValue());
-        if(v){
-            this.setValue(v);
-        }
-    }
-});
-
-Ext.form.ComboBox = function(config){
-    Ext.form.ComboBox.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        'expand' : true,
-
-        'collapse' : true,
-
-        'beforeselect' : true,
-
-        'select' : true,
-
-        'beforequery': true
-    });
-    if(this.transform){
-        var s = Ext.getDom(this.transform);
-        if(!this.hiddenName){
-            this.hiddenName = s.name;
-        }
-        if(!this.store){
-            this.mode = 'local';
-            var d = [], opts = s.options;
-            for(var i = 0, len = opts.length;i < len; i++){
-                var o = opts[i];
-                var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text;
-                if(o.selected) {
-                    this.value = value;
-                }
-                d.push([value, o.text]);
-            }
-            this.store = new Ext.data.SimpleStore({
-                'id': 0,
-                fields: ['value', 'text'],
-                data : d
-            });
-            this.valueField = 'value';
-            this.displayField = 'text';
-        }
-        s.name = Ext.id(); // wipe out the name in case somewhere else they have a reference
-        if(!this.lazyRender){
-            this.target = true;
-            this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);
-            s.parentNode.removeChild(s); // remove it
-            this.render(this.el.parentNode);
-        }else{
-            s.parentNode.removeChild(s); // remove it
-        }
-
-    }
-    this.selectedIndex = -1;
-    if(this.mode == 'local'){
-        if(config.queryDelay === undefined){
-            this.queryDelay = 10;
-        }
-        if(config.minChars === undefined){
-            this.minChars = 0;
-        }
-    }
-};
-
-Ext.extend(Ext.form.ComboBox, Ext.form.TriggerField, {
-
-
-
-
-    // private
-    defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},
-
-    listWidth: undefined,
-
-    displayField: undefined,
-
-    valueField: undefined,
-
-    hiddenName: undefined,
-
-    listClass: '',
-
-    selectedClass: 'x-combo-selected',
-
-    triggerClass : 'x-form-arrow-trigger',
-
-    shadow:'sides',
-
-    listAlign: 'tl-bl?',
-
-    maxHeight: 300,
-
-    triggerAction: 'query',
-
-    minChars : 4,
-
-    typeAhead: false,
-
-    queryDelay: 500,
-
-    pageSize: 0,
-
-    selectOnFocus:false,
-
-    queryParam: 'query',
-
-    loadingText: 'Loading...',
-
-    resizable: false,
-
-    handleHeight : 8,
-
-    editable: true,
-
-    allQuery: '',
-
-    mode: 'remote',
-
-    minListWidth : 70,
-
-    forceSelection:false,
-
-    typeAheadDelay : 250,
-
-    valueNotFoundText : undefined,
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
-        if(this.hiddenName){
-            this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: this.hiddenName},
-                    'before', true);
-            this.hiddenField.value =
-                this.hiddenValue !== undefined ? this.hiddenValue :
-                this.value !== undefined ? this.value : '';
-
-            // prevent input submission
-            this.el.dom.removeAttribute('name');
-        }
-        if(Ext.isGecko){
-            this.el.dom.setAttribute('autocomplete', 'off');
-        }
-
-        var cls = 'x-combo-list';
-
-        this.list = new Ext.Layer({
-            shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false
-        });
-
-        var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
-        this.list.setWidth(lw);
-        this.list.swallowEvent('mousewheel');
-        this.assetHeight = 0;
-
-        if(this.title){
-            this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
-            this.assetHeight += this.header.getHeight();
-        }
-
-        this.innerList = this.list.createChild({cls:cls+'-inner'});
-        this.innerList.on('mouseover', this.onViewOver, this);
-        this.innerList.on('mousemove', this.onViewMove, this);
-        this.innerList.setWidth(lw - this.list.getFrameWidth('lr'))
-
-        if(this.pageSize){
-            this.footer = this.list.createChild({cls:cls+'-ft'});
-            this.pageTb = new Ext.PagingToolbar(this.footer, this.store,
-                    {pageSize: this.pageSize});
-            this.assetHeight += this.footer.getHeight();
-        }
-
-        if(!this.tpl){
-            this.tpl = '<div class="'+cls+'-item">{' + this.displayField + '}</div>';
-        }
-
-        this.view = new Ext.View(this.innerList, this.tpl, {
-            singleSelect:true, store: this.store, selectedClass: this.selectedClass
-        });
-
-        this.view.on('click', this.onViewClick, this);
-
-        this.store.on('beforeload', this.onBeforeLoad, this);
-        this.store.on('load', this.onLoad, this);
-        this.store.on('loadexception', this.collapse, this);
-
-        if(this.resizable){
-            this.resizer = new Ext.Resizable(this.list,  {
-               pinned:true, handles:'se'
-            });
-            this.resizer.on('resize', function(r, w, h){
-                this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;
-                this.listWidth = w;
-                this.restrictHeight();
-            }, this);
-            this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px');
-        }
-        if(!this.editable){
-            this.editable = true;
-            this.setEditable(false);
-        }
-    },
-
-    // private
-    initEvents : function(){
-        Ext.form.ComboBox.superclass.initEvents.call(this);
-
-        this.keyNav = new Ext.KeyNav(this.el, {
-            "up" : function(e){
-                this.inKeyMode = true;
-                this.selectPrev();
-            },
-
-            "down" : function(e){
-                if(!this.isExpanded()){
-                    this.onTriggerClick();
-                }else{
-                    this.inKeyMode = true;
-                    this.selectNext();
-                }
-            },
-
-            "enter" : function(e){
-                this.onViewClick();
-                //return true;
-            },
-
-            "esc" : function(e){
-                this.collapse();
-            },
-
-            "tab" : function(e){
-                this.onViewClick(false);
-                return true;
-            },
-
-            scope : this,
-
-            doRelay : function(foo, bar, hname){
-                if(hname == 'down' || this.scope.isExpanded()){
-                   return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
-                }
-                return true;
-            }
-        });
-        this.queryDelay = Math.max(this.queryDelay || 10,
-                this.mode == 'local' ? 10 : 250);
-        this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
-        if(this.typeAhead){
-            this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
-        }
-        if(this.editable !== false){
-            this.el.on("keyup", this.onKeyUp, this);
-        }
-        if(this.forceSelection){
-            this.on('blur', this.doForce, this);
-        }
-    },
-
-    onDestroy : function(){
-        if(this.view){
-            this.view.setStore(null);
-            this.view.el.removeAllListeners();
-            this.view.el.remove();
-            this.view.purgeListeners();
-        }
-        if(this.list){
-            this.list.destroy();
-        }
-        if(this.store){
-            this.store.un('beforeload', this.onBeforeLoad, this);
-            this.store.un('load', this.onLoad, this);
-            this.store.un('loadexception', this.collapse, this);
-        }
-        Ext.form.ComboBox.superclass.onDestroy.call(this);
-    },
-
-    // private
-    fireKey : function(e){
-        if(e.isNavKeyPress() && !this.list.isVisible()){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-    // private
-    onResize: function(w, h){
-        Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
-        if(this.list && this.listWidth === undefined){
-            var lw = Math.max(w, this.minListWidth);
-            this.list.setWidth(lw);
-            this.innerList.setWidth(lw - this.list.getFrameWidth('lr'))
-        }
-    },
-
-
-    setEditable : function(value){
-        if(value == this.editable){
-            return;
-        }
-        this.editable = value;
-        if(!value){
-            this.el.dom.setAttribute('readOnly', true);
-            this.el.on('mousedown', this.onTriggerClick,  this);
-            this.el.addClass('x-combo-noedit');
-        }else{
-            this.el.dom.setAttribute('readOnly', false);
-            this.el.un('mousedown', this.onTriggerClick,  this);
-            this.el.removeClass('x-combo-noedit');
-        }
-    },
-
-    // private
-    onBeforeLoad : function(){
-        if(!this.hasFocus){
-            return;
-        }
-        this.innerList.update(this.loadingText ?
-               '<div class="loading-indicator">'+this.loadingText+'</div>' : '');
-        this.restrictHeight();
-        this.selectedIndex = -1;
-    },
-
-    // private
-    onLoad : function(){
-        if(!this.hasFocus){
-            return;
-        }
-        if(this.store.getCount() > 0){
-            this.expand();
-            this.restrictHeight();
-            if(this.lastQuery == this.allQuery){
-                if(this.editable){
-                    this.el.dom.select();
-                }
-                if(!this.selectByValue(this.value, true)){
-                    this.select(0, true);
-                }
-            }else{
-                this.selectNext();
-                if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){
-                    this.taTask.delay(this.typeAheadDelay);
-                }
-            }
-        }else{
-            this.onEmptyResults();
-        }
-        //this.el.focus();
-    },
-
-    // private
-    onTypeAhead : function(){
-        if(this.store.getCount() > 0){
-            var r = this.store.getAt(0);
-            var newValue = r.data[this.displayField];
-            var len = newValue.length;
-            var selStart = this.getRawValue().length;
-            if(selStart != len){
-                this.setRawValue(newValue);
-                this.selectText(selStart, newValue.length);
-            }
-        }
-    },
-
-    // private
-    onSelect : function(record, index){
-        if(this.fireEvent('beforeselect', this, record, index) !== false){
-            this.setValue(record.data[this.valueField || this.displayField]);
-            this.collapse();
-            this.fireEvent('select', this, record, index);
-        }
-    },
-
-
-    getValue : function(){
-        if(this.valueField){
-            return typeof this.value != 'undefined' ? this.value : '';
-        }else{
-            return Ext.form.ComboBox.superclass.getValue.call(this);
-        }
-    },
-
-
-    clearValue : function(){
-        if(this.hiddenField){
-            this.hiddenField.value = '';
-        }
-        this.setRawValue('');
-        this.lastSelectionText = '';
-    },
-
-
-    setValue : function(v){
-        var text = v;
-        if(this.valueField){
-            var r = this.findRecord(this.valueField, v);
-            if(r){
-                text = r.data[this.displayField];
-            }else if(this.valueNotFoundText !== undefined){
-                text = this.valueNotFoundText;
-            }
-        }
-        this.lastSelectionText = text;
-        if(this.hiddenField){
-            this.hiddenField.value = v;
-        }
-        Ext.form.ComboBox.superclass.setValue.call(this, text);
-        this.value = v;
-    },
-
-    // private
-    findRecord : function(prop, value){
-        var record;
-        if(this.store.getCount() > 0){
-            this.store.each(function(r){
-                if(r.data[prop] == value){
-                    record = r;
-                    return false;
-                }
-            });
-        }
-        return record;
-    },
-
-    // private
-    onViewMove : function(e, t){
-        this.inKeyMode = false;
-    },
-
-    // private
-    onViewOver : function(e, t){
-        if(this.inKeyMode){ // prevent key nav and mouse over conflicts
-            return;
-        }
-        var item = this.view.findItemFromChild(t);
-        if(item){
-            var index = this.view.indexOf(item);
-            this.select(index, false);
-        }
-    },
-
-    // private
-    onViewClick : function(doFocus){
-        var index = this.view.getSelectedIndexes()[0];
-        var r = this.store.getAt(index);
-        if(r){
-            this.onSelect(r, index);
-        }
-        if(doFocus !== false){
-            this.el.focus();
-        }
-    },
-
-    // private
-    restrictHeight : function(){
-        this.innerList.dom.style.height = '';
-        var inner = this.innerList.dom;
-        var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight);
-        this.innerList.setHeight(h < this.maxHeight ? 'auto' : this.maxHeight);
-        this.list.beginUpdate();
-        this.list.setHeight(this.innerList.getHeight()+this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight);
-        this.list.alignTo(this.el, this.listAlign);
-        this.list.endUpdate();
-    },
-
-    // private
-    onEmptyResults : function(){
-        this.collapse();
-    },
-
-
-    isExpanded : function(){
-        return this.list.isVisible();
-    },
-
-
-    selectByValue : function(v, scrollIntoView){
-        if(v !== undefined && v !== null){
-            var r = this.findRecord(this.valueField || this.displayField, v);
-            if(r){
-                this.select(this.store.indexOf(r), scrollIntoView);
-                return true;
-            }
-        }
-        return false;
-    },
-
-
-    select : function(index, scrollIntoView){
-        this.selectedIndex = index;
-        this.view.select(index);
-        if(scrollIntoView !== false){
-            var el = this.view.getNode(index);
-            if(el){
-                this.innerList.scrollChildIntoView(el, false);
-            }
-        }
-    },
-
-    // private
-    selectNext : function(){
-        var ct = this.store.getCount();
-        if(ct > 0){
-            if(this.selectedIndex == -1){
-                this.select(0);
-            }else if(this.selectedIndex < ct-1){
-                this.select(this.selectedIndex+1);
-            }
-        }
-    },
-
-    // private
-    selectPrev : function(){
-        var ct = this.store.getCount();
-        if(ct > 0){
-            if(this.selectedIndex == -1){
-                this.select(0);
-            }else if(this.selectedIndex != 0){
-                this.select(this.selectedIndex-1);
-            }
-        }
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(this.editable !== false && !e.isSpecialKey()){
-            this.lastKey = e.getKey();
-            this.dqTask.delay(this.queryDelay);
-        }
-    },
-
-    // private
-    validateBlur : function(){
-        return !this.list || !this.list.isVisible();
-    },
-
-    // private
-    initQuery : function(){
-        this.doQuery(this.getRawValue());
-    },
-
-    // private
-    doForce : function(){
-        if(this.el.dom.value.length > 0){
-            this.el.dom.value =
-                this.lastSelectionText === undefined ? '' : this.lastSelectionText;
-            this.applyEmptyText();
-        }
-    },
-
-
-    doQuery : function(q, forceAll){
-        if(q === undefined || q === null){
-            q = '';
-        }
-        var qe = {
-            query: q,
-            forceAll: forceAll,
-            combo: this,
-            cancel:false
-        };
-        if(this.fireEvent('beforequery', qe)===false || qe.cancel){
-            return false;
-        }
-        q = qe.query;
-        forceAll = qe.forceAll;
-        if(forceAll === true || (q.length >= this.minChars)){
-            if(this.lastQuery != q){
-                this.lastQuery = q;
-                if(this.mode == 'local'){
-                    this.selectedIndex = -1;
-                    if(forceAll){
-                        this.store.clearFilter();
-                    }else{
-                        this.store.filter(this.displayField, q);
-                    }
-                    this.onLoad();
-                }else{
-                    this.store.baseParams[this.queryParam] = q;
-                    this.store.load({
-                        params: this.getParams(q)
-                    });
-                    this.expand();
-                }
-            }else{
-                this.selectedIndex = -1;
-                this.onLoad();
-            }
-        }
-    },
-
-    // private
-    getParams : function(q){
-        var p = {};
-        //p[this.queryParam] = q;
-        if(this.pageSize){
-            p.start = 0;
-            p.limit = this.pageSize;
-        }
-        return p;
-    },
-
-
-    collapse : function(){
-        if(!this.isExpanded()){
-            return;
-        }
-        this.list.hide();
-        Ext.get(document).un('mousedown', this.collapseIf, this);
-        this.fireEvent('collapse', this);
-    },
-
-    // private
-    collapseIf : function(e){
-        if(!e.within(this.wrap) && !e.within(this.list)){
-            this.collapse();
-        }
-    },
-
-
-    expand : function(){
-        if(this.isExpanded() || !this.hasFocus){
-            return;
-        }
-        this.list.alignTo(this.el, this.listAlign);
-        this.list.show();
-        Ext.get(document).on('mousedown', this.collapseIf, this);
-        this.fireEvent('expand', this);
-    },
-
-    // private
-    // Implements the default empty TriggerField.onTriggerClick function
-    onTriggerClick : function(){
-        if(this.disabled){
-            return;
-        }
-        if(this.isExpanded()){
-            this.collapse();
-            this.el.focus();
-        }else {
-            this.hasFocus = true;
-            if(this.triggerAction == 'all') {
-                this.doQuery(this.allQuery, true);
-            } else {
-                this.doQuery(this.getRawValue());
-            }
-            this.el.focus();
-        }
-    }
-});
-
-Ext.form.Checkbox = function(config){
-    Ext.form.Checkbox.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        check : true
-    });
-};
-
-Ext.extend(Ext.form.Checkbox, Ext.form.Field,  {
-
-    focusClass : "x-form-check-focus",
-
-    fieldClass: "x-form-field",
-
-    checked: false,
-
-    // private
-    defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
-
-    boxLabel : undefined,
-
-    //
-    onResize : function(){
-        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
-        if(!this.boxLabel){
-            this.el.alignTo(this.wrap, 'c-c');
-        }
-    },
-
-    initEvents : function(){
-        Ext.form.Checkbox.superclass.initEvents.call(this);
-        this.el.on("click", this.onClick,  this);
-        this.el.on("change", this.onClick,  this);
-    },
-
-
-    getResizeEl : function(){
-        return this.wrap;
-    },
-
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
-        if(this.inputValue !== undefined){
-            this.el.dom.value = this.inputValue;
-        }
-        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
-        if(this.boxLabel){
-            this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
-        }
-        if(this.checked){
-            this.setValue(true);
-        }
-    },
-
-    // private
-    initValue : Ext.emptyFn,
-
-
-    getValue : function(){
-        if(this.rendered){
-            return this.el.dom.checked;
-        }
-        return false;
-    },
-
-    onClick : function(){
-        if(this.el.dom.checked != this.checked){
-            this.setValue(this.el.dom.checked);
-        }
-    },
-
-
-    setValue : function(v){
-        this.checked = (v === true || v === 'true' || v == '1');
-        if(this.el && this.el.dom){
-            this.el.dom.checked = this.checked;
-        }
-        this.fireEvent("check", this, this.checked);
-    }
-});
-
-Ext.form.Radio = function(){
-    Ext.form.Radio.superclass.constructor.apply(this, arguments);
-};
-Ext.extend(Ext.form.Radio, Ext.form.Checkbox, {
-    inputType: 'radio',
-
-
-    getGroupValue : function(){
-        return this.el.up('form').child('input[name='+this.el.dom.name+']:checked', true).value;
-    }
-});
-
-
-Ext.form.HtmlEditor = Ext.extend(Ext.form.Field, {
-
-    enableFormat : true,
-
-    enableFontSize : true,
-
-    enableColors : true,
-
-    enableAlignments : true,
-
-    enableLists : true,
-
-    enableSourceEdit : true,
-
-    // private properties
-    validationEvent : false,
-    deferHeight: true,
-    initialized : false,
-    activated : false,
-    sourceEditMode : false,
-    onFocus : Ext.emptyFn,
-    iframePad:3,
-    defaultAutoCreate : {
-        tag: "textarea",
-        style:"width:500px;height:300px;",
-        autocomplete: "off"
-    },
-
-    // private
-    initComponent : function(){
-        this.addEvents({
-
-            initialize: true,
-
-            beforesync: true,
-
-            beforepush: true,
-
-            sync: true,
-
-            push: true,
-
-            editmodechange: true
-        })
-    },
-
-
-    createToolbar : function(editor){
-
-        function btn(id, toggle, handler){
-            return {
-                id : id,
-                cls : 'x-btn-icon x-edit-'+id,
-                enableToggle:toggle !== false,
-                scope: editor,
-                handler:handler||editor.relayBtnCmd,
-                clickEvent:'mousedown',
-                tooltip: editor.buttonTips[id] || undefined,
-                tabIndex:-1
-            };
-        }
-
-        // build the toolbar
-        var tb = new Ext.Toolbar(this.wrap.dom.firstChild);
-
-        // stop form submits
-        tb.el.on('click', function(e){
-            e.preventDefault();
-        });
-
-        if(this.enableFormat){
-            tb.add(
-                btn('bold'),
-                btn('italic'),
-                btn('underline')
-            );
-        };
-
-        if(this.enableFontSize){
-            tb.add(
-                '-',
-                btn('increasefontsize', false, this.adjustFont),
-                btn('decreasefontsize', false, this.adjustFont)
-            );
-        };
-
-        if(this.enableColors){
-            tb.add(
-                '-', {
-                    id:'forecolor',
-                    cls:'x-btn-icon x-edit-forecolor',
-                    clickEvent:'mousedown',
-                    tooltip: editor.buttonTips['forecolor'] || undefined,
-                    tabIndex:-1,
-                    menu : new Ext.menu.ColorMenu({
-                        allowReselect: true,
-                        focus: Ext.emptyFn,
-                        value:'000000',
-                        plain:true,
-                        selectHandler: function(cp, color){
-                            this.execCmd('forecolor', Ext.isSafari || Ext.isIE ? '#'+color : color);
-                            this.deferFocus();
-                        },
-                        scope: this,
-                        clickEvent:'mousedown'
-                    })
-                }, {
-                    id:'backcolor',
-                    cls:'x-btn-icon x-edit-backcolor',
-                    clickEvent:'mousedown',
-                    tooltip: editor.buttonTips['backcolor'] || undefined,
-                    tabIndex:-1,
-                    menu : new Ext.menu.ColorMenu({
-                        focus: Ext.emptyFn,
-                        value:'FFFFFF',
-                        plain:true,
-                        allowReselect: true,
-                        selectHandler: function(cp, color){
-                            if(Ext.isGecko){
-                                this.execCmd('useCSS', false);
-                                this.execCmd('hilitecolor', color);
-                                this.execCmd('useCSS', true);
-                                this.deferFocus();
-                            }else{
-                                this.execCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isSafari || Ext.isIE ? '#'+color : color);
-                                this.deferFocus();
-                            }
-                        },
-                        scope:this,
-                        clickEvent:'mousedown'
-                    })
-                }
-            );
-        };
-
-        if(this.enableAlignments){
-            tb.add(
-                '-',
-                btn('justifyleft'),
-                btn('justifycenter'),
-                btn('justifyright')
-            );
-        };
-
-        if(!Ext.isSafari){
-            if(this.enableLists){
-                tb.add(
-                    '-',
-                    btn('insertorderedlist'),
-                    btn('insertunorderedlist')
-                );
-            }
-            if(this.enableSourceEdit){
-                tb.add(
-                    '-',
-                    btn('sourceedit', true, function(btn){
-                        this.toggleSourceEdit(btn.pressed);
-                    })
-                );
-            }
-        }
-
-        this.tb = tb;
-    },
-
-
-    getDocMarkup : function(){
-        return '<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.HtmlEditor.superclass.onRender.call(this, ct, position);
-        this.el.dom.style.border = '0 none';
-        this.el.addClass('x-hidden');
-        if(Ext.isIE){ // fix IE 1px bogus margin
-            this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')
-        }
-        this.wrap = this.el.wrap({
-            cls:'x-html-editor-wrap', cn:{cls:'x-html-editor-tb'}
-        });
-
-
-        this.createToolbar(this);
-
-        this.tb.items.each(function(item){
-           if(item.id != 'sourceedit'){
-                item.disable();
-            }
-        });
-
-        var iframe = document.createElement('iframe');
-        iframe.name = Ext.id();
-        iframe.frameBorder = 'no';
-
-        iframe.src="javascript:false";
-
-        this.wrap.dom.appendChild(iframe);
-
-        this.iframe = iframe;
-
-        if(Ext.isIE){
-            this.doc = iframe.contentWindow.document;
-            this.win = iframe.contentWindow;
-        } else {
-            this.doc = (iframe.contentDocument || window.frames[iframe.name].document);
-            this.win = window.frames[iframe.name];
-        }
-        this.doc.designMode = 'on';
-        this.doc.open();
-        this.doc.write(this.getDocMarkup())
-        this.doc.close();
-
-        var task = { // must defer to wait for browser to be ready
-            run : function(){
-                if(this.doc.body || this.doc.readyState == 'complete'){
-                    this.doc.designMode="on";
-                    Ext.TaskMgr.stop(task);
-                    this.initEditor.defer(10, this);
-                }
-            },
-            interval : 10,
-            duration:10000,
-            scope: this
-        };
-        Ext.TaskMgr.start(task);
-
-        if(!this.width){
-            this.setSize(this.el.getSize());
-        }
-    },
-
-    // private
-    onResize : function(w, h){
-        Ext.form.HtmlEditor.superclass.onResize.apply(this, arguments);
-        if(this.el && this.iframe){
-            if(typeof w == 'number'){
-                var aw = w - this.wrap.getFrameWidth('lr');
-                this.el.setWidth(this.adjustWidth('textarea', aw));
-                this.iframe.style.width = aw + 'px';
-            }
-            if(typeof h == 'number'){
-                var ah = h - this.wrap.getFrameWidth('tb') - this.tb.el.getHeight();
-                this.el.setHeight(this.adjustWidth('textarea', ah));
-                this.iframe.style.height = ah + 'px';
-                if(this.doc){
-                    (this.doc.body || this.doc.documentElement).style.height = (ah - (this.iframePad*2)) + 'px';
-                }
-            }
-        }
-    },
-
-
-    toggleSourceEdit : function(sourceEditMode){
-        if(sourceEditMode === undefined){
-            sourceEditMode = !this.sourceEditMode;
-        }
-        this.sourceEditMode = sourceEditMode === true;
-        var btn = this.tb.items.get('sourceedit');
-        if(btn.pressed !== this.sourceEditMode){
-            btn.toggle(this.sourceEditMode);
-            return;
-        }
-        if(this.sourceEditMode){
-            this.tb.items.each(function(item){
-                if(item.id != 'sourceedit'){
-                    item.disable();
-                }
-            });
-            this.syncValue();
-            this.iframe.className = 'x-hidden';
-            this.el.removeClass('x-hidden');
-            this.el.focus();
-        }else{
-            if(this.initialized){
-                this.tb.items.each(function(item){
-                    item.enable();
-                });
-            }
-            this.pushValue();
-            this.iframe.className = '';
-            this.el.addClass('x-hidden');
-            this.deferFocus();
-        }
-        this.setSize(this.wrap.getSize());
-        this.fireEvent('editmodechange', this, this.sourceEditMode);
-    },
-
-    // private (for BoxComponent)
-    adjustSize : Ext.BoxComponent.prototype.adjustSize,
-
-    // private (for BoxComponent)
-    getResizeEl : function(){
-        return this.wrap;
-    },
-
-    // private (for BoxComponent)
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    initEvents : function(){
-        this.originalValue = this.getValue();
-    },
-
-
-    markInvalid : Ext.emptyFn,
-
-    clearInvalid : Ext.emptyFn,
-
-    setValue : function(v){
-        Ext.form.HtmlEditor.superclass.setValue.call(this, v);
-        this.pushValue();
-    },
-
-
-    cleanHtml : function(html){
-        html = String(html);
-        if(html.length > 5){
-            if(Ext.isSafari){ // strip safari nonsense
-                html = html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi, '');
-            }
-        }
-        if(html == '&nbsp;'){
-            html = '';
-        }
-        return html;
-    },
-
-
-    syncValue : function(){
-        if(this.initialized){
-            var bd = (this.doc.body || this.doc.documentElement);
-            var html = bd.innerHTML;
-            if(Ext.isSafari){
-                var bs = bd.getAttribute('style'); // Safari puts text-align styles on the body element!
-                var m = bs.match(/text-align:(.*?);/i);
-                if(m && m[1]){
-                    html = '<div style="'+m[0]+'">' + html + '</div>';
-                }
-            }
-            html = this.cleanHtml(html);
-            if(this.fireEvent('beforesync', this, html) !== false){
-                this.el.dom.value = html;
-                this.fireEvent('sync', this, html);
-            }
-        }
-    },
-
-
-    pushValue : function(){
-        if(this.initialized){
-            var v = this.el.dom.value;
-            if(v.length < 1){
-                v = '&nbsp;';
-            }
-            if(this.fireEvent('beforepush', this, v) !== false){
-                (this.doc.body || this.doc.documentElement).innerHTML = v;
-                this.fireEvent('push', this, v);
-            }
-        }
-    },
-
-    // private
-    deferFocus : function(){
-        this.focus.defer(10, this);
-    },
-
-    // doc'ed in Field
-    focus : function(){
-        if(this.win && !this.sourceEditMode){
-            this.win.focus();
-        }else{
-            this.el.focus();
-        }
-    },
-
-    // private
-    initEditor : function(){
-        var dbody = (this.doc.body || this.doc.documentElement);
-        var ss = this.el.getStyles('font-size', 'font-family', 'background-image', 'background-repeat');
-        ss['background-attachment'] = 'fixed'; // w3c
-        dbody.bgProperties = 'fixed'; // ie
-        Ext.DomHelper.applyStyles(dbody, ss);
-        Ext.EventManager.on(this.doc, {
-            'mousedown': this.onEditorEvent,
-            'dblclick': this.onEditorEvent,
-            'click': this.onEditorEvent,
-            'keyup': this.onEditorEvent,
-            buffer:100,
-            scope: this
-        });
-        if(Ext.isGecko){
-            Ext.EventManager.on(this.doc, 'keypress', this.applyCommand, this);
-        }
-        if(Ext.isIE || Ext.isSafari || Ext.isOpera){
-            Ext.EventManager.on(this.doc, 'keydown', this.fixTab, this);
-        }
-        this.initialized = true;
-
-        this.fireEvent('initialize', this);
-        this.pushValue();
-    },
-
-    // private
-    onDestroy : function(){
-        if(this.rendered){
-            this.tb.items.each(function(item){
-                if(item.menu){
-                    item.menu.removeAll();
-                    if(item.menu.el){
-                        item.menu.el.destroy();
-                    }
-                }
-                item.destroy();
-            });
-            this.wrap.dom.innerHTML = '';
-            this.wrap.remove();
-        }
-    },
-
-    // private
-    onFirstFocus : function(){
-        this.activated = true;
-        this.tb.items.each(function(item){
-           item.enable();
-        });
-        if(Ext.isGecko){ // prevent silly gecko errors
-            this.win.focus();
-            var s = this.win.getSelection();
-            if(!s.focusNode || s.focusNode.nodeType != 3){
-                var r = s.getRangeAt(0);
-                r.selectNodeContents((this.doc.body || this.doc.documentElement));
-                r.collapse(true);
-                this.deferFocus();
-            }
-            try{
-                this.execCmd('useCSS', true);
-                this.execCmd('styleWithCSS', false);
-            }catch(e){}
-        }
-    },
-
-    // private
-    adjustFont: function(btn){
-        var adjust = btn.id == 'increasefontsize' ? 1 : -1;
-        if(Ext.isSafari){ // safari
-            adjust *= 2;
-        }
-        var v = parseInt(this.doc.queryCommandValue('FontSize')|| 3, 10);
-        v = Math.max(1, v+adjust);
-        this.execCmd('FontSize', v + (Ext.isSafari ? 'px' : 0));
-    },
-
-    onEditorEvent : function(e){
-        this.updateToolbar();
-    },
-
-
-
-    updateToolbar: function(){
-
-        if(!this.activated){
-            this.onFirstFocus();
-            return;
-        }
-
-        var btns = this.tb.items.map, doc = this.doc;
-
-        if(this.enableFormat){
-            btns.bold.toggle(doc.queryCommandState('bold'));
-            btns.italic.toggle(doc.queryCommandState('italic'));
-            btns.underline.toggle(doc.queryCommandState('underline'));
-        }
-        if(this.enableAlignments){
-            btns.justifyleft.toggle(doc.queryCommandState('justifyleft'));
-            btns.justifycenter.toggle(doc.queryCommandState('justifycenter'));
-            btns.justifyright.toggle(doc.queryCommandState('justifyright'));
-        }
-        if(!Ext.isSafari && this.enableLists){
-            btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist'));
-            btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist'));
-        }
-        if(this.enableColors){
-            btns.forecolor.menu.hide();
-            btns.backcolor.menu.hide();
-        }
-
-        this.syncValue();
-    },
-
-    // private
-    relayBtnCmd : function(btn){
-        this.relayCmd(btn.id);
-    },
-
-
-    relayCmd : function(cmd, value){
-        this.win.focus();
-        this.execCmd(cmd, value);
-        this.updateToolbar();
-        this.deferFocus();
-    },
-
-
-    execCmd : function(cmd, value){
-        this.doc.execCommand(cmd, false, value === undefined ? null : value);
-    },
-
-    // private
-    applyCommand : function(e){
-        if(e.ctrlKey){
-            var c = e.getCharCode(), cmd;
-            if(c > 0){
-                c = String.fromCharCode(c);
-                switch(c){
-                    case 'b':
-                        cmd = 'bold';
-                    break;
-                    case 'i':
-                        cmd = 'italic';
-                    break;
-                    case 'u':
-                        cmd = 'underline';
-                    break;
-                }
-                if(cmd){
-                    this.win.focus();
-                    this.execCmd(cmd);
-                    this.deferFocus();
-                    e.preventDefault();
-                }
-            }
-        }
-    },
-
-    // private
-    fixTab : function(e){
-        if(e.getKey() == e.TAB){
-            e.stopEvent();
-            if(Ext.isIE){
-                var r = this.doc.selection.createRange();
-                if(r){
-                    r.collapse(true);
-                    r.pasteHTML('&nbsp;&nbsp;&nbsp;&nbsp;');
-                    this.deferFocus();
-                }
-            }else if(Ext.isOpera){
-                this.win.focus();
-                this.execCmd('InsertHTML','&nbsp;&nbsp;&nbsp;&nbsp;');
-                this.deferFocus();
-            }else{
-                this.execCmd('InsertText','\t');
-                this.deferFocus();
-            }
-        }
-    },
-
-
-    getToolbar : function(){
-        return this.tb;
-    },
-
-
-    buttonTips : {
-        bold : {
-            title: 'Bold (Ctrl+B)',
-            text: 'Make the selected text bold.',
-            cls: 'x-html-editor-tip'
-        },
-        italic : {
-            title: 'Italic (Ctrl+I)',
-            text: 'Make the selected text italic.',
-            cls: 'x-html-editor-tip'
-        },
-        underline : {
-            title: 'Underline (Ctrl+U)',
-            text: 'Underline the selected text.',
-            cls: 'x-html-editor-tip'
-        },
-        increasefontsize : {
-            title: 'Grow Text',
-            text: 'Increase the font size.',
-            cls: 'x-html-editor-tip'
-        },
-        decreasefontsize : {
-            title: 'Shrink Text',
-            text: 'Decrease the font size.',
-            cls: 'x-html-editor-tip'
-        },
-        backcolor : {
-            title: 'Text Highlight Color',
-            text: 'Change the background color of the selected text.',
-            cls: 'x-html-editor-tip'
-        },
-        forecolor : {
-            title: 'Font Color',
-            text: 'Change the color of the selected text.',
-            cls: 'x-html-editor-tip'
-        },
-        justifyleft : {
-            title: 'Align Text Left',
-            text: 'Align text to the left.',
-            cls: 'x-html-editor-tip'
-        },
-        justifycenter : {
-            title: 'Center Text',
-            text: 'Center text in the editor.',
-            cls: 'x-html-editor-tip'
-        },
-        justifyright : {
-            title: 'Align Text Right',
-            text: 'Align text to the right.',
-            cls: 'x-html-editor-tip'
-        },
-        insertunorderedlist : {
-            title: 'Bullet List',
-            text: 'Start a bulleted list.',
-            cls: 'x-html-editor-tip'
-        },
-        insertorderedlist : {
-            title: 'Numbered List',
-            text: 'Start a numbered list.',
-            cls: 'x-html-editor-tip'
-        },
-        sourceedit : {
-            title: 'Source Edit',
-            text: 'Switch to source editing mode.',
-            cls: 'x-html-editor-tip'
-        }
-    }
-
-    // hide stuff that is not compatible
-
-
-
-
-
-
-
-
-
-
-
-});
-
-Ext.form.BasicForm = function(el, config){
-    Ext.apply(this, config);
-
-    this.items = new Ext.util.MixedCollection(false, function(o){
-        return o.id || (o.id = Ext.id());
-    });
-    this.addEvents({
-
-        beforeaction: true,
-
-        actionfailed : true,
-
-        actioncomplete : true
-    });
-    if(el){
-        this.initEl(el);
-    }
-    Ext.form.BasicForm.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.form.BasicForm, Ext.util.Observable, {
-
-
-
-
-
-
-
-    timeout: 30,
-
-    // private
-    activeAction : null,
-
-
-    trackResetOnLoad : false,
-
-
-    waitMsgTarget : undefined,
-
-    // private
-    initEl : function(el){
-        this.el = Ext.get(el);
-        this.id = this.el.id || Ext.id();
-        this.el.on('submit', this.onSubmit, this);
-        this.el.addClass('x-form');
-    },
-
-    // private
-    onSubmit : function(e){
-        e.stopEvent();
-    },
-
-
-    isValid : function(){
-        var valid = true;
-        this.items.each(function(f){
-           if(!f.validate()){
-               valid = false;
-           }
-        });
-        return valid;
-    },
-
-
-    isDirty : function(){
-        var dirty = false;
-        this.items.each(function(f){
-           if(f.isDirty()){
-               dirty = true;
-               return false;
-           }
-        });
-        return dirty;
-    },
-
-
-    doAction : function(action, options){
-        if(typeof action == 'string'){
-            action = new Ext.form.Action.ACTION_TYPES[action](this, options);
-        }
-        if(this.fireEvent('beforeaction', this, action) !== false){
-            this.beforeAction(action);
-            action.run.defer(100, action);
-        }
-        return this;
-    },
-
-
-    submit : function(options){
-        this.doAction('submit', options);
-        return this;
-    },
-
-
-    load : function(options){
-        this.doAction('load', options);
-        return this;
-    },
-
-
-    updateRecord : function(record){
-        record.beginEdit();
-        var fs = record.fields;
-        fs.each(function(f){
-            var field = this.findField(f.name);
-            if(field){
-                record.set(f.name, field.getValue());
-            }
-        }, this);
-        record.endEdit();
-        return this;
-    },
-
-
-    loadRecord : function(record){
-        this.setValues(record.data);
-        return this;
-    },
-
-    // private
-    beforeAction : function(action){
-        var o = action.options;
-        if(o.waitMsg){
-            if(this.waitMsgTarget === true){
-                this.el.mask(o.waitMsg, 'x-mask-loading');
-            }else if(this.waitMsgTarget){
-                this.waitMsgTarget = Ext.get(this.waitMsgTarget);
-                this.waitMsgTarget.mask(o.waitMsg, 'x-mask-loading');
-            }else{
-                Ext.MessageBox.wait(o.waitMsg, o.waitTitle || this.waitTitle || 'Please Wait...');
-            }
-        }
-    },
-
-    // private
-    afterAction : function(action, success){
-        this.activeAction = null;
-        var o = action.options;
-        if(o.waitMsg){
-            if(this.waitMsgTarget === true){
-                this.el.unmask();
-            }else if(this.waitMsgTarget){
-                this.waitMsgTarget.unmask();
-            }else{
-                Ext.MessageBox.updateProgress(1);
-                Ext.MessageBox.hide();
-            }
-        }
-        if(success){
-            if(o.reset){
-                this.reset();
-            }
-            Ext.callback(o.success, o.scope, [this, action]);
-            this.fireEvent('actioncomplete', this, action);
-        }else{
-            Ext.callback(o.failure, o.scope, [this, action]);
-            this.fireEvent('actionfailed', this, action);
-        }
-    },
-
-
-    findField : function(id){
-        var field = this.items.get(id);
-        if(!field){
-            this.items.each(function(f){
-                if(f.isFormField && (f.dataIndex == id || f.id == id || f.getName() == id)){
-                    field = f;
-                    return false;
-                }
-            });
-        }
-        return field || null;
-    },
-
-
-
-    markInvalid : function(errors){
-        if(errors instanceof Array){
-            for(var i = 0, len = errors.length; i < len; i++){
-                var fieldError = errors[i];
-                var f = this.findField(fieldError.id);
-                if(f){
-                    f.markInvalid(fieldError.msg);
-                }
-            }
-        }else{
-            var field, id;
-            for(id in errors){
-                if(typeof errors[id] != 'function' && (field = this.findField(id))){
-                    field.markInvalid(errors[id]);
-                }
-            }
-        }
-        return this;
-    },
-
-
-    setValues : function(values){
-        if(values instanceof Array){ // array of objects
-            for(var i = 0, len = values.length; i < len; i++){
-                var v = values[i];
-                var f = this.findField(v.id);
-                if(f){
-                    f.setValue(v.value);
-                    if(this.trackResetOnLoad){
-                        f.originalValue = f.getValue();
-                    }
-                }
-            }
-        }else{ // object hash
-            var field, id;
-            for(id in values){
-                if(typeof values[id] != 'function' && (field = this.findField(id))){
-                    field.setValue(values[id]);
-                    if(this.trackResetOnLoad){
-                        field.originalValue = field.getValue();
-                    }
-                }
-            }
-        }
-        return this;
-    },
-
-
-    getValues : function(asString){
-        var fs = Ext.lib.Ajax.serializeForm(this.el.dom);
-        if(asString === true){
-            return fs;
-        }
-        return Ext.urlDecode(fs);
-    },
-
-
-    clearInvalid : function(){
-        this.items.each(function(f){
-           f.clearInvalid();
-        });
-        return this;
-    },
-
-
-    reset : function(){
-        this.items.each(function(f){
-            f.reset();
-        });
-        return this;
-    },
-
-
-    add : function(){
-        this.items.addAll(Array.prototype.slice.call(arguments, 0));
-        return this;
-    },
-
-
-
-    remove : function(field){
-        this.items.remove(field);
-        return this;
-    },
-
-
-    render : function(){
-        this.items.each(function(f){
-            if(f.isFormField && !f.rendered && document.getElementById(f.id)){ // if the element exists
-                f.applyTo(f.id);
-            }
-        });
-        return this;
-    },
-
-
-    applyToFields : function(o){
-        this.items.each(function(f){
-           Ext.apply(f, o);
-        });
-        return this;
-    },
-
-
-    applyIfToFields : function(o){
-        this.items.each(function(f){
-           Ext.applyIf(f, o);
-        });
-        return this;
-    }
-});
-
-// back compat
-Ext.BasicForm = Ext.form.BasicForm;
-
-Ext.form.Form = function(config){
-    Ext.form.Form.superclass.constructor.call(this, null, config);
-    this.url = this.url || this.action;
-    if(!this.root){
-        this.root = new Ext.form.Layout(Ext.applyIf({
-            id: Ext.id()
-        }, config));
-    }
-    this.active = this.root;
-
-    this.buttons = [];
-    this.addEvents({
-
-        clientvalidation: true
-    });
-};
-
-Ext.extend(Ext.form.Form, Ext.form.BasicForm, {
-
-
-
-    buttonAlign:'center',
-
-
-    minButtonWidth:75,
-
-
-    labelAlign:'left',
-
-
-    monitorValid : false,
-
-
-    monitorPoll : 200,
-
-
-    column : function(c){
-        var col = new Ext.form.Column(c);
-        this.start(col);
-        if(arguments.length > 1){ // duplicate code required because of Opera
-            this.add.apply(this, Array.prototype.slice.call(arguments, 1));
-            this.end();
-        }
-        return col;
-    },
-
-
-    fieldset : function(c){
-        var fs = new Ext.form.FieldSet(c);
-        this.start(fs);
-        if(arguments.length > 1){ // duplicate code required because of Opera
-            this.add.apply(this, Array.prototype.slice.call(arguments, 1));
-            this.end();
-        }
-        return fs;
-    },
-
-
-    container : function(c){
-        var l = new Ext.form.Layout(c);
-        this.start(l);
-        if(arguments.length > 1){ // duplicate code required because of Opera
-            this.add.apply(this, Array.prototype.slice.call(arguments, 1));
-            this.end();
-        }
-        return l;
-    },
-
-
-    start : function(c){
-        // cascade label info
-        Ext.applyIf(c, {'labelAlign': this.active.labelAlign, 'labelWidth': this.active.labelWidth, 'itemCls': this.active.itemCls});
-        this.active.stack.push(c);
-        c.ownerCt = this.active;
-        this.active = c;
-        return this;
-    },
-
-
-    end : function(){
-        if(this.active == this.root){
-            return this;
-        }
-        this.active = this.active.ownerCt;
-        return this;
-    },
-
-
-    add : function(){
-        this.active.stack.push.apply(this.active.stack, arguments);
-        var r = [];
-        for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-            if(a[i].isFormField){
-                r.push(a[i]);
-            }
-        }
-        if(r.length > 0){
-            Ext.form.Form.superclass.add.apply(this, r);
-        }
-        return this;
-    },
-
-
-    render : function(ct){
-        ct = Ext.get(ct);
-        var o = this.autoCreate || {
-            tag: 'form',
-            method : this.method || 'POST',
-            id : this.id || Ext.id()
-        };
-        this.initEl(ct.createChild(o));
-
-        this.root.render(this.el);
-
-        this.items.each(function(f){
-            f.render('x-form-el-'+f.id);
-        });
-
-        if(this.buttons.length > 0){
-            // tables are required to maintain order and for correct IE layout
-            var tb = this.el.createChild({cls:'x-form-btns-ct', cn: {
-                cls:"x-form-btns x-form-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }}, null, true);
-            var tr = tb.getElementsByTagName('tr')[0];
-            for(var i = 0, len = this.buttons.length; i < len; i++) {
-                var b = this.buttons[i];
-                var td = document.createElement('td');
-                td.className = 'x-form-btn-td';
-                b.render(tr.appendChild(td));
-            }
-        }
-        if(this.monitorValid){ // initialize after render
-            this.startMonitoring();
-        }
-        return this;
-    },
-
-
-    addButton : function(config, handler, scope){
-        var bc = {
-            handler: handler,
-            scope: scope,
-            minWidth: this.minButtonWidth,
-            hideParent:true
-        };
-        if(typeof config == "string"){
-            bc.text = config;
-        }else{
-            Ext.apply(bc, config);
-        }
-        var btn = new Ext.Button(null, bc);
-        this.buttons.push(btn);
-        return btn;
-    },
-
-
-    startMonitoring : function(){
-        if(!this.bound){
-            this.bound = true;
-            Ext.TaskMgr.start({
-                run : this.bindHandler,
-                interval : this.monitorPoll || 200,
-                scope: this
-            });
-        }
-    },
-
-
-    stopMonitoring : function(){
-        this.bound = false;
-    },
-
-    // private
-    bindHandler : function(){
-        if(!this.bound){
-            return false; // stops binding
-        }
-        var valid = true;
-        this.items.each(function(f){
-            if(!f.isValid(true)){
-                valid = false;
-                return false;
-            }
-        });
-        for(var i = 0, len = this.buttons.length; i < len; i++){
-            var btn = this.buttons[i];
-            if(btn.formBind === true && btn.disabled === valid){
-                btn.setDisabled(!valid);
-            }
-        }
-        this.fireEvent('clientvalidation', this, valid);
-    }
-});
-
-
-// back compat
-Ext.Form = Ext.form.Form;
-
-
-// define the action interface
-Ext.form.Action = function(form, options){
-    this.form = form;
-    this.options = options || {};
-};
-
-Ext.form.Action.CLIENT_INVALID = 'client';
-Ext.form.Action.SERVER_INVALID = 'server';
-Ext.form.Action.CONNECT_FAILURE = 'connect';
-Ext.form.Action.LOAD_FAILURE = 'load';
-
-Ext.form.Action.prototype = {
-    type : 'default',
-    failureType : undefined,
-    response : undefined,
-    result : undefined,
-
-    // interface method
-    run : function(options){
-
-    },
-
-    // interface method
-    success : function(response){
-
-    },
-
-    // interface method
-    handleResponse : function(response){
-
-    },
-
-    // default connection failure
-    failure : function(response){
-        this.response = response;
-        this.failureType = Ext.form.Action.CONNECT_FAILURE;
-        this.form.afterAction(this, false);
-    },
-
-    processResponse : function(response){
-        this.response = response;
-        if(!response.responseText){
-            return true;
-        }
-        this.result = this.handleResponse(response);
-        return this.result;
-    },
-
-    // utility functions used internally
-    getUrl : function(appendParams){
-        var url = this.options.url || this.form.url || this.form.el.dom.action;
-        if(appendParams){
-            var p = this.getParams();
-            if(p){
-                url += (url.indexOf('?') != -1 ? '&' : '?') + p;
-            }
-        }
-        return url;
-    },
-
-    getMethod : function(){
-        return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase();
-    },
-
-    getParams : function(){
-        var bp = this.form.baseParams;
-        var p = this.options.params;
-        if(p){
-            if(typeof p == "object"){
-                p = Ext.urlEncode(Ext.applyIf(p, bp));
-            }else if(typeof p == 'string' && bp){
-                p += '&' + Ext.urlEncode(bp);
-            }
-        }else if(bp){
-            p = Ext.urlEncode(bp);
-        }
-        return p;
-    },
-
-    createCallback : function(){
-        return {
-            success: this.success,
-            failure: this.failure,
-            scope: this,
-            timeout: (this.form.timeout*1000),
-            upload: this.form.fileUpload ? this.success : undefined
-        };
-    }
-};
-
-Ext.form.Action.Submit = function(form, options){
-    Ext.form.Action.Submit.superclass.constructor.call(this, form, options);
-};
-
-Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {
-    type : 'submit',
-
-    run : function(){
-        var o = this.options;
-        var isPost = this.getMethod() == 'POST';
-        if(o.clientValidation === false || this.form.isValid()){
-            Ext.lib.Ajax.formRequest(
-                this.form.el.dom,
-                this.getUrl(!isPost),
-                this.createCallback(),
-                isPost ? this.getParams() : null, this.form.fileUpload, Ext.SSL_SECURE_URL);
-
-        }else if (o.clientValidation !== false){ // client validation failed
-            this.failureType = Ext.form.Action.CLIENT_INVALID;
-            this.form.afterAction(this, false);
-        }
-    },
-
-    success : function(response){
-        var result = this.processResponse(response);
-        if(result === true || result.success){
-            this.form.afterAction(this, true);
-            return;
-        }
-        if(result.errors){
-            this.form.markInvalid(result.errors);
-            this.failureType = Ext.form.Action.SERVER_INVALID;
-        }
-        this.form.afterAction(this, false);
-    },
-
-    handleResponse : function(response){
-        if(this.form.errorReader){
-            var rs = this.form.errorReader.read(response);
-            var errors = [];
-            if(rs.records){
-                for(var i = 0, len = rs.records.length; i < len; i++) {
-                    var r = rs.records[i];
-                    errors[i] = r.data;
-                }
-            }
-            if(errors.length < 1){
-                errors = null;
-            }
-            return {
-                success : rs.success,
-                errors : errors
-            };
-        }
-        return Ext.decode(response.responseText);
-    }
-});
-
-
-Ext.form.Action.Load = function(form, options){
-    Ext.form.Action.Load.superclass.constructor.call(this, form, options);
-    this.reader = this.form.reader;
-};
-
-Ext.extend(Ext.form.Action.Load, Ext.form.Action, {
-    type : 'load',
-
-    run : function(){
-        Ext.lib.Ajax.request(
-            this.getMethod(),
-            this.getUrl(false),
-            this.createCallback(),
-            this.getParams());
-    },
-
-    success : function(response){
-        var result = this.processResponse(response);
-        if(result === true || !result.success || !result.data){
-            this.failureType = Ext.form.Action.LOAD_FAILURE;
-            this.form.afterAction(this, false);
-            return;
-        }
-        this.form.clearInvalid();
-        this.form.setValues(result.data);
-        this.form.afterAction(this, true);
-    },
-
-    handleResponse : function(response){
-        if(this.form.reader){
-            var rs = this.form.reader.read(response);
-            var data = rs.records && rs.records[0] ? rs.records[0].data : null;
-            return {
-                success : rs.success,
-                data : data
-            };
-        }
-        return Ext.decode(response.responseText);
-    }
-});
-
-Ext.form.Action.ACTION_TYPES = {
-    'load' : Ext.form.Action.Load,
-    'submit' : Ext.form.Action.Submit
-};
-
-
-Ext.form.Layout = function(config){
-    Ext.form.Layout.superclass.constructor.call(this, config);
-    this.stack = [];
-};
-
-Ext.extend(Ext.form.Layout, Ext.Component, {
-
-
-
-
-
-    clear : true,
-
-    labelSeparator : ':',
-
-    hideLabels : false,
-
-    // private
-    defaultAutoCreate : {tag: 'div', cls: 'x-form-ct'},
-
-    // private
-    onRender : function(ct, position){
-        if(this.el){ // from markup
-            this.el = Ext.get(this.el);
-        }else {  // generate
-            var cfg = this.getAutoCreate();
-            this.el = ct.createChild(cfg, position);
-        }
-        if(this.style){
-            this.el.applyStyles(this.style);
-        }
-        if(this.labelAlign){
-            this.el.addClass('x-form-label-'+this.labelAlign);
-        }
-        if(this.hideLabels){
-            this.labelStyle = "display:none";
-            this.elementStyle = "padding-left:0;";
-        }else{
-            if(typeof this.labelWidth == 'number'){
-                this.labelStyle = "width:"+this.labelWidth+"px;";
-                this.elementStyle = "padding-left:"+((this.labelWidth+(typeof this.labelPad == 'number' ? this.labelPad : 5))+'px')+";";
-            }
-            if(this.labelAlign == 'top'){
-                this.labelStyle = "width:auto;";
-                this.elementStyle = "padding-left:0;";
-            }
-        }
-        var stack = this.stack;
-        var slen = stack.length;
-        if(slen > 0){
-            if(!this.fieldTpl){
-                var t = new Ext.Template(
-                    '<div class="x-form-item {5}">',
-                        '<label for="{0}" style="{2}">{1}{4}</label>',
-                        '<div class="x-form-element" id="x-form-el-{0}" style="{3}">',
-                        '</div>',
-                    '</div><div class="x-form-clear-left"></div>'
-                );
-                t.disableFormats = true;
-                t.compile();
-                Ext.form.Layout.prototype.fieldTpl = t;
-            }
-            for(var i = 0; i < slen; i++) {
-                if(stack[i].isFormField){
-                    this.renderField(stack[i]);
-                }else{
-                    this.renderComponent(stack[i]);
-                }
-            }
-        }
-        if(this.clear){
-            this.el.createChild({cls:'x-form-clear'});
-        }
-    },
-
-    // private
-    renderField : function(f){
-       this.fieldTpl.append(this.el, [
-               f.id, f.fieldLabel,
-               f.labelStyle||this.labelStyle||'',
-               this.elementStyle||'',
-               typeof f.labelSeparator == 'undefined' ? this.labelSeparator : f.labelSeparator,
-               f.itemCls||this.itemCls||''
-       ]);
-    },
-
-    // private
-    renderComponent : function(c){
-        c.render(this.el);
-    }
-});
-
-
-Ext.form.Column = function(config){
-    Ext.form.Column.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.Column, Ext.form.Layout, {
-
-
-
-    // private
-    defaultAutoCreate : {tag: 'div', cls: 'x-form-ct x-form-column'},
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.Column.superclass.onRender.call(this, ct, position);
-        if(this.width){
-            this.el.setWidth(this.width);
-        }
-    }
-});
-
-
-Ext.form.FieldSet = function(config){
-    Ext.form.FieldSet.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.FieldSet, Ext.form.Layout, {
-
-
-
-    // private
-    defaultAutoCreate : {tag: 'fieldset', cn: {tag:'legend'}},
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.FieldSet.superclass.onRender.call(this, ct, position);
-        if(this.legend){
-            this.setLegend(this.legend);
-        }
-    },
-
-    // private
-    setLegend : function(text){
-        if(this.rendered){
-            this.el.child('legend').update(text);
-        }
-    }
-});
-
-Ext.form.VTypes = function(){
-    // closure these in so they are only created once.
-    var alpha = /^[a-zA-Z_]+$/;
-    var alphanum = /^[a-zA-Z0-9_]+$/;
-    var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
-    var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
-
-    // All these messages and functions are configurable
-    return {
-
-        'email' : function(v){
-            return email.test(v);
-        },
-
-        'emailText' : 'This field should be an e-mail address in the format "user@domain.com"',
-
-        'emailMask' : /[a-z0-9_\.\-@]/i,
-
-
-        'url' : function(v){
-            return url.test(v);
-        },
-
-        'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"',
-
-
-        'alpha' : function(v){
-            return alpha.test(v);
-        },
-
-        'alphaText' : 'This field should only contain letters and _',
-
-        'alphaMask' : /[a-z_]/i,
-
-
-        'alphanum' : function(v){
-            return alphanum.test(v);
-        },
-
-        'alphanumText' : 'This field should only contain letters, numbers and _',
-
-        'alphanumMask' : /[a-z0-9_]/i
-    };
-}();
-
-Ext.LayoutManager = function(container, config){
-    Ext.LayoutManager.superclass.constructor.call(this);
-    this.el = Ext.get(container);
-    // ie scrollbar fix
-    if(this.el.dom == document.body && Ext.isIE && !config.allowScroll){
-        document.body.scroll = "no";
-    }else if(this.el.dom != document.body && this.el.getStyle('position') == 'static'){
-        this.el.position('relative');
-    }
-    this.id = this.el.id;
-    this.el.addClass("x-layout-container");
-
-    this.monitorWindowResize = true;
-    this.regions = {};
-    this.addEvents({
-
-        "layout" : true,
-
-        "regionresized" : true,
-
-        "regioncollapsed" : true,
-
-        "regionexpanded" : true
-    });
-    this.updating = false;
-    Ext.EventManager.onWindowResize(this.onWindowResize, this, true);
-};
-
-Ext.extend(Ext.LayoutManager, Ext.util.Observable, {
-
-    isUpdating : function(){
-        return this.updating;
-    },
-
-
-    beginUpdate : function(){
-        this.updating = true;
-    },
-
-
-    endUpdate : function(noLayout){
-        this.updating = false;
-        if(!noLayout){
-            this.layout();
-        }
-    },
-
-    layout: function(){
-
-    },
-
-    onRegionResized : function(region, newSize){
-        this.fireEvent("regionresized", region, newSize);
-        this.layout();
-    },
-
-    onRegionCollapsed : function(region){
-        this.fireEvent("regioncollapsed", region);
-    },
-
-    onRegionExpanded : function(region){
-        this.fireEvent("regionexpanded", region);
-    },
-
-
-    getViewSize : function(){
-        var size;
-        if(this.el.dom != document.body){
-            size = this.el.getSize();
-        }else{
-            size = {width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};
-        }
-        size.width -= this.el.getBorderWidth("lr")-this.el.getPadding("lr");
-        size.height -= this.el.getBorderWidth("tb")-this.el.getPadding("tb");
-        return size;
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    getRegion : function(target){
-        return this.regions[target.toLowerCase()];
-    },
-
-    onWindowResize : function(){
-        if(this.monitorWindowResize){
-            this.layout();
-        }
-    }
-});
-
-Ext.BorderLayout = function(container, config){
-    config = config || {};
-    Ext.BorderLayout.superclass.constructor.call(this, container, config);
-    this.factory = config.factory || Ext.BorderLayout.RegionFactory;
-    for(var i = 0, len = this.factory.validRegions.length; i < len; i++) {
-    	var target = this.factory.validRegions[i];
-    	if(config[target]){
-    	    this.addRegion(target, config[target]);
-    	}
-    }
-};
-
-Ext.extend(Ext.BorderLayout, Ext.LayoutManager, {
-
-    addRegion : function(target, config){
-        if(!this.regions[target]){
-            var r = this.factory.create(target, this, config);
-    	    this.bindRegion(target, r);
-        }
-        return this.regions[target];
-    },
-
-    // private (kinda)
-    bindRegion : function(name, r){
-        this.regions[name] = r;
-        r.on("visibilitychange", this.layout, this);
-        r.on("paneladded", this.layout, this);
-        r.on("panelremoved", this.layout, this);
-        r.on("invalidated", this.layout, this);
-        r.on("resized", this.onRegionResized, this);
-        r.on("collapsed", this.onRegionCollapsed, this);
-        r.on("expanded", this.onRegionExpanded, this);
-    },
-
-
-    layout : function(){
-        if(this.updating) return;
-        var size = this.getViewSize();
-        var w = size.width, h = size.height;
-        var centerW = w, centerH = h, centerY = 0, centerX = 0;
-        //var x = 0, y = 0;
-
-        var rs = this.regions;
-        var n = rs["north"], s = rs["south"], west = rs["west"], e = rs["east"], c = rs["center"];
-        //if(this.hideOnLayout){ // not supported anymore
-            //c.el.setStyle("display", "none");
-        //}
-        if(n && n.isVisible()){
-            var b = n.getBox();
-            var m = n.getMargins();
-            b.width = w - (m.left+m.right);
-            b.x = m.left;
-            b.y = m.top;
-            centerY = b.height + b.y + m.bottom;
-            centerH -= centerY;
-            n.updateBox(this.safeBox(b));
-        }
-        if(s && s.isVisible()){
-            var b = s.getBox();
-            var m = s.getMargins();
-            b.width = w - (m.left+m.right);
-            b.x = m.left;
-            var totalHeight = (b.height + m.top + m.bottom);
-            b.y = h - totalHeight + m.top;
-            centerH -= totalHeight;
-            s.updateBox(this.safeBox(b));
-        }
-        if(west && west.isVisible()){
-            var b = west.getBox();
-            var m = west.getMargins();
-            b.height = centerH - (m.top+m.bottom);
-            b.x = m.left;
-            b.y = centerY + m.top;
-            var totalWidth = (b.width + m.left + m.right);
-            centerX += totalWidth;
-            centerW -= totalWidth;
-            west.updateBox(this.safeBox(b));
-        }
-        if(e && e.isVisible()){
-            var b = e.getBox();
-            var m = e.getMargins();
-            b.height = centerH - (m.top+m.bottom);
-            var totalWidth = (b.width + m.left + m.right);
-            b.x = w - totalWidth + m.left;
-            b.y = centerY + m.top;
-            centerW -= totalWidth;
-            e.updateBox(this.safeBox(b));
-        }
-        if(c){
-            var m = c.getMargins();
-            var centerBox = {
-                x: centerX + m.left,
-                y: centerY + m.top,
-                width: centerW - (m.left+m.right),
-                height: centerH - (m.top+m.bottom)
-            };
-            //if(this.hideOnLayout){
-                //c.el.setStyle("display", "block");
-            //}
-            c.updateBox(this.safeBox(centerBox));
-        }
-        this.el.repaint();
-        this.fireEvent("layout", this);
-    },
-
-    safeBox : function(box){
-        box.width = Math.max(0, box.width);
-        box.height = Math.max(0, box.height);
-        return box;
-    },
-
-
-    add : function(target, panel){
-        target = target.toLowerCase();
-        return this.regions[target].add(panel);
-    },
-
-
-    remove : function(target, panel){
-        target = target.toLowerCase();
-        return this.regions[target].remove(panel);
-    },
-
-
-    findPanel : function(panelId){
-        var rs = this.regions;
-        for(var target in rs){
-            if(typeof rs[target] != "function"){
-                var p = rs[target].getPanel(panelId);
-                if(p){
-                    return p;
-                }
-            }
-        }
-        return null;
-    },
-
-
-    showPanel : function(panelId) {
-      var rs = this.regions;
-      for(var target in rs){
-         var r = rs[target];
-         if(typeof r != "function"){
-            if(r.hasPanel(panelId)){
-               return r.showPanel(panelId);
-            }
-         }
-      }
-      return null;
-   },
-
-
-    restoreState : function(provider){
-        if(!provider){
-            provider = Ext.state.Manager;
-        }
-        var sm = new Ext.LayoutStateManager();
-        sm.init(this, provider);
-    },
-
-
-    batchAdd : function(regions){
-        this.beginUpdate();
-        for(var rname in regions){
-            var lr = this.regions[rname];
-            if(lr){
-                this.addTypedPanels(lr, regions[rname]);
-            }
-        }
-        this.endUpdate();
-    },
-
-
-    addTypedPanels : function(lr, ps){
-        if(typeof ps == 'string'){
-            lr.add(new Ext.ContentPanel(ps));
-        }
-        else if(ps instanceof Array){
-            for(var i =0, len = ps.length; i < len; i++){
-                this.addTypedPanels(lr, ps[i]);
-            }
-        }
-        else if(!ps.events){ // raw config?
-            var el = ps.el;
-            delete ps.el; // prevent conflict
-            lr.add(new Ext.ContentPanel(el || Ext.id(), ps));
-        }
-        else {  // panel object assumed!
-            lr.add(ps);
-        }
-    }
-});
-
-Ext.BorderLayout.create = function(config, targetEl){
-    var layout = new Ext.BorderLayout(targetEl || document.body, config);
-    layout.beginUpdate();
-    var regions = Ext.BorderLayout.RegionFactory.validRegions;
-    for(var j = 0, jlen = regions.length; j < jlen; j++){
-        var lr = regions[j];
-        if(layout.regions[lr] && config[lr].panels){
-            var r = layout.regions[lr];
-            var ps = config[lr].panels;
-            layout.addTypedPanels(r, ps);
-        }
-    }
-    layout.endUpdate();
-    return layout;
-};
-
-Ext.BorderLayout.RegionFactory = {
-    validRegions : ["north","south","east","west","center"],
-
-    create : function(target, mgr, config){
-        target = target.toLowerCase();
-        if(config.lightweight || config.basic){
-            return new Ext.BasicLayoutRegion(mgr, config, target);
-        }
-        switch(target){
-            case "north":
-                return new Ext.NorthLayoutRegion(mgr, config);
-            case "south":
-                return new Ext.SouthLayoutRegion(mgr, config);
-            case "east":
-                return new Ext.EastLayoutRegion(mgr, config);
-            case "west":
-                return new Ext.WestLayoutRegion(mgr, config);
-            case "center":
-                return new Ext.CenterLayoutRegion(mgr, config);
-        }
-        throw 'Layout region "'+target+'" not supported.';
-    }
-};
-
-Ext.BasicLayoutRegion = function(mgr, config, pos, skipConfig){
-    this.mgr = mgr;
-    this.position  = pos;
-    this.events = {
-
-        "beforeremove" : true,
-
-        "invalidated" : true,
-
-        "visibilitychange" : true,
-
-        "paneladded" : true,
-
-        "panelremoved" : true,
-
-        "collapsed" : true,
-
-        "expanded" : true,
-
-        "slideshow" : true,
-
-        "slidehide" : true,
-
-        "panelactivated" : true,
-
-        "resized" : true
-    };
-
-    this.panels = new Ext.util.MixedCollection();
-    this.panels.getKey = this.getPanelId.createDelegate(this);
-    this.box = null;
-    this.activePanel = null;
-    if(skipConfig !== true){
-        this.applyConfig(config);
-    }
-};
-
-Ext.extend(Ext.BasicLayoutRegion, Ext.util.Observable, {
-    getPanelId : function(p){
-        return p.getId();
-    },
-
-    applyConfig : function(config){
-        this.margins = config.margins || this.margins || {top: 0, left: 0, right:0, bottom: 0};
-        this.config = config;
-    },
-
-
-    resizeTo : function(newSize){
-        var el = this.el ? this.el :
-                 (this.activePanel ? this.activePanel.getEl() : null);
-        if(el){
-            switch(this.position){
-                case "east":
-                case "west":
-                    el.setWidth(newSize);
-                    this.fireEvent("resized", this, newSize);
-                break;
-                case "north":
-                case "south":
-                    el.setHeight(newSize);
-                    this.fireEvent("resized", this, newSize);
-                break;
-            }
-        }
-    },
-
-    getBox : function(){
-        return this.activePanel ? this.activePanel.getEl().getBox(false, true) : null;
-    },
-
-    getMargins : function(){
-        return this.margins;
-    },
-
-    updateBox : function(box){
-        this.box = box;
-        var el = this.activePanel.getEl();
-        el.dom.style.left = box.x + "px";
-        el.dom.style.top = box.y + "px";
-        this.activePanel.setSize(box.width, box.height);
-    },
-
-
-    getEl : function(){
-        return this.activePanel;
-    },
-
-
-    isVisible : function(){
-        return this.activePanel ? true : false;
-    },
-
-    setActivePanel : function(panel){
-        panel = this.getPanel(panel);
-        if(this.activePanel && this.activePanel != panel){
-            this.activePanel.setActiveState(false);
-            this.activePanel.getEl().setLeftTop(-10000,-10000);
-        }
-        this.activePanel = panel;
-        panel.setActiveState(true);
-        if(this.box){
-            panel.setSize(this.box.width, this.box.height);
-        }
-        this.fireEvent("panelactivated", this, panel);
-        this.fireEvent("invalidated");
-    },
-
-
-    showPanel : function(panel){
-        if(panel = this.getPanel(panel)){
-            this.setActivePanel(panel);
-        }
-        return panel;
-    },
-
-
-    getActivePanel : function(){
-        return this.activePanel;
-    },
-
-
-    add : function(panel){
-        if(arguments.length > 1){
-            for(var i = 0, len = arguments.length; i < len; i++) {
-            	this.add(arguments[i]);
-            }
-            return null;
-        }
-        if(this.hasPanel(panel)){
-            this.showPanel(panel);
-            return panel;
-        }
-        var el = panel.getEl();
-        if(el.dom.parentNode != this.mgr.el.dom){
-            this.mgr.el.dom.appendChild(el.dom);
-        }
-        if(panel.setRegion){
-            panel.setRegion(this);
-        }
-        this.panels.add(panel);
-        el.setStyle("position", "absolute");
-        if(!panel.background){
-            this.setActivePanel(panel);
-            if(this.config.initialSize && this.panels.getCount()==1){
-                this.resizeTo(this.config.initialSize);
-            }
-        }
-        this.fireEvent("paneladded", this, panel);
-        return panel;
-    },
-
-
-    hasPanel : function(panel){
-        if(typeof panel == "object"){ // must be panel obj
-            panel = panel.getId();
-        }
-        return this.getPanel(panel) ? true : false;
-    },
-
-
-    remove : function(panel, preservePanel){
-        panel = this.getPanel(panel);
-        if(!panel){
-            return null;
-        }
-        var e = {};
-        this.fireEvent("beforeremove", this, panel, e);
-        if(e.cancel === true){
-            return null;
-        }
-        var panelId = panel.getId();
-        this.panels.removeKey(panelId);
-        return panel;
-    },
-
-
-    getPanel : function(id){
-        if(typeof id == "object"){ // must be panel obj
-            return id;
-        }
-        return this.panels.get(id);
-    },
-
-
-    getPosition: function(){
-        return this.position;
-    }
-});
-
-Ext.LayoutRegion = function(mgr, config, pos){
-    Ext.LayoutRegion.superclass.constructor.call(this, mgr, config, pos, true);
-    var dh = Ext.DomHelper;
-
-    this.el = dh.append(mgr.el.dom, {tag: "div", cls: "x-layout-panel x-layout-panel-" + this.position}, true);
-
-
-    this.titleEl = dh.append(this.el.dom, {tag: "div", unselectable: "on", cls: "x-unselectable x-layout-panel-hd x-layout-title-"+this.position, children:[
-        {tag: "span", cls: "x-unselectable x-layout-panel-hd-text", unselectable: "on", html: "&#160;"},
-        {tag: "div", cls: "x-unselectable x-layout-panel-hd-tools", unselectable: "on"}
-    ]}, true);
-    this.titleEl.enableDisplayMode();
-
-    this.titleTextEl = this.titleEl.dom.firstChild;
-    this.tools = Ext.get(this.titleEl.dom.childNodes[1], true);
-    this.closeBtn = this.createTool(this.tools.dom, "x-layout-close");
-    this.closeBtn.enableDisplayMode();
-    this.closeBtn.on("click", this.closeClicked, this);
-    this.closeBtn.hide();
-
-    this.createBody(config);
-    this.visible = true;
-    this.collapsed = false;
-
-    if(config.hideWhenEmpty){
-        this.hide();
-        this.on("paneladded", this.validateVisibility, this);
-        this.on("panelremoved", this.validateVisibility, this);
-    }
-    this.applyConfig(config);
-};
-
-Ext.extend(Ext.LayoutRegion, Ext.BasicLayoutRegion, {
-
-    createBody : function(){
-
-        this.bodyEl = this.el.createChild({tag: "div", cls: "x-layout-panel-body"});
-    },
-
-    applyConfig : function(c){
-        if(c.collapsible && this.position != "center" && !this.collapsedEl){
-            var dh = Ext.DomHelper;
-            if(c.titlebar !== false){
-                this.collapseBtn = this.createTool(this.tools.dom, "x-layout-collapse-"+this.position);
-                this.collapseBtn.on("click", this.collapse, this);
-                this.collapseBtn.enableDisplayMode();
-
-                if(c.showPin === true || this.showPin){
-                    this.stickBtn = this.createTool(this.tools.dom, "x-layout-stick");
-                    this.stickBtn.enableDisplayMode();
-                    this.stickBtn.on("click", this.expand, this);
-                    this.stickBtn.hide();
-                }
-            }
-
-            this.collapsedEl = dh.append(this.mgr.el.dom, {cls: "x-layout-collapsed x-layout-collapsed-"+this.position, children:[
-                {cls: "x-layout-collapsed-tools", children:[{cls: "x-layout-ctools-inner"}]}
-            ]}, true);
-            if(c.floatable !== false){
-               this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
-               this.collapsedEl.on("click", this.collapseClick, this);
-            }
-
-            if(c.collapsedTitle && (this.position == "north" || this.position== "south")) {
-                this.collapsedTitleTextEl = dh.append(this.collapsedEl.dom, {tag: "div", cls: "x-unselectable x-layout-panel-hd-text",
-                   id: "message", unselectable: "on", style:{"float":"left"}});
-               this.collapsedTitleTextEl.innerHTML = c.collapsedTitle;
-             }
-            this.expandBtn = this.createTool(this.collapsedEl.dom.firstChild.firstChild, "x-layout-expand-"+this.position);
-            this.expandBtn.on("click", this.expand, this);
-        }
-        if(this.collapseBtn){
-            this.collapseBtn.setVisible(c.collapsible == true);
-        }
-        this.cmargins = c.cmargins || this.cmargins ||
-                         (this.position == "west" || this.position == "east" ?
-                             {top: 0, left: 2, right:2, bottom: 0} :
-                             {top: 2, left: 0, right:0, bottom: 2});
-        this.margins = c.margins || this.margins || {top: 0, left: 0, right:0, bottom: 0};
-        this.bottomTabs = c.tabPosition != "top";
-        this.autoScroll = c.autoScroll || false;
-        if(this.autoScroll){
-            this.bodyEl.setStyle("overflow", "auto");
-        }else{
-            this.bodyEl.setStyle("overflow", "hidden");
-        }
-        //if(c.titlebar !== false){
-            if((!c.titlebar && !c.title) || c.titlebar === false){
-                this.titleEl.hide();
-            }else{
-                this.titleEl.show();
-                if(c.title){
-                    this.titleTextEl.innerHTML = c.title;
-                }
-            }
-        //}
-        this.duration = c.duration || .30;
-        this.slideDuration = c.slideDuration || .45;
-        this.config = c;
-        if(c.collapsed){
-            this.collapse(true);
-        }
-        if(c.hidden){
-            this.hide();
-        }
-    },
-
-    isVisible : function(){
-        return this.visible;
-    },
-
-
-    setCollapsedTitle : function(title){
-        title = title || "&#160;";
-        if(this.collapsedTitleTextEl){
-            this.collapsedTitleTextEl.innerHTML = title;
-        }
-    },
-
-    getBox : function(){
-        var b;
-        if(!this.collapsed){
-            b = this.el.getBox(false, true);
-        }else{
-            b = this.collapsedEl.getBox(false, true);
-        }
-        return b;
-    },
-
-    getMargins : function(){
-        return this.collapsed ? this.cmargins : this.margins;
-    },
-
-    highlight : function(){
-        this.el.addClass("x-layout-panel-dragover");
-    },
-
-    unhighlight : function(){
-        this.el.removeClass("x-layout-panel-dragover");
-    },
-
-    updateBox : function(box){
-        this.box = box;
-        if(!this.collapsed){
-            this.el.dom.style.left = box.x + "px";
-            this.el.dom.style.top = box.y + "px";
-            this.updateBody(box.width, box.height);
-        }else{
-            this.collapsedEl.dom.style.left = box.x + "px";
-            this.collapsedEl.dom.style.top = box.y + "px";
-            this.collapsedEl.setSize(box.width, box.height);
-        }
-        if(this.tabs){
-            this.tabs.autoSizeTabs();
-        }
-    },
-
-    updateBody : function(w, h){
-        if(w !== null){
-            this.el.setWidth(w);
-            w -= this.el.getBorderWidth("rl");
-            if(this.config.adjustments){
-                w += this.config.adjustments[0];
-            }
-        }
-        if(h !== null){
-            this.el.setHeight(h);
-            h = this.titleEl && this.titleEl.isDisplayed() ? h - (this.titleEl.getHeight()||0) : h;
-            h -= this.el.getBorderWidth("tb");
-            if(this.config.adjustments){
-                h += this.config.adjustments[1];
-            }
-            this.bodyEl.setHeight(h);
-            if(this.tabs){
-                h = this.tabs.syncHeight(h);
-            }
-        }
-        if(this.panelSize){
-            w = w !== null ? w : this.panelSize.width;
-            h = h !== null ? h : this.panelSize.height;
-        }
-        if(this.activePanel){
-            var el = this.activePanel.getEl();
-            w = w !== null ? w : el.getWidth();
-            h = h !== null ? h : el.getHeight();
-            this.panelSize = {width: w, height: h};
-            this.activePanel.setSize(w, h);
-        }
-        if(Ext.isIE && this.tabs){
-            this.tabs.el.repaint();
-        }
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-
-    hide : function(){
-        if(!this.collapsed){
-            this.el.dom.style.left = "-2000px";
-            this.el.hide();
-        }else{
-            this.collapsedEl.dom.style.left = "-2000px";
-            this.collapsedEl.hide();
-        }
-        this.visible = false;
-        this.fireEvent("visibilitychange", this, false);
-    },
-
-
-    show : function(){
-        if(!this.collapsed){
-            this.el.show();
-        }else{
-            this.collapsedEl.show();
-        }
-        this.visible = true;
-        this.fireEvent("visibilitychange", this, true);
-    },
-
-    closeClicked : function(){
-        if(this.activePanel){
-            this.remove(this.activePanel);
-        }
-    },
-
-    collapseClick : function(e){
-        if(this.isSlid){
-           e.stopPropagation();
-           this.slideIn();
-        }else{
-           e.stopPropagation();
-           this.slideOut();
-        }
-    },
-
-
-    collapse : function(skipAnim){
-        if(this.collapsed) return;
-        this.collapsed = true;
-        if(this.split){
-            this.split.el.hide();
-        }
-        if(this.config.animate && skipAnim !== true){
-            this.fireEvent("invalidated", this);
-            this.animateCollapse();
-        }else{
-            this.el.setLocation(-20000,-20000);
-            this.el.hide();
-            this.collapsedEl.show();
-            this.fireEvent("collapsed", this);
-            this.fireEvent("invalidated", this);
-        }
-    },
-
-    animateCollapse : function(){
-        // overridden
-    },
-
-
-    expand : function(e, skipAnim){
-        if(e) e.stopPropagation();
-        if(!this.collapsed || this.el.hasActiveFx()) return;
-        if(this.isSlid){
-            this.afterSlideIn();
-            skipAnim = true;
-        }
-        this.collapsed = false;
-        if(this.config.animate && skipAnim !== true){
-            this.animateExpand();
-        }else{
-            this.el.show();
-            if(this.split){
-                this.split.el.show();
-            }
-            this.collapsedEl.setLocation(-2000,-2000);
-            this.collapsedEl.hide();
-            this.fireEvent("invalidated", this);
-            this.fireEvent("expanded", this);
-        }
-    },
-
-    animateExpand : function(){
-        // overridden
-    },
-
-    initTabs : function(){
-        this.bodyEl.setStyle("overflow", "hidden");
-        var ts = new Ext.TabPanel(this.bodyEl.dom, {
-            tabPosition: this.bottomTabs ? 'bottom' : 'top',
-            disableTooltips: this.config.disableTabTips
-        });
-        if(this.config.hideTabs){
-            ts.stripWrap.setDisplayed(false);
-        }
-        this.tabs = ts;
-        ts.resizeTabs = this.config.resizeTabs === true;
-        ts.minTabWidth = this.config.minTabWidth || 40;
-        ts.maxTabWidth = this.config.maxTabWidth || 250;
-        ts.preferredTabWidth = this.config.preferredTabWidth || 150;
-        ts.monitorResize = false;
-        ts.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
-        ts.bodyEl.addClass('x-layout-tabs-body');
-        this.panels.each(this.initPanelAsTab, this);
-    },
-
-    initPanelAsTab : function(panel){
-        var ti = this.tabs.addTab(panel.getEl().id, panel.getTitle(), null,
-                    this.config.closeOnTab && panel.isClosable());
-        if(panel.tabTip !== undefined){
-            ti.setTooltip(panel.tabTip);
-        }
-        ti.on("activate", function(){
-              this.setActivePanel(panel);
-        }, this);
-        if(this.config.closeOnTab){
-            ti.on("beforeclose", function(t, e){
-                e.cancel = true;
-                this.remove(panel);
-            }, this);
-        }
-        return ti;
-    },
-
-    updatePanelTitle : function(panel, title){
-        if(this.activePanel == panel){
-            this.updateTitle(title);
-        }
-        if(this.tabs){
-            var ti = this.tabs.getTab(panel.getEl().id);
-            ti.setText(title);
-            if(panel.tabTip !== undefined){
-                ti.setTooltip(panel.tabTip);
-            }
-        }
-    },
-
-    updateTitle : function(title){
-        if(this.titleTextEl && !this.config.title){
-            this.titleTextEl.innerHTML = (typeof title != "undefined" && title.length > 0 ? title : "&#160;");
-        }
-    },
-
-    setActivePanel : function(panel){
-        panel = this.getPanel(panel);
-        if(this.activePanel && this.activePanel != panel){
-            this.activePanel.setActiveState(false);
-        }
-        this.activePanel = panel;
-        panel.setActiveState(true);
-        if(this.panelSize){
-            panel.setSize(this.panelSize.width, this.panelSize.height);
-        }
-        if(this.closeBtn){
-            this.closeBtn.setVisible(!this.config.closeOnTab && !this.isSlid && panel.isClosable());
-        }
-        this.updateTitle(panel.getTitle());
-        if(this.tabs){
-            this.fireEvent("invalidated", this);
-        }
-        this.fireEvent("panelactivated", this, panel);
-    },
-
-
-    showPanel : function(panel){
-        if(panel = this.getPanel(panel)){
-            if(this.tabs){
-                var tab = this.tabs.getTab(panel.getEl().id);
-                if(tab.isHidden()){
-                    this.tabs.unhideTab(tab.id);
-                }
-                tab.activate();
-            }else{
-                this.setActivePanel(panel);
-            }
-        }
-        return panel;
-    },
-
-
-    getActivePanel : function(){
-        return this.activePanel;
-    },
-
-    validateVisibility : function(){
-        if(this.panels.getCount() < 1){
-            this.updateTitle("&#160;");
-            this.closeBtn.hide();
-            this.hide();
-        }else{
-            if(!this.isVisible()){
-                this.show();
-            }
-        }
-    },
-
-
-    add : function(panel){
-        if(arguments.length > 1){
-            for(var i = 0, len = arguments.length; i < len; i++) {
-            	this.add(arguments[i]);
-            }
-            return null;
-        }
-        if(this.hasPanel(panel)){
-            this.showPanel(panel);
-            return panel;
-        }
-        panel.setRegion(this);
-        this.panels.add(panel);
-        if(this.panels.getCount() == 1 && !this.config.alwaysShowTabs){
-            this.bodyEl.dom.appendChild(panel.getEl().dom);
-            if(panel.background !== true){
-                this.setActivePanel(panel);
-            }
-            this.fireEvent("paneladded", this, panel);
-            return panel;
-        }
-        if(!this.tabs){
-            this.initTabs();
-        }else{
-            this.initPanelAsTab(panel);
-        }
-        if(panel.background !== true){
-            this.tabs.activate(panel.getEl().id);
-        }
-        this.fireEvent("paneladded", this, panel);
-        return panel;
-    },
-
-
-    hidePanel : function(panel){
-        if(this.tabs && (panel = this.getPanel(panel))){
-            this.tabs.hideTab(panel.getEl().id);
-        }
-    },
-
-
-    unhidePanel : function(panel){
-        if(this.tabs && (panel = this.getPanel(panel))){
-            this.tabs.unhideTab(panel.getEl().id);
-        }
-    },
-
-    clearPanels : function(){
-        while(this.panels.getCount() > 0){
-             this.remove(this.panels.first());
-        }
-    },
-
-
-    remove : function(panel, preservePanel){
-        panel = this.getPanel(panel);
-        if(!panel){
-            return null;
-        }
-        var e = {};
-        this.fireEvent("beforeremove", this, panel, e);
-        if(e.cancel === true){
-            return null;
-        }
-        preservePanel = (typeof preservePanel != "undefined" ? preservePanel : (this.config.preservePanels === true || panel.preserve === true));
-        var panelId = panel.getId();
-        this.panels.removeKey(panelId);
-        if(preservePanel){
-            document.body.appendChild(panel.getEl().dom);
-        }
-        if(this.tabs){
-            this.tabs.removeTab(panel.getEl().id);
-        }else if (!preservePanel){
-            this.bodyEl.dom.removeChild(panel.getEl().dom);
-        }
-        if(this.panels.getCount() == 1 && this.tabs && !this.config.alwaysShowTabs){
-            var p = this.panels.first();
-            var tempEl = document.createElement("div"); // temp holder to keep IE from deleting the node
-            tempEl.appendChild(p.getEl().dom);
-            this.bodyEl.update("");
-            this.bodyEl.dom.appendChild(p.getEl().dom);
-            tempEl = null;
-            this.updateTitle(p.getTitle());
-            this.tabs = null;
-            this.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
-            this.setActivePanel(p);
-        }
-        panel.setRegion(null);
-        if(this.activePanel == panel){
-            this.activePanel = null;
-        }
-        if(this.config.autoDestroy !== false && preservePanel !== true){
-            try{panel.destroy();}catch(e){}
-        }
-        this.fireEvent("panelremoved", this, panel);
-        return panel;
-    },
-
-
-    getTabs : function(){
-        return this.tabs;
-    },
-
-    createTool : function(parentEl, className){
-        var btn = Ext.DomHelper.append(parentEl, {tag: "div", cls: "x-layout-tools-button",
-            children: [{tag: "div", cls: "x-layout-tools-button-inner " + className, html: "&#160;"}]}, true);
-        btn.addClassOnOver("x-layout-tools-button-over");
-        return btn;
-    }
-});
-
-Ext.SplitLayoutRegion = function(mgr, config, pos, cursor){
-    this.cursor = cursor;
-    Ext.SplitLayoutRegion.superclass.constructor.call(this, mgr, config, pos);
-};
-
-Ext.extend(Ext.SplitLayoutRegion, Ext.LayoutRegion, {
-    splitTip : "Drag to resize.",
-    collapsibleSplitTip : "Drag to resize. Double click to hide.",
-    useSplitTips : false,
-
-    applyConfig : function(config){
-        Ext.SplitLayoutRegion.superclass.applyConfig.call(this, config);
-        if(config.split){
-            if(!this.split){
-                var splitEl = Ext.DomHelper.append(this.mgr.el.dom,
-                        {tag: "div", id: this.el.id + "-split", cls: "x-layout-split x-layout-split-"+this.position, html: "&#160;"});
-
-                this.split = new Ext.SplitBar(splitEl, this.el, this.orientation);
-                this.split.on("moved", this.onSplitMove, this);
-                this.split.useShim = config.useShim === true;
-                this.split.getMaximumSize = this[this.position == 'north' || this.position == 'south' ? 'getVMaxSize' : 'getHMaxSize'].createDelegate(this);
-                if(this.useSplitTips){
-                    this.split.el.dom.title = config.collapsible ? this.collapsibleSplitTip : this.splitTip;
-                }
-                if(config.collapsible){
-                    this.split.el.on("dblclick", this.collapse,  this);
-                }
-            }
-            if(typeof config.minSize != "undefined"){
-                this.split.minSize = config.minSize;
-            }
-            if(typeof config.maxSize != "undefined"){
-                this.split.maxSize = config.maxSize;
-            }
-            if(config.hideWhenEmpty || config.hidden){
-                this.hideSplitter();
-            }
-        }
-    },
-
-    getHMaxSize : function(){
-         var cmax = this.config.maxSize || 10000;
-         var center = this.mgr.getRegion("center");
-         return Math.min(cmax, (this.el.getWidth()+center.getEl().getWidth())-center.getMinWidth());
-    },
-
-    getVMaxSize : function(){
-         var cmax = this.config.maxSize || 10000;
-         var center = this.mgr.getRegion("center");
-         return Math.min(cmax, (this.el.getHeight()+center.getEl().getHeight())-center.getMinHeight());
-    },
-
-    onSplitMove : function(split, newSize){
-        this.fireEvent("resized", this, newSize);
-    },
-
-
-    getSplitBar : function(){
-        return this.split;
-    },
-
-    hide : function(){
-        this.hideSplitter();
-        Ext.SplitLayoutRegion.superclass.hide.call(this);
-    },
-
-    hideSplitter : function(){
-        if(this.split){
-            this.split.el.setLocation(-2000,-2000);
-            this.split.el.hide();
-        }
-    },
-
-    show : function(){
-        if(this.split){
-            this.split.el.show();
-        }
-        Ext.SplitLayoutRegion.superclass.show.call(this);
-    },
-
-    beforeSlide: function(){
-        if(Ext.isGecko){// firefox overflow auto bug workaround
-            this.bodyEl.clip();
-            if(this.tabs) this.tabs.bodyEl.clip();
-            if(this.activePanel){
-                this.activePanel.getEl().clip();
-
-                if(this.activePanel.beforeSlide){
-                    this.activePanel.beforeSlide();
-                }
-            }
-        }
-    },
-
-    afterSlide : function(){
-        if(Ext.isGecko){// firefox overflow auto bug workaround
-            this.bodyEl.unclip();
-            if(this.tabs) this.tabs.bodyEl.unclip();
-            if(this.activePanel){
-                this.activePanel.getEl().unclip();
-                if(this.activePanel.afterSlide){
-                    this.activePanel.afterSlide();
-                }
-            }
-        }
-    },
-
-    initAutoHide : function(){
-        if(this.autoHide !== false){
-            if(!this.autoHideHd){
-                var st = new Ext.util.DelayedTask(this.slideIn, this);
-                this.autoHideHd = {
-                    "mouseout": function(e){
-                        if(!e.within(this.el, true)){
-                            st.delay(500);
-                        }
-                    },
-                    "mouseover" : function(e){
-                        st.cancel();
-                    },
-                    scope : this
-                };
-            }
-            this.el.on(this.autoHideHd);
-        }
-    },
-
-    clearAutoHide : function(){
-        if(this.autoHide !== false){
-            this.el.un("mouseout", this.autoHideHd.mouseout);
-            this.el.un("mouseover", this.autoHideHd.mouseover);
-        }
-    },
-
-    clearMonitor : function(){
-        Ext.get(document).un("click", this.slideInIf, this);
-    },
-
-    // these names are backwards but not changed for compat
-    slideOut : function(){
-        if(this.isSlid || this.el.hasActiveFx()){
-            return;
-        }
-        this.isSlid = true;
-        if(this.collapseBtn){
-            this.collapseBtn.hide();
-        }
-        this.closeBtnState = this.closeBtn.getStyle('display');
-        this.closeBtn.hide();
-        if(this.stickBtn){
-            this.stickBtn.show();
-        }
-        this.el.show();
-        this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
-        this.beforeSlide();
-        this.el.setStyle("z-index", 10001);
-        this.el.slideIn(this.getSlideAnchor(), {
-            callback: function(){
-                this.afterSlide();
-                this.initAutoHide();
-                Ext.get(document).on("click", this.slideInIf, this);
-                this.fireEvent("slideshow", this);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    afterSlideIn : function(){
-        this.clearAutoHide();
-        this.isSlid = false;
-        this.clearMonitor();
-        this.el.setStyle("z-index", "");
-        if(this.collapseBtn){
-            this.collapseBtn.show();
-        }
-        this.closeBtn.setStyle('display', this.closeBtnState);
-        if(this.stickBtn){
-            this.stickBtn.hide();
-        }
-        this.fireEvent("slidehide", this);
-    },
-
-    slideIn : function(cb){
-        if(!this.isSlid || this.el.hasActiveFx()){
-            Ext.callback(cb);
-            return;
-        }
-        this.isSlid = false;
-        this.beforeSlide();
-        this.el.slideOut(this.getSlideAnchor(), {
-            callback: function(){
-                this.el.setLeftTop(-10000, -10000);
-                this.afterSlide();
-                this.afterSlideIn();
-                Ext.callback(cb);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    slideInIf : function(e){
-        if(!e.within(this.el)){
-            this.slideIn();
-        }
-    },
-
-    animateCollapse : function(){
-        this.beforeSlide();
-        this.el.setStyle("z-index", 20000);
-        var anchor = this.getSlideAnchor();
-        this.el.slideOut(anchor, {
-            callback : function(){
-                this.el.setStyle("z-index", "");
-                this.collapsedEl.slideIn(anchor, {duration:.3});
-                this.afterSlide();
-                this.el.setLocation(-10000,-10000);
-                this.el.hide();
-                this.fireEvent("collapsed", this);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    animateExpand : function(){
-        this.beforeSlide();
-        this.el.alignTo(this.collapsedEl, this.getCollapseAnchor(), this.getExpandAdj());
-        this.el.setStyle("z-index", 20000);
-        this.collapsedEl.hide({
-            duration:.1
-        });
-        this.el.slideIn(this.getSlideAnchor(), {
-            callback : function(){
-                this.el.setStyle("z-index", "");
-                this.afterSlide();
-                if(this.split){
-                    this.split.el.show();
-                }
-                this.fireEvent("invalidated", this);
-                this.fireEvent("expanded", this);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    anchors : {
-        "west" : "left",
-        "east" : "right",
-        "north" : "top",
-        "south" : "bottom"
-    },
-
-    sanchors : {
-        "west" : "l",
-        "east" : "r",
-        "north" : "t",
-        "south" : "b"
-    },
-
-    canchors : {
-        "west" : "tl-tr",
-        "east" : "tr-tl",
-        "north" : "tl-bl",
-        "south" : "bl-tl"
-    },
-
-    getAnchor : function(){
-        return this.anchors[this.position];
-    },
-
-    getCollapseAnchor : function(){
-        return this.canchors[this.position];
-    },
-
-    getSlideAnchor : function(){
-        return this.sanchors[this.position];
-    },
-
-    getAlignAdj : function(){
-        var cm = this.cmargins;
-        switch(this.position){
-            case "west":
-                return [0, 0];
-            break;
-            case "east":
-                return [0, 0];
-            break;
-            case "north":
-                return [0, 0];
-            break;
-            case "south":
-                return [0, 0];
-            break;
-        }
-    },
-
-    getExpandAdj : function(){
-        var c = this.collapsedEl, cm = this.cmargins;
-        switch(this.position){
-            case "west":
-                return [-(cm.right+c.getWidth()+cm.left), 0];
-            break;
-            case "east":
-                return [cm.right+c.getWidth()+cm.left, 0];
-            break;
-            case "north":
-                return [0, -(cm.top+cm.bottom+c.getHeight())];
-            break;
-            case "south":
-                return [0, cm.top+cm.bottom+c.getHeight()];
-            break;
-        }
-    }
-});
-
-Ext.CenterLayoutRegion = function(mgr, config){
-    Ext.CenterLayoutRegion.superclass.constructor.call(this, mgr, config, "center");
-    this.visible = true;
-    this.minWidth = config.minWidth || 20;
-    this.minHeight = config.minHeight || 20;
-};
-
-Ext.extend(Ext.CenterLayoutRegion, Ext.LayoutRegion, {
-    hide : function(){
-        // center panel can't be hidden
-    },
-
-    show : function(){
-        // center panel can't be hidden
-    },
-
-    getMinWidth: function(){
-        return this.minWidth;
-    },
-
-    getMinHeight: function(){
-        return this.minHeight;
-    }
-});
-
-
-Ext.NorthLayoutRegion = function(mgr, config){
-    Ext.NorthLayoutRegion.superclass.constructor.call(this, mgr, config, "north", "n-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.TOP;
-        this.split.orientation = Ext.SplitBar.VERTICAL;
-        this.split.el.addClass("x-layout-split-v");
-    }
-    var size = config.initialSize || config.height;
-    if(typeof size != "undefined"){
-        this.el.setHeight(size);
-    }
-};
-Ext.extend(Ext.NorthLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.VERTICAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            box.height += this.split.el.getHeight();
-        }
-        return box;
-    },
-
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            box.height -= this.split.el.getHeight();
-            this.split.el.setLeft(box.x);
-            this.split.el.setTop(box.y+box.height);
-            this.split.el.setWidth(box.width);
-        }
-        if(this.collapsed){
-            this.updateBody(box.width, null);
-        }
-        Ext.NorthLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-Ext.SouthLayoutRegion = function(mgr, config){
-    Ext.SouthLayoutRegion.superclass.constructor.call(this, mgr, config, "south", "s-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.BOTTOM;
-        this.split.orientation = Ext.SplitBar.VERTICAL;
-        this.split.el.addClass("x-layout-split-v");
-    }
-    var size = config.initialSize || config.height;
-    if(typeof size != "undefined"){
-        this.el.setHeight(size);
-    }
-};
-Ext.extend(Ext.SouthLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.VERTICAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            var sh = this.split.el.getHeight();
-            box.height += sh;
-            box.y -= sh;
-        }
-        return box;
-    },
-
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            var sh = this.split.el.getHeight();
-            box.height -= sh;
-            box.y += sh;
-            this.split.el.setLeft(box.x);
-            this.split.el.setTop(box.y-sh);
-            this.split.el.setWidth(box.width);
-        }
-        if(this.collapsed){
-            this.updateBody(box.width, null);
-        }
-        Ext.SouthLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-Ext.EastLayoutRegion = function(mgr, config){
-    Ext.EastLayoutRegion.superclass.constructor.call(this, mgr, config, "east", "e-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.RIGHT;
-        this.split.orientation = Ext.SplitBar.HORIZONTAL;
-        this.split.el.addClass("x-layout-split-h");
-    }
-    var size = config.initialSize || config.width;
-    if(typeof size != "undefined"){
-        this.el.setWidth(size);
-    }
-};
-Ext.extend(Ext.EastLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.HORIZONTAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            var sw = this.split.el.getWidth();
-            box.width += sw;
-            box.x -= sw;
-        }
-        return box;
-    },
-
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            var sw = this.split.el.getWidth();
-            box.width -= sw;
-            this.split.el.setLeft(box.x);
-            this.split.el.setTop(box.y);
-            this.split.el.setHeight(box.height);
-            box.x += sw;
-        }
-        if(this.collapsed){
-            this.updateBody(null, box.height);
-        }
-        Ext.EastLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-Ext.WestLayoutRegion = function(mgr, config){
-    Ext.WestLayoutRegion.superclass.constructor.call(this, mgr, config, "west", "w-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.LEFT;
-        this.split.orientation = Ext.SplitBar.HORIZONTAL;
-        this.split.el.addClass("x-layout-split-h");
-    }
-    var size = config.initialSize || config.width;
-    if(typeof size != "undefined"){
-        this.el.setWidth(size);
-    }
-};
-Ext.extend(Ext.WestLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.HORIZONTAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            box.width += this.split.el.getWidth();
-        }
-        return box;
-    },
-
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            var sw = this.split.el.getWidth();
-            box.width -= sw;
-            this.split.el.setLeft(box.x+box.width);
-            this.split.el.setTop(box.y);
-            this.split.el.setHeight(box.height);
-        }
-        if(this.collapsed){
-            this.updateBody(null, box.height);
-        }
-        Ext.WestLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-
-Ext.LayoutStateManager = function(layout){
-     // default empty state
-     this.state = {
-        north: {},
-        south: {},
-        east: {},
-        west: {}
-    };
-};
-
-Ext.LayoutStateManager.prototype = {
-    init : function(layout, provider){
-        this.provider = provider;
-        var state = provider.get(layout.id+"-layout-state");
-        if(state){
-            var wasUpdating = layout.isUpdating();
-            if(!wasUpdating){
-                layout.beginUpdate();
-            }
-            for(var key in state){
-                if(typeof state[key] != "function"){
-                    var rstate = state[key];
-                    var r = layout.getRegion(key);
-                    if(r && rstate){
-                        if(rstate.size){
-                            r.resizeTo(rstate.size);
-                        }
-                        if(rstate.collapsed == true){
-                            r.collapse(true);
-                        }else{
-                            r.expand(null, true);
-                        }
-                    }
-                }
-            }
-            if(!wasUpdating){
-                layout.endUpdate();
-            }
-            this.state = state;
-        }
-        this.layout = layout;
-        layout.on("regionresized", this.onRegionResized, this);
-        layout.on("regioncollapsed", this.onRegionCollapsed, this);
-        layout.on("regionexpanded", this.onRegionExpanded, this);
-    },
-
-    storeState : function(){
-        this.provider.set(this.layout.id+"-layout-state", this.state);
-    },
-
-    onRegionResized : function(region, newSize){
-        this.state[region.getPosition()].size = newSize;
-        this.storeState();
-    },
-
-    onRegionCollapsed : function(region){
-        this.state[region.getPosition()].collapsed = true;
-        this.storeState();
-    },
-
-    onRegionExpanded : function(region){
-        this.state[region.getPosition()].collapsed = false;
-        this.storeState();
-    }
-};
-
-Ext.ContentPanel = function(el, config, content){
-    if(el.autoCreate){
-        config = el;
-        el = Ext.id();
-    }
-    this.el = Ext.get(el);
-    if(!this.el && config && config.autoCreate){
-        if(typeof config.autoCreate == "object"){
-            if(!config.autoCreate.id){
-                config.autoCreate.id = config.id||el;
-            }
-            this.el = Ext.DomHelper.append(document.body,
-                        config.autoCreate, true);
-        }else{
-            this.el = Ext.DomHelper.append(document.body,
-                        {tag: "div", cls: "x-layout-inactive-content", id: config.id||el}, true);
-        }
-    }
-    this.closable = false;
-    this.loaded = false;
-    this.active = false;
-    if(typeof config == "string"){
-        this.title = config;
-    }else{
-        Ext.apply(this, config);
-    }
-    if(this.resizeEl){
-        this.resizeEl = Ext.get(this.resizeEl, true);
-    }else{
-        this.resizeEl = this.el;
-    }
-    this.addEvents({
-
-        "activate" : true,
-
-        "deactivate" : true,
-
-
-        "resize" : true
-    });
-    if(this.autoScroll){
-        this.resizeEl.setStyle("overflow", "auto");
-    }
-    content = content || this.content;
-    if(content){
-        this.setContent(content);
-    }
-    if(config && config.url){
-        this.setUrl(this.url, this.params, this.loadOnce);
-    }
-    Ext.ContentPanel.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.ContentPanel, Ext.util.Observable, {
-    tabTip:'',
-    setRegion : function(region){
-        this.region = region;
-        if(region){
-           this.el.replaceClass("x-layout-inactive-content", "x-layout-active-content");
-        }else{
-           this.el.replaceClass("x-layout-active-content", "x-layout-inactive-content");
-        }
-    },
-
-
-    getToolbar : function(){
-        return this.toolbar;
-    },
-
-    setActiveState : function(active){
-        this.active = active;
-        if(!active){
-            this.fireEvent("deactivate", this);
-        }else{
-            this.fireEvent("activate", this);
-        }
-    },
-
-    setContent : function(content, loadScripts){
-        this.el.update(content, loadScripts);
-    },
-
-    ignoreResize : function(w, h){
-        if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
-            return true;
-        }else{
-            this.lastSize = {width: w, height: h};
-            return false;
-        }
-    },
-
-    getUpdateManager : function(){
-        return this.el.getUpdateManager();
-    },
-
-    load : function(){
-        var um = this.el.getUpdateManager();
-        um.update.apply(um, arguments);
-        return this;
-    },
-
-
-
-    setUrl : function(url, params, loadOnce){
-        if(this.refreshDelegate){
-            this.removeListener("activate", this.refreshDelegate);
-        }
-        this.refreshDelegate = this._handleRefresh.createDelegate(this, [url, params, loadOnce]);
-        this.on("activate", this.refreshDelegate);
-        return this.el.getUpdateManager();
-    },
-
-    _handleRefresh : function(url, params, loadOnce){
-        if(!loadOnce || !this.loaded){
-            var updater = this.el.getUpdateManager();
-            updater.update(url, params, this._setLoaded.createDelegate(this));
-        }
-    },
-
-    _setLoaded : function(){
-        this.loaded = true;
-    },
-
-
-    getId : function(){
-        return this.el.id;
-    },
-
-
-    getEl : function(){
-        return this.el;
-    },
-
-    adjustForComponents : function(width, height){
-        if(this.resizeEl != this.el){
-            width -= this.el.getFrameWidth('lr');
-            height -= this.el.getFrameWidth('tb');
-        }
-        if(this.toolbar){
-            var te = this.toolbar.getEl();
-            height -= te.getHeight();
-            te.setWidth(width);
-        }
-        if(this.adjustments){
-            width += this.adjustments[0];
-            height += this.adjustments[1];
-        }
-        return {"width": width, "height": height};
-    },
-
-    setSize : function(width, height){
-        if(this.fitToFrame && !this.ignoreResize(width, height)){
-            if(this.fitContainer && this.resizeEl != this.el){
-                this.el.setSize(width, height);
-            }
-            var size = this.adjustForComponents(width, height);
-            this.resizeEl.setSize(this.autoWidth ? "auto" : size.width, this.autoHeight ? "auto" : size.height);
-            this.fireEvent('resize', this, size.width, size.height);
-        }
-    },
-
-
-    getTitle : function(){
-        return this.title;
-    },
-
-
-    setTitle : function(title){
-        this.title = title;
-        if(this.region){
-            this.region.updatePanelTitle(this, title);
-        }
-    },
-
-
-    isClosable : function(){
-        return this.closable;
-    },
-
-    beforeSlide : function(){
-        this.el.clip();
-        this.resizeEl.clip();
-    },
-
-    afterSlide : function(){
-        this.el.unclip();
-        this.resizeEl.unclip();
-    },
-
-
-    refresh : function(){
-        if(this.refreshDelegate){
-           this.loaded = false;
-           this.refreshDelegate();
-        }
-    },
-
-
-    destroy : function(){
-        this.el.removeAllListeners();
-        var tempEl = document.createElement("span");
-        tempEl.appendChild(this.el.dom);
-        tempEl.innerHTML = "";
-        this.el.remove();
-        this.el = null;
-    }
-});
-
-
-Ext.GridPanel = function(grid, config){
-    this.wrapper = Ext.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
-        {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
-    this.wrapper.dom.appendChild(grid.getGridEl().dom);
-    Ext.GridPanel.superclass.constructor.call(this, this.wrapper, config);
-    if(this.toolbar){
-        this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);
-    }
-    grid.monitorWindowResize = false; // turn off autosizing
-    grid.autoHeight = false;
-    grid.autoWidth = false;
-    this.grid = grid;
-    this.grid.getGridEl().replaceClass("x-layout-inactive-content", "x-layout-component-panel");
-};
-
-Ext.extend(Ext.GridPanel, Ext.ContentPanel, {
-    getId : function(){
-        return this.grid.id;
-    },
-
-
-    getGrid : function(){
-        return this.grid;
-    },
-
-    setSize : function(width, height){
-        if(!this.ignoreResize(width, height)){
-            var grid = this.grid;
-            var size = this.adjustForComponents(width, height);
-            grid.getGridEl().setSize(size.width, size.height);
-            grid.autoSize();
-        }
-    },
-
-    beforeSlide : function(){
-        this.grid.getView().scroller.clip();
-    },
-
-    afterSlide : function(){
-        this.grid.getView().scroller.unclip();
-    },
-
-    destroy : function(){
-        this.grid.destroy();
-        delete this.grid;
-        Ext.GridPanel.superclass.destroy.call(this);
-    }
-});
-
-
-
-Ext.NestedLayoutPanel = function(layout, config){
-    Ext.NestedLayoutPanel.superclass.constructor.call(this, layout.getEl(), config);
-    layout.monitorWindowResize = false; // turn off autosizing
-    this.layout = layout;
-    this.layout.getEl().addClass("x-layout-nested-layout");
-};
-
-Ext.extend(Ext.NestedLayoutPanel, Ext.ContentPanel, {
-
-    setSize : function(width, height){
-        if(!this.ignoreResize(width, height)){
-            var size = this.adjustForComponents(width, height);
-            var el = this.layout.getEl();
-            el.setSize(size.width, size.height);
-            var touch = el.dom.offsetWidth;
-            this.layout.layout();
-            // ie requires a double layout on the first pass
-            if(Ext.isIE && !this.initialized){
-                this.initialized = true;
-                this.layout.layout();
-            }
-        }
-    },
-
-
-    getLayout : function(){
-        return this.layout;
-    }
-});
-
-Ext.ScrollPanel = function(el, config, content){
-    config = config || {};
-    config.fitToFrame = true;
-    Ext.ScrollPanel.superclass.constructor.call(this, el, config, content);
-
-    this.el.dom.style.overflow = "hidden";
-    var wrap = this.el.wrap({cls: "x-scroller x-layout-inactive-content"});
-    this.el.removeClass("x-layout-inactive-content");
-    this.el.on("mousewheel", this.onWheel, this);
-
-    var up = wrap.createChild({cls: "x-scroller-up", html: "&#160;"}, this.el.dom);
-    var down = wrap.createChild({cls: "x-scroller-down", html: "&#160;"});
-    up.unselectable(); down.unselectable();
-    up.on("click", this.scrollUp, this);
-    down.on("click", this.scrollDown, this);
-    up.addClassOnOver("x-scroller-btn-over");
-    down.addClassOnOver("x-scroller-btn-over");
-    up.addClassOnClick("x-scroller-btn-click");
-    down.addClassOnClick("x-scroller-btn-click");
-    this.adjustments = [0, -(up.getHeight() + down.getHeight())];
-
-    this.resizeEl = this.el;
-    this.el = wrap; this.up = up; this.down = down;
-};
-
-Ext.extend(Ext.ScrollPanel, Ext.ContentPanel, {
-    increment : 100,
-    wheelIncrement : 5,
-    scrollUp : function(){
-        this.resizeEl.scroll("up", this.increment, {callback: this.afterScroll, scope: this});
-    },
-
-    scrollDown : function(){
-        this.resizeEl.scroll("down", this.increment, {callback: this.afterScroll, scope: this});
-    },
-
-    afterScroll : function(){
-        var el = this.resizeEl;
-        var t = el.dom.scrollTop, h = el.dom.scrollHeight, ch = el.dom.clientHeight;
-        this.up[t == 0 ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
-        this.down[h - t <= ch ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
-    },
-
-    setSize : function(){
-        Ext.ScrollPanel.superclass.setSize.apply(this, arguments);
-        this.afterScroll();
-    },
-
-    onWheel : function(e){
-        var d = e.getWheelDelta();
-        this.resizeEl.dom.scrollTop -= (d*this.wheelIncrement);
-        this.afterScroll();
-        e.stopEvent();
-    },
-
-    setContent : function(content, loadScripts){
-        this.resizeEl.update(content, loadScripts);
-    }
-
-});
-
-Ext.ReaderLayout = function(config, renderTo){
-    var c = config || {size:{}};
-    Ext.ReaderLayout.superclass.constructor.call(this, renderTo || document.body, {
-        north: c.north !== false ? Ext.apply({
-            split:false,
-            initialSize: 32,
-            titlebar: false
-        }, c.north) : false,
-        west: c.west !== false ? Ext.apply({
-            split:true,
-            initialSize: 200,
-            minSize: 175,
-            maxSize: 400,
-            titlebar: true,
-            collapsible: true,
-            animate: true,
-            margins:{left:5,right:0,bottom:5,top:5},
-            cmargins:{left:5,right:5,bottom:5,top:5}
-        }, c.west) : false,
-        east: c.east !== false ? Ext.apply({
-            split:true,
-            initialSize: 200,
-            minSize: 175,
-            maxSize: 400,
-            titlebar: true,
-            collapsible: true,
-            animate: true,
-            margins:{left:0,right:5,bottom:5,top:5},
-            cmargins:{left:5,right:5,bottom:5,top:5}
-        }, c.east) : false,
-        center: Ext.apply({
-            tabPosition: 'top',
-            autoScroll:false,
-            closeOnTab: true,
-            titlebar:false,
-            margins:{left:c.west!==false ? 0 : 5,right:c.east!==false ? 0 : 5,bottom:5,top:2}
-        }, c.center)
-    });
-
-    this.el.addClass('x-reader');
-
-    this.beginUpdate();
-
-    var inner = new Ext.BorderLayout(Ext.get(document.body).createChild(), {
-        south: c.preview !== false ? Ext.apply({
-            split:true,
-            initialSize: 200,
-            minSize: 100,
-            autoScroll:true,
-            collapsible:true,
-            titlebar: true,
-            cmargins:{top:5,left:0, right:0, bottom:0}
-        }, c.preview) : false,
-        center: Ext.apply({
-            autoScroll:false,
-            titlebar:false,
-            minHeight:200
-        }, c.listView)
-    });
-    this.add('center', new Ext.NestedLayoutPanel(inner,
-            Ext.apply({title: c.mainTitle || '',tabTip:''},c.innerPanelCfg)));
-
-    this.endUpdate();
-
-    this.regions.preview = inner.getRegion('south');
-    this.regions.listView = inner.getRegion('center');
-};
-
-Ext.extend(Ext.ReaderLayout, Ext.BorderLayout);
-
-Ext.grid.Grid = function(container, config){
-	// initialize the container
-	this.container = Ext.get(container);
-	this.container.update("");
-	this.container.setStyle("overflow", "hidden");
-    this.container.addClass('x-grid-container');
-
-    this.id = this.container.id;
-
-    Ext.apply(this, config);
-    // check and correct shorthanded configs
-    if(this.ds){
-        this.dataSource = this.ds;
-        delete this.ds;
-    }
-    if(this.cm){
-        this.colModel = this.cm;
-        delete this.cm;
-    }
-    if(this.sm){
-        this.selModel = this.sm;
-        delete this.sm;
-    }
-
-    if(this.width){
-        this.container.setWidth(this.width);
-    }
-
-    if(this.height){
-        this.container.setHeight(this.height);
-    }
-
-	this.addEvents({
-	    // raw events
-
-	    "click" : true,
-
-	    "dblclick" : true,
-
-	    "contextmenu" : true,
-
-	    "mousedown" : true,
-
-	    "mouseup" : true,
-
-	    "mouseover" : true,
-
-	    "mouseout" : true,
-
-	    "keypress" : true,
-
-	    "keydown" : true,
-
-	    // custom events
-
-
-	    "cellclick" : true,
-
-	    "celldblclick" : true,
-
-	    "rowclick" : true,
-
-	    "rowdblclick" : true,
-
-	    "headerclick" : true,
-
-	    "headerdblclick" : true,
-
-	    "rowcontextmenu" : true,
-
-         "cellcontextmenu" : true,
-
-	    "headercontextmenu" : true,
-
-	    "bodyscroll" : true,
-
-	    "columnresize" : true,
-
-	    "columnmove" : true,
-
-	    "startdrag" : true,
-
-	    "enddrag" : true,
-
-	    "dragdrop" : true,
-
-	    "dragover" : true,
-
-	    "dragenter" : true,
-
-	    "dragout" : true,
-
-        render : true
-    });
-
-    Ext.grid.Grid.superclass.constructor.call(this);
-};
-Ext.extend(Ext.grid.Grid, Ext.util.Observable, {
-
-	minColumnWidth : 25,
-
-
-	autoSizeColumns : false,
-
-
-	autoSizeHeaders : true,
-
-
-	monitorWindowResize : true,
-
-
-	maxRowsToMeasure : 0,
-
-
-	trackMouseOver : true,
-
-
-	enableDragDrop : false,
-
-
-	enableColumnMove : true,
-
-
-	enableColumnHide : true,
-
-
-	enableRowHeightSync : false,
-
-
-	stripeRows : true,
-
-
-	autoHeight : false,
-
-
-    autoExpandColumn : false,
-
-
-    autoExpandMin : 50,
-
-
-    autoExpandMax : 1000,
-
-
-	view : null,
-
-
-	loadMask : false,
-
-    // private
-    rendered : false,
-
-
-
-    render : function(){
-        var c = this.container;
-        // try to detect autoHeight/width mode
-        if((!c.dom.offsetHeight || c.dom.offsetHeight < 20) || c.getStyle("height") == "auto"){
-    	    this.autoHeight = true;
-    	}
-    	var view = this.getView();
-        view.init(this);
-
-        c.on("click", this.onClick, this);
-        c.on("dblclick", this.onDblClick, this);
-        c.on("contextmenu", this.onContextMenu, this);
-        c.on("keydown", this.onKeyDown, this);
-
-        this.relayEvents(c, ["mousedown","mouseup","mouseover","mouseout","keypress"]);
-
-        this.getSelectionModel().init(this);
-
-        view.render();
-
-        if(this.loadMask){
-            this.loadMask = new Ext.LoadMask(this.container,
-                    Ext.apply({store:this.dataSource}, this.loadMask));
-        }
-        this.rendered = true;
-        this.fireEvent('render', this);
-        return this;
-    },
-
-    reconfigure : function(dataSource, colModel){
-        if(this.loadMask){
-            this.loadMask.destroy();
-            this.loadMask = new Ext.LoadMask(this.container,
-                    Ext.apply({store:dataSource}, this.loadMask));
-        }
-        this.view.bind(dataSource, colModel);
-        this.dataSource = dataSource;
-        this.colModel = colModel;
-        this.view.refresh(true);
-    },
-
-    onKeyDown : function(e){
-        this.fireEvent("keydown", e);
-    },
-
-
-    destroy : function(removeEl, keepListeners){
-        if(this.loadMask){
-            this.loadMask.destroy();
-        }
-        var c = this.container;
-        c.removeAllListeners();
-        this.view.destroy();
-        this.colModel.purgeListeners();
-        if(!keepListeners){
-            this.purgeListeners();
-        }
-        c.update("");
-        if(removeEl === true){
-            c.remove();
-        }
-    },
-
-    // private
-    processEvent : function(name, e){
-        this.fireEvent(name, e);
-        var t = e.getTarget();
-        var v = this.view;
-        var header = v.findHeaderIndex(t);
-        if(header !== false){
-            this.fireEvent("header" + name, this, header, e);
-        }else{
-            var row = v.findRowIndex(t);
-            var cell = v.findCellIndex(t);
-            if(row !== false){
-                this.fireEvent("row" + name, this, row, e);
-                if(cell !== false){
-                    this.fireEvent("cell" + name, this, row, cell, e);
-                }
-            }
-        }
-    },
-
-    // private
-    onClick : function(e){
-        this.processEvent("click", e);
-    },
-
-    // private
-    onContextMenu : function(e, t){
-        this.processEvent("contextmenu", e);
-    },
-
-    // private
-    onDblClick : function(e){
-        this.processEvent("dblclick", e);
-    },
-
-    walkCells : function(row, col, step, fn, scope){
-        var cm = this.colModel, clen = cm.getColumnCount();
-        var ds = this.dataSource, rlen = ds.getCount(), first = true;
-        if(step < 0){
-            if(col < 0){
-                row--;
-                first = false;
-            }
-            while(row >= 0){
-                if(!first){
-                    col = clen-1;
-                }
-                first = false;
-                while(col >= 0){
-                    if(fn.call(scope || this, row, col, cm) === true){
-                        return [row, col];
-                    }
-                    col--;
-                }
-                row--;
-            }
-        } else {
-            if(col >= clen){
-                row++;
-                first = false;
-            }
-            while(row < rlen){
-                if(!first){
-                    col = 0;
-                }
-                first = false;
-                while(col < clen){
-                    if(fn.call(scope || this, row, col, cm) === true){
-                        return [row, col];
-                    }
-                    col++;
-                }
-                row++;
-            }
-        }
-        return null;
-    },
-
-    getSelections : function(){
-        return this.selModel.getSelections();
-    },
-
-
-    autoSize : function(){
-        if(this.rendered){
-            this.view.layout();
-            if(this.view.adjustForScroll){
-                this.view.adjustForScroll();
-            }
-        }
-    },
-
-    getGridEl : function(){
-        return this.container;
-    },
-
-    // private for compatibility, overridden by editor grid
-    stopEditing : function(){},
-
-
-    getSelectionModel : function(){
-        if(!this.selModel){
-            this.selModel = new Ext.grid.RowSelectionModel();
-        }
-        return this.selModel;
-    },
-
-
-    getDataSource : function(){
-        return this.dataSource;
-    },
-
-
-    getColumnModel : function(){
-        return this.colModel;
-    },
-
-
-    getView : function(){
-        if(!this.view){
-            this.view = new Ext.grid.GridView(this.viewConfig);
-        }
-        return this.view;
-    },
-
-    getDragDropText : function(){
-        var count = this.selModel.getCount();
-        return String.format(this.ddText, count, count == 1 ? '' : 's');
-    }
-});
-
-Ext.grid.Grid.prototype.ddText = "{0} selected row{1}";
-Ext.grid.AbstractGridView = function(){
-	this.grid = null;
-
-	this.events = {
-	    "beforerowremoved" : true,
-	    "beforerowsinserted" : true,
-	    "beforerefresh" : true,
-	    "rowremoved" : true,
-	    "rowsinserted" : true,
-	    "rowupdated" : true,
-	    "refresh" : true
-	};
-    Ext.grid.AbstractGridView.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.grid.AbstractGridView, Ext.util.Observable, {
-    rowClass : "x-grid-row",
-    cellClass : "x-grid-cell",
-    tdClass : "x-grid-td",
-    hdClass : "x-grid-hd",
-    splitClass : "x-grid-hd-split",
-
-	init: function(grid){
-        this.grid = grid;
-		var cid = this.grid.getGridEl().id;
-        this.colSelector = "#" + cid + " ." + this.cellClass + "-";
-        this.tdSelector = "#" + cid + " ." + this.tdClass + "-";
-        this.hdSelector = "#" + cid + " ." + this.hdClass + "-";
-        this.splitSelector = "#" + cid + " ." + this.splitClass + "-";
-	},
-
-	getColumnRenderers : function(){
-    	var renderers = [];
-    	var cm = this.grid.colModel;
-        var colCount = cm.getColumnCount();
-        for(var i = 0; i < colCount; i++){
-            renderers[i] = cm.getRenderer(i);
-        }
-        return renderers;
-    },
-
-    getColumnIds : function(){
-    	var ids = [];
-    	var cm = this.grid.colModel;
-        var colCount = cm.getColumnCount();
-        for(var i = 0; i < colCount; i++){
-            ids[i] = cm.getColumnId(i);
-        }
-        return ids;
-    },
-
-    getDataIndexes : function(){
-    	if(!this.indexMap){
-            this.indexMap = this.buildIndexMap();
-        }
-        return this.indexMap.colToData;
-    },
-
-    getColumnIndexByDataIndex : function(dataIndex){
-        if(!this.indexMap){
-            this.indexMap = this.buildIndexMap();
-        }
-    	return this.indexMap.dataToCol[dataIndex];
-    },
-
-
-    setCSSStyle : function(colIndex, name, value){
-        var selector = "#" + this.grid.id + " .x-grid-col-" + colIndex;
-        Ext.util.CSS.updateRule(selector, name, value);
-    },
-
-    generateRules : function(cm){
-        var ruleBuf = [];
-        for(var i = 0, len = cm.getColumnCount(); i < len; i++){
-            var cid = cm.getColumnId(i);
-            ruleBuf.push(this.colSelector, cid, " {\n", cm.config[i].css, "}\n",
-                         this.tdSelector, cid, " {\n}\n",
-                         this.hdSelector, cid, " {\n}\n",
-                         this.splitSelector, cid, " {\n}\n");
-        }
-        return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));
-    }
-});
-Ext.grid.GridView = function(config){
-    Ext.grid.GridView.superclass.constructor.call(this);
-    this.el = null;
-
-    Ext.apply(this, config);
-};
-
-Ext.extend(Ext.grid.GridView, Ext.grid.AbstractGridView, {
-
-
-    rowClass : "x-grid-row",
-
-    cellClass : "x-grid-col",
-
-    tdClass : "x-grid-td",
-
-    hdClass : "x-grid-hd",
-
-    splitClass : "x-grid-split",
-
-    sortClasses : ["sort-asc", "sort-desc"],
-
-    enableMoveAnim : false,
-
-    hlColor: "C3DAF9",
-
-    dh : Ext.DomHelper,
-
-    fly : Ext.Element.fly,
-
-    css : Ext.util.CSS,
-
-    borderWidth: 1,
-
-    splitOffset: 3,
-
-    scrollIncrement : 22,
-
-    cellRE: /(?:.*?)x-grid-(?:hd|cell|csplit)-(?:[\d]+)-([\d]+)(?:.*?)/,
-
-    findRE: /\s?(?:x-grid-hd|x-grid-col|x-grid-csplit)\s/,
-
-    bind : function(ds, cm){
-        if(this.ds){
-            this.ds.un("load", this.onLoad, this);
-            this.ds.un("datachanged", this.onDataChange);
-            this.ds.un("add", this.onAdd);
-            this.ds.un("remove", this.onRemove);
-            this.ds.un("update", this.onUpdate);
-            this.ds.un("clear", this.onClear);
-        }
-        if(ds){
-            ds.on("load", this.onLoad, this);
-            ds.on("datachanged", this.onDataChange, this);
-            ds.on("add", this.onAdd, this);
-            ds.on("remove", this.onRemove, this);
-            ds.on("update", this.onUpdate, this);
-            ds.on("clear", this.onClear, this);
-        }
-        this.ds = ds;
-
-        if(this.cm){
-            this.cm.un("widthchange", this.onColWidthChange, this);
-            this.cm.un("headerchange", this.onHeaderChange, this);
-            this.cm.un("hiddenchange", this.onHiddenChange, this);
-            this.cm.un("columnmoved", this.onColumnMove, this);
-            this.cm.un("columnlockchange", this.onColumnLock, this);
-        }
-        if(cm){
-            this.generateRules(cm);
-            cm.on("widthchange", this.onColWidthChange, this);
-            cm.on("headerchange", this.onHeaderChange, this);
-            cm.on("hiddenchange", this.onHiddenChange, this);
-            cm.on("columnmoved", this.onColumnMove, this);
-            cm.on("columnlockchange", this.onColumnLock, this);
-        }
-        this.cm = cm;
-    },
-
-    init: function(grid){
-		Ext.grid.GridView.superclass.init.call(this, grid);
-
-		this.bind(grid.dataSource, grid.colModel);
-
-	    grid.on("headerclick", this.handleHeaderClick, this);
-
-        if(grid.trackMouseOver){
-            grid.on("mouseover", this.onRowOver, this);
-	        grid.on("mouseout", this.onRowOut, this);
-	    }
-	    grid.cancelTextSelection = function(){};
-		this.gridId = grid.id;
-
-		var tpls = this.templates || {};
-
-		if(!tpls.master){
-		    tpls.master = new Ext.Template(
-		       '<div class="x-grid" hidefocus="true">',
-		          '<div class="x-grid-topbar"></div>',
-		          '<div class="x-grid-scroller"><div></div></div>',
-		          '<div class="x-grid-locked">',
-		              '<div class="x-grid-header">{lockedHeader}</div>',
-		              '<div class="x-grid-body">{lockedBody}</div>',
-		          "</div>",
-		          '<div class="x-grid-viewport">',
-		              '<div class="x-grid-header">{header}</div>',
-		              '<div class="x-grid-body">{body}</div>',
-		          "</div>",
-		          '<div class="x-grid-bottombar"></div>',
-		          '<a href="#" class="x-grid-focus" tabIndex="-1"></a>',
-		          '<div class="x-grid-resize-proxy">&#160;</div>',
-		       "</div>"
-		    );
-		    tpls.master.disableformats = true;
-		}
-
-		if(!tpls.header){
-		    tpls.header = new Ext.Template(
-		       '<table border="0" cellspacing="0" cellpadding="0">',
-		       '<tbody><tr class="x-grid-hd-row">{cells}</tr></tbody>',
-		       "</table>{splits}"
-		    );
-		    tpls.header.disableformats = true;
-		}
-		tpls.header.compile();
-
-		if(!tpls.hcell){
-		    tpls.hcell = new Ext.Template(
-		        '<td class="x-grid-hd x-grid-td-{id} {cellId}"><div title="{title}" class="x-grid-hd-inner x-grid-hd-{id}">',
-		        '<div class="x-grid-hd-text" unselectable="on">{value}<img class="x-grid-sort-icon" src="', Ext.BLANK_IMAGE_URL, '" /></div>',
-		        "</div></td>"
-		     );
-		     tpls.hcell.disableFormats = true;
-		}
-		tpls.hcell.compile();
-
-		if(!tpls.hsplit){
-		    tpls.hsplit = new Ext.Template('<div class="x-grid-split {splitId} x-grid-split-{id}" style="{style}" unselectable="on">&#160;</div>');
-		    tpls.hsplit.disableFormats = true;
-		}
-		tpls.hsplit.compile();
-
-		if(!tpls.body){
-		    tpls.body = new Ext.Template(
-		       '<table border="0" cellspacing="0" cellpadding="0">',
-		       "<tbody>{rows}</tbody>",
-		       "</table>"
-		    );
-		    tpls.body.disableFormats = true;
-		}
-		tpls.body.compile();
-
-		if(!tpls.row){
-		    tpls.row = new Ext.Template('<tr class="x-grid-row {alt}">{cells}</tr>');
-		    tpls.row.disableFormats = true;
-		}
-		tpls.row.compile();
-
-		if(!tpls.cell){
-		    tpls.cell = new Ext.Template(
-		        '<td class="x-grid-col x-grid-td-{id} {cellId} {css}" tabIndex="0">',
-		        '<div class="x-grid-col-{id} x-grid-cell-inner"><div class="x-grid-cell-text" unselectable="on" {attr}>{value}</div></div>',
-		        "</td>"
-		    );
-            tpls.cell.disableFormats = true;
-        }
-		tpls.cell.compile();
-
-		this.templates = tpls;
-	},
-
-	// remap these for backwards compat
-    onColWidthChange : function(){
-        this.updateColumns.apply(this, arguments);
-    },
-    onHeaderChange : function(){
-        this.updateHeaders.apply(this, arguments);
-    },
-    onHiddenChange : function(){
-        this.handleHiddenChange.apply(this, arguments);
-    },
-    onColumnMove : function(){
-        this.handleColumnMove.apply(this, arguments);
-    },
-    onColumnLock : function(){
-        this.handleLockChange.apply(this, arguments);
-    },
-
-    onDataChange : function(){
-        this.refresh();
-        this.updateHeaderSortState();
-    },
-
-	onClear : function(){
-        this.refresh();
-    },
-
-	onUpdate : function(ds, record){
-        this.refreshRow(record);
-    },
-
-    refreshRow : function(record){
-        var ds = this.ds, index;
-        if(typeof record == 'number'){
-            index = record;
-            record = ds.getAt(index);
-        }else{
-            index = ds.indexOf(record);
-        }
-        var rows = this.getRowComposite(index);
-        var cls = [];
-        this.insertRows(ds, index, index, true);
-        this.onRemove(ds, record, index+1, true);
-        this.syncRowHeights(index, index);
-        this.layout();
-        this.fireEvent("rowupdated", this, index, record);
-    },
-
-    onAdd : function(ds, records, index){
-        this.insertRows(ds, index, index + (records.length-1));
-    },
-
-    onRemove : function(ds, record, index, isUpdate){
-        if(isUpdate !== true){
-            this.fireEvent("beforerowremoved", this, index, record);
-        }
-        var bt = this.getBodyTable(), lt = this.getLockedTable();
-        if(bt.rows[index]){
-            bt.firstChild.removeChild(bt.rows[index]);
-        }
-        if(lt.rows[index]){
-            lt.firstChild.removeChild(lt.rows[index]);
-        }
-        if(isUpdate !== true){
-            this.stripeRows(index);
-            this.syncRowHeights(index, index);
-            this.layout();
-            this.fireEvent("rowremoved", this, index, record);
-        }
-    },
-
-    onLoad : function(){
-        this.scrollToTop();
-    },
-
-
-    scrollToTop : function(){
-        if(this.scroller){
-            this.scroller.dom.scrollTop = 0;
-            this.syncScroll();
-        }
-    },
-
-
-    getHeaderPanel : function(doShow){
-        if(doShow){
-            this.headerPanel.show();
-        }
-        return this.headerPanel;
-	},
-
-
-    getFooterPanel : function(doShow){
-        if(doShow){
-            this.footerPanel.show();
-        }
-        return this.footerPanel;
-	},
-
-	initElements : function(){
-	    var E = Ext.Element;
-	    var el = this.grid.getGridEl().dom.firstChild;
-	    var cs = el.childNodes;
-
-	    this.el = new E(el);
-	    this.headerPanel = new E(el.firstChild);
-	    this.headerPanel.enableDisplayMode("block");
-
-        this.scroller = new E(cs[1]);
-	    this.scrollSizer = new E(this.scroller.dom.firstChild);
-
-	    this.lockedWrap = new E(cs[2]);
-	    this.lockedHd = new E(this.lockedWrap.dom.firstChild);
-	    this.lockedBody = new E(this.lockedWrap.dom.childNodes[1]);
-
-	    this.mainWrap = new E(cs[3]);
-	    this.mainHd = new E(this.mainWrap.dom.firstChild);
-	    this.mainBody = new E(this.mainWrap.dom.childNodes[1]);
-
-	    this.footerPanel = new E(cs[4]);
-	    this.footerPanel.enableDisplayMode("block");
-
-        this.focusEl = new E(cs[5]);
-        this.focusEl.swallowEvent("click", true);
-        this.resizeProxy = new E(cs[6]);
-
-	    this.headerSelector = String.format(
-	       '#{0} td.x-grid-hd, #{1} td.x-grid-hd',
-	       this.lockedHd.id, this.mainHd.id
-	    );
-
-	    this.splitterSelector = String.format(
-	       '#{0} div.x-grid-split, #{1} div.x-grid-split',
-	       this.lockedHd.id, this.mainHd.id
-	    );
-    },
-
-	getHeaderCell : function(index){
-	    return Ext.DomQuery.select(this.headerSelector)[index];
-	},
-
-	getHeaderCellMeasure : function(index){
-	    return this.getHeaderCell(index).firstChild;
-	},
-
-	getHeaderCellText : function(index){
-	    return this.getHeaderCell(index).firstChild.firstChild;
-	},
-
-	getLockedTable : function(){
-	    return this.lockedBody.dom.firstChild;
-	},
-
-	getBodyTable : function(){
-	    return this.mainBody.dom.firstChild;
-	},
-
-	getLockedRow : function(index){
-	    return this.getLockedTable().rows[index];
-	},
-
-	getRow : function(index){
-	    return this.getBodyTable().rows[index];
-	},
-
-	getRowComposite : function(index){
-	    if(!this.rowEl){
-	        this.rowEl = new Ext.CompositeElementLite();
-	    }
-        var els = [], lrow, mrow;
-        if(lrow = this.getLockedRow(index)){
-            els.push(lrow);
-        }
-        if(mrow = this.getRow(index)){
-            els.push(mrow);
-        }
-        this.rowEl.elements = els;
-	    return this.rowEl;
-	},
-
-	getCell : function(rowIndex, colIndex){
-	    var locked = this.cm.getLockedCount();
-	    var source;
-	    if(colIndex < locked){
-	        source = this.lockedBody.dom.firstChild;
-	    }else{
-	        source = this.mainBody.dom.firstChild;
-	        colIndex -= locked;
-	    }
-        return source.rows[rowIndex].childNodes[colIndex];
-	},
-
-	getCellText : function(rowIndex, colIndex){
-	    return this.getCell(rowIndex, colIndex).firstChild.firstChild;
-	},
-
-	getCellBox : function(cell){
-	    var b = this.fly(cell).getBox();
-        if(Ext.isOpera){ // opera fails to report the Y
-            b.y = cell.offsetTop + this.mainBody.getY();
-        }
-        return b;
-    },
-
-    getCellIndex : function(cell){
-        var id = String(cell.className).match(this.cellRE);
-        if(id){
-            return parseInt(id[1], 10);
-        }
-        return 0;
-    },
-
-    findHeaderIndex : function(n){
-        var r = Ext.fly(n).findParent("td." + this.hdClass, 6);
-        return r ? this.getCellIndex(r) : false;
-    },
-
-    findHeaderCell : function(n){
-        var r = Ext.fly(n).findParent("td." + this.hdClass, 6);
-        return r ? r : false;
-    },
-
-    findRowIndex : function(n){
-        if(!n){
-            return false;
-        }
-        var r = Ext.fly(n).findParent("tr." + this.rowClass, 6);
-        return r ? r.rowIndex : false;
-    },
-
-    findCellIndex : function(node){
-        var stop = this.el.dom;
-        while(node && node != stop){
-            if(this.findRE.test(node.className)){
-                return this.getCellIndex(node);
-            }
-            node = node.parentNode;
-        }
-        return false;
-    },
-
-    getColumnId : function(index){
-	    return this.cm.getColumnId(index);
-	},
-
-	getSplitters : function(){
-	    if(this.splitterSelector){
-	       return Ext.DomQuery.select(this.splitterSelector);
-	    }else{
-	        return null;
-	    }
-	},
-
-	getSplitter : function(index){
-	    return this.getSplitters()[index];
-	},
-
-    onRowOver : function(e, t){
-        var row;
-        if((row = this.findRowIndex(t)) !== false){
-            this.getRowComposite(row).addClass("x-grid-row-over");
-        }
-    },
-
-    onRowOut : function(e, t){
-        var row;
-        if((row = this.findRowIndex(t)) !== false && row !== this.findRowIndex(e.getRelatedTarget())){
-            this.getRowComposite(row).removeClass("x-grid-row-over");
-        }
-    },
-
-    renderHeaders : function(){
-	    var cm = this.cm;
-        var ct = this.templates.hcell, ht = this.templates.header, st = this.templates.hsplit;
-        var cb = [], lb = [], sb = [], lsb = [], p = {};
-        for(var i = 0, len = cm.getColumnCount(); i < len; i++){
-            p.cellId = "x-grid-hd-0-" + i;
-            p.splitId = "x-grid-csplit-0-" + i;
-            p.id = cm.getColumnId(i);
-            p.title = cm.getColumnTooltip(i) || "";
-            p.value = cm.getColumnHeader(i) || "";
-            p.style = (this.grid.enableColumnResize === false || !cm.isResizable(i) || cm.isFixed(i)) ? 'cursor:default' : '';
-            if(!cm.isLocked(i)){
-                cb[cb.length] = ct.apply(p);
-                sb[sb.length] = st.apply(p);
-            }else{
-                lb[lb.length] = ct.apply(p);
-                lsb[lsb.length] = st.apply(p);
-            }
-        }
-        return [ht.apply({cells: lb.join(""), splits:lsb.join("")}),
-                ht.apply({cells: cb.join(""), splits:sb.join("")})];
-	},
-
-	updateHeaders : function(){
-        var html = this.renderHeaders();
-        this.lockedHd.update(html[0]);
-        this.mainHd.update(html[1]);
-    },
-
-
-    focusRow : function(row){
-        var x = this.scroller.dom.scrollLeft;
-        this.focusCell(row, 0, false);
-        this.scroller.dom.scrollLeft = x;
-    },
-
-
-    focusCell : function(row, col, hscroll){
-        var el = this.ensureVisible(row, col, hscroll);
-        this.focusEl.alignTo(el, "tl-tl");
-        if(Ext.isGecko){
-            this.focusEl.focus();
-        }else{
-            this.focusEl.focus.defer(1, this.focusEl);
-        }
-    },
-
-
-    ensureVisible : function(row, col, hscroll){
-        if(typeof row != "number"){
-            row = row.rowIndex;
-        }
-        if(row < 0 && row >= this.ds.getCount()){
-            return;
-        }
-        col = (col !== undefined ? col : 0);
-        var cm = this.grid.colModel;
-        while(cm.isHidden(col)){
-            col++;
-        }
-
-        var el = this.getCell(row, col);
-        if(!el){
-            return;
-        }
-        var c = this.scroller.dom;
-
-        var ctop = parseInt(el.offsetTop, 10);
-        var cleft = parseInt(el.offsetLeft, 10);
-        var cbot = ctop + el.offsetHeight;
-        var cright = cleft + el.offsetWidth;
-
-        var ch = c.clientHeight - this.mainHd.dom.offsetHeight;
-        var stop = parseInt(c.scrollTop, 10);
-        var sleft = parseInt(c.scrollLeft, 10);
-        var sbot = stop + ch;
-        var sright = sleft + c.clientWidth;
-
-        if(ctop < stop){
-        	c.scrollTop = ctop;
-        }else if(cbot > sbot){
-            c.scrollTop = cbot-ch;
-        }
-
-        if(hscroll !== false){
-            if(cleft < sleft){
-                c.scrollLeft = cleft;
-            }else if(cright > sright){
-                c.scrollLeft = cright-c.clientWidth;
-            }
-        }
-        return el;
-    },
-
-    updateColumns : function(){
-        this.grid.stopEditing();
-        var cm = this.grid.colModel, colIds = this.getColumnIds();
-        //var totalWidth = cm.getTotalWidth();
-        var pos = 0;
-        for(var i = 0, len = cm.getColumnCount(); i < len; i++){
-            //if(cm.isHidden(i)) continue;
-            var w = cm.getColumnWidth(i);
-            this.css.updateRule(this.colSelector+colIds[i], "width", (w - this.borderWidth) + "px");
-            this.css.updateRule(this.hdSelector+colIds[i], "width", (w - this.borderWidth) + "px");
-        }
-        this.updateSplitters();
-    },
-
-    generateRules : function(cm){
-        var ruleBuf = [];
-        for(var i = 0, len = cm.getColumnCount(); i < len; i++){
-            var cid = cm.getColumnId(i);
-            var align = '';
-            if(cm.config[i].align){
-                align = 'text-align:'+cm.config[i].align+';';
-            }
-            var hidden = '';
-            if(cm.isHidden(i)){
-                hidden = 'display:none;';
-            }
-            var width = "width:" + (cm.getColumnWidth(i) - this.borderWidth) + "px;";
-            ruleBuf.push(
-                    this.colSelector, cid, " {\n", cm.config[i].css, align, width, "\n}\n",
-                    this.hdSelector, cid, " {\n", align, width, "}\n",
-                    this.tdSelector, cid, " {\n",hidden,"\n}\n",
-                    this.splitSelector, cid, " {\n", hidden , "\n}\n");
-        }
-        return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));
-    },
-
-    updateSplitters : function(){
-        var cm = this.cm, s = this.getSplitters();
-        if(s){ // splitters not created yet
-            var pos = 0, locked = true;
-            for(var i = 0, len = cm.getColumnCount(); i < len; i++){
-                if(cm.isHidden(i)) continue;
-                var w = cm.getColumnWidth(i);
-                if(!cm.isLocked(i) && locked){
-                    pos = 0;
-                    locked = false;
-                }
-                pos += w;
-                s[i].style.left = (pos-this.splitOffset) + "px";
-            }
-        }
-    },
-
-    handleHiddenChange : function(colModel, colIndex, hidden){
-        if(hidden){
-            this.hideColumn(colIndex);
-        }else{
-            this.unhideColumn(colIndex);
-        }
-    },
-
-    hideColumn : function(colIndex){
-        var cid = this.getColumnId(colIndex);
-        this.css.updateRule(this.tdSelector+cid, "display", "none");
-        this.css.updateRule(this.splitSelector+cid, "display", "none");
-        if(Ext.isSafari){
-            this.updateHeaders();
-        }
-        this.updateSplitters();
-        this.layout();
-    },
-
-    unhideColumn : function(colIndex){
-        var cid = this.getColumnId(colIndex);
-        this.css.updateRule(this.tdSelector+cid, "display", "");
-        this.css.updateRule(this.splitSelector+cid, "display", "");
-
-        if(Ext.isSafari){
-            this.updateHeaders();
-        }
-        this.updateSplitters();
-        this.layout();
-    },
-
-    insertRows : function(dm, firstRow, lastRow, isUpdate){
-        if(firstRow == 0 && lastRow == dm.getCount()-1){
-            this.refresh();
-        }else{
-            if(!isUpdate){
-                this.fireEvent("beforerowsinserted", this, firstRow, lastRow);
-            }
-            var s = this.getScrollState();
-            var markup = this.renderRows(firstRow, lastRow);
-            this.bufferRows(markup[0], this.getLockedTable(), firstRow);
-            this.bufferRows(markup[1], this.getBodyTable(), firstRow);
-            this.restoreScroll(s);
-            if(!isUpdate){
-                this.fireEvent("rowsinserted", this, firstRow, lastRow);
-                this.syncRowHeights(firstRow, lastRow);
-                this.stripeRows(firstRow);
-                this.layout();
-            }
-        }
-    },
-
-    bufferRows : function(markup, target, index){
-        var before = null, trows = target.rows, tbody = target.tBodies[0];
-        if(index < trows.length){
-            before = trows[index];
-        }
-        var b = document.createElement("div");
-        b.innerHTML = "<table><tbody>"+markup+"</tbody></table>";
-        var rows = b.firstChild.rows;
-        for(var i = 0, len = rows.length; i < len; i++){
-            if(before){
-                tbody.insertBefore(rows[0], before);
-            }else{
-                tbody.appendChild(rows[0]);
-            }
-        }
-        b.innerHTML = "";
-        b = null;
-    },
-
-    deleteRows : function(dm, firstRow, lastRow){
-        if(dm.getRowCount()<1){
-            this.fireEvent("beforerefresh", this);
-            this.mainBody.update("");
-            this.lockedBody.update("");
-            this.fireEvent("refresh", this);
-        }else{
-            this.fireEvent("beforerowsdeleted", this, firstRow, lastRow);
-            var bt = this.getBodyTable();
-            var tbody = bt.firstChild;
-            var rows = bt.rows;
-            for(var rowIndex = firstRow; rowIndex <= lastRow; rowIndex++){
-                tbody.removeChild(rows[firstRow]);
-            }
-            this.stripeRows(firstRow);
-            this.fireEvent("rowsdeleted", this, firstRow, lastRow);
-        }
-    },
-
-    updateRows : function(dataSource, firstRow, lastRow){
-        var s = this.getScrollState();
-        this.refresh();
-        this.restoreScroll(s);
-    },
-
-    handleSort : function(dataSource, sortColumnIndex, sortDir, noRefresh){
-        if(!noRefresh){
-           this.refresh();
-        }
-        this.updateHeaderSortState();
-    },
-
-    getScrollState : function(){
-        var sb = this.scroller.dom;
-        return {left: sb.scrollLeft, top: sb.scrollTop};
-    },
-
-    stripeRows : function(startRow){
-        if(!this.grid.stripeRows || this.ds.getCount() < 1){
-            return;
-        }
-        startRow = startRow || 0;
-        var rows = this.getBodyTable().rows;
-        var lrows = this.getLockedTable().rows;
-        var cls = ' x-grid-row-alt ';
-        for(var i = startRow, len = rows.length; i < len; i++){
-            var row = rows[i], lrow = lrows[i];
-            var isAlt = ((i+1) % 2 == 0);
-            var hasAlt = (' '+row.className + ' ').indexOf(cls) != -1;
-            if(isAlt == hasAlt){
-                continue;
-            }
-            if(isAlt){
-                row.className += " x-grid-row-alt";
-            }else{
-                row.className = row.className.replace("x-grid-row-alt", "");
-            }
-            if(lrow){
-                lrow.className = row.className;
-            }
-        }
-    },
-
-    restoreScroll : function(state){
-        var sb = this.scroller.dom;
-        sb.scrollLeft = state.left;
-        sb.scrollTop = state.top;
-        this.syncScroll();
-    },
-
-    syncScroll : function(){
-        var sb = this.scroller.dom;
-        var sh = this.mainHd.dom;
-        var bs = this.mainBody.dom;
-        var lv = this.lockedBody.dom;
-        sh.scrollLeft = bs.scrollLeft = sb.scrollLeft;
-        lv.scrollTop = bs.scrollTop = sb.scrollTop;
-    },
-
-    handleScroll : function(e){
-        this.syncScroll();
-        var sb = this.scroller.dom;
-        this.grid.fireEvent("bodyscroll", sb.scrollLeft, sb.scrollTop);
-        e.stopEvent();
-    },
-
-    handleWheel : function(e){
-        var d = e.getWheelDelta();
-        this.scroller.dom.scrollTop -= d*22;
-        // set this here to prevent jumpy scrolling on large tables
-        this.lockedBody.dom.scrollTop = this.mainBody.dom.scrollTop = this.scroller.dom.scrollTop;
-        e.stopEvent();
-    },
-
-    renderRows : function(startRow, endRow){
-        // pull in all the crap needed to render rows
-        var g = this.grid, cm = g.colModel, ds = g.dataSource, stripe = g.stripeRows;
-        var colCount = cm.getColumnCount();
-
-        if(ds.getCount() < 1){
-            return ["", ""];
-        }
-
-        // build a map for all the columns
-        var cs = [];
-        for(var i = 0; i < colCount; i++){
-            var name = cm.getDataIndex(i);
-            cs[i] = {
-                name : typeof name == 'undefined' ? ds.fields.get(i).name : name,
-                renderer : cm.getRenderer(i),
-                id : cm.getColumnId(i),
-                locked : cm.isLocked(i)
-            };
-        }
-
-        startRow = startRow || 0;
-        endRow = typeof endRow == "undefined"? ds.getCount()-1 : endRow;
-
-        // records to render
-        var rs = ds.getRange(startRow, endRow);
-
-        return this.doRender(cs, rs, ds, startRow, colCount, stripe);
-    },
-
-    // As much as I hate to duplicate code, this was branched because FireFox really hates
-    // [].join("") on strings. The performance difference was substantial enough to
-    // branch this function
-    doRender : Ext.isGecko ?
-            function(cs, rs, ds, startRow, colCount, stripe){
-                var ts = this.templates, ct = ts.cell, rt = ts.row;
-                // buffers
-                var buf = "", lbuf = "", cb, lcb, c, p = {}, rp = {}, r, rowIndex;
-                for(var j = 0, len = rs.length; j < len; j++){
-                    r = rs[j]; cb = ""; lcb = ""; rowIndex = (j+startRow);
-                    for(var i = 0; i < colCount; i++){
-                        c = cs[i];
-                        p.cellId = "x-grid-cell-" + rowIndex + "-" + i;
-                        p.id = c.id;
-                        p.css = p.attr = "";
-                        p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
-                        if(p.value == undefined || p.value === "") p.value = "&#160;";
-                        if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
-                            p.css += p.css ? ' x-grid-dirty-cell' : 'x-grid-dirty-cell';
-                        }
-                        var markup = ct.apply(p);
-                        if(!c.locked){
-                            cb+= markup;
-                        }else{
-                            lcb+= markup;
-                        }
-                    }
-                    var alt = [];
-                    if(stripe && ((rowIndex+1) % 2 == 0)){
-                        alt[0] = "x-grid-row-alt";
-                    }
-                    if(r.dirty){
-                        alt[1] = " x-grid-dirty-row";
-                    }
-                    rp.cells = lcb;
-                    if(this.getRowClass){
-                        alt[2] = this.getRowClass(r, rowIndex);
-                    }
-                    rp.alt = alt.join(" ");
-                    lbuf+= rt.apply(rp);
-                    rp.cells = cb;
-                    buf+=  rt.apply(rp);
-                }
-                return [lbuf, buf];
-            } :
-            function(cs, rs, ds, startRow, colCount, stripe){
-                var ts = this.templates, ct = ts.cell, rt = ts.row;
-                // buffers
-                var buf = [], lbuf = [], cb, lcb, c, p = {}, rp = {}, r, rowIndex;
-                for(var j = 0, len = rs.length; j < len; j++){
-                    r = rs[j]; cb = []; lcb = []; rowIndex = (j+startRow);
-                    for(var i = 0; i < colCount; i++){
-                        c = cs[i];
-                        p.cellId = "x-grid-cell-" + rowIndex + "-" + i;
-                        p.id = c.id;
-                        p.css = p.attr = "";
-                        p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
-                        if(p.value == undefined || p.value === "") p.value = "&#160;";
-                        if(r.dirty && typeof r.modified[c.name] !== 'undefined'){
-                            p.css += p.css ? ' x-grid-dirty-cell' : 'x-grid-dirty-cell';
-                        }
-                        var markup = ct.apply(p);
-                        if(!c.locked){
-                            cb[cb.length] = markup;
-                        }else{
-                            lcb[lcb.length] = markup;
-                        }
-                    }
-                    var alt = [];
-                    if(stripe && ((rowIndex+1) % 2 == 0)){
-                        alt[0] = "x-grid-row-alt";
-                    }
-                    if(r.dirty){
-                        alt[1] = " x-grid-dirty-row";
-                    }
-                    rp.cells = lcb;
-                    if(this.getRowClass){
-                        alt[2] = this.getRowClass(r, rowIndex);
-                    }
-                    rp.alt = alt.join(" ");
-                    rp.cells = lcb.join("");
-                    lbuf[lbuf.length] = rt.apply(rp);
-                    rp.cells = cb.join("");
-                    buf[buf.length] =  rt.apply(rp);
-                }
-                return [lbuf.join(""), buf.join("")];
-            },
-
-    renderBody : function(){
-        var markup = this.renderRows();
-        var bt = this.templates.body;
-        return [bt.apply({rows: markup[0]}), bt.apply({rows: markup[1]})];
-    },
-
-
-    refresh : function(headersToo){
-        this.fireEvent("beforerefresh", this);
-        this.grid.stopEditing();
-        var result = this.renderBody();
-        this.lockedBody.update(result[0]);
-        this.mainBody.update(result[1]);
-        if(headersToo === true){
-            this.updateHeaders();
-            this.updateColumns();
-            this.updateSplitters();
-            this.updateHeaderSortState();
-        }
-        this.syncRowHeights();
-        this.layout();
-        this.fireEvent("refresh", this);
-    },
-
-    handleColumnMove : function(cm, oldIndex, newIndex){
-        this.indexMap = null;
-        var s = this.getScrollState();
-        this.refresh(true);
-        this.restoreScroll(s);
-        this.afterMove(newIndex);
-    },
-
-    afterMove : function(colIndex){
-        if(this.enableMoveAnim && Ext.enableFx){
-            this.fly(this.getHeaderCell(colIndex).firstChild).highlight(this.hlColor);
-        }
-    },
-
-    updateCell : function(dm, rowIndex, dataIndex){
-        var colIndex = this.getColumnIndexByDataIndex(dataIndex);
-        if(typeof colIndex == "undefined"){ // not present in grid
-            return;
-        }
-        var cm = this.grid.colModel;
-        var cell = this.getCell(rowIndex, colIndex);
-        var cellText = this.getCellText(rowIndex, colIndex);
-
-        var p = {
-            cellId : "x-grid-cell-" + rowIndex + "-" + colIndex,
-            id : cm.getColumnId(colIndex),
-            css: colIndex == cm.getColumnCount()-1 ? "x-grid-col-last" : ""
-        };
-        var renderer = cm.getRenderer(colIndex);
-        var val = renderer(dm.getValueAt(rowIndex, dataIndex), p, rowIndex, colIndex, dm);
-        if(typeof val == "undefined" || val === "") val = "&#160;";
-        cellText.innerHTML = val;
-        cell.className = this.cellClass + " " + p.cellId + " " + p.css;
-        this.syncRowHeights(rowIndex, rowIndex);
-    },
-
-    calcColumnWidth : function(colIndex, maxRowsToMeasure){
-        var maxWidth = 0;
-        if(this.grid.autoSizeHeaders){
-            var h = this.getHeaderCellMeasure(colIndex);
-            maxWidth = Math.max(maxWidth, h.scrollWidth);
-        }
-        var tb, index;
-        if(this.cm.isLocked(colIndex)){
-            tb = this.getLockedTable();
-            index = colIndex;
-        }else{
-            tb = this.getBodyTable();
-            index = colIndex - this.cm.getLockedCount();
-        }
-        if(tb && tb.rows){
-            var rows = tb.rows;
-            var stopIndex = Math.min(maxRowsToMeasure || rows.length, rows.length);
-            for(var i = 0; i < stopIndex; i++){
-                var cell = rows[i].childNodes[index].firstChild;
-                maxWidth = Math.max(maxWidth, cell.scrollWidth);
-            }
-        }
-        return maxWidth +  5;
-    },
-
-     autoSizeColumn : function(colIndex, forceMinSize, suppressEvent){
-         if(this.cm.isHidden(colIndex)){
-             return; // can't calc a hidden column
-         }
-        if(forceMinSize){
-            var cid = this.cm.getColumnId(colIndex);
-            this.css.updateRule(this.colSelector + cid, "width", this.grid.minColumnWidth + "px");
-           if(this.grid.autoSizeHeaders){
-               this.css.updateRule(this.hdSelector + cid, "width", this.grid.minColumnWidth + "px");
-           }
-        }
-        var newWidth = this.calcColumnWidth(colIndex);
-        this.cm.setColumnWidth(colIndex,
-            Math.max(this.grid.minColumnWidth, newWidth), suppressEvent);
-        if(!suppressEvent){
-            this.grid.fireEvent("columnresize", colIndex, newWidth);
-        }
-    },
-
-
-     autoSizeColumns : function(){
-        var cm = this.grid.colModel;
-        var colCount = cm.getColumnCount();
-        for(var i = 0; i < colCount; i++){
-            this.autoSizeColumn(i, true, true);
-        }
-        if(cm.getTotalWidth() < this.scroller.dom.clientWidth){
-            this.fitColumns();
-        }else{
-            this.updateColumns();
-            this.layout();
-        }
-    },
-
-
-    fitColumns : function(reserveScrollSpace){
-        var cm = this.grid.colModel;
-        var colCount = cm.getColumnCount();
-        var cols = [];
-        var width = 0;
-        var i, w;
-        for (i = 0; i < colCount; i++){
-            if(!cm.isHidden(i) && !cm.isFixed(i)){
-                w = cm.getColumnWidth(i);
-                cols.push(i);
-                cols.push(w);
-                width += w;
-            }
-        }
-        var avail = Math.min(this.scroller.dom.clientWidth, this.el.getWidth());
-        if(reserveScrollSpace){
-            avail -= 17;
-        }
-        var frac = (avail - cm.getTotalWidth())/width;
-        while (cols.length){
-            w = cols.pop();
-            i = cols.pop();
-            cm.setColumnWidth(i, Math.floor(w + w*frac), true);
-        }
-        this.updateColumns();
-        this.layout();
-    },
-
-    onRowSelect : function(rowIndex){
-        var row = this.getRowComposite(rowIndex);
-        row.addClass("x-grid-row-selected");
-    },
-
-    onRowDeselect : function(rowIndex){
-        var row = this.getRowComposite(rowIndex);
-        row.removeClass("x-grid-row-selected");
-    },
-
-    onCellSelect : function(row, col){
-        var cell = this.getCell(row, col);
-        if(cell){
-            Ext.fly(cell).addClass("x-grid-cell-selected");
-        }
-    },
-
-    onCellDeselect : function(row, col){
-        var cell = this.getCell(row, col);
-        if(cell){
-            Ext.fly(cell).removeClass("x-grid-cell-selected");
-        }
-    },
-
-    updateHeaderSortState : function(){
-        var state = this.ds.getSortState();
-        if(!state){
-            return;
-        }
-        this.sortState = state;
-        var sortColumn = this.cm.findColumnIndex(state.field);
-        if(sortColumn != -1){
-            var sortDir = state.direction;
-            var sc = this.sortClasses;
-            var hds = this.el.select(this.headerSelector).removeClass(sc);
-            hds.item(sortColumn).addClass(sc[sortDir == "DESC" ? 1 : 0]);
-        }
-    },
-
-    handleHeaderClick : function(g, index){
-        if(this.headersDisabled){
-            return;
-        }
-        var dm = g.dataSource, cm = g.colModel;
-	    if(!cm.isSortable(index)){
-            return;
-        }
-	    g.stopEditing();
-        dm.sort(cm.getDataIndex(index));
-    },
-
-
-    destroy : function(){
-        if(this.colMenu){
-            this.colMenu.removeAll();
-            Ext.menu.MenuMgr.unregister(this.colMenu);
-            this.colMenu.getEl().remove();
-            delete this.colMenu;
-        }
-        if(this.hmenu){
-            this.hmenu.removeAll();
-            Ext.menu.MenuMgr.unregister(this.hmenu);
-            this.hmenu.getEl().remove();
-            delete this.hmenu;
-        }
-        if(this.grid.enableColumnMove){
-            var dds = Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
-            if(dds){
-                for(var dd in dds){
-                    if(!dds[dd].config.isTarget && dds[dd].dragElId){
-                        var elid = dds[dd].dragElId;
-                        dds[dd].unreg();
-                        Ext.get(elid).remove();
-                    } else if(dds[dd].config.isTarget){
-                        dds[dd].proxyTop.remove();
-                        dds[dd].proxyBottom.remove();
-                        dds[dd].unreg();
-                    }
-                    if(Ext.dd.DDM.locationCache[dd]){
-                        delete Ext.dd.DDM.locationCache[dd];
-                    }
-                }
-                delete Ext.dd.DDM.ids['gridHeader' + this.grid.getGridEl().id];
-            }
-        }
-
-        this.bind(null, null);
-        Ext.EventManager.removeResizeListener(this.onWindowResize, this);
-    },
-
-    handleLockChange : function(){
-        this.refresh(true);
-    },
-
-    onDenyColumnLock : function(){
-
-    },
-
-    onDenyColumnHide : function(){
-
-    },
-
-    handleHdMenuClick : function(item){
-        var index = this.hdCtxIndex;
-        var cm = this.cm, ds = this.ds;
-        switch(item.id){
-            case "asc":
-                ds.sort(cm.getDataIndex(index), "ASC");
-                break;
-            case "desc":
-                ds.sort(cm.getDataIndex(index), "DESC");
-                break;
-            case "lock":
-                var lc = cm.getLockedCount();
-                if(cm.getColumnCount(true) <= lc+1){
-                    this.onDenyColumnLock();
-                    return;
-                }
-                if(lc != index){
-                    cm.setLocked(index, true, true);
-                    cm.moveColumn(index, lc);
-                    this.grid.fireEvent("columnmove", index, lc);
-                }else{
-                    cm.setLocked(index, true);
-                }
-            break;
-            case "unlock":
-                var lc = cm.getLockedCount();
-                if((lc-1) != index){
-                    cm.setLocked(index, false, true);
-                    cm.moveColumn(index, lc-1);
-                    this.grid.fireEvent("columnmove", index, lc-1);
-                }else{
-                    cm.setLocked(index, false);
-                }
-            break;
-            default:
-                index = cm.getIndexById(item.id.substr(4));
-                if(index != -1){
-                    if(item.checked && cm.getColumnCount(true) <= 1){
-                        this.onDenyColumnHide();
-                        return false;
-                    }
-                    cm.setHidden(index, item.checked);
-                }
-        }
-        return true;
-    },
-
-    beforeColMenuShow : function(){
-        var cm = this.cm,  colCount = cm.getColumnCount();
-        this.colMenu.removeAll();
-        for(var i = 0; i < colCount; i++){
-            this.colMenu.add(new Ext.menu.CheckItem({
-                id: "col-"+cm.getColumnId(i),
-                text: cm.getColumnHeader(i),
-                checked: !cm.isHidden(i),
-                hideOnClick:false
-            }));
-        }
-    },
-
-    handleHdCtx : function(g, index, e){
-        e.stopEvent();
-        var hd = this.getHeaderCell(index);
-        this.hdCtxIndex = index;
-        var ms = this.hmenu.items, cm = this.cm;
-        ms.get("asc").setDisabled(!cm.isSortable(index));
-        ms.get("desc").setDisabled(!cm.isSortable(index));
-        if(this.grid.enableColLock !== false){
-            ms.get("lock").setDisabled(cm.isLocked(index));
-            ms.get("unlock").setDisabled(!cm.isLocked(index));
-        }
-        this.hmenu.show(hd, "tl-bl");
-    },
-
-    handleHdOver : function(e){
-        var hd = this.findHeaderCell(e.getTarget());
-        if(hd && !this.headersDisabled){
-            if(this.grid.colModel.isSortable(this.getCellIndex(hd))){
-               this.fly(hd).addClass("x-grid-hd-over");
-            }
-        }
-    },
-
-    handleHdOut : function(e){
-        var hd = this.findHeaderCell(e.getTarget());
-        if(hd){
-            this.fly(hd).removeClass("x-grid-hd-over");
-        }
-    },
-
-    handleSplitDblClick : function(e, t){
-        var i = this.getCellIndex(t);
-        if(this.grid.enableColumnResize !== false && this.cm.isResizable(i) && !this.cm.isFixed(i)){
-            this.autoSizeColumn(i, true);
-            this.layout();
-        }
-    },
-
-    render : function(){
-
-        var cm = this.cm;
-        var colCount = cm.getColumnCount();
-
-        if(this.grid.monitorWindowResize === true){
-            Ext.EventManager.onWindowResize(this.onWindowResize, this, true);
-        }
-        var header = this.renderHeaders();
-        var body = this.templates.body.apply({rows:""});
-        var html = this.templates.master.apply({
-            lockedBody: body,
-            body: body,
-            lockedHeader: header[0],
-            header: header[1]
-        });
-
-        //this.updateColumns();
-
-        this.grid.getGridEl().dom.innerHTML = html;
-
-        this.initElements();
-
-        this.scroller.on("scroll", this.handleScroll, this);
-        this.lockedBody.on("mousewheel", this.handleWheel, this);
-        this.mainBody.on("mousewheel", this.handleWheel, this);
-
-        this.mainHd.on("mouseover", this.handleHdOver, this);
-        this.mainHd.on("mouseout", this.handleHdOut, this);
-        this.mainHd.on("dblclick", this.handleSplitDblClick, this,
-                {delegate: "."+this.splitClass});
-
-        this.lockedHd.on("mouseover", this.handleHdOver, this);
-        this.lockedHd.on("mouseout", this.handleHdOut, this);
-        this.lockedHd.on("dblclick", this.handleSplitDblClick, this,
-                {delegate: "."+this.splitClass});
-
-        if(this.grid.enableColumnResize !== false && Ext.grid.SplitDragZone){
-            new Ext.grid.SplitDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
-        }
-
-        this.updateSplitters();
-
-        if(this.grid.enableColumnMove && Ext.grid.HeaderDragZone){
-            new Ext.grid.HeaderDragZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
-            new Ext.grid.HeaderDropZone(this.grid, this.lockedHd.dom, this.mainHd.dom);
-        }
-
-        if(this.grid.enableCtxMenu !== false && Ext.menu.Menu){
-            this.hmenu = new Ext.menu.Menu({id: this.grid.id + "-hctx"});
-            this.hmenu.add(
-                {id:"asc", text: this.sortAscText, cls: "xg-hmenu-sort-asc"},
-                {id:"desc", text: this.sortDescText, cls: "xg-hmenu-sort-desc"}
-            );
-            if(this.grid.enableColLock !== false){
-                this.hmenu.add('-',
-                    {id:"lock", text: this.lockText, cls: "xg-hmenu-lock"},
-                    {id:"unlock", text: this.unlockText, cls: "xg-hmenu-unlock"}
-                );
-            }
-            if(this.grid.enableColumnHide !== false){
-
-                this.colMenu = new Ext.menu.Menu({id:this.grid.id + "-hcols-menu"});
-                this.colMenu.on("beforeshow", this.beforeColMenuShow, this);
-                this.colMenu.on("itemclick", this.handleHdMenuClick, this);
-
-                this.hmenu.add('-',
-                    {id:"columns", text: this.columnsText, menu: this.colMenu}
-                );
-            }
-            this.hmenu.on("itemclick", this.handleHdMenuClick, this);
-
-            this.grid.on("headercontextmenu", this.handleHdCtx, this);
-        }
-
-        if((this.grid.enableDragDrop || this.grid.enableDrag) && Ext.grid.GridDragZone){
-            this.dd = new Ext.grid.GridDragZone(this.grid, {
-                ddGroup : this.grid.ddGroup || 'GridDD'
-            });
-        }
-
-
-
-        this.updateHeaderSortState();
-
-        this.beforeInitialResize();
-        this.layout(true);
-
-        // two part rendering gives faster view to the user
-        this.renderPhase2.defer(1, this);
-    },
-
-    renderPhase2 : function(){
-        // render the rows now
-        this.refresh();
-        if(this.grid.autoSizeColumns){
-            this.autoSizeColumns();
-        }
-    },
-
-    beforeInitialResize : function(){
-
-    },
-
-    onColumnSplitterMoved : function(i, w){
-        this.userResized = true;
-        var cm = this.grid.colModel;
-        cm.setColumnWidth(i, w, true);
-        var cid = cm.getColumnId(i);
-        this.css.updateRule(this.colSelector + cid, "width", (w-this.borderWidth) + "px");
-        this.css.updateRule(this.hdSelector + cid, "width", (w-this.borderWidth) + "px");
-        this.updateSplitters();
-        this.layout();
-        this.grid.fireEvent("columnresize", i, w);
-    },
-
-    syncRowHeights : function(startIndex, endIndex){
-        if(this.grid.enableRowHeightSync === true && this.cm.getLockedCount() > 0){
-            startIndex = startIndex || 0;
-            var mrows = this.getBodyTable().rows;
-            var lrows = this.getLockedTable().rows;
-            var len = mrows.length-1;
-            endIndex = Math.min(endIndex || len, len);
-            for(var i = startIndex; i <= endIndex; i++){
-                var m = mrows[i], l = lrows[i];
-                var h = Math.max(m.offsetHeight, l.offsetHeight);
-                m.style.height = l.style.height = h + "px";
-            }
-        }
-    },
-
-    layout : function(initialRender, is2ndPass){
-        var g = this.grid;
-        var auto = g.autoHeight;
-        var scrollOffset = 16;
-        var c = g.getGridEl(), cm = this.cm,
-                expandCol = g.autoExpandColumn,
-                gv = this;
-        //c.beginMeasure();
-
-        if(!c.dom.offsetWidth){ // display:none?
-            if(initialRender){
-                this.lockedWrap.show();
-                this.mainWrap.show();
-            }
-            return;
-        }
-
-        var hasLock = this.cm.isLocked(0);
-
-        var tbh = this.headerPanel.getHeight();
-        var bbh = this.footerPanel.getHeight();
-
-        if(auto){
-            var ch = this.getBodyTable().offsetHeight + tbh + bbh + this.mainHd.getHeight();
-            var newHeight = ch + c.getBorderWidth("tb");
-            if(g.maxHeight){
-                newHeight = Math.min(g.maxHeight, newHeight);
-            }
-            c.setHeight(newHeight);
-        }
-
-        if(g.autoWidth){
-            c.setWidth(cm.getTotalWidth()+c.getBorderWidth('lr'));
-        }
-
-        var s = this.scroller;
-
-        var csize = c.getSize(true);
-
-        this.el.setSize(csize.width, csize.height);
-
-        this.headerPanel.setWidth(csize.width);
-        this.footerPanel.setWidth(csize.width);
-
-        var hdHeight = this.mainHd.getHeight();
-        var vw = csize.width;
-        var vh = csize.height - (tbh + bbh);
-
-        s.setSize(vw, vh);
-
-        var bt = this.getBodyTable();
-        var ltWidth = hasLock ?
-                      Math.max(this.getLockedTable().offsetWidth, this.lockedHd.dom.firstChild.offsetWidth) : 0;
-
-        var scrollHeight = bt.offsetHeight;
-        var scrollWidth = ltWidth + bt.offsetWidth;
-        var vscroll = false, hscroll = false;
-
-        this.scrollSizer.setSize(scrollWidth, scrollHeight+hdHeight);
-
-        var lw = this.lockedWrap, mw = this.mainWrap;
-        var lb = this.lockedBody, mb = this.mainBody;
-
-        setTimeout(function(){
-            var t = s.dom.offsetTop;
-            var w = s.dom.clientWidth,
-                h = s.dom.clientHeight;
-
-            lw.setTop(t);
-            lw.setSize(ltWidth, h);
-
-            mw.setLeftTop(ltWidth, t);
-            mw.setSize(w-ltWidth, h);
-
-            lb.setHeight(h-hdHeight);
-            mb.setHeight(h-hdHeight);
-
-            if(is2ndPass !== true && !gv.userResized && expandCol){
-                // high speed resize without full column calculation
-                var ci = cm.getIndexById(expandCol);
-                var tw = cm.getTotalWidth(false);
-                var currentWidth = cm.getColumnWidth(ci);
-                var cw = Math.min(Math.max(((w-tw)+currentWidth-2)-(w <= s.dom.offsetWidth ? 0 : 18), g.autoExpandMin), g.autoExpandMax);
-                if(currentWidth != cw){
-                    cm.setColumnWidth(ci, cw, true);
-                    gv.css.updateRule(gv.colSelector+expandCol, "width", (cw - gv.borderWidth) + "px");
-                    gv.css.updateRule(gv.hdSelector+expandCol, "width", (cw - gv.borderWidth) + "px");
-                    gv.updateSplitters();
-                    gv.layout(false, true);
-                }
-            }
-
-            if(initialRender){
-                lw.show();
-                mw.show();
-            }
-            //c.endMeasure();
-        }, 10);
-    },
-
-    onWindowResize : function(){
-        if(!this.grid.monitorWindowResize || this.grid.autoHeight){
-            return;
-        }
-        this.layout();
-    },
-
-    appendFooter : function(parentEl){
-        return null;
-    },
-
-    sortAscText : "Sort Ascending",
-    sortDescText : "Sort Descending",
-    lockText : "Lock Column",
-    unlockText : "Unlock Column",
-    columnsText : "Columns"
-});
-// private
-// This is a support class used internally by the Grid components
-Ext.grid.HeaderDragZone = function(grid, hd, hd2){
-    this.grid = grid;
-    this.view = grid.getView();
-    this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
-    Ext.grid.HeaderDragZone.superclass.constructor.call(this, hd);
-    if(hd2){
-        this.setHandleElId(Ext.id(hd));
-        this.setOuterHandleElId(Ext.id(hd2));
-    }
-    this.scroll = false;
-};
-Ext.extend(Ext.grid.HeaderDragZone, Ext.dd.DragZone, {
-    maxDragWidth: 120,
-    getDragData : function(e){
-        var t = Ext.lib.Event.getTarget(e);
-        var h = this.view.findHeaderCell(t);
-        if(h){
-            return {ddel: h.firstChild, header:h};
-        }
-        return false;
-    },
-
-    onInitDrag : function(e){
-        this.view.headersDisabled = true;
-        var clone = this.dragData.ddel.cloneNode(true);
-        clone.id = Ext.id();
-        clone.style.width = Math.min(this.dragData.header.offsetWidth,this.maxDragWidth) + "px";
-        this.proxy.update(clone);
-        return true;
-    },
-
-    afterValidDrop : function(){
-        var v = this.view;
-        setTimeout(function(){
-            v.headersDisabled = false;
-        }, 50);
-    },
-
-    afterInvalidDrop : function(){
-        var v = this.view;
-        setTimeout(function(){
-            v.headersDisabled = false;
-        }, 50);
-    }
-});
-
-// private
-// This is a support class used internally by the Grid components
-Ext.grid.HeaderDropZone = function(grid, hd, hd2){
-    this.grid = grid;
-    this.view = grid.getView();
-    // split the proxies so they don't interfere with mouse events
-    this.proxyTop = Ext.DomHelper.append(document.body, {
-        tag:"div", cls:"col-move-top", html:"&#160;"
-    }, true);
-    this.proxyBottom = Ext.DomHelper.append(document.body, {
-        tag:"div", cls:"col-move-bottom", html:"&#160;"
-    }, true);
-    this.proxyTop.hide = this.proxyBottom.hide = function(){
-        this.setLeftTop(-100,-100);
-        this.setStyle("visibility", "hidden");
-    };
-    this.ddGroup = "gridHeader" + this.grid.getGridEl().id;
-    // temporarily disabled
-    //Ext.dd.ScrollManager.register(this.view.scroller.dom);
-    Ext.grid.HeaderDropZone.superclass.constructor.call(this, grid.getGridEl().dom);
-};
-Ext.extend(Ext.grid.HeaderDropZone, Ext.dd.DropZone, {
-    proxyOffsets : [-4, -9],
-    fly: Ext.Element.fly,
-
-    getTargetFromEvent : function(e){
-        var t = Ext.lib.Event.getTarget(e);
-        var cindex = this.view.findCellIndex(t);
-        if(cindex !== false){
-            return this.view.getHeaderCell(cindex);
-        }
-    },
-
-    nextVisible : function(h){
-        var v = this.view, cm = this.grid.colModel;
-        h = h.nextSibling;
-        while(h){
-            if(!cm.isHidden(v.getCellIndex(h))){
-                return h;
-            }
-            h = h.nextSibling;
-        }
-        return null;
-    },
-
-    prevVisible : function(h){
-        var v = this.view, cm = this.grid.colModel;
-        h = h.prevSibling;
-        while(h){
-            if(!cm.isHidden(v.getCellIndex(h))){
-                return h;
-            }
-            h = h.prevSibling;
-        }
-        return null;
-    },
-
-    positionIndicator : function(h, n, e){
-        var x = Ext.lib.Event.getPageX(e);
-        var r = Ext.lib.Dom.getRegion(n.firstChild);
-        var px, pt, py = r.top + this.proxyOffsets[1];
-        if((r.right - x) <= (r.right-r.left)/2){
-            px = r.right+this.view.borderWidth;
-            pt = "after";
-        }else{
-            px = r.left;
-            pt = "before";
-        }
-        var oldIndex = this.view.getCellIndex(h);
-        var newIndex = this.view.getCellIndex(n);
-
-        if(this.grid.colModel.isFixed(newIndex)){
-            return false;
-        }
-
-        var locked = this.grid.colModel.isLocked(newIndex);
-
-        if(pt == "after"){
-            newIndex++;
-        }
-        if(oldIndex < newIndex){
-            newIndex--;
-        }
-        if(oldIndex == newIndex && (locked == this.grid.colModel.isLocked(oldIndex))){
-            return false;
-        }
-        px +=  this.proxyOffsets[0];
-        this.proxyTop.setLeftTop(px, py);
-        this.proxyTop.show();
-        if(!this.bottomOffset){
-            this.bottomOffset = this.view.mainHd.getHeight();
-        }
-        this.proxyBottom.setLeftTop(px, py+this.proxyTop.dom.offsetHeight+this.bottomOffset);
-        this.proxyBottom.show();
-        return pt;
-    },
-
-    onNodeEnter : function(n, dd, e, data){
-        if(data.header != n){
-            this.positionIndicator(data.header, n, e);
-        }
-    },
-
-    onNodeOver : function(n, dd, e, data){
-        var result = false;
-        if(data.header != n){
-            result = this.positionIndicator(data.header, n, e);
-        }
-        if(!result){
-            this.proxyTop.hide();
-            this.proxyBottom.hide();
-        }
-        return result ? this.dropAllowed : this.dropNotAllowed;
-    },
-
-    onNodeOut : function(n, dd, e, data){
-        this.proxyTop.hide();
-        this.proxyBottom.hide();
-    },
-
-    onNodeDrop : function(n, dd, e, data){
-        var h = data.header;
-        if(h != n){
-            var cm = this.grid.colModel;
-            var x = Ext.lib.Event.getPageX(e);
-            var r = Ext.lib.Dom.getRegion(n.firstChild);
-            var pt = (r.right - x) <= ((r.right-r.left)/2) ? "after" : "before";
-            var oldIndex = this.view.getCellIndex(h);
-            var newIndex = this.view.getCellIndex(n);
-            var locked = cm.isLocked(newIndex);
-            if(pt == "after"){
-                newIndex++;
-            }
-            if(oldIndex < newIndex){
-                newIndex--;
-            }
-            if(oldIndex == newIndex && (locked == cm.isLocked(oldIndex))){
-                return false;
-            }
-            cm.setLocked(oldIndex, locked, true);
-            cm.moveColumn(oldIndex, newIndex);
-            this.grid.fireEvent("columnmove", oldIndex, newIndex);
-            return true;
-        }
-        return false;
-    }
-});
-
-
-Ext.grid.GridView.ColumnDragZone = function(grid, hd){
-    Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this, grid, hd, null);
-    this.proxy.el.addClass('x-grid3-col-dd');
-};
-
-Ext.extend(Ext.grid.GridView.ColumnDragZone, Ext.grid.HeaderDragZone, {
-    handleMouseDown : function(e){
-
-    },
-
-    callHandleMouseDown : function(e){
-        Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this, e);
-    }
-});
-// private
-// This is a support class used internally by the Grid components
-Ext.grid.SplitDragZone = function(grid, hd, hd2){
-    this.grid = grid;
-    this.view = grid.getView();
-    this.proxy = this.view.resizeProxy;
-    Ext.grid.SplitDragZone.superclass.constructor.call(this, hd,
-        "gridSplitters" + this.grid.getGridEl().id, {
-        dragElId : Ext.id(this.proxy.dom), resizeFrame:false
-    });
-    this.setHandleElId(Ext.id(hd));
-    this.setOuterHandleElId(Ext.id(hd2));
-    this.scroll = false;
-};
-Ext.extend(Ext.grid.SplitDragZone, Ext.dd.DDProxy, {
-    fly: Ext.Element.fly,
-
-    b4StartDrag : function(x, y){
-        this.view.headersDisabled = true;
-        this.proxy.setHeight(this.view.mainWrap.getHeight());
-        var w = this.cm.getColumnWidth(this.cellIndex);
-        var minw = Math.max(w-this.grid.minColumnWidth, 0);
-        this.resetConstraints();
-        this.setXConstraint(minw, 1000);
-        this.setYConstraint(0, 0);
-        this.minX = x - minw;
-        this.maxX = x + 1000;
-        this.startPos = x;
-        Ext.dd.DDProxy.prototype.b4StartDrag.call(this, x, y);
-    },
-
-
-    handleMouseDown : function(e){
-        ev = Ext.EventObject.setEvent(e);
-        var t = this.fly(ev.getTarget());
-        if(t.hasClass("x-grid-split")){
-            this.cellIndex = this.view.getCellIndex(t.dom);
-            this.split = t.dom;
-            this.cm = this.grid.colModel;
-            if(this.cm.isResizable(this.cellIndex) && !this.cm.isFixed(this.cellIndex)){
-                Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this, arguments);
-            }
-        }
-    },
-
-    endDrag : function(e){
-        this.view.headersDisabled = false;
-        var endX = Math.max(this.minX, Ext.lib.Event.getPageX(e));
-        var diff = endX - this.startPos;
-        this.view.onColumnSplitterMoved(this.cellIndex, this.cm.getColumnWidth(this.cellIndex)+diff);
-    },
-
-    autoOffset : function(){
-        this.setDelta(0,0);
-    }
-});
-// private
-// This is a support class used internally by the Grid components
-Ext.grid.GridDragZone = function(grid, config){
-    this.view = grid.getView();
-    Ext.grid.GridDragZone.superclass.constructor.call(this, this.view.mainBody.dom, config);
-    if(this.view.lockedBody){
-        this.setHandleElId(Ext.id(this.view.mainBody.dom));
-        this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom));
-    }
-    this.scroll = false;
-    this.grid = grid;
-    this.ddel = document.createElement('div');
-    this.ddel.className = 'x-grid-dd-wrap';
-};
-
-Ext.extend(Ext.grid.GridDragZone, Ext.dd.DragZone, {
-    ddGroup : "GridDD",
-
-    getDragData : function(e){
-        var t = Ext.lib.Event.getTarget(e);
-        var rowIndex = this.view.findRowIndex(t);
-        if(rowIndex !== false){
-            var sm = this.grid.selModel;
-            if(!sm.isSelected(rowIndex) || e.hasModifier()){
-                sm.handleMouseDown(e, t);
-            }
-            return {grid: this.grid, ddel: this.ddel, rowIndex: rowIndex, selections:sm.getSelections()};
-        }
-        return false;
-    },
-
-    onInitDrag : function(e){
-        var data = this.dragData;
-        this.ddel.innerHTML = this.grid.getDragDropText();
-        this.proxy.update(this.ddel);
-        // fire start drag?
-    },
-
-    afterRepair : function(){
-        this.dragging = false;
-    },
-
-    getRepairXY : function(e, data){
-        return false;
-    },
-
-    onEndDrag : function(data, e){
-        // fire end drag?
-    },
-
-    onValidDrop : function(dd, e, id){
-        // fire drag drop?
-        this.hideProxy();
-    },
-
-    beforeInvalidDrop : function(e, id){
-
-    }
-});
-
-Ext.grid.ColumnModel = function(config){
-	Ext.grid.ColumnModel.superclass.constructor.call(this);
-
-    this.config = config;
-    this.lookup = {};
-
-    // if id, create one
-    // if the column does not have a dataIndex mapping,
-    // map it to the order it is in the config
-    for(var i = 0, len = config.length; i < len; i++){
-        if(typeof config[i].dataIndex == "undefined"){
-            config[i].dataIndex = i;
-        }
-        if(typeof config[i].renderer == "string"){
-            config[i].renderer = Ext.util.Format[config[i].renderer];
-        }
-        if(typeof config[i].id == "undefined"){
-            config[i].id = i;
-        }
-        this.lookup[config[i].id] = config[i];
-    }
-
-
-    this.defaultWidth = 100;
-
-
-    this.defaultSortable = false;
-
-    this.addEvents({
-
-	    "widthchange": true,
-
-	    "headerchange": true,
-
-	    "hiddenchange": true,
-
-        "columnmoved" : true,
-
-        "columnlockchange" : true
-    });
-    Ext.grid.ColumnModel.superclass.constructor.call(this);
-};
-Ext.extend(Ext.grid.ColumnModel, Ext.util.Observable, {
-
-
-
-
-
-
-
-
-
-
-    getColumnId : function(index){
-        return this.config[index].id;
-    },
-
-    getColumnById : function(id){
-        return this.lookup[id];
-    },
-
-    getIndexById : function(id){
-        for(var i = 0, len = this.config.length; i < len; i++){
-            if(this.config[i].id == id){
-                return i;
-            }
-        }
-        return -1;
-    },
-
-    moveColumn : function(oldIndex, newIndex){
-        var c = this.config[oldIndex];
-        this.config.splice(oldIndex, 1);
-        this.config.splice(newIndex, 0, c);
-        this.dataMap = null;
-        this.fireEvent("columnmoved", this, oldIndex, newIndex);
-    },
-
-    isLocked : function(colIndex){
-        return this.config[colIndex].locked === true;
-    },
-
-    setLocked : function(colIndex, value, suppressEvent){
-        if(this.isLocked(colIndex) == value){
-            return;
-        }
-        this.config[colIndex].locked = value;
-        if(!suppressEvent){
-            this.fireEvent("columnlockchange", this, colIndex, value);
-        }
-    },
-
-    getTotalLockedWidth : function(){
-        var totalWidth = 0;
-        for(var i = 0; i < this.config.length; i++){
-            if(this.isLocked(i) && !this.isHidden(i)){
-                this.totalWidth += this.getColumnWidth(i);
-            }
-        }
-        return totalWidth;
-    },
-
-    getLockedCount : function(){
-        for(var i = 0, len = this.config.length; i < len; i++){
-            if(!this.isLocked(i)){
-                return i;
-            }
-        }
-    },
-
-
-    getColumnCount : function(visibleOnly){
-        if(visibleOnly === true){
-            var c = 0;
-            for(var i = 0, len = this.config.length; i < len; i++){
-                if(!this.isHidden(i)){
-                    c++;
-                }
-            }
-            return c;
-        }
-        return this.config.length;
-    },
-
-
-    getColumnsBy : function(fn, scope){
-        var r = [];
-        for(var i = 0, len = this.config.length; i < len; i++){
-            var c = this.config[i];
-            if(fn.call(scope||this, c, i) === true){
-                r[r.length] = c;
-            }
-        }
-        return r;
-    },
-
-
-    isSortable : function(col){
-        if(typeof this.config[col].sortable == "undefined"){
-            return this.defaultSortable;
-        }
-        return this.config[col].sortable;
-    },
-
-
-    getRenderer : function(col){
-        if(!this.config[col].renderer){
-            return Ext.grid.ColumnModel.defaultRenderer;
-        }
-        return this.config[col].renderer;
-    },
-
-
-    setRenderer : function(col, fn){
-        this.config[col].renderer = fn;
-    },
-
-
-    getColumnWidth : function(col){
-        return this.config[col].width || this.defaultWidth;
-    },
-
-
-    setColumnWidth : function(col, width, suppressEvent){
-        this.config[col].width = width;
-        this.totalWidth = null;
-        if(!suppressEvent){
-             this.fireEvent("widthchange", this, col, width);
-        }
-    },
-
-
-    getTotalWidth : function(includeHidden){
-        if(!this.totalWidth){
-            this.totalWidth = 0;
-            for(var i = 0, len = this.config.length; i < len; i++){
-                if(includeHidden || !this.isHidden(i)){
-                    this.totalWidth += this.getColumnWidth(i);
-                }
-            }
-        }
-        return this.totalWidth;
-    },
-
-
-    getColumnHeader : function(col){
-        return this.config[col].header;
-    },
-
-
-    setColumnHeader : function(col, header){
-        this.config[col].header = header;
-        this.fireEvent("headerchange", this, col, header);
-    },
-
-
-    getColumnTooltip : function(col){
-            return this.config[col].tooltip;
-    },
-
-    setColumnTooltip : function(col, tooltip){
-            this.config[col].tooltip = tooltip;
-    },
-
-
-    getDataIndex : function(col){
-        return this.config[col].dataIndex;
-    },
-
-
-    setDataIndex : function(col, dataIndex){
-        this.config[col].dataIndex = dataIndex;
-    },
-
-    findColumnIndex : function(dataIndex){
-        var c = this.config;
-        for(var i = 0, len = c.length; i < len; i++){
-            if(c[i].dataIndex == dataIndex){
-                return i;
-            }
-        }
-        return -1;
-    },
-
-
-    isCellEditable : function(colIndex, rowIndex){
-        return (this.config[colIndex].editable || (typeof this.config[colIndex].editable == "undefined" && this.config[colIndex].editor)) ? true : false;
-    },
-
-
-    getCellEditor : function(colIndex, rowIndex){
-        return this.config[colIndex].editor;
-    },
-
-
-    setEditable : function(col, editable){
-        this.config[col].editable = editable;
-    },
-
-
-
-    isHidden : function(colIndex){
-        return this.config[colIndex].hidden;
-    },
-
-
-
-    isFixed : function(colIndex){
-        return this.config[colIndex].fixed;
-    },
-
-
-    isResizable : function(colIndex){
-        return colIndex >= 0 && this.config[colIndex].resizable !== false && this.config[colIndex].fixed !== true;
-    },
-
-    setHidden : function(colIndex, hidden){
-        this.config[colIndex].hidden = hidden;
-        this.totalWidth = null;
-        this.fireEvent("hiddenchange", this, colIndex, hidden);
-    },
-
-
-    setEditor : function(col, editor){
-        this.config[col].editor = editor;
-    }
-});
-
-Ext.grid.ColumnModel.defaultRenderer = function(value){
-	if(typeof value == "string" && value.length < 1){
-	    return "&#160;";
-	}
-	return value;
-};
-
-// Alias for backwards compatibility
-Ext.grid.DefaultColumnModel = Ext.grid.ColumnModel;
-
-
-Ext.grid.AbstractSelectionModel = function(){
-    this.locked = false;
-    Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable,  {
-
-    init : function(grid){
-        this.grid = grid;
-        this.initEvents();
-    },
-
-
-    lock : function(){
-        this.locked = true;
-    },
-
-
-    unlock : function(){
-        this.locked = false;
-    },
-
-
-    isLocked : function(){
-        return this.locked;
-    }
-});
-
-Ext.grid.RowSelectionModel = function(config){
-    Ext.apply(this, config);
-    this.selections = new Ext.util.MixedCollection(false, function(o){
-        return o.id;
-    });
-
-    this.last = false;
-    this.lastActive = false;
-
-    this.addEvents({
-
-	    "selectionchange" : true,
-
-	    "beforerowselect" : true,
-
-	    "rowselect" : true,
-
-        "rowdeselect" : true
-    });
-
-    this.locked = false;
-};
-
-Ext.extend(Ext.grid.RowSelectionModel, Ext.grid.AbstractSelectionModel,  {
-
-    singleSelect : false,
-
-    // private
-    initEvents : function(){
-
-        if(!this.grid.enableDragDrop && !this.grid.enableDrag){
-            this.grid.on("mousedown", this.handleMouseDown, this);
-        }
-
-        this.rowNav = new Ext.KeyNav(this.grid.getGridEl(), {
-            "up" : function(e){
-                if(!e.shiftKey){
-                    this.selectPrevious(e.shiftKey);
-                }else if(this.last !== false && this.lastActive !== false){
-                    var last = this.last;
-                    this.selectRange(this.last,  this.lastActive-1);
-                    this.grid.getView().focusRow(this.lastActive);
-                    if(last !== false){
-                        this.last = last;
-                    }
-                }else{
-                    this.selectFirstRow();
-                }
-            },
-            "down" : function(e){
-                if(!e.shiftKey){
-                    this.selectNext(e.shiftKey);
-                }else if(this.last !== false && this.lastActive !== false){
-                    var last = this.last;
-                    this.selectRange(this.last,  this.lastActive+1);
-                    this.grid.getView().focusRow(this.lastActive);
-                    if(last !== false){
-                        this.last = last;
-                    }
-                }else{
-                    this.selectFirstRow();
-                }
-            },
-            scope: this
-        });
-
-        var view = this.grid.view;
-        view.on("refresh", this.onRefresh, this);
-        view.on("rowupdated", this.onRowUpdated, this);
-        view.on("rowremoved", this.onRemove, this);
-    },
-
-    // private
-    onRefresh : function(){
-        var ds = this.grid.dataSource, i, v = this.grid.view;
-        var s = this.selections;
-        s.each(function(r){
-            if((i = ds.indexOfId(r.id)) != -1){
-                v.onRowSelect(i);
-            }else{
-                s.remove(r);
-            }
-        });
-    },
-
-    // private
-    onRemove : function(v, index, r){
-        this.selections.remove(r);
-    },
-
-    // private
-    onRowUpdated : function(v, index, r){
-        if(this.isSelected(r)){
-            v.onRowSelect(index);
-        }
-    },
-
-
-    selectRecords : function(records, keepExisting){
-        if(!keepExisting){
-            this.clearSelections();
-        }
-        var ds = this.grid.dataSource;
-        for(var i = 0, len = records.length; i < len; i++){
-            this.selectRow(ds.indexOf(records[i]), true);
-        }
-    },
-
-
-    getCount : function(){
-        return this.selections.length;
-    },
-
-
-    selectFirstRow : function(){
-        this.selectRow(0);
-    },
-
-
-    selectLastRow : function(keepExisting){
-        this.selectRow(this.grid.dataSource.getCount() - 1, keepExisting);
-    },
-
-
-    selectNext : function(keepExisting){
-        if(this.last !== false && (this.last+1) < this.grid.dataSource.getCount()){
-            this.selectRow(this.last+1, keepExisting);
-            this.grid.getView().focusRow(this.last);
-        }
-    },
-
-
-    selectPrevious : function(keepExisting){
-        if(this.last){
-            this.selectRow(this.last-1, keepExisting);
-            this.grid.getView().focusRow(this.last);
-        }
-    },
-
-
-    getSelections : function(){
-        return [].concat(this.selections.items);
-    },
-
-
-    getSelected : function(){
-        return this.selections.itemAt(0);
-    },
-
-
-
-    clearSelections : function(fast){
-        if(this.locked) return;
-        if(fast !== true){
-            var ds = this.grid.dataSource;
-            var s = this.selections;
-            s.each(function(r){
-                this.deselectRow(ds.indexOfId(r.id));
-            }, this);
-            s.clear();
-        }else{
-            this.selections.clear();
-        }
-        this.last = false;
-    },
-
-
-
-    selectAll : function(){
-        if(this.locked) return;
-        this.selections.clear();
-        for(var i = 0, len = this.grid.dataSource.getCount(); i < len; i++){
-            this.selectRow(i, true);
-        }
-    },
-
-
-    hasSelection : function(){
-        return this.selections.length > 0;
-    },
-
-
-    isSelected : function(index){
-        var r = typeof index == "number" ? this.grid.dataSource.getAt(index) : index;
-        return (r && this.selections.key(r.id) ? true : false);
-    },
-
-
-    isIdSelected : function(id){
-        return (this.selections.key(id) ? true : false);
-    },
-
-    // private
-    handleMouseDown : function(e, t){
-        var view = this.grid.getView(), rowIndex;
-        if(this.isLocked() || (rowIndex = view.findRowIndex(t)) === false){
-            return;
-        };
-        if(e.shiftKey && this.last !== false){
-            var last = this.last;
-            this.selectRange(last, rowIndex, e.ctrlKey);
-            this.last = last; // reset the last
-            view.focusRow(rowIndex);
-        }else{
-            var isSelected = this.isSelected(rowIndex);
-            if(e.button != 0 && isSelected){
-                view.focusRow(rowIndex);
-            }else if(e.ctrlKey && isSelected){
-                this.deselectRow(rowIndex);
-            }else{
-                this.selectRow(rowIndex, e.button == 0 && (e.ctrlKey || e.shiftKey));
-                view.focusRow(rowIndex);
-            }
-        }
-    },
-
-
-    selectRows : function(rows, keepExisting){
-        if(!keepExisting){
-            this.clearSelections();
-        }
-        for(var i = 0, len = rows.length; i < len; i++){
-            this.selectRow(rows[i], true);
-        }
-    },
-
-
-    selectRange : function(startRow, endRow, keepExisting){
-        if(this.locked) return;
-        if(!keepExisting){
-            this.clearSelections();
-        }
-        if(startRow <= endRow){
-            for(var i = startRow; i <= endRow; i++){
-                this.selectRow(i, true);
-            }
-        }else{
-            for(var i = startRow; i >= endRow; i--){
-                this.selectRow(i, true);
-            }
-        }
-    },
-
-
-    deselectRange : function(startRow, endRow, preventViewNotify){
-        if(this.locked) return;
-        for(var i = startRow; i <= endRow; i++){
-            this.deselectRow(i, preventViewNotify);
-        }
-    },
-
-
-    selectRow : function(index, keepExisting, preventViewNotify){
-        if(this.locked || (index < 0 || index >= this.grid.dataSource.getCount())) return;
-        if(this.fireEvent("beforerowselect", this, index, keepExisting) !== false){
-            if(!keepExisting || this.singleSelect){
-                this.clearSelections();
-            }
-            var r = this.grid.dataSource.getAt(index);
-            this.selections.add(r);
-            this.last = this.lastActive = index;
-            if(!preventViewNotify){
-                this.grid.getView().onRowSelect(index);
-            }
-            this.fireEvent("rowselect", this, index, r);
-            this.fireEvent("selectionchange", this);
-        }
-    },
-
-
-    deselectRow : function(index, preventViewNotify){
-        if(this.locked) return;
-        if(this.last == index){
-            this.last = false;
-        }
-        if(this.lastActive == index){
-            this.lastActive = false;
-        }
-        var r = this.grid.dataSource.getAt(index);
-        this.selections.remove(r);
-        if(!preventViewNotify){
-            this.grid.getView().onRowDeselect(index);
-        }
-        this.fireEvent("rowdeselect", this, index);
-        this.fireEvent("selectionchange", this);
-    },
-
-    // private
-    restoreLast : function(){
-        if(this._last){
-            this.last = this._last;
-        }
-    },
-
-    // private
-    acceptsNav : function(row, col, cm){
-        return !cm.isHidden(col) && cm.isCellEditable(col, row);
-    },
-
-    // private
-    onEditorKey : function(field, e){
-        var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
-        if(k == e.TAB){
-            e.stopEvent();
-            ed.completeEdit();
-            if(e.shiftKey){
-                newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
-            }else{
-                newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
-            }
-        }else if(k == e.ENTER && !e.ctrlKey){
-            e.stopEvent();
-            ed.completeEdit();
-            if(e.shiftKey){
-                newCell = g.walkCells(ed.row-1, ed.col, -1, this.acceptsNav, this);
-            }else{
-                newCell = g.walkCells(ed.row+1, ed.col, 1, this.acceptsNav, this);
-            }
-        }else if(k == e.ESC){
-            ed.cancelEdit();
-        }
-        if(newCell){
-            g.startEditing(newCell[0], newCell[1]);
-        }
-    }
-});
-
-Ext.grid.CellSelectionModel = function(config){
-    Ext.apply(this, config);
-
-    this.selection = null;
-
-    this.addEvents({
-
-	    "beforecellselect" : true,
-
-	    "cellselect" : true,
-
-	    "selectionchange" : true
-    });
-};
-
-Ext.extend(Ext.grid.CellSelectionModel, Ext.grid.AbstractSelectionModel,  {
-
-
-    initEvents : function(){
-        this.grid.on("mousedown", this.handleMouseDown, this);
-        this.grid.getGridEl().on(Ext.isIE ? "keydown" : "keypress", this.handleKeyDown, this);
-        var view = this.grid.view;
-        view.on("refresh", this.onViewChange, this);
-        view.on("rowupdated", this.onRowUpdated, this);
-        view.on("beforerowremoved", this.clearSelections, this);
-        view.on("beforerowsinserted", this.clearSelections, this);
-        if(this.grid.isEditor){
-            this.grid.on("beforeedit", this.beforeEdit,  this);
-        }
-    },
-
-    beforeEdit : function(e){
-        this.select(e.row, e.column, false, true, e.record);
-    },
-
-    onRowUpdated : function(v, index, r){
-        if(this.selection && this.selection.record == r){
-            v.onCellSelect(index, this.selection.cell[1]);
-        }
-    },
-
-    onViewChange : function(){
-        this.clearSelections(true);
-    },
-
-    getSelectedCell : function(){
-        return this.selection ? this.selection.cell : null;
-    },
-
-
-    clearSelections : function(preventNotify){
-        var s = this.selection;
-        if(s){
-            if(preventNotify !== true){
-                this.grid.view.onCellDeselect(s.cell[0], s.cell[1]);
-            }
-            this.selection = null;
-            this.fireEvent("selectionchange", this, null);
-        }
-    },
-
-
-    hasSelection : function(){
-        return this.selection ? true : false;
-    },
-
-
-    handleMouseDown : function(e, t){
-        var v = this.grid.getView();
-        if(this.isLocked()){
-            return;
-        };
-        var row = v.findRowIndex(t);
-        var cell = v.findCellIndex(t);
-        if(row !== false && cell !== false){
-            this.select(row, cell);
-        }
-    },
-
-
-    select : function(rowIndex, colIndex, preventViewNotify, preventFocus,  r){
-        if(this.fireEvent("beforecellselect", this, rowIndex, colIndex) !== false){
-            this.clearSelections();
-            r = r || this.grid.dataSource.getAt(rowIndex);
-            this.selection = {
-                record : r,
-                cell : [rowIndex, colIndex]
-            };
-            if(!preventViewNotify){
-                var v = this.grid.getView();
-                v.onCellSelect(rowIndex, colIndex);
-                if(preventFocus !== true){
-                    v.focusCell(rowIndex, colIndex);
-                }
-            }
-            this.fireEvent("cellselect", this, rowIndex, colIndex);
-            this.fireEvent("selectionchange", this, this.selection);
-        }
-    },
-
-    isSelectable : function(rowIndex, colIndex, cm){
-        return !cm.isHidden(colIndex);
-    },
-
-
-    handleKeyDown : function(e){
-        if(!e.isNavKeyPress()){
-            return;
-        }
-        var g = this.grid, s = this.selection;
-        if(!s){
-            e.stopEvent();
-            var cell = g.walkCells(0, 0, 1, this.isSelectable,  this);
-            if(cell){
-                this.select(cell[0], cell[1]);
-            }
-            return;
-        }
-        var sm = this;
-        var walk = function(row, col, step){
-            return g.walkCells(row, col, step, sm.isSelectable,  sm);
-        };
-        var k = e.getKey(), r = s.cell[0], c = s.cell[1];
-        var newCell;
-
-        switch(k){
-             case e.TAB:
-                 if(e.shiftKey){
-                     newCell = walk(r, c-1, -1);
-                 }else{
-                     newCell = walk(r, c+1, 1);
-                 }
-             break;
-             case e.DOWN:
-                 newCell = walk(r+1, c, 1);
-             break;
-             case e.UP:
-                 newCell = walk(r-1, c, -1);
-             break;
-             case e.RIGHT:
-                 newCell = walk(r, c+1, 1);
-             break;
-             case e.LEFT:
-                 newCell = walk(r, c-1, -1);
-             break;
-             case e.ENTER:
-                 if(g.isEditor && !g.editing){
-                    g.startEditing(r, c);
-                    e.stopEvent();
-                    return;
-                }
-             break;
-        };
-        if(newCell){
-            this.select(newCell[0], newCell[1]);
-            e.stopEvent();
-        }
-    },
-
-    acceptsNav : function(row, col, cm){
-        return !cm.isHidden(col) && cm.isCellEditable(col, row);
-    },
-
-    onEditorKey : function(field, e){
-        var k = e.getKey(), newCell, g = this.grid, ed = g.activeEditor;
-        if(k == e.TAB){
-            if(e.shiftKey){
-                newCell = g.walkCells(ed.row, ed.col-1, -1, this.acceptsNav, this);
-            }else{
-                newCell = g.walkCells(ed.row, ed.col+1, 1, this.acceptsNav, this);
-            }
-            e.stopEvent();
-        }else if(k == e.ENTER && !e.ctrlKey){
-            ed.completeEdit();
-            e.stopEvent();
-        }else if(k == e.ESC){
-            ed.cancelEdit();
-        }
-        if(newCell){
-            g.startEditing(newCell[0], newCell[1]);
-        }
-    }
-});
-
-Ext.grid.EditorGrid = function(container, config){
-    Ext.grid.EditorGrid.superclass.constructor.call(this, container, config);
-    this.getGridEl().addClass("xedit-grid");
-
-    if(!this.selModel){
-        this.selModel = new Ext.grid.CellSelectionModel();
-    }
-
-    this.activeEditor = null;
-
-	this.addEvents({
-
-	    "beforeedit" : true,
-
-	    "afteredit" : true,
-
-	    "validateedit" : true
-	});
-    this.on("bodyscroll", this.stopEditing,  this);
-    this.on(this.clicksToEdit == 1 ? "cellclick" : "celldblclick", this.onCellDblClick,  this);
-};
-
-Ext.extend(Ext.grid.EditorGrid, Ext.grid.Grid, {
-    isEditor : true,
-    clicksToEdit: 2,
-    trackMouseOver: false, // causes very odd FF errors
-
-    onCellDblClick : function(g, row, col){
-        this.startEditing(row, col);
-    },
-
-    onEditComplete : function(ed, value, startValue){
-        this.editing = false;
-        this.activeEditor = null;
-        ed.un("specialkey", this.selModel.onEditorKey, this.selModel);
-        if(String(value) != String(startValue)){
-            var r = ed.record;
-            var field = this.colModel.getDataIndex(ed.col);
-            var e = {
-                grid: this,
-                record: r,
-                field: field,
-                originalValue: startValue,
-                value: value,
-                row: ed.row,
-                column: ed.col,
-                cancel:false
-            };
-            if(this.fireEvent("validateedit", e) !== false && !e.cancel){
-                r.set(field, e.value);
-                delete e.cancel;
-                this.fireEvent("afteredit", e);
-            }
-        }
-        this.view.focusCell(ed.row, ed.col);
-    },
-
-
-    startEditing : function(row, col){
-        this.stopEditing();
-        if(this.colModel.isCellEditable(col, row)){
-            this.view.ensureVisible(row, col, true);
-            var r = this.dataSource.getAt(row);
-            var field = this.colModel.getDataIndex(col);
-            var e = {
-                grid: this,
-                record: r,
-                field: field,
-                value: r.data[field],
-                row: row,
-                column: col,
-                cancel:false
-            };
-            if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
-                this.editing = true;
-                var ed = this.colModel.getCellEditor(col, row);
-                if(!ed.rendered){
-                    ed.render(ed.parentEl || document.body);
-                }
-                (function(){ // complex but required for focus issues in safari, ie and opera
-                    ed.row = row;
-                    ed.col = col;
-                    ed.record = r;
-                    ed.on("complete", this.onEditComplete, this, {single: true});
-                    ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
-                    this.activeEditor = ed;
-                    var v = r.data[field];
-                    ed.startEdit(this.view.getCell(row, col), v);
-                }).defer(50, this);
-            }
-        }
-    },
-
-
-    stopEditing : function(){
-        if(this.activeEditor){
-            this.activeEditor.completeEdit();
-        }
-        this.activeEditor = null;
-    }
-});
-// private
-// This is a support class used internally by the Grid components
-Ext.grid.GridEditor = function(field, config){
-    Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
-    field.monitorTab = false;
-};
-
-Ext.extend(Ext.grid.GridEditor, Ext.Editor, {
-    alignment: "tl-tl",
-    autoSize: "width",
-    hideEl : false,
-    cls: "x-small-editor x-grid-editor",
-    shim:false,
-    shadow:"frame"
-});
-Ext.grid.PropertyRecord = Ext.data.Record.create([
-    {name:'name',type:'string'}, 'value'
-]);
-
-Ext.grid.PropertyStore = function(grid, source){
-    this.grid = grid;
-    this.store = new Ext.data.Store({
-        recordType : Ext.grid.PropertyRecord
-    });
-    this.store.on('update', this.onUpdate,  this);
-    if(source){
-        this.setSource(source);
-    }
-    Ext.grid.PropertyStore.superclass.constructor.call(this);
-};
-Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, {
-    setSource : function(o){
-        this.source = o;
-        this.store.removeAll();
-        var data = [];
-        for(var k in o){
-            if(this.isEditableValue(o[k])){
-                data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k));
-            }
-        }
-        this.store.loadRecords({records: data}, {}, true);
-    },
-
-    onUpdate : function(ds, record, type){
-        if(type == Ext.data.Record.EDIT){
-            var v = record.data['value'];
-            var oldValue = record.modified['value'];
-            if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){
-                this.source[record.id] = v;
-                record.commit();
-                this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue);
-            }else{
-                record.reject();
-            }
-        }
-    },
-
-    getProperty : function(row){
-       return this.store.getAt(row);
-    },
-
-    isEditableValue: function(val){
-        if(val && val instanceof Date){
-            return true;
-        }else if(typeof val == 'object' || typeof val == 'function'){
-            return false;
-        }
-        return true;
-    },
-
-    setValue : function(prop, value){
-        this.source[prop] = value;
-        this.store.getById(prop).set('value', value);
-    },
-
-    getSource : function(){
-        return this.source;
-    }
-});
-
-Ext.grid.PropertyColumnModel = function(grid, store){
-    this.grid = grid;
-    var g = Ext.grid;
-    g.PropertyColumnModel.superclass.constructor.call(this, [
-        {header: this.nameText, sortable: true, dataIndex:'name', id: 'name'},
-        {header: this.valueText, resizable:false, dataIndex: 'value', id: 'value'}
-    ]);
-    this.store = store;
-    this.bselect = Ext.DomHelper.append(document.body, {
-        tag: 'select', style:'display:none', cls: 'x-grid-editor', children: [
-            {tag: 'option', value: 'true', html: 'true'},
-            {tag: 'option', value: 'false', html: 'false'}
-        ]
-    });
-    Ext.id(this.bselect);
-    var f = Ext.form;
-    this.editors = {
-        'date' : new g.GridEditor(new f.DateField({selectOnFocus:true})),
-        'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})),
-        'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})),
-        'boolean' : new g.GridEditor(new f.Field({el:this.bselect,selectOnFocus:true}))
-    };
-    this.renderCellDelegate = this.renderCell.createDelegate(this);
-    this.renderPropDelegate = this.renderProp.createDelegate(this);
-};
-
-Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, {
-    nameText : 'Name',
-    valueText : 'Value',
-    dateFormat : 'm/j/Y',
-    renderDate : function(dateVal){
-        return dateVal.dateFormat(this.dateFormat);
-    },
-
-    renderBool : function(bVal){
-        return bVal ? 'true' : 'false';
-    },
-
-    isCellEditable : function(colIndex, rowIndex){
-        return colIndex == 1;
-    },
-
-    getRenderer : function(col){
-        return col == 1 ?
-            this.renderCellDelegate : this.renderPropDelegate;
-    },
-
-    renderProp : function(v){
-        return this.getPropertyName(v);
-    },
-
-    renderCell : function(val){
-        var rv = val;
-        if(val instanceof Date){
-            rv = this.renderDate(val);
-        }else if(typeof val == 'boolean'){
-            rv = this.renderBool(val);
-        }
-        return Ext.util.Format.htmlEncode(rv);
-    },
-
-    getPropertyName : function(name){
-        var pn = this.grid.propertyNames;
-        return pn && pn[name] ? pn[name] : name;
-    },
-
-    getCellEditor : function(colIndex, rowIndex){
-        var p = this.store.getProperty(rowIndex);
-        var n = p.data['name'], val = p.data['value'];
-        if(this.grid.customEditors[n]){
-            return this.grid.customEditors[n];
-        }
-        if(val instanceof Date){
-            return this.editors['date'];
-        }else if(typeof val == 'number'){
-            return this.editors['number'];
-        }else if(typeof val == 'boolean'){
-            return this.editors['boolean'];
-        }else{
-            return this.editors['string'];
-        }
-    }
-});
-
-Ext.grid.PropertyGrid = function(container, config){
-    config = config || {};
-    var store = new Ext.grid.PropertyStore(this);
-    this.store = store;
-    var cm = new Ext.grid.PropertyColumnModel(this, store);
-    store.store.sort('name', 'ASC');
-    Ext.grid.PropertyGrid.superclass.constructor.call(this, container, Ext.apply({
-        ds: store.store,
-        cm: cm,
-        enableColLock:false,
-        enableColumnMove:false,
-        stripeRows:false,
-        trackMouseOver: false,
-        clicksToEdit:1
-    }, config));
-    this.getGridEl().addClass('x-props-grid');
-    this.lastEditRow = null;
-    this.on('columnresize', this.onColumnResize, this);
-    this.addEvents({
-        beforepropertychange: true,
-        propertychange: true
-    });
-    this.customEditors = this.customEditors || {};
-};
-Ext.extend(Ext.grid.PropertyGrid, Ext.grid.EditorGrid, {
-    render : function(){
-        Ext.grid.PropertyGrid.superclass.render.call(this);
-        this.autoSize.defer(100, this);
-    },
-
-    autoSize : function(){
-        Ext.grid.PropertyGrid.superclass.autoSize.call(this);
-        if(this.view){
-            this.view.fitColumns();
-        }
-    },
-
-    onColumnResize : function(){
-        this.colModel.setColumnWidth(1, this.container.getWidth(true)-this.colModel.getColumnWidth(0));
-        this.autoSize();
-    },
-
-    setSource : function(source){
-        this.store.setSource(source);
-        //this.autoSize();
-    },
-
-    getSource : function(){
-        return this.store.getSource();
-    }
-});
-
-Ext.LoadMask = function(el, config){
-    this.el = Ext.get(el);
-    Ext.apply(this, config);
-    if(this.store){
-        this.store.on('beforeload', this.onBeforeLoad, this);
-        this.store.on('load', this.onLoad, this);
-        this.store.on('loadexception', this.onLoad, this);
-        this.removeMask = false;
-    }else{
-        var um = this.el.getUpdateManager();
-        um.showLoadIndicator = false; // disable the default indicator
-        um.on('beforeupdate', this.onBeforeLoad, this);
-        um.on('update', this.onLoad, this);
-        um.on('failure', this.onLoad, this);
-        this.removeMask = true;
-    }
-};
-
-Ext.LoadMask.prototype = {
-
-
-    msg : 'Loading...',
-
-    msgCls : 'x-mask-loading',
-
-
-    disabled: false,
-
-
-    disable : function(){
-       this.disabled = true;
-    },
-
-
-    enable : function(){
-        this.disabled = false;
-    },
-
-    // private
-    onLoad : function(){
-        this.el.unmask(this.removeMask);
-    },
-
-    // private
-    onBeforeLoad : function(){
-        if(!this.disabled){
-            this.el.mask(this.msg, this.msgCls);
-        }
-    },
-
-    // private
-    destroy : function(){
-        if(this.store){
-            this.store.un('beforeload', this.onBeforeLoad, this);
-            this.store.un('load', this.onLoad, this);
-            this.store.un('loadexception', this.onLoad, this);
-        }else{
-            var um = this.el.getUpdateManager();
-            um.un('beforeupdate', this.onBeforeLoad, this);
-            um.un('update', this.onLoad, this);
-            um.un('failure', this.onLoad, this);
-        }
-    }
-};
-Ext.debug = {
-    init : function(){
-        var CP = Ext.ContentPanel;
-        var bd = Ext.get(document.body);
-
-        // create the dialog
-        var dlg = new Ext.LayoutDialog('x-debug-browser', {
-            autoCreate:true,
-            width:800,
-            height:450,
-            title: 'Ext Debug Console &amp; Inspector',
-            proxyDrag:true,
-            shadow:true,
-            center:{alwaysShowTabs:true},
-            constraintoviewport:false
-        });
-
-        // prevent dialog events from bubbling
-        dlg.el.swallowEvent('click');
-
-        // build the layout
-        var mainLayout = dlg.getLayout();
-        mainLayout.beginUpdate();
-
-        // create the nested layouts
-        var clayout = mainLayout.add('center',
-            new Ext.debug.InnerLayout('x-debug-console', 400, {
-                title: 'Debug Console'
-            }
-        ));
-
-        var ilayout = mainLayout.add('center',
-            new Ext.debug.InnerLayout('x-debug-inspector', 250, {
-                title: 'DOM Inspector'
-            }
-        ));
-
-        var scriptPanel = clayout.add('east', new CP({
-            autoCreate:{
-                tag: 'div', children: [
-                    {tag: 'div'},
-                    {tag:'textarea'}
-                ]
-            },
-            fitContainer:true,
-            fitToFrame:true,
-            title:'Script Console',
-            autoScroll: Ext.isGecko, // hideous block for firefox missing cursor AND bad sizing textareas
-            setSize : function(w, h){
-                Ext.ContentPanel.prototype.setSize.call(this, w, h);
-                if(Ext.isGecko && Ext.isStrict){
-                    var s = this.adjustForComponents(w, h);
-                    this.resizeEl.setSize(s.width-2, s.height-2);
-                }
-            }
-        }));
-        var sel = scriptPanel.el;
-        var script = sel.child('textarea');
-        scriptPanel.resizeEl = script;
-        var sctb = scriptPanel.toolbar = new Ext.Toolbar(sel.child('div'));
-        sctb.add({
-            text: 'Run',
-            handler: function(){
-                var s = script.dom.value;
-                if(trap.checked){
-                    try{
-                        var rt = eval(s);
-                        Ext.debug.dump(rt === undefined? '(no return)' : rt);
-                    }catch(e){
-                        Ext.debug.log(e.message || e.descript);
-                    }
-                }else{
-                    var rt = eval(s);
-                    Ext.debug.dump(rt === undefined? '(no return)' : rt);
-                }
-            }
-        }, {
-            text: 'Clear',
-            handler: function(){
-                script.dom.value = '';
-                script.dom.focus();
-            }
-        });
-
-        var trap = Ext.DomHelper.append(sctb.el, {tag:'input', type:'checkbox', checked: 'checked'});
-        trap.checked = true;
-        sctb.add('-', trap, 'Trap Errors');
-
-
-        var stylesGrid = new Ext.grid.PropertyGrid(bd.createChild(), {
-            nameText: 'Style',
-            enableHdMenu: false,
-            enableColumnResize: false
-        });
-
-        var stylePanel = ilayout.add('east', new Ext.GridPanel(stylesGrid,
-            {title: '(No element selected)'}));
-
-        stylesGrid.render();
-
-        // hide the header
-        stylesGrid.getView().mainHd.setDisplayed(false);
-
-        clayout.tbar.add({
-            text: 'Clear',
-            handler: function(){
-                Ext.debug.console.jsonData = [];
-                Ext.debug.console.refresh();
-            }
-        });
-
-        var treeEl = ilayout.main.getEl();
-        // create main inspector toolbar
-        var tb = ilayout.tbar;
-
-        var inspectIgnore, inspecting;
-
-        function inspectListener(e, t){
-            if(!inspectIgnore.contains(e.getPoint())){
-                findNode(t);
-            }
-        }
-
-        function stopInspecting(e, t){
-            if(!inspectIgnore.contains(e.getPoint())){
-                inspect.toggle(false);
-                if(findNode(t) !== false){
-                    e.stopEvent();
-                }
-            }
-        }
-
-        function stopInspectingEsc(e, t){
-            if(e.getKey() == e.ESC){
-                inspect.toggle(false);
-            }
-        }
-
-        var inspect = tb.addButton({
-            text: 'Inspect',
-            enableToggle: true,
-            pressed:false,
-            toggleHandler: function(n, pressed){
-                var d = Ext.get(document);
-                if(pressed){
-                    d.on('mouseover', inspectListener, window, {buffer:50});
-                    d.on('mousedown', stopInspecting);
-                    d.on('keydown', stopInspectingEsc);
-                    inspectIgnore = dlg.el.getRegion();
-                    inspecting = true;
-                }else{
-                    d.un('mouseover', inspectListener);
-                    d.un('mousedown', stopInspecting);
-                    d.on('keydown', stopInspectingEsc);
-                    inspecting = false;
-                    var n = tree.getSelectionModel().getSelectedNode();
-                    if(n && n.htmlNode){
-                        onNodeSelect(tree, n, false);
-                    }
-                }
-            }
-        });
-
-        tb.addSeparator();
-
-        var frameEl = tb.addButton({
-            text: 'Highlight Selection',
-            enableToggle: true,
-            pressed:false,
-            toggleHandler: function(n, pressed){
-                var n = tree.getSelectionModel().getSelectedNode();
-                if(n && n.htmlNode){
-                    n[pressed ? 'frame' : 'unframe']();
-                }
-            }
-        });
-
-        tb.addSeparator();
-
-        var reload = tb.addButton({
-            text: 'Refresh Children',
-            disabled:true,
-            handler: function(){
-                var n = tree.getSelectionModel().getSelectedNode();
-                if(n && n.reload){
-                    n.reload();
-                }
-            }
-        });
-
-        tb.add( '-', {
-            text: 'Collapse All',
-            handler: function(){
-                tree.root.collapse(true);
-            }
-        });
-
-        // perform the main layout
-        mainLayout.endUpdate();
-
-        mainLayout.getRegion('center').showPanel(0);
-
-        stylesGrid.on('propertychange', function(s, name, value){
-            var node = stylesGrid.treeNode;
-            if(styles){
-                node.htmlNode.style[name] = value;
-            }else{
-                node.htmlNode[name] = value;
-            }
-            node.refresh(true);
-        });
-
-        // Create the style toolbar
-        var stb = new Ext.Toolbar(stylesGrid.view.getHeaderPanel(true));
-
-        var swap = stb.addButton({
-            text: 'DOM Attributes',
-            menu: {
-                items: [
-                    new Ext.menu.CheckItem({id:'dom', text:'DOM Attributes', checked: true, group:'xdb-styles'}),
-                    new Ext.menu.CheckItem({id:'styles', text:'CSS Properties', group:'xdb-styles'})
-                ]
-            }
-        });
-
-        swap.menu.on('click', function(){
-            styles = swap.menu.items.get('styles').checked;
-            showAll[styles? 'show' : 'hide']();
-            swap.setText(styles ? 'CSS Properties' : 'DOM Attributes');
-            var n = tree.getSelectionModel().getSelectedNode();
-            if(n){
-                onNodeSelect(tree, n);
-            }
-        });
-
-        var addStyle = stb.addButton({
-            text: 'Add',
-            disabled: true,
-            handler: function(){
-                Ext.MessageBox.prompt('Add Property', 'Property Name:', function(btn, v){
-                    // store.store is disgusting TODO: clean up the API
-                    var store = stylesGrid.store.store;
-                    if(btn == 'ok' && v && !store.getById(v)){
-                        var r = new Ext.grid.PropertyRecord({name:v, value: ''}, v);
-                        store.add(r);
-                        stylesGrid.startEditing(store.getCount()-1, 1);
-                    }
-                });
-            }
-        });
-
-        var showAll = stb.addButton({
-            text: 'Computed Styles',
-            hidden: true,
-            pressed: false,
-            enableToggle: true,
-            toggleHandler: function(){
-                var n = tree.getSelectionModel().getSelectedNode();
-                if(n){
-                    onNodeSelect(tree, n);
-                }
-            }
-        });
-
-        // tree related stuff
-        var styles = false, hnode;
-        var nonSpace = /^\s*$/;
-        var html = Ext.util.Format.htmlEncode;
-        var ellipsis = Ext.util.Format.ellipsis;
-        var styleRe = /\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;
-
-        function findNode(n){
-            if(!n || n.nodeType != 1 || n == document.body || n == document){
-                return false;
-            }
-            var pn = [n], p = n;
-            while((p = p.parentNode) && p.nodeType == 1 && p.tagName.toUpperCase() != 'HTML'){
-                pn.unshift(p);
-            }
-            var cn = hnode;
-            for(var i = 0, len = pn.length; i < len; i++){
-                cn.expand();
-                cn = cn.findChild('htmlNode', pn[i]);
-                if(!cn){ // in this dialog?
-                    return false;
-                }
-            }
-            cn.select();
-            var a = cn.ui.anchor;
-            treeEl.dom.scrollTop = Math.max(0 ,a.offsetTop-10);
-            //treeEl.dom.scrollLeft = Math.max(0 ,a.offsetLeft-10); no likey
-            cn.highlight();
-            return true;
-        }
-
-        function nodeTitle(n){
-            var s = n.tagName;
-            if(n.id){
-                s += '#'+n.id;
-            }else if(n.className){
-                s += '.'+n.className;
-            }
-            return s;
-        }
-
-        function onNodeSelect(t, n, last){
-            if(last && last.unframe){
-                last.unframe();
-            }
-            var props = {};
-            if(n && n.htmlNode){
-                if(frameEl.pressed){
-                    n.frame();
-                }
-                if(inspecting){
-                    return;
-                }
-                addStyle.enable();
-                reload.setDisabled(n.leaf);
-                var dom = n.htmlNode;
-                stylePanel.setTitle(nodeTitle(dom));
-                if(styles && !showAll.pressed){
-                    var s = dom.style ? dom.style.cssText : '';
-                    if(s){
-                        var m;
-                        while ((m = styleRe.exec(s)) != null){
-                            props[m[1].toLowerCase()] = m[2];
-                        }
-                    }
-                }else if(styles){
-                    var cl = Ext.debug.cssList;
-                    var s = dom.style, fly = Ext.fly(dom);
-                    if(s){
-                        for(var i = 0, len = cl.length; i<len; i++){
-                            var st = cl[i];
-                            var v = s[st] || fly.getStyle(st);
-                            if(v != undefined && v !== null && v !== ''){
-                                props[st] = v;
-                            }
-                        }
-                    }
-                }else{
-                    for(var a in dom){
-                        var v = dom[a];
-                        if((isNaN(a+10)) && v != undefined && v !== null && v !== '' && !(Ext.isGecko && a[0] == a[0].toUpperCase())){
-                            props[a] = v;
-                        }
-                    }
-                }
-            }else{
-                if(inspecting){
-                    return;
-                }
-                addStyle.disable();
-                reload.disabled();
-            }
-            stylesGrid.setSource(props);
-            stylesGrid.treeNode = n;
-            stylesGrid.view.fitColumns();
-        }
-
-        // lets build a list of nodes to filter from the tree
-        // this is gonna be nasty
-        var filterIds = '^(?:';
-        var eds = stylesGrid.colModel.editors;
-        for(var edType in eds){
-            filterIds += eds[edType].id +'|';
-        }
-        Ext.each([dlg.shim? dlg.shim.id : 'noshim', dlg.proxyDrag.id], function(id){
-             filterIds += id +'|';
-        });
-        filterIds += dlg.el.id;
-        filterIds += ')$';
-        var filterRe = new RegExp(filterIds);
-
-        var loader = new Ext.tree.TreeLoader();
-        loader.load = function(n, cb){
-            var isBody = n.htmlNode == bd.dom;
-            var cn = n.htmlNode.childNodes;
-            for(var i = 0, c; c = cn[i]; i++){
-                if(isBody && filterRe.test(c.id)){
-                    continue;
-                }
-                if(c.nodeType == 1){
-                    n.appendChild(new Ext.debug.HtmlNode(c));
-                }else if(c.nodeType == 3 && !nonSpace.test(c.nodeValue)){
-                    n.appendChild(new Ext.tree.TreeNode({
-                        text:'<em>' + ellipsis(html(String(c.nodeValue)), 35) + '</em>',
-                        cls: 'x-tree-noicon'
-                    }));
-                }
-            }
-            cb();
-        };
-
-        var tree = new Ext.tree.TreePanel(treeEl, {
-            enableDD:false ,
-            loader: loader,
-            lines:false,
-            rootVisible:false,
-            animate:false,
-            hlColor:'ffff9c'
-        });
-        tree.getSelectionModel().on('selectionchange', onNodeSelect, null, {buffer:250});
-
-        var root = tree.setRootNode(new Ext.tree.TreeNode('Ext'));
-
-        hnode = root.appendChild(new Ext.debug.HtmlNode(
-                document.getElementsByTagName('html')[0]
-        ));
-
-        tree.render();
-
-        Ext.debug.console = new Ext.JsonView(clayout.main.getEl(),
-                '<pre><xmp>> {msg}</xmp></pre>');
-        Ext.debug.console.jsonData = [];
-
-        Ext.debug.dialog = dlg;
-    },
-
-    show : function(){
-        var d = Ext.debug;
-        if(!d.dialog){
-            d.init();
-        }
-        if(!d.dialog.isVisible()){
-            d.dialog.show();
-        }
-    },
-
-    hide : function(){
-        if(Ext.debug.dialog){
-            Ext.debug.dialog.hide();
-        }
-    },
-
-
-    log : function(arg1, arg2, etc){
-       Ext.debug.show();
-        var m = "";
-        for(var i = 0, len = arguments.length; i < len; i++){
-            m += (i == 0 ? "" : ", ") + arguments[i];
-        }
-        var cn = Ext.debug.console;
-        cn.jsonData.unshift({msg: m});
-        cn.refresh();
-    },
-
-
-    logf : function(format, arg1, arg2, etc){
-        Ext.debug.log(String.format.apply(String, arguments));
-    },
-
-
-    dump : function(o){
-        if(typeof o == 'string' || typeof o == 'number' || typeof o == 'undefined' || o instanceof Date){
-            Ext.debug.log(o);
-        }else if(!o){
-            Ext.debug.log("null");
-        }else if(typeof o != "object"){
-            Ext.debug.log('Unknown return type');
-        }else if(o instanceof Array){
-            Ext.debug.log('['+o.join(',')+']');
-        }else{
-            var b = ["{\n"];
-            for(var key in o){
-                var to = typeof o[key];
-                if(to != "function" && to != "object"){
-                    b.push(String.format("  {0}: {1},\n", key, o[key]));
-                }
-            }
-            var s = b.join("");
-            if(s.length > 3){
-                s = s.substr(0, s.length-2);
-            }
-            Ext.debug.log(s + "\n}");
-        }
-    },
-
-    _timers : {},
-
-    time : function(name){
-        name = name || "def";
-        Ext._timers[name] = new Date().getTime();
-    },
-
-
-    timeEnd : function(name, printResults){
-        var t = new Date().getTime();
-        name = name || "def";
-        var v = String.format("{0} ms", t-Ext._timers[name]);
-        Ext._timers[name] = new Date().getTime();
-        if(printResults !== false){
-            Ext.debug.log('Timer ' + (name == "def" ? v : name + ": " + v));
-        }
-        return v;
-    }
-};
-
-// highly unusual class declaration
-Ext.debug.HtmlNode = function(){
-    var html = Ext.util.Format.htmlEncode;
-    var ellipsis = Ext.util.Format.ellipsis;
-    var nonSpace = /^\s*$/;
-
-    var attrs = [
-        {n: 'id', v: 'id'},
-        {n: 'className', v: 'class'},
-        {n: 'name', v: 'name'},
-        {n: 'type', v: 'type'},
-        {n: 'src', v: 'src'},
-        {n: 'href', v: 'href'}
-    ];
-
-    function hasChild(n){
-        for(var i = 0, c; c = n.childNodes[i]; i++){
-            if(c.nodeType == 1){
-                return true;
-            }
-        }
-        return false;
-    }
-
-    function renderNode(n, leaf){
-        var tag = n.tagName.toLowerCase();
-        var s = '&lt;' + tag;
-        for(var i = 0, len = attrs.length; i < len; i++){
-            var a = attrs[i];
-            var v = n[a.n];
-            if(v && !nonSpace.test(v)){
-                s += ' ' + a.v + '=&quot;<i>' + html(v) +'</i>&quot;';
-            }
-        }
-        var style = n.style ? n.style.cssText : '';
-        if(style){
-            s += ' style=&quot;<i>' + html(style.toLowerCase()) +'</i>&quot;';
-        }
-        if(leaf && n.childNodes.length > 0){
-            s+='&gt;<em>' + ellipsis(html(String(n.innerHTML)), 35) + '</em>&lt;/'+tag+'&gt;';
-        }else if(leaf){
-            s += ' /&gt;';
-        }else{
-            s += '&gt;';
-        }
-        return s;
-    }
-
-    var HtmlNode = function(n){
-        var leaf = !hasChild(n);
-        this.htmlNode = n;
-        this.tagName = n.tagName.toLowerCase();
-        var attr = {
-            text : renderNode(n, leaf),
-            leaf : leaf,
-            cls: 'x-tree-noicon'
-        };
-        HtmlNode.superclass.constructor.call(this, attr);
-        this.attributes.htmlNode = n; // for searching
-        if(!leaf){
-            this.on('expand', this.onExpand,  this);
-            this.on('collapse', this.onCollapse,  this);
-        }
-    };
-
-
-    Ext.extend(HtmlNode, Ext.tree.AsyncTreeNode, {
-        cls: 'x-tree-noicon',
-        preventHScroll: true,
-        refresh : function(highlight){
-            var leaf = !hasChild(this.htmlNode);
-            this.setText(renderNode(this.htmlNode, leaf));
-            if(highlight){
-                Ext.fly(this.ui.textNode).highlight();
-            }
-        },
-
-        onExpand : function(){
-            if(!this.closeNode && this.parentNode){
-                this.closeNode = this.parentNode.insertBefore(new Ext.tree.TreeNode({
-                    text:'&lt;/' + this.tagName + '&gt;',
-                    cls: 'x-tree-noicon'
-                }), this.nextSibling);
-            }else if(this.closeNode){
-                this.closeNode.ui.show();
-            }
-        },
-
-        onCollapse : function(){
-            if(this.closeNode){
-                this.closeNode.ui.hide();
-            }
-        },
-
-        render : function(bulkRender){
-            HtmlNode.superclass.render.call(this, bulkRender);
-        },
-
-        highlightNode : function(){
-            //Ext.fly(this.htmlNode).highlight();
-        },
-
-        highlight : function(){
-            //Ext.fly(this.ui.textNode).highlight();
-        },
-
-        frame : function(){
-            this.htmlNode.style.border = '1px solid #0000ff';
-            //this.highlightNode();
-        },
-
-        unframe : function(){
-            //Ext.fly(this.htmlNode).removeClass('x-debug-frame');
-            this.htmlNode.style.border = '';
-        }
-    });
-
-    return HtmlNode;
-}();
-
-// subclass for the standard layout panels
-Ext.debug.InnerLayout = function(id, w, cfg){
-    // console layout
-    var el = Ext.DomHelper.append(document.body, {id:id});
-    var layout = new Ext.BorderLayout(el, {
-        north: {
-            initialSize:28
-        },
-        center: {
-            titlebar: false
-        },
-        east: {
-            split:true,
-            initialSize:w,
-            titlebar:true
-        }
-    });
-    Ext.debug.InnerLayout.superclass.constructor.call(this, layout, cfg);
-
-    layout.beginUpdate();
-
-    var tbPanel = layout.add('north', new Ext.ContentPanel({
-            autoCreate:true, fitToFrame:true}));
-
-    this.main = layout.add('center', new Ext.ContentPanel({
-            autoCreate:true, fitToFrame:true, autoScroll:true}));
-
-    this.tbar = new Ext.Toolbar(tbPanel.el);
-
-    var mtbEl = tbPanel.resizeEl = tbPanel.el.child('div.x-toolbar');
-    mtbEl.setStyle('border-bottom', '0 none');
-
-    layout.endUpdate(true);
-};
-
-Ext.extend(Ext.debug.InnerLayout, Ext.NestedLayoutPanel, {
-    add : function(){
-        return this.layout.add.apply(this.layout, arguments);
-    }
-});
-
-Ext.debug.cssList = ['background-color','border','border-color','border-spacing',
-'border-style','border-top','border-right','border-bottom','border-left','border-top-color',
-'border-right-color','border-bottom-color','border-left-color','border-top-width','border-right-width',
-'border-bottom-width','border-left-width','border-width','bottom','color','font-size','font-size-adjust',
-'font-stretch','font-style','height','left','letter-spacing','line-height','margin','margin-top',
-'margin-right','margin-bottom','margin-left','marker-offset','max-height','max-width','min-height',
-'min-width','orphans','outline','outline-color','outline-style','outline-width','overflow','padding',
-'padding-top','padding-right','padding-bottom','padding-left','quotes','right','size','text-indent',
-'top','width','word-spacing','z-index','opacity','outline-offset'];
-
-if(typeof console == 'undefined'){
-    console = Ext.debug;
-}
-
-
-// attach shortcut key
-Ext.EventManager.on(window, 'load', function(){
-    Ext.get(document).on('keydown', function(e){
-        if(e.ctrlKey && e.shiftKey && e.getKey() == e.HOME){
-            Ext.debug.show();
-        }
-    });
-});
-
-// backwards compat
-Ext.print = Ext.log = Ext.debug.log;
-Ext.printf = Ext.logf = Ext.debug.logf;
-Ext.dump = Ext.debug.dump;
-Ext.timer = Ext.debug.time;
-Ext.timerEnd = Ext.debug.timeEnd;
-
diff --git a/lib/web/extjs/ext-all.js b/lib/web/extjs/ext-all.js
deleted file mode 100644
index 272989f1674350936cc1abaa7fb3ec3f86622d58..0000000000000000000000000000000000000000
--- a/lib/web/extjs/ext-all.js
+++ /dev/null
@@ -1,2026 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.DomHelper=function(){var tempTableEl=null;var emptyTags=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var createHtml=function(o){if(typeof o=='string'){return o;}
-var b="";if(!o.tag){o.tag="div";}
-b+="<"+o.tag;for(var attr in o){if(attr=="tag"||attr=="children"||attr=="cn"||attr=="html"||typeof o[attr]=="function")continue;if(attr=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}
-if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var key in s){if(typeof s[key]!="function"){b+=key+":"+s[key]+";";}}
-b+='"';}}else{if(attr=="cls"){b+=' class="'+o["cls"]+'"';}else if(attr=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else{b+=" "+attr+'="'+o[attr]+'"';}}}
-if(emptyTags.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if(cn instanceof Array){for(var i=0,len=cn.length;i<len;i++){b+=createHtml(cn[i],b);}}else{b+=createHtml(cn,b);}}
-if(o.html){b+=o.html;}
-b+="</"+o.tag+">";}
-return b;};var createDom=function(o,parentNode){var el=document.createElement(o.tag);var useSet=el.setAttribute?true:false;for(var attr in o){if(attr=="tag"||attr=="children"||attr=="cn"||attr=="html"||attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"){el.className=o["cls"];}else{if(useSet)el.setAttribute(attr,o[attr]);else el[attr]=o[attr];}}
-Ext.DomHelper.applyStyles(el,o.style);var cn=o.children||o.cn;if(cn){if(cn instanceof Array){for(var i=0,len=cn.length;i<len;i++){createDom(cn[i],el);}}else{createDom(cn,el);}}
-if(o.html){el.innerHTML=o.html;}
-if(parentNode){parentNode.appendChild(el);}
-return el;};var ieTable=function(depth,s,h,e){tempTableEl.innerHTML=[s,h,e].join('');var i=-1,el=tempTableEl;while(++i<depth){el=el.firstChild;}
-return el;};var ts='<table>',te='</table>',tbs=ts+'<tbody>',tbe='</tbody>'+te,trs=tbs+'<tr>',tre='</tr>'+tbe;var insertIntoTable=function(tag,where,el,html){if(!tempTableEl){tempTableEl=document.createElement('div');}
-var node;var before=null;if(tag=='td'){if(where=='afterbegin'||where=='beforeend'){return;}
-if(where=='beforebegin'){before=el;el=el.parentNode;}else{before=el.nextSibling;el=el.parentNode;}
-node=ieTable(4,trs,html,tre);}
-else if(tag=='tr'){if(where=='beforebegin'){before=el;el=el.parentNode;node=ieTable(3,tbs,html,tbe);}else if(where=='afterend'){before=el.nextSibling;el=el.parentNode;node=ieTable(3,tbs,html,tbe);}else{if(where=='afterbegin'){before=el.firstChild;}
-node=ieTable(4,trs,html,tre);}}else if(tag=='tbody'){if(where=='beforebegin'){before=el;el=el.parentNode;node=ieTable(2,ts,html,te);}else if(where=='afterend'){before=el.nextSibling;el=el.parentNode;node=ieTable(2,ts,html,te);}else{if(where=='afterbegin'){before=el.firstChild;}
-node=ieTable(3,tbs,html,tbe);}}else{if(where=='beforebegin'||where=='afterend'){return;}
-if(where=='afterbegin'){before=el.firstChild;}
-node=ieTable(2,ts,html,te);}
-el.insertBefore(node,before);return node;};return{useDom:false,markup:function(o){return createHtml(o);},applyStyles:function(el,styles){if(styles){el=Ext.fly(el);if(typeof styles=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var matches;while((matches=re.exec(styles))!=null){el.setStyle(matches[1],matches[2]);}}else if(typeof styles=="object"){for(var style in styles){el.setStyle(style,styles[style]);}}else if(typeof styles=="function"){Ext.DomHelper.applyStyles(el,styles.call());}}},insertHtml:function(where,el,html){where=where.toLowerCase();if(el.insertAdjacentHTML){var tag=el.tagName.toLowerCase();if(tag=="table"||tag=="tbody"||tag=="tr"||tag=='td'){var rs;if(rs=insertIntoTable(tag,where,el,html)){return rs;}}
-switch(where){case"beforebegin":el.insertAdjacentHTML(where,html);return el.previousSibling;case"afterbegin":el.insertAdjacentHTML(where,html);return el.firstChild;case"beforeend":el.insertAdjacentHTML(where,html);return el.lastChild;case"afterend":el.insertAdjacentHTML(where,html);return el.nextSibling;}
-throw'Illegal insertion point -> "'+where+'"';}
-var range=el.ownerDocument.createRange();var frag;switch(where){case"beforebegin":range.setStartBefore(el);frag=range.createContextualFragment(html);el.parentNode.insertBefore(frag,el);return el.previousSibling;case"afterbegin":if(el.firstChild){range.setStartBefore(el.firstChild);frag=range.createContextualFragment(html);el.insertBefore(frag,el.firstChild);return el.firstChild;}else{el.innerHTML=html;return el.firstChild;}
-case"beforeend":if(el.lastChild){range.setStartAfter(el.lastChild);frag=range.createContextualFragment(html);el.appendChild(frag);return el.lastChild;}else{el.innerHTML=html;return el.lastChild;}
-case"afterend":range.setStartAfter(el);frag=range.createContextualFragment(html);el.parentNode.insertBefore(frag,el.nextSibling);return el.nextSibling;}
-throw'Illegal insertion point -> "'+where+'"';},insertBefore:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"beforeBegin");},insertAfter:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"afterEnd","nextSibling");},insertFirst:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"afterBegin");},doInsert:function(el,o,returnElement,pos,sibling){el=Ext.getDom(el);var newNode;if(this.useDom){newNode=createDom(o,null);el.parentNode.insertBefore(newNode,sibling?el[sibling]:el);}else{var html=createHtml(o);newNode=this.insertHtml(pos,el,html);}
-return returnElement?Ext.get(newNode,true):newNode;},append:function(el,o,returnElement){el=Ext.getDom(el);var newNode;if(this.useDom){newNode=createDom(o,null);el.appendChild(newNode);}else{var html=createHtml(o);newNode=this.insertHtml("beforeEnd",el,html);}
-return returnElement?Ext.get(newNode,true):newNode;},overwrite:function(el,o,returnElement){el=Ext.getDom(el);el.innerHTML=createHtml(o);return returnElement?Ext.get(el.firstChild,true):el.firstChild;},createTemplate:function(o){var html=createHtml(o);return new Ext.Template(html);}};}();
-
-Ext.Template=function(html){if(html instanceof Array){html=html.join("");}else if(arguments.length>1){html=Array.prototype.join.call(arguments,"");}
-this.html=html;};Ext.Template.prototype={applyTemplate:function(values){if(this.compiled){return this.compiled(values);}
-var useF=this.disableFormats!==true;var fm=Ext.util.Format,tpl=this;var fn=function(m,name,format,args){if(format&&useF){if(format.substr(0,5)=="this."){return tpl.call(format.substr(5),values[name],values);}else{if(args){var re=/^\s*['"](.*)["']\s*$/;args=args.split(',');for(var i=0,len=args.length;i<len;i++){args[i]=args[i].replace(re,"$1");}
-args=[values[name]].concat(args);}else{args=[values[name]];}
-return fm[format].apply(fm,args);}}else{return values[name]!==undefined?values[name]:"";}};return this.html.replace(this.re,fn);},set:function(html,compile){this.html=html;this.compiled=null;if(compile){this.compile();}
-return this;},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var fm=Ext.util.Format;var useF=this.disableFormats!==true;var sep=Ext.isGecko?"+":",";var fn=function(m,name,format,args){if(format&&useF){args=args?','+args:"";if(format.substr(0,5)!="this."){format="fm."+format+'(';}else{format='this.call("'+format.substr(5)+'", ';args=", values";}}else{args='';format="(values['"+name+"'] == undefined ? '' : ";}
-return"'"+sep+format+"values['"+name+"']"+args+")"+sep+"'";};var body;if(Ext.isGecko){body="this.compiled = function(values){ return '"+
-this.html.replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn)+"';};";}else{body=["this.compiled = function(values){ return ['"];body.push(this.html.replace(/(\r\n|\n)/g,'\\n').replace("'","\\'").replace(this.re,fn));body.push("'].join('');};");body=body.join('');}
-eval(body);return this;},call:function(fnName,value,allValues){return this[fnName](value,allValues);},insertFirst:function(el,values,returnElement){return this.doInsert('afterBegin',el,values,returnElement);},insertBefore:function(el,values,returnElement){return this.doInsert('beforeBegin',el,values,returnElement);},insertAfter:function(el,values,returnElement){return this.doInsert('afterEnd',el,values,returnElement);},append:function(el,values,returnElement){return this.doInsert('beforeEnd',el,values,returnElement);},doInsert:function(where,el,values,returnEl){el=Ext.getDom(el);var newNode=Ext.DomHelper.insertHtml(where,el,this.applyTemplate(values));return returnEl?Ext.get(newNode,true):newNode;},overwrite:function(el,values,returnElement){el=Ext.getDom(el);el.innerHTML=this.applyTemplate(values);return returnElement?Ext.get(el.firstChild,true):el.firstChild;}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.DomHelper.Template=Ext.Template;Ext.Template.from=function(el){el=Ext.getDom(el);return new Ext.Template(el.value||el.innerHTML);};Ext.MasterTemplate=function(){Ext.MasterTemplate.superclass.constructor.apply(this,arguments);this.originalHtml=this.html;var st={};var m,re=this.subTemplateRe;re.lastIndex=0;var subIndex=0;while(m=re.exec(this.html)){var name=m[1],content=m[2];st[subIndex]={name:name,index:subIndex,buffer:[],tpl:new Ext.Template(content)};if(name){st[name]=st[subIndex];}
-st[subIndex].tpl.compile();st[subIndex].tpl.call=this.call.createDelegate(this);subIndex++;}
-this.subCount=subIndex;this.subs=st;};Ext.extend(Ext.MasterTemplate,Ext.Template,{subTemplateRe:/<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,add:function(name,values){if(arguments.length==1){values=arguments[0];name=0;}
-var s=this.subs[name];s.buffer[s.buffer.length]=s.tpl.apply(values);return this;},fill:function(name,values,reset){var a=arguments;if(a.length==1||(a.length==2&&typeof a[1]=="boolean")){values=a[0];name=0;reset=a[1];}
-if(reset){this.reset();}
-for(var i=0,len=values.length;i<len;i++){this.add(name,values[i]);}
-return this;},reset:function(){var s=this.subs;for(var i=0;i<this.subCount;i++){s[i].buffer=[];}
-return this;},applyTemplate:function(values){var s=this.subs;var replaceIndex=-1;this.html=this.originalHtml.replace(this.subTemplateRe,function(m,name){return s[++replaceIndex].buffer.join("");});return Ext.MasterTemplate.superclass.applyTemplate.call(this,values);},apply:function(){return this.applyTemplate.apply(this,arguments);},compile:function(){return this;}});Ext.MasterTemplate.prototype.addAll=Ext.MasterTemplate.prototype.fill;Ext.MasterTemplate.from=function(el){el=Ext.getDom(el);return new Ext.MasterTemplate(el.value||el.innerHTML);};
-
-Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={};var nonSpace=/\S/;var trimRe=/^\s+|\s+$/g;var tplRe=/\{(\d+)\}/g;var modeRe=/^(\s?[\/>]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n;}}
-n=n.nextSibling;}
-return null;};function next(n){while((n=n.nextSibling)&&n.nodeType!=1);return n;};function prev(n){while((n=n.previousSibling)&&n.nodeType!=1);return n;};function clean(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}
-n=nx;}
-return this;};function byClassName(c,a,v,re,cn){if(!v){return c;}
-var r=[];for(var i=0,ci;ci=c[i];i++){cn=ci.className;if(cn&&(' '+cn+' ').indexOf(v)!=-1){r[r.length]=ci;}}
-return r;};function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];}
-if(!n){return null;}
-if(attr=="for"){return n.htmlFor;}
-if(attr=="class"||attr=="className"){return n.className;}
-return n.getAttribute(attr)||n[attr];};function getNodes(ns,mode,tagName){var result=[],cs;if(!ns){return result;}
-mode=mode?mode.replace(trimRe,""):"";tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];}
-if(mode!="/"&&mode!=">"){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[result.length]=ci;}}}else{for(var i=0,ni;ni=ns[i];i++){var cn=ni.getElementsByTagName(tagName);for(var j=0,cj;cj=cn[j];j++){if(cj.parentNode==ni){result[result.length]=cj;}}}}
-return result;};function concat(a,b){if(b.slice){return a.concat(b);}
-for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i];}
-return a;}
-function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs];}
-if(!tagName){return cs;}
-var r=[];tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){r[r.length]=ci;}}
-return r;};function byId(cs,attr,id){if(cs.tagName||cs==document){cs=[cs];}
-if(!id){return cs;}
-var r=[];for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[r.length]=ci;return r;}}
-return r;};function byAttribute(cs,attr,value,op,custom){var r=[],st=custom=="{";var f=Ext.DomQuery.operators[op];for(var i=0;ci=cs[i];i++){var a;if(st){a=Ext.DomQuery.getStyle(ci,attr);}
-else if(attr=="class"||attr=="className"){a=ci.className;}else if(attr=="for"){a=ci.htmlFor;}else if(attr=="href"){a=ci.getAttribute("href",2);}else{a=ci.getAttribute(attr);}
-if((f&&f(a,value))||(!f&&a)){r[r.length]=ci;}}
-return r;};function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value);};var isIE=window.ActiveXObject?true:false;var key=30803;function nodupIEXml(cs){var d=++key;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c;}}
-for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup");}
-return r;}
-function nodup(cs){if(!cs){return[];}
-var len=cs.length,c,i,r=cs,cj;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs;}
-if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs);}
-var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d;}else{r=[];for(var j=0;j<i;j++){r[r.length]=cs[j];}
-for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[r.length]=cj;}}
-return r;}}
-return r;}
-function quickDiffIEXml(c1,c2){var d=++key;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d);}
-var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i];}}
-for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff");}
-return r;}
-function quickDiff(c1,c2){var len1=c1.length;if(!len1){return c2;}
-if(isIE&&c1[0].selectSingleNode){return quickDiffIEXml(c1,c2);}
-var d=++key;for(var i=0;i<len1;i++){c1[i]._qdiff=d;}
-var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i];}}
-return r;}
-function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id);}
-ns=getNodes(ns,mode,"*");return byId(ns,null,id);}
-return{getStyle:function(el,name){return Ext.fly(el).getStyle(name);},compile:function(path,type){type=type||"select";var fn=["var f = function(root){\n var mode; var n = root || document;\n"];var q=path,mode,lq;var tk=Ext.DomQuery.matchers;var tklen=tk.length;var mm;var lmode=q.match(modeRe);if(lmode&&lmode[1]){fn[fn.length]='mode="'+lmode[1]+'";';q=q.replace(lmode[1],"");}
-while(path.substr(0,1)=="/"){path=path.substr(1);}
-while(q&&lq!=q){lq=q;var tm=q.match(tagTokenRe);if(type=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");';}else{fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}else if(q.substr(0,1)!='@'){fn[fn.length]='n = getNodes(n, mode, "*");';}}else{if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");';}else{fn[fn.length]='n = byTag(n, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}}
-while(!(mm=q.match(modeRe))){var matched=false;for(var j=0;j<tklen;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i];});q=q.replace(m[0],"");matched=true;break;}}
-if(!matched){throw'Error parsing selector, parsing failed at "'+q+'"';}}
-if(mm[1]){fn[fn.length]='mode="'+mm[1]+'";';q=q.replace(mm[1],"");}}
-fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f;},select:function(path,root,type){if(!root||root==document){root=document;}
-if(typeof root=="string"){root=document.getElementById(root);}
-var paths=path.split(",");var results=[];for(var i=0,len=paths.length;i<len;i++){var p=paths[i].replace(trimRe,"");if(!cache[p]){cache[p]=Ext.DomQuery.compile(p);if(!cache[p]){throw p+" is not a valid selector";}}
-var result=cache[p](root);if(result&&result!=document){results=results.concat(result);}}
-return results;},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0];},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select");}
-var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return(v===null?defaultValue:v);},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);}
-var isArray=(el instanceof Array);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0);},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple");}
-var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result;},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return(a%v)==0;}},pseudos:{"first-child":function(c){var r=[],n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1);if(!n){r[r.length]=ci;}}
-return r;},"last-child":function(c){var r=[];for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(!n){r[r.length]=ci;}}
-return r;},"nth-child":function(c,a){var r=[];if(a!="odd"&&a!="even"){for(var i=0,ci;ci=c[i];i++){var m=child(ci.parentNode,a);if(m==ci){r[r.length]=m;}}
-return r;}
-var p;for(var i=0,l=c.length;i<l;i++){var cp=c[i].parentNode;if(cp!=p){clean(cp);p=cp;}}
-for(var i=0,ci;ci=c[i];i++){var m=false;if(a=="odd"){m=((ci.nodeIndex+1)%2==1);}else if(a=="even"){m=((ci.nodeIndex+1)%2==0);}
-if(m){r[r.length]=ci;}}
-return r;},"only-child":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[r.length]=ci;}}
-return r;},"empty":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break;}}
-if(empty){r[r.length]=ci;}}
-return r;},"contains":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.innerHTML.indexOf(v)!==-1){r[r.length]=ci;}}
-return r;},"nodeValue":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[r.length]=ci;}}
-return r;},"checked":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[r.length]=ci;}}
-return r;},"not":function(c,ss){return Ext.DomQuery.filter(c,ss,true);},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1]||[];},"first":function(c){return c[0]||[];},"last":function(c){return c[c.length-1]||[];},"has":function(c,ss){var s=Ext.DomQuery.select;var r=[];for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[r.length]=ci;}}
-return r;},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[r.length]=ci;}}
-return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[r.length]=ci;}}
-return r;}}};}();Ext.query=Ext.DomQuery.select;
-
-Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}};Ext.util.Observable.prototype={fireEvent:function(){var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}else{return true;}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(eventName,fn,scope,o){if(typeof eventName=="object"){o=eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;}
-if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else{this.addListener(e,o[e].fn,o[e].scope,o[e]);}}
-return;}
-o=(!o||typeof o=="boolean")?{}:o;eventName=eventName.toLowerCase();var ce=this.events[eventName]||true;if(typeof ce=="boolean"){ce=new Ext.util.Event(this,eventName);this.events[eventName]=ce;}
-ce.addListener(fn,scope,o);},removeListener:function(eventName,fn,scope){var ce=this.events[eventName.toLowerCase()];if(typeof ce=="object"){ce.removeListener(fn,scope);}},purgeListeners:function(){for(var evt in this.events){if(typeof this.events[evt]=="object"){this.events[evt].clearListeners();}}},relayEvents:function(o,events){var createHandler=function(ename){return function(){return this.fireEvent.apply(this,Ext.combine(ename,Array.prototype.slice.call(arguments,0)));};};for(var i=0,len=events.length;i<len;i++){var ename=events[i];if(!this.events[ename]){this.events[ename]=true;};o.on(ename,createHandler(ename),this);}},addEvents:function(o){if(!this.events){this.events={};}
-Ext.applyIf(this.events,o);},hasListener:function(eventName){var e=this.events[eventName];return typeof e=="object"&&e.listeners.length>0;}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){var o=options||{};scope=scope||this.obj;if(!this.isListening(fn,scope)){var l={fn:fn,scope:scope,options:o};var h=fn;if(o.delay){h=createDelayed(h,o,scope);}
-if(o.single){h=createSingle(h,this,fn,scope);}
-if(o.buffer){h=createBuffered(h,o,scope);}
-l.fireFn=h;if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},findListener:function(fn,scope){scope=scope||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==scope){return i;}}
-return-1;},isListening:function(fn,scope){return this.findListener(fn,scope)!=-1;},removeListener:function(fn,scope){var index;if((index=this.findListener(fn,scope))!=-1){if(!this.firing){this.listeners.splice(index,1);}else{this.listeners=this.listeners.slice(0);this.listeners.splice(index,1);}
-return true;}
-return false;},clearListeners:function(){this.listeners=[];},fire:function(){var ls=this.listeners,scope,len=ls.length;if(len>0){this.firing=true;var args=Array.prototype.slice.call(arguments,0);for(var i=0;i<len;i++){var l=ls[i];if(l.fireFn.apply(l.scope,arguments)===false){this.firing=false;return false;}}
-this.firing=false;}
-return true;}};})();
-
-Ext.EventManager=function(){var docReadyEvent,docReadyProcId,docReadyState=false;var resizeEvent,resizeTask,textEvent,textSize;var E=Ext.lib.Event;var D=Ext.lib.Dom;var fireDocReady=function(){if(!docReadyState){docReadyState=true;Ext.isReady=true;if(docReadyProcId){clearInterval(docReadyProcId);}
-if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",fireDocReady,false);}
-if(docReadyEvent){docReadyEvent.fire();docReadyEvent.clearListeners();}}};var initDocReady=function(){docReadyEvent=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",fireDocReady,false);}else if(Ext.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){fireDocReady();defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}};}else if(Ext.isSafari){docReadyProcId=setInterval(function(){var rs=document.readyState;if(rs=="complete"){fireDocReady();}},10);}
-E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn){return function(e){Ext.EventManager.removeListener(el,ename,fn);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
-var h=function(e){e=Ext.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else{t=e.target;}
-if(o.stopEvent===true){e.stopEvent();}
-if(o.preventDefault===true){e.preventDefault();}
-if(o.stopPropagation===true){e.stopPropagation();}
-if(o.normalized===false){e=e.browserEvent;}
-fn.call(scope||el,e,t,o);};if(o.delay){h=createDelayed(h,o);}
-if(o.single){h=createSingle(h,el,ename,fn);}
-if(o.buffer){h=createBuffered(h,o);}
-fn._handlers=fn._handlers||[];fn._handlers.push([Ext.id(el),ename,h]);E.on(el,ename,h);if(ename=="mousewheel"&&el.addEventListener){el.addEventListener("DOMMouseScroll",h,false);E.on(window,'unload',function(){el.removeEventListener("DOMMouseScroll",h,false);});}
-if(ename=="mousedown"&&el==document){Ext.EventManager.stoppedMouseDownEvent.addListener(h);}
-return h;};var stopListening=function(el,ename,fn){var id=Ext.id(el),hds=fn._handlers,hd=fn;if(hds){for(var i=0,len=hds.length;i<len;i++){var h=hds[i];if(h[0]==id&&h[1]==ename){hd=h[2];hds.splice(i,1);break;}}}
-E.un(el,ename,hd);el=Ext.getDom(el);if(ename=="mousewheel"&&el.addEventListener){el.removeEventListener("DOMMouseScroll",hd,false);}
-if(ename=="mousedown"&&el==document){Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);}};var propRe=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized)$/;var pub={wrap:function(fn,scope,override){return function(e){Ext.EventObject.setEvent(e);fn.call(override?scope||window:window,Ext.EventObject,scope);};},addListener:function(element,eventName,fn,scope,options){if(typeof eventName=="object"){var o=eventName;for(var e in o){if(propRe.test(e)){continue;}
-if(typeof o[e]=="function"){listen(element,e,o,o[e],o.scope);}else{listen(element,e,o[e]);}}
-return;}
-return listen(element,eventName,options,fn,scope);},removeListener:function(element,eventName,fn){return stopListening(element,eventName,fn);},onDocumentReady:function(fn,scope,options){if(docReadyState){fn.call(scope||window,scope);return;}
-if(!docReadyEvent){initDocReady();}
-docReadyEvent.addListener(fn,scope,options);},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",function(){if(Ext.isIE){resizeTask.delay(50);}else{resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}});}
-resizeEvent.addListener(fn,scope,options);},onTextResize:function(fn,scope,options){if(!textEvent){textEvent=new Ext.util.Event();var textEl=new Ext.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);textSize=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=textSize){textEvent.fire(textSize,textSize=textEl.dom.offsetHeight);}},this.textResizeInterval);}
-textEvent.addListener(fn,scope,options);},removeResizeListener:function(fn,scope){if(resizeEvent){resizeEvent.removeListener(fn,scope);}},fireResize:function(){if(resizeEvent){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};pub.on=pub.addListener;pub.un=pub.removeListener;pub.stoppedMouseDownEvent=new Ext.util.Event();return pub;}();Ext.onReady=Ext.EventManager.onDocumentReady;Ext.onReady(function(){var bd=Ext.get(document.body);if(!bd){return;}
-var cls=Ext.isIE?"ext-ie":Ext.isGecko?"ext-gecko":Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":"";if(Ext.isBorderBox){cls+=' ext-border-box';}
-if(Ext.isStrict){cls+=' ext-strict';}
-bd.addClass(cls);});Ext.EventObject=function(){var E=Ext.lib.Event;var safariKeys={63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var btnMap=Ext.isIE?{1:0,4:1,2:2}:(Ext.isSafari?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(e){if(e){this.setEvent(e.browserEvent||e);}};Ext.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,RETURN:13,ENTER:13,SHIFT:16,CONTROL:17,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46,F5:116,setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;}
-this.browserEvent=e;if(e){this.button=e.button?btnMap[e.button]:(e.which?e.which-1:-1);if(e.type=='click'&&this.button==-1){this.button=0;}
-this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else{this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];}
-return this;},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Ext.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopEvent(this.browserEvent);}},preventDefault:function(){if(this.browserEvent){E.preventDefault(this.browserEvent);}},isNavKeyPress:function(){var k=this.keyCode;k=Ext.isSafari?(safariKeys[k]||k):k;return(k>=33&&k<=40)||k==this.RETURN||k==this.TAB||k==this.ESC;},isSpecialKey:function(){var k=this.keyCode;return k==9||k==13||k==40||k==27||(k==16)||(k==17)||(k>=18&&k<=20)||(k>=33&&k<=35)||(k>=36&&k<=39)||(k>=44&&k<=45);},stopPropagation:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Ext.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopPropagation(this.browserEvent);}},getCharCode:function(){return this.charCode||this.keyCode;},getKey:function(){var k=this.keyCode||this.charCode;return Ext.isSafari?(safariKeys[k]||k):k;},getPageX:function(){return this.xy[0];},getPageY:function(){return this.xy[1];},getTime:function(){if(this.browserEvent){return E.getTime(this.browserEvent);}
-return null;},getXY:function(){return this.xy;},getTarget:function(selector,maxDepth,returnEl){return selector?Ext.fly(this.target).findParent(selector,maxDepth,returnEl):this.target;},getRelatedTarget:function(){if(this.browserEvent){return E.getRelatedTarget(this.browserEvent);}
-return null;},getWheelDelta:function(){var e=this.browserEvent;var delta=0;if(e.wheelDelta){delta=e.wheelDelta/120;if(window.opera)delta=-delta;}else if(e.detail){delta=-e.detail/3;}
-return delta;},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)?true:false;},within:function(el,related){var t=this[related?"getRelatedTarget":"getTarget"]();return t&&Ext.fly(el).contains(t);},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1]);}};return new Ext.EventObjectImpl();}();
-
-(function(){var D=Ext.lib.Dom;var E=Ext.lib.Event;var A=Ext.lib.Anim;var propCache={};var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase();};var view=document.defaultView;Ext.Element=function(element,forceNew){var dom=typeof element=="string"?document.getElementById(element):element;if(!dom){return null;}
-if(!forceNew&&Ext.Element.cache[dom.id]){return Ext.Element.cache[dom.id];}
-this.dom=dom;this.id=dom.id||Ext.id(dom);};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode){this.visibilityMode=visMode;return this;},enableDisplayMode:function(display){this.setVisibilityMode(El.DISPLAY);if(typeof display!="undefined")this.originalDisplay=display;return this;},findParent:function(simpleSelector,maxDepth,returnEl){var p=this.dom,b=document.body,depth=0,dq=Ext.DomQuery,stopEl;maxDepth=maxDepth||50;if(typeof maxDepth!="number"){stopEl=Ext.getDom(maxDepth);maxDepth=10;}
-while(p&&p.nodeType==1&&depth<maxDepth&&p!=b&&p!=stopEl){if(dq.is(p,simpleSelector)){return returnEl?Ext.get(p):p;}
-depth++;p=p.parentNode;}
-return null;},findParentNode:function(simpleSelector,maxDepth,returnEl){var p=Ext.fly(this.dom.parentNode,'_internal');return p?p.findParent(simpleSelector,maxDepth,returnEl):null;},up:function(simpleSelector,maxDepth){return this.findParentNode(simpleSelector,maxDepth,true);},is:function(simpleSelector){return Ext.DomQuery.is(this.dom,simpleSelector);},animate:function(args,duration,onComplete,easing,animType){this.anim(args,{duration:duration,callback:onComplete,easing:easing},animType);return this;},anim:function(args,opt,animType,defaultDur,defaultEase,cb){animType=animType||'run';opt=opt||{};var anim=Ext.lib.Anim[animType](this.dom,args,(opt.duration||defaultDur)||.35,(opt.easing||defaultEase)||'easeOut',function(){Ext.callback(cb,this);Ext.callback(opt.callback,opt.scope||this,[this,opt]);},this);opt.anim=anim;return anim;},preanim:function(a,i){return!a[i]?false:(typeof a[i]=="object"?a[i]:{duration:a[i+1],callback:a[i+2],easing:a[i+3]});},clean:function(forceReclean){if(this.isCleaned&&forceReclean!==true){return this;}
-var ns=/\S/;var d=this.dom,n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!ns.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}
-n=nx;}
-this.isCleaned=true;return this;},calcOffsetsTo:function(el){el=Ext.get(el);var d=el.dom;var restorePos=false;if(el.getStyle('position')=='static'){el.position('relative');restorePos=true;}
-var x=0,y=0;var op=this.dom;while(op&&op!=d&&op.tagName!='HTML'){x+=op.offsetLeft;y+=op.offsetTop;op=op.offsetParent;}
-if(restorePos){el.position('static');}
-return[x,y];},scrollIntoView:function(container,hscroll){var c=Ext.getDom(container)||document.body;var el=this.dom;var o=this.calcOffsetsTo(c),l=o[0],t=o[1],b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(t<ct){c.scrollTop=t;}else if(b>cb){c.scrollTop=b-ch;}
-if(hscroll!==false){if(l<cl){c.scrollLeft=l;}else if(r>cr){c.scrollLeft=r-c.clientWidth;}}
-return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},autoHeight:function(animate,duration,onComplete,easing){var oldHeight=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var height=parseInt(this.dom.scrollHeight,10);if(!animate){this.setHeight(height);this.unclip();if(typeof onComplete=="function"){onComplete();}}else{this.setHeight(oldHeight);this.setHeight(height,animate,duration,function(){this.unclip();if(typeof onComplete=="function")onComplete();}.createDelegate(this),easing);}}.createDelegate(this),0);return this;},contains:function(el){if(!el){return false;}
-return D.isAncestor(this.dom,el.dom?el.dom:el);},isVisible:function(deep){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==true||!vis){return vis;}
-var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Ext.fly(p,'_isVisible').isVisible()){return false;}
-p=p.parentNode;}
-return true;},select:function(selector,unique){return El.select(selector,unique,this.dom);},query:function(selector,unique){return Ext.DomQuery.select(selector,this.dom);},child:function(selector,returnDom){var n=Ext.DomQuery.selectNode(selector,this.dom);return returnDom?n:Ext.get(n);},down:function(selector,returnDom){var n=Ext.DomQuery.selectNode(" > "+selector,this.dom);return returnDom?n:Ext.get(n);},initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},setVisible:function(visible,animate){if(!animate||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(visible);}else{this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden";}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(.01);this.setVisible(true);}
-this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,.35,'easeIn',function(){if(!visible){if(visMode==El.DISPLAY){dom.style.display="none";}else{dom.style.visibility="hidden";}
-Ext.get(dom).setOpacity(1);}});}
-return this;},isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(animate){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this;},setDisplayed:function(value){if(typeof value=="boolean"){value=value?this.originalDisplay:"none";}
-this.setStyle("display",value);return this;},focus:function(){try{this.dom.focus();}catch(e){}
-return this;},blur:function(){try{this.dom.blur();}catch(e){}
-return this;},addClass:function(className){if(className instanceof Array){for(var i=0,len=className.length;i<len;i++){this.addClass(className[i]);}}else{if(className&&!this.hasClass(className)){this.dom.className=this.dom.className+" "+className;}}
-return this;},radioClass:function(className){var siblings=this.dom.parentNode.childNodes;for(var i=0;i<siblings.length;i++){var s=siblings[i];if(s.nodeType==1){Ext.get(s).removeClass(className);}}
-this.addClass(className);return this;},removeClass:function(className){if(!className||!this.dom.className){return this;}
-if(className instanceof Array){for(var i=0,len=className.length;i<len;i++){this.removeClass(className[i]);}}else{if(this.hasClass(className)){var re=this.classReCache[className];if(!re){re=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)',"g");this.classReCache[className]=re;}
-this.dom.className=this.dom.className.replace(re," ");}}
-return this;},classReCache:{},toggleClass:function(className){if(this.hasClass(className)){this.removeClass(className);}else{this.addClass(className);}
-return this;},hasClass:function(className){return className&&(' '+this.dom.className+' ').indexOf(' '+className+' ')!=-1;},replaceClass:function(oldClassName,newClassName){this.removeClass(oldClassName);this.addClass(newClassName);return this;},getStyles:function(){var a=arguments,len=a.length,r={};for(var i=0;i<len;i++){r[a[i]]=this.getStyle(a[i]);}
-return r;},getStyle:function(){return view&&view.getComputedStyle?function(prop){var el=this.dom,v,cs,camel;if(prop=='float'){prop="cssFloat";}
-if(v=el.style[prop]){return v;}
-if(cs=view.getComputedStyle(el,"")){if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn);}
-return cs[camel];}
-return null;}:function(prop){var el=this.dom,v,cs,camel;if(prop=='opacity'){if(typeof el.filter=='string'){var fv=parseFloat(el.filter.match(/alpha\(opacity=(.*)\)/i)[1]);if(!isNaN(fv)){return fv?fv/100:0;}}
-return 1;}else if(prop=='float'){prop="styleFloat";}
-if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn);}
-if(v=el.style[camel]){return v;}
-if(cs=el.currentStyle){return cs[camel];}
-return null;};}(),setStyle:function(prop,value){if(typeof prop=="string"){var camel;if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn);}
-if(camel=='opacity'){this.setOpacity(value);}else{this.dom.style[camel]=value;}}else{for(var style in prop){if(typeof prop[style]!="function"){this.setStyle(style,prop[style]);}}}
-return this;},applyStyles:function(style){Ext.DomHelper.applyStyles(this.dom,style);return this;},getX:function(){return D.getX(this.dom);},getY:function(){return D.getY(this.dom);},getXY:function(){return D.getXY(this.dom);},setX:function(x,animate){if(!animate||!A){D.setX(this.dom,x);}else{this.setXY([x,this.getY()],this.preanim(arguments,1));}
-return this;},setY:function(y,animate){if(!animate||!A){D.setY(this.dom,y);}else{this.setXY([this.getX(),y],this.preanim(arguments,1));}
-return this;},setLeft:function(left){this.setStyle("left",this.addUnits(left));return this;},setTop:function(top){this.setStyle("top",this.addUnits(top));return this;},setRight:function(right){this.setStyle("right",this.addUnits(right));return this;},setBottom:function(bottom){this.setStyle("bottom",this.addUnits(bottom));return this;},setXY:function(pos,animate){if(!animate||!A){D.setXY(this.dom,pos);}else{this.anim({points:{to:pos}},this.preanim(arguments,1),'motion');}
-return this;},setLocation:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(contentHeight){var h=this.dom.offsetHeight||0;return contentHeight!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");},getWidth:function(contentWidth){var w=this.dom.offsetWidth||0;return contentWidth!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}
-return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}
-return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getViewSize:function(){var d=this.dom,doc=document,aw=0,ah=0;if(d==doc||d==doc.body){return{width:D.getViewWidth(),height:D.getViewHeight()};}else{return{width:d.clientWidth,height:d.clientHeight};}},getValue:function(asNumber){return asNumber?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(width){if(typeof width=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){width-=(this.getBorderWidth("lr")+this.getPadding("lr"));}
-if(width<0){width=0;}}
-return width;},adjustHeight:function(height){if(typeof height=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){height-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
-if(height<0){height=0;}}
-return height;},setWidth:function(width,animate){width=this.adjustWidth(width);if(!animate||!A){this.dom.style.width=this.addUnits(width);}else{this.anim({width:{to:width}},this.preanim(arguments,1));}
-return this;},setHeight:function(height,animate){height=this.adjustHeight(height);if(!animate||!A){this.dom.style.height=this.addUnits(height);}else{this.anim({height:{to:height}},this.preanim(arguments,1));}
-return this;},setSize:function(width,height,animate){if(typeof width=="object"){height=width.height;width=width.width;}
-width=this.adjustWidth(width);height=this.adjustHeight(height);if(!animate||!A){this.dom.style.width=this.addUnits(width);this.dom.style.height=this.addUnits(height);}else{this.anim({width:{to:width},height:{to:height}},this.preanim(arguments,2));}
-return this;},setBounds:function(x,y,width,height,animate){if(!animate||!A){this.setSize(width,height);this.setLocation(x,y);}else{width=this.adjustWidth(width);height=this.adjustHeight(height);this.anim({points:{to:[x,y]},width:{to:width},height:{to:height}},this.preanim(arguments,4),'motion');}
-return this;},setRegion:function(region,animate){this.setBounds(region.left,region.top,region.right-region.left,region.bottom-region.top,this.preanim(arguments,1));return this;},addListener:function(eventName,fn,scope,options){Ext.EventManager.on(this.dom,eventName,fn,scope||this,options);},removeListener:function(eventName,fn){Ext.EventManager.removeListener(this.dom,eventName,fn);return this;},removeAllListeners:function(){E.purgeElement(this.dom);return this;},relayEvent:function(eventName,observable){this.on(eventName,function(e){observable.fireEvent(eventName,e);});},setOpacity:function(opacity,animate){if(!animate||!A){var s=this.dom.style;if(Ext.isIE){s.zoom=1;s.filter=(s.filter||'').replace(/alpha\([^\)]*\)/gi,"")+
-(opacity==1?"":"alpha(opacity="+opacity*100+")");}else{s.opacity=opacity;}}else{this.anim({opacity:{to:opacity}},this.preanim(arguments,1),null,.35,'easeIn');}
-return this;},getLeft:function(local){if(!local){return this.getX();}else{return parseInt(this.getStyle("left"),10)||0;}},getRight:function(local){if(!local){return this.getX()+this.getWidth();}else{return(this.getLeft(true)+this.getWidth())||0;}},getTop:function(local){if(!local){return this.getY();}else{return parseInt(this.getStyle("top"),10)||0;}},getBottom:function(local){if(!local){return this.getY()+this.getHeight();}else{return(this.getTop(true)+this.getHeight())||0;}},position:function(pos,zIndex,x,y){if(!pos){if(this.getStyle('position')=='static'){this.setStyle('position','relative');}}else{this.setStyle("position",pos);}
-if(zIndex){this.setStyle("z-index",zIndex);}
-if(x!==undefined&&y!==undefined){this.setXY([x,y]);}else if(x!==undefined){this.setX(x);}else if(y!==undefined){this.setY(y);}},clearPositioning:function(value){value=value||'';this.setStyle({"left":value,"right":value,"top":value,"bottom":value,"z-index":"","position":"static"});return this;},getPositioning:function(){var l=this.getStyle("left");var t=this.getStyle("top");return{"position":this.getStyle("position"),"left":l,"right":l?"":this.getStyle("right"),"top":t,"bottom":t?"":this.getStyle("bottom"),"z-index":this.getStyle("z-index")};},getBorderWidth:function(side){return this.addStyles(side,El.borders);},getPadding:function(side){return this.addStyles(side,El.paddings);},setPositioning:function(pc){this.applyStyles(pc);if(pc.right=="auto"){this.dom.style.right="";}
-if(pc.bottom=="auto"){this.dom.style.bottom="";}
-return this;},fixDisplay:function(){if(this.getStyle("display")=="none"){this.setStyle("visibility","hidden");this.setStyle("display",this.originalDisplay);if(this.getStyle("display")=="none"){this.setStyle("display","block");}}},setLeftTop:function(left,top){this.dom.style.left=this.addUnits(left);this.dom.style.top=this.addUnits(top);return this;},move:function(direction,distance,animate){var xy=this.getXY();direction=direction.toLowerCase();switch(direction){case"l":case"left":this.moveTo(xy[0]-distance,xy[1],this.preanim(arguments,2));break;case"r":case"right":this.moveTo(xy[0]+distance,xy[1],this.preanim(arguments,2));break;case"t":case"top":case"up":this.moveTo(xy[0],xy[1]-distance,this.preanim(arguments,2));break;case"b":case"bottom":case"down":this.moveTo(xy[0],xy[1]+distance,this.preanim(arguments,2));break;}
-return this;},clip:function(){if(!this.isClipped){this.isClipped=true;this.originalClip={"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};this.setStyle("overflow","hidden");this.setStyle("overflow-x","hidden");this.setStyle("overflow-y","hidden");}
-return this;},unclip:function(){if(this.isClipped){this.isClipped=false;var o=this.originalClip;if(o.o){this.setStyle("overflow",o.o);}
-if(o.x){this.setStyle("overflow-x",o.x);}
-if(o.y){this.setStyle("overflow-y",o.y);}}
-return this;},getAnchorXY:function(anchor,local,s){var w,h,vp=false;if(!s){var d=this.dom;if(d==document.body||d==document){vp=true;w=D.getViewWidth();h=D.getViewHeight();}else{w=this.getWidth();h=this.getHeight();}}else{w=s.width;h=s.height;}
-var x=0,y=0,r=Math.round;switch((anchor||"tl").toLowerCase()){case"c":x=r(w*.5);y=r(h*.5);break;case"t":x=r(w*.5);y=0;break;case"l":x=0;y=r(h*.5);break;case"r":x=w;y=r(h*.5);break;case"b":x=r(w*.5);y=h;break;case"tl":x=0;y=0;break;case"bl":x=0;y=h;break;case"br":x=w;y=h;break;case"tr":x=w;y=0;break;}
-if(local===true){return[x,y];}
-if(vp){var sc=this.getScroll();return[x+sc.left,y+sc.top];}
-var o=this.getXY();return[x+o[0],y+o[1]];},getAlignToXY:function(el,p,o){el=Ext.get(el);var d=this.dom;if(!el.dom){throw"Element.alignTo with an element that doesn't exist";}
-var c=false;var p1="",p2="";o=o||[0,0];if(!p){p="tl-bl";}else if(p=="?"){p="tl-bl?";}else if(p.indexOf("-")==-1){p="tl-"+p;}
-p=p.toLowerCase();var m=p.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!m){throw"Element.alignTo with an invalid alignment "+p;}
-p1=m[1];p2=m[2];c=!!m[3];var a1=this.getAnchorXY(p1,true);var a2=el.getAnchorXY(p2,false);var x=a2[0]-a1[0]+o[0];var y=a2[1]-a1[1]+o[1];if(c){var w=this.getWidth(),h=this.getHeight(),r=el.getRegion();var dw=D.getViewWidth()-5,dh=D.getViewHeight()-5;var p1y=p1.charAt(0),p1x=p1.charAt(p1.length-1);var p2y=p2.charAt(0),p2x=p2.charAt(p2.length-1);var swapY=((p1y=="t"&&p2y=="b")||(p1y=="b"&&p2y=="t"));var swapX=((p1x=="r"&&p2x=="l")||(p1x=="l"&&p2x=="r"));var doc=document;var scrollX=(doc.documentElement.scrollLeft||doc.body.scrollLeft||0)+5;var scrollY=(doc.documentElement.scrollTop||doc.body.scrollTop||0)+5;if((x+w)>dw+scrollX){x=swapX?r.left-w:dw+scrollX-w;}
-if(x<scrollX){x=swapX?r.right:scrollX;}
-if((y+h)>dh+scrollY){y=swapY?r.top-h:dh+scrollY-h;}
-if(y<scrollY){y=swapY?r.bottom:scrollY;}}
-return[x,y];},getConstrainToXY:function(){var os={top:0,left:0,bottom:0,right:0};return function(el,local,offsets){el=Ext.get(el);offsets=offsets?Ext.applyIf(offsets,os):os;var vw,vh,vx=0,vy=0;if(el.dom==document.body||el.dom==document){vw=Ext.lib.Dom.getViewWidth();vh=Ext.lib.Dom.getViewHeight();}else{vw=el.dom.clientWidth;vh=el.dom.clientHeight;if(!local){var vxy=el.getXY();vx=vxy[0];vy=vxy[1];}}
-var s=el.getScroll();vx+=offsets.left+s.left;vy+=offsets.top+s.top;vw-=offsets.right;vh-=offsets.bottom;var vr=vx+vw;var vb=vy+vh;var xy=!local?this.getXY():[this.getLeft(true),this.getTop(true)];var x=xy[0],y=xy[1];var w=this.dom.offsetWidth,h=this.dom.offsetHeight;var moved=false;if((x+w)>vr){x=vr-w;moved=true;}
-if((y+h)>vb){y=vb-h;moved=true;}
-if(x<vx){x=vx;moved=true;}
-if(y<vy){y=vy;moved=true;}
-return moved?[x,y]:false;};}(),alignTo:function(element,position,offsets,animate){var xy=this.getAlignToXY(element,position,offsets);this.setXY(xy,this.preanim(arguments,3));return this;},anchorTo:function(el,alignment,offsets,animate,monitorScroll,callback){var action=function(){this.alignTo(el,alignment,offsets,animate);Ext.callback(callback,this);};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',action,this,{buffer:tm=='number'?monitorScroll:50});}
-action.call(this);return this;},clearOpacity:function(){if(window.ActiveXObject){if(typeof this.dom.style.filter=='string'&&(/alpha/i).test(this.dom.style.filter)){this.dom.style.filter="";}}else{this.dom.style.opacity="";this.dom.style["-moz-opacity"]="";this.dom.style["-khtml-opacity"]="";}
-return this;},hide:function(animate){this.setVisible(false,this.preanim(arguments,0));return this;},show:function(animate){this.setVisible(true,this.preanim(arguments,0));return this;},addUnits:function(size){return Ext.Element.addUnits(size,this.defaultUnit);},beginMeasure:function(){var el=this.dom;if(el.offsetWidth||el.offsetHeight){return this;}
-var changed=[];var p=this.dom,b=document.body;while((!el.offsetWidth&&!el.offsetHeight)&&p&&p.tagName&&p!=b){var pe=Ext.get(p);if(pe.getStyle('display')=='none'){changed.push({el:p,visibility:pe.getStyle("visibility")});p.style.visibility="hidden";p.style.display="block";}
-p=p.parentNode;}
-this._measureChanged=changed;return this;},endMeasure:function(){var changed=this._measureChanged;if(changed){for(var i=0,len=changed.length;i<len;i++){var r=changed[i];r.el.style.visibility=r.visibility;r.el.style.display="none";}
-this._measureChanged=null;}
-return this;},update:function(html,loadScripts,callback){if(typeof html=="undefined"){html="";}
-if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback();}
-return this;}
-var id=Ext.id();var dom=this.dom;html+='<span id="'+id+'"></span>';E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var srcRe=/\ssrc=([\'\"])(.*?)\1/i;var typeRe=/\stype=([\'\"])(.*?)\1/i;var match;while(match=re.exec(html)){var attrs=match[1];var srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2];}
-hd.appendChild(s);}else if(match[2]&&match[2].length>0){eval(match[2]);}}
-var el=document.getElementById(id);if(el){el.parentNode.removeChild(el);}
-if(typeof callback=="function"){callback();}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdateManager();um.update.apply(um,arguments);return this;},getUpdateManager:function(){if(!this.updateManager){this.updateManager=new Ext.UpdateManager(this);}
-return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(centerIn){this.alignTo(centerIn||document,'c-c');return this;},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY();}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top];}
-var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
-this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint");},1);return this;},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else{return this.addStyles(side,El.margins);}},addStyles:function(sides,styles){var val=0;for(var i=0,len=sides.length;i<len;i++){var w=parseInt(this.getStyle(styles[sides.charAt(i)]),10);if(!isNaN(w))val+=w;}
-return val;},createProxy:function(config,renderTo,matchBox){if(renderTo){renderTo=Ext.getDom(renderTo);}else{renderTo=document.body;}
-config=typeof config=="object"?config:{tag:"div",cls:config};var proxy=Ext.DomHelper.append(renderTo,config,true);if(matchBox){proxy.setBox(this.getBox());}
-return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}
-if(!this._mask){this._mask=Ext.DomHelper.append(this.dom,{tag:"div",cls:"ext-el-mask"},true);}
-this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=='string'){if(!this._maskMsg){this._maskMsg=Ext.DomHelper.append(this.dom,{tag:"div",cls:"ext-el-mask-msg",cn:{tag:'div'}},true);}
-var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);}
-return this._mask;},unmask:function(removeEl){if(this._mask){if(removeEl===true){this._mask.remove();delete this._mask;if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}}else{this._mask.setDisplayed(false);if(this._maskMsg){this._maskMsg.setDisplayed(false);}}}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='no';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
-var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim;},remove:function(){if(this.dom.parentNode){this.dom.parentNode.removeChild(this.dom);}
-delete El.cache[this.dom.id];},addClassOnOver:function(className,preventFlicker){this.on("mouseover",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);var removeFn=function(e){if(preventFlicker!==true||!e.within(this,true)){Ext.fly(this,'_internal').removeClass(className);}};this.on("mouseout",removeFn,this.dom);return this;},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.get(document);var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault();}};if(eventName instanceof Array){for(var i=0,len=eventName.length;i<len;i++){this.on(eventName[i],fn);}
-return this;}
-this.on(eventName,fn);return this;},fitToParent:function(monitorResize,targetParent){var p=Ext.get(targetParent||this.dom.parentNode);this.setSize(p.getComputedWidth()-p.getFrameWidth('lr'),p.getComputedHeight()-p.getFrameWidth('tb'));if(monitorResize===true){Ext.EventManager.onWindowResize(this.fitToParent.createDelegate(this,[]));}
-return this;},getNextSibling:function(){var n=this.dom.nextSibling;while(n&&n.nodeType!=1){n=n.nextSibling;}
-return n;},getPrevSibling:function(){var n=this.dom.previousSibling;while(n&&n.nodeType!=1){n=n.previousSibling;}
-return n;},appendChild:function(el){el=Ext.get(el);el.appendTo(this);return this;},createChild:function(config,insertBefore,returnDom){config=config||{tag:'div'};if(insertBefore){return Ext.DomHelper.insertBefore(insertBefore,config,returnDom!==true);}
-return Ext.DomHelper[!this.dom.firstChild?'overwrite':'append'](this.dom,config,returnDom!==true);},appendTo:function(el){el=Ext.getDom(el);el.appendChild(this.dom);return this;},insertBefore:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el);return this;},insertAfter:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el.nextSibling);return this;},insertFirst:function(el,returnDom){el=el||{};if(typeof el=='object'&&!el.nodeType){return this.createChild(el,this.dom.firstChild,returnDom);}else{el=Ext.getDom(el);this.dom.insertBefore(el,this.dom.firstChild);return!returnDom?Ext.get(el):el;}},insertSibling:function(el,where,returnDom){where=where?where.toLowerCase():'before';el=el||{};var rt,refNode=where=='before'?this.dom:this.dom.nextSibling;if(typeof el=='object'&&!el.nodeType){if(where=='after'&&!this.dom.nextSibling){rt=Ext.DomHelper.append(this.dom.parentNode,el,!returnDom);}else{rt=Ext.DomHelper[where=='after'?'insertAfter':'insertBefore'](this.dom,el,!returnDom);}}else{rt=this.dom.parentNode.insertBefore(Ext.getDom(el),where=='before'?this.dom:this.dom.nextSibling);if(!returnDom){rt=Ext.get(rt);}}
-return rt;},wrap:function(config,returnDom){if(!config){config={tag:"div"};}
-var newEl=Ext.DomHelper.insertBefore(this.dom,config,!returnDom);newEl.dom?newEl.dom.appendChild(this.dom):newEl.appendChild(this.dom);return newEl;},replace:function(el){el=Ext.get(el);this.insertBefore(el);el.remove();return this;},insertHtml:function(where,html,returnEl){var el=Ext.DomHelper.insertHtml(where,this.dom,html);return returnEl?Ext.get(el):el;},set:function(o,useSet){var el=this.dom;useSet=typeof useSet=='undefined'?(el.setAttribute?true:false):useSet;for(var attr in o){if(attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"){el.className=o["cls"];}else{if(useSet)el.setAttribute(attr,o[attr]);else el[attr]=o[attr];}}
-Ext.DomHelper.applyStyles(el,o.style);return this;},addKeyListener:function(key,fn,scope){var config;if(typeof key!="object"||key instanceof Array){config={key:key,fn:fn,scope:scope};}else{config={key:key.key,shift:key.shift,ctrl:key.ctrl,alt:key.alt,fn:fn,scope:scope};}
-return new Ext.KeyMap(this,config);},addKeyMap:function(config){return new Ext.KeyMap(this,config);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}
-return this;},scroll:function(direction,distance,animate){if(!this.isScrollable()){return;}
-var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true;}
-break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true;}
-break;case"t":case"top":case"up":if(t>0){var v=Math.max(t-distance,0);this.scrollTo("top",v,a);scrolled=true;}
-break;case"b":case"bottom":case"down":if(h-t>ch){var v=Math.min(t+distance,h-ch);this.scrollTo("top",v,a);scrolled=true;}
-break;}
-return scrolled;},translatePoints:function(x,y){if(typeof x=='object'||x instanceof Array){y=x[1];x=x[0];}
-var p=this.getStyle('position');var o=this.getXY();var l=parseInt(this.getStyle('left'),10);var t=parseInt(this.getStyle('top'),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft;}
-if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop;}
-return{left:(x-o[0]+l),top:(y-o[1]+t)};},getScroll:function(){var d=this.dom,doc=document;if(d==doc||d==doc.body){var l=window.pageXOffset||doc.documentElement.scrollLeft||doc.body.scrollLeft||0;var t=window.pageYOffset||doc.documentElement.scrollTop||doc.body.scrollTop||0;return{left:l,top:t};}else{return{left:d.scrollLeft,top:d.scrollTop};}},getColor:function(attr,defaultValue,prefix){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return defaultValue;}
-var color=typeof prefix=="undefined"?"#":prefix;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]).toString(16);if(h<16){h="0"+h;}
-color+=h;}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);color+=c+c;}}else if(v.length==7){color+=v.substr(1);}}}
-return(color.length>5?color.toLowerCase():defaultValue);},boxWrap:function(cls){cls=cls||'x-box';var el=Ext.get(this.insertHtml('beforeBegin',String.format('<div class="{0}">'+El.boxMarkup+'</div>',cls)));el.child('.'+cls+'-mc').dom.appendChild(this.dom);return el;},getAttributeNS:Ext.isIE?function(ns,name){var d=this.dom;var type=typeof d[ns+":"+name];if(type!='undefined'&&type!='unknown'){return d[ns+":"+name];}
-return d[name];}:function(ns,name){var d=this.dom;return d.getAttributeNS(ns,name)||d.getAttribute(ns+":"+name)||d.getAttribute(name)||d[name];}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.un=ep.removeListener;ep.autoBoxAdjust=true;ep.autoDisplayMode=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,defaultUnit){if(v===""||v=="auto"){return v;}
-if(v===undefined){return'';}
-if(typeof v=="number"||!El.unitPattern.test(v)){return v+(defaultUnit||'px');}
-return v;};El.boxMarkup='<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var docEl;El.get=function(el){var ex,elm,id;if(!el){return null;}
-if(typeof el=="string"){if(!(elm=document.getElementById(el))){return null;}
-if(ex=El.cache[el]){ex.dom=elm;}else{ex=El.cache[el]=new El(elm);}
-return ex;}else if(el.tagName){if(!(id=el.id)){id=Ext.id(el);}
-if(ex=El.cache[id]){ex.dom=el;}else{ex=El.cache[id]=new El(el);}
-return ex;}else if(el instanceof El){if(el!=docEl){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el;}
-return el;}else if(el.isComposite){return el;}else if(el instanceof Array){return El.select(el);}else if(el==document){if(!docEl){var f=function(){};f.prototype=El.prototype;docEl=new f();docEl.dom=document;}
-return docEl;}
-return null;};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i]){delete El.cache[a[i].id||a[i]];}}};El.garbageCollect=function(){if(!Ext.enableGarbageCollector){clearInterval(El.collectorThread);return;}
-for(var eid in El.cache){var el=El.cache[eid],d=el.dom;if(!d||!d.parentNode||(!d.offsetParent&&!document.getElementById(eid))){delete El.cache[eid];if(Ext.enableListenerCollection){Ext.lib.Dom.purgeElement(d);}}}}
-El.collectorThreadId=setInterval(El.garbageCollect,30000);El.Flyweight=function(dom){this.dom=dom;};El.Flyweight.prototype=El.prototype;El._flyweights={};El.fly=function(el,named){named=named||'_global';el=Ext.getDom(el);if(!el){return null;}
-if(!El._flyweights[named]){El._flyweights[named]=new El.Flyweight();}
-El._flyweights[named].dom=el;return El._flyweights[named];};Ext.get=El.get;Ext.fly=El.fly;var noBoxAdjust=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){noBoxAdjust['button']=1;}
-Ext.EventManager.on(window,'unload',function(){delete El.cache;delete El._flyweights;});})();
-
-Ext.enableFx=true;Ext.Fx={slideIn:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"t";this.fixDisplay();var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var wrap=this.fxWrap(r.pos,o,"hidden");var st=this.dom.style;st.visibility="visible";st.position="absolute";var after=function(){el.fxUnwrap(wrap,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,pt={to:[b.x,b.y]},bw={to:b.width},bh={to:b.height};switch(anchor.toLowerCase()){case"t":wrap.setSize(b.width,0);st.left=st.bottom="0";a={height:bh};break;case"l":wrap.setSize(0,b.height);st.right=st.top="0";a={width:bw};break;case"r":wrap.setSize(0,b.height);wrap.setX(b.right);st.left=st.top="0";a={width:bw,points:pt};break;case"b":wrap.setSize(b.width,0);wrap.setY(b.bottom);st.left=st.top="0";a={height:bh,points:pt};break;case"tl":wrap.setSize(0,0);st.right=st.bottom="0";a={width:bw,height:bh};break;case"bl":wrap.setSize(0,0);wrap.setY(b.y+b.height);st.right=st.top="0";a={width:bw,height:bh,points:pt};break;case"br":wrap.setSize(0,0);wrap.setXY([b.right,b.bottom]);st.left=st.top="0";a={width:bw,height:bh,points:pt};break;case"tr":wrap.setSize(0,0);wrap.setX(b.x+b.width);st.left=st.bottom="0";a={width:bw,height:bh,points:pt};break;}
-this.dom.style.visibility="visible";wrap.show();arguments.callee.anim=wrap.fxanim(a,o,'motion',.5,'easeOut',after);});return this;},slideOut:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"t";var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var wrap=this.fxWrap(r.pos,o,"visible");var st=this.dom.style;st.visibility="visible";st.position="absolute";wrap.setSize(b);var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.fxUnwrap(wrap,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,zero={to:0};switch(anchor.toLowerCase()){case"t":st.left=st.bottom="0";a={height:zero};break;case"l":st.right=st.top="0";a={width:zero};break;case"r":st.left=st.top="0";a={width:zero,points:{to:[b.right,b.y]}};break;case"b":st.left=st.top="0";a={height:zero,points:{to:[b.x,b.bottom]}};break;case"tl":st.right=st.bottom="0";a={width:zero,height:zero};break;case"bl":st.right=st.top="0";a={width:zero,height:zero,points:{to:[b.x,b.bottom]}};break;case"br":st.left=st.top="0";a={width:zero,height:zero,points:{to:[b.x+b.width,b.bottom]}};break;case"tr":st.left=st.bottom="0";a={width:zero,height:zero,points:{to:[b.right,b.y]}};break;}
-arguments.callee.anim=wrap.fxanim(a,o,'motion',.5,"easeOut",after);});return this;},puff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.show();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var width=this.getWidth();var height=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(width*2)},height:{to:this.adjustHeight(height*2)},points:{by:[-(width*.5),-(height*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",after);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',after);}).defer(100,this);});});return this;},highlight:function(color,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"ffff9c";attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var origColor=this.getColor(attr);var restoreColor=this.dom.style[attr];endColor=(o.endColor||origColor)||"ffffff";var after=function(){el.dom.style[attr]=restoreColor;el.afterFx(o);};var a={};a[attr]={from:color,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',after);});return this;},frame:function(color,count,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"#C3DAF9";if(color.length==6){color="#"+color;}
-count=count||1;duration=o.duration||1;this.show();var b=this.getBox();var animFn=function(){var proxy=this.createProxy({tag:"div",style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+color}});var scale=Ext.isBorderBox?2:1;proxy.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*scale))},width:{from:b.width,to:(b.width+(20*scale))}},duration,function(){proxy.remove();});if(--count>0){animFn.defer((duration/2)*1000,this);}else{el.afterFx(o);}};animFn.call(this);});return this;},pause:function(seconds){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},seconds*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
-if(h!==undefined){a.height={to:this.adjustHeight(h)};}
-if(x!==undefined||y!==undefined){a.points={to:[x!==undefined?x:this.getX(),y!==undefined?y:this.getY()]};}
-if(op!==undefined){a.opacity={to:op};}
-if(o.xy!==undefined){a.points={to:o.xy};}
-arguments.callee.anim=this.fxanim(a,o,'motion',.35,"easeOut",function(){el.afterFx(o);});});return this;},ghost:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"b";var r=this.getFxRestore();var w=this.getWidth(),h=this.getHeight();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};var a={opacity:{to:0},points:{}},pt=a.points;switch(anchor.toLowerCase()){case"t":pt.by=[0,-h];break;case"l":pt.by=[-w,0];break;case"r":pt.by=[w,0];break;case"b":pt.by=[0,h];break;case"tl":pt.by=[-w,-h];break;case"bl":pt.by=[-w,h];break;case"br":pt.by=[w,h];break;case"tr":pt.by=[w,-h];break;}
-arguments.callee.anim=this.fxanim(a,o,'motion',.5,"easeOut",after);});return this;},syncFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this;},sequenceFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this;},nextFx:function(){var ef=this.fxQueue[0];if(ef){ef.call(this);}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0];},stopFx:function(){if(this.hasActiveFx()){var cur=this.fxQueue[0];if(cur&&cur.anim&&cur.anim.isAnimated()){this.fxQueue=[cur];cur.anim.stop(true);}}
-return this;},beforeFx:function(o){if(this.hasActiveFx()&&!o.concurrent){if(o.stopFx){this.stopFx();return true;}
-return false;}
-return true;},hasFxBlock:function(){var q=this.fxQueue;return q&&q[0]&&q[0].block;},queueFx:function(o,fn){if(!this.fxQueue){this.fxQueue=[];}
-if(!this.hasFxBlock()){Ext.applyIf(o,this.fxDefaults);if(!o.concurrent){var run=this.beforeFx(o);fn.block=o.block;this.fxQueue.push(fn);if(run){this.nextFx();}}else{fn.call(this);}}
-return this;},fxWrap:function(pos,o,vis){var wrap;if(!o.wrap||!(wrap=Ext.get(o.wrap))){var wrapXY;if(o.fixPosition){wrapXY=this.getXY();}
-var div=document.createElement("div");div.style.visibility=vis;wrap=Ext.get(this.dom.parentNode.insertBefore(div,this.dom));wrap.setPositioning(pos);if(wrap.getStyle("position")=="static"){wrap.position("relative");}
-this.clearPositioning('auto');wrap.clip();wrap.dom.appendChild(this.dom);if(wrapXY){wrap.setXY(wrapXY);}}
-return wrap;},fxUnwrap:function(wrap,pos,o){this.clearPositioning();this.setPositioning(pos);if(!o.wrap){wrap.dom.parentNode.insertBefore(this.dom,wrap.dom);wrap.remove();}},getFxRestore:function(){var st=this.dom.style;return{pos:this.getPositioning(),width:st.width,height:st.height};},afterFx:function(o){if(o.afterStyle){this.applyStyles(o.afterStyle);}
-if(o.afterCls){this.addClass(o.afterCls);}
-if(o.remove===true){this.remove();}
-Ext.callback(o.callback,o.scope,[this]);if(!o.concurrent){this.fxQueue.shift();this.nextFx();}},getFxEl:function(){return Ext.get(this.dom);},fxanim:function(args,opt,animType,defaultDur,defaultEase,cb){animType=animType||'run';opt=opt||{};var anim=Ext.lib.Anim[animType](this.dom,args,(opt.duration||defaultDur)||.35,(opt.easing||defaultEase)||'easeOut',function(){Ext.callback(cb,this);},this);opt.anim=anim;return anim;}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx);
-
-Ext.CompositeElement=function(els){this.elements=[];this.addElements(els);};Ext.CompositeElement.prototype={isComposite:true,addElements:function(els){if(!els)return this;if(typeof els=="string"){els=Ext.Element.selectorFunction(els);}
-var yels=this.elements;var index=yels.length-1;for(var i=0,len=els.length;i<len;i++){yels[++index]=Ext.get(els[i],true);}
-return this;},invoke:function(fn,args){var els=this.elements;for(var i=0,len=els.length;i<len;i++){Ext.Element.prototype[fn].apply(els[i],args);}
-return this;},add:function(els){if(typeof els=="string"){this.addElements(Ext.Element.selectorFunction(els));}else if(els.length!==undefined){this.addElements(els);}else{this.addElements([els]);}
-return this;},each:function(fn,scope){var els=this.elements;for(var i=0,len=els.length;i<len;i++){if(fn.call(scope||els[i],els[i],this,i)===false){break;}}
-return this;},item:function(index){return this.elements[index];}};(function(){Ext.CompositeElement.createCall=function(proto,fnName){if(!proto[fnName]){proto[fnName]=function(){return this.invoke(fnName,arguments);};}};for(var fnName in Ext.Element.prototype){if(typeof Ext.Element.prototype[fnName]=="function"){Ext.CompositeElement.createCall(Ext.CompositeElement.prototype,fnName);}};})();Ext.CompositeElementLite=function(els){Ext.CompositeElementLite.superclass.constructor.call(this,els);var flyEl=function(){};flyEl.prototype=Ext.Element.prototype;this.el=new Ext.Element.Flyweight();};Ext.extend(Ext.CompositeElementLite,Ext.CompositeElement,{addElements:function(els){if(els){if(els instanceof Array){this.elements=this.elements.concat(els);}else{var yels=this.elements;var index=yels.length-1;for(var i=0,len=els.length;i<len;i++){yels[++index]=els[i];}}}
-return this;},invoke:function(fn,args){var els=this.elements;var el=this.el;for(var i=0,len=els.length;i<len;i++){el.dom=els[i];Ext.Element.prototype[fn].apply(el,args);}
-return this;},item:function(index){this.el.dom=this.elements[index];return this.el;},addListener:function(eventName,handler,scope,opt){var els=this.elements;for(var i=0,len=els.length;i<len;i++){Ext.EventManager.on(els[i],eventName,handler,scope||els[i],opt);}
-return this;},each:function(fn,scope){var els=this.elements;var el=this.el;for(var i=0,len=els.length;i<len;i++){el.dom=els[i];if(fn.call(scope||el,el,this,i)===false){break;}}
-return this;}});Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select;}
-Ext.Element.select=function(selector,unique,root){var els;if(typeof selector=="string"){els=Ext.Element.selectorFunction(selector,root);}else if(selector.length!==undefined){els=selector;}else{throw"Invalid selector";}
-if(unique===true){return new Ext.CompositeElement(els);}else{return new Ext.CompositeElementLite(els);}};Ext.select=Ext.Element.select;
-
-Ext.UpdateManager=function(el,forceNew){el=Ext.get(el);if(!forceNew&&el.updateManager){return el.updateManager;}
-this.el=el;this.defaultUrl=null;this.addEvents({"beforeupdate":true,"update":true,"failure":true});var d=Ext.UpdateManager.defaults;this.sslBlankUrl=d.sslBlankUrl;this.disableCaching=d.disableCaching;this.indicatorText=d.indicatorText;this.showLoadIndicator=d.showLoadIndicator;this.timeout=d.timeout;this.loadScripts=d.loadScripts;this.transaction=null;this.autoRefreshProcId=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);this.successDelegate=this.processSuccess.createDelegate(this);this.failureDelegate=this.processFailure.createDelegate(this);this.renderer=new Ext.UpdateManager.BasicRenderer();Ext.UpdateManager.superclass.constructor.call(this);};Ext.extend(Ext.UpdateManager,Ext.util.Observable,{getEl:function(){return this.el;},update:function(url,params,callback,discardUrl){if(this.fireEvent("beforeupdate",this.el,url,params)!==false){var method=this.method;if(typeof url=="object"){var cfg=url;url=cfg.url;params=params||cfg.params;callback=callback||cfg.callback;discardUrl=discardUrl||cfg.discardUrl;if(callback&&cfg.scope){callback=callback.createDelegate(cfg.scope);}
-if(typeof cfg.method!="undefined"){method=cfg.method;};if(typeof cfg.nocache!="undefined"){this.disableCaching=cfg.nocache;};if(typeof cfg.text!="undefined"){this.indicatorText='<div class="loading-indicator">'+cfg.text+"</div>";};if(typeof cfg.scripts!="undefined"){this.loadScripts=cfg.scripts;};if(typeof cfg.timeout!="undefined"){this.timeout=cfg.timeout;};}
-this.showLoading();if(!discardUrl){this.defaultUrl=url;}
-if(typeof url=="function"){url=url.call(this);}
-if(typeof params=="function"){params=params();}
-if(params&&typeof params!="string"){var buf=[];for(var key in params){if(typeof params[key]!="function"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(params[key]),"&");}}
-delete buf[buf.length-1];params=buf.join("");}
-var cb={success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":url,"form":null,"callback":callback,"params":params}};method=method||(params?"POST":"GET");if(method=="GET"){url=this.prepareUrl(url);}
-this.transaction=Ext.lib.Ajax.request(method,url,cb,params);}},formUpdate:function(form,url,reset,callback){if(this.fireEvent("beforeupdate",this.el,form,url)!==false){formEl=Ext.getDom(form);if(typeof url=="function"){url=url.call(this);}
-if(typeof params=="function"){params=params();}
-url=url||formEl.action;var cb={success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":url,"form":formEl,"callback":callback,"reset":reset}};var isUpload=false;var enctype=formEl.getAttribute("enctype");if(enctype&&enctype.toLowerCase()=="multipart/form-data"){isUpload=true;cb.upload=this.successDelegate;}
-this.transaction=Ext.lib.Ajax.formRequest(formEl,url,cb,null,isUpload,this.sslBlankUrl);this.showLoading.defer(1,this);}},refresh:function(callback){if(this.defaultUrl==null){return;}
-this.update(this.defaultUrl,null,callback,true);},startAutoRefresh:function(interval,url,params,callback,refreshNow){if(refreshNow){this.update(url||this.defaultUrl,params,callback,true);}
-if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);}
-this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[url||this.defaultUrl,params,callback,true]),interval*1000);},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId;}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false;},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText);}},prepareUrl:function(url){if(this.disableCaching){var append="_dc="+(new Date().getTime());if(url.indexOf("?")!==-1){url+="&"+append;}else{url+="?"+append;}}
-return url;},processSuccess:function(response){this.transaction=null;if(response.argument.form&&response.argument.reset){try{response.argument.form.reset();}catch(e){}}
-if(this.loadScripts){this.renderer.render(this.el,response,this,this.updateComplete.createDelegate(this,[response]));}else{this.renderer.render(this.el,response,this);this.updateComplete(response);}},updateComplete:function(response){this.fireEvent("update",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback(this.el,true,response);}},processFailure:function(response){this.transaction=null;this.fireEvent("failure",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback(this.el,false,response);}},setRenderer:function(renderer){this.renderer=renderer;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(defaultUrl){this.defaultUrl=defaultUrl;},abort:function(){if(this.transaction){Ext.lib.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Ext.lib.Ajax.isCallInProgress(this.transaction);}
-return false;}});Ext.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:'<div class="loading-indicator">Loading...</div>'};Ext.UpdateManager.updateElement=function(el,url,params,options){var um=Ext.get(el,true).getUpdateManager();Ext.apply(um,options);um.update(url,params,options?options.callback:null);};Ext.UpdateManager.update=Ext.UpdateManager.updateElement;Ext.UpdateManager.BasicRenderer=function(){};Ext.UpdateManager.BasicRenderer.prototype={render:function(el,response,updateManager,callback){el.update(response.responseText,updateManager.loadScripts,callback);}};
-
-Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
-var func=Date.formatFunctions[format];return this[func]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function(){return ";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
-else if(special){special=false;code+="'"+String.escape(ch)+"' + ";}
-else{code+=Date.getFormatCode(ch);}}
-eval(code.substring(0,code.length-3)+";}");};Date.getFormatCode=function(character){switch(character){case"d":return"String.leftPad(this.getDate(), 2, '0') + ";case"D":return"Date.dayNames[this.getDay()].substring(0, 3) + ";case"j":return"this.getDate() + ";case"l":return"Date.dayNames[this.getDay()] + ";case"S":return"this.getSuffix() + ";case"w":return"this.getDay() + ";case"z":return"this.getDayOfYear() + ";case"W":return"this.getWeekOfYear() + ";case"F":return"Date.monthNames[this.getMonth()] + ";case"m":return"String.leftPad(this.getMonth() + 1, 2, '0') + ";case"M":return"Date.monthNames[this.getMonth()].substring(0, 3) + ";case"n":return"(this.getMonth() + 1) + ";case"t":return"this.getDaysInMonth() + ";case"L":return"(this.isLeapYear() ? 1 : 0) + ";case"Y":return"this.getFullYear() + ";case"y":return"('' + this.getFullYear()).substring(2, 4) + ";case"a":return"(this.getHours() < 12 ? 'am' : 'pm') + ";case"A":return"(this.getHours() < 12 ? 'AM' : 'PM') + ";case"g":return"((this.getHours() %12) ? this.getHours() % 12 : 12) + ";case"G":return"this.getHours() + ";case"h":return"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";case"H":return"String.leftPad(this.getHours(), 2, '0') + ";case"i":return"String.leftPad(this.getMinutes(), 2, '0') + ";case"s":return"String.leftPad(this.getSeconds(), 2, '0') + ";case"O":return"this.getGMTOffset() + ";case"T":return"this.getTimezone() + ";case"Z":return"(this.getTimezoneOffset() * -60) + ";default:return"'"+String.escape(character)+"' + ";}};Date.parseDate=function(input,format){if(Date.parseFunctions[format]==null){Date.createParser(format);}
-var func=Date.parseFunctions[format];return Date[func](input);};Date.createParser=function(format){var funcName="parse"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input){\n"
-+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"
-+"var d = new Date();\n"
-+"y = d.getFullYear();\n"
-+"m = d.getMonth();\n"
-+"d = d.getDate();\n"
-+"var results = input.match(Date.parseRegexes["+regexNum+"]);\n"
-+"if (results && results.length > 0) {";var regex="";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
-else if(special){special=false;regex+=String.escape(ch);}
-else{var obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}
-code+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
-+"{return new Date(y, m, d, h, i, s);}\n"
-+"else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
-+"{return new Date(y, m, d, h, i);}\n"
-+"else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
-+"{return new Date(y, m, d, h);}\n"
-+"else if (y > 0 && m >= 0 && d > 0)\n"
-+"{return new Date(y, m, d);}\n"
-+"else if (y > 0 && m >= 0)\n"
-+"{return new Date(y, m);}\n"
-+"else if (y > 0)\n"
-+"{return new Date(y);}\n"
-+"}return null;}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$");eval(code);};Date.formatCodeToRegex=function(character,currentGroup){switch(character){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":case"d":return{g:1,c:"d = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{1,2})"};case"l":return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:0,c:null,s:"(?:\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+currentGroup+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+currentGroup+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":case"m":return{g:1,c:"m = parseInt(results["+currentGroup+"], 10) - 1;\n",s:"(\\d{1,2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+currentGroup+"], 10);\n"
-+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+currentGroup+"] == 'am') {\n"
-+"if (h == 12) { h = 0; }\n"
-+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results["+currentGroup+"] == 'AM') {\n"
-+"if (h == 12) { h = 0; }\n"
-+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":case"h":case"H":return{g:1,c:"h = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{1,2})"};case"i":return{g:1,c:"i = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{2})"};case"O":return{g:0,c:null,s:"[+-]\\d{4}"};case"T":return{g:0,c:null,s:"[A-Z]{3}"};case"Z":return{g:0,c:null,s:"[+-]\\d{1,5}"};default:return{g:0,c:null,s:String.escape(character)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")
-+String.leftPad(Math.floor(this.getTimezoneOffset()/60),2,"0")
-+String.leftPad(this.getTimezoneOffset()%60,2,"0");};Date.prototype.getDayOfYear=function(){var num=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){num+=Date.daysInMonth[i];}
-return num+this.getDate()-1;};Date.prototype.getWeekOfYear=function(){var now=this.getDayOfYear()+(4-this.getDay());var jan1=new Date(this.getFullYear(),0,1);var then=(7-jan1.getDay()+4);return String.leftPad(((now-then)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var year=this.getFullYear();return((year&3)==0&&(year%100||(year%400==0&&year)));};Date.prototype.getFirstDayOfMonth=function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;};Date.prototype.getLastDayOfMonth=function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;};Date.prototype.getFirstDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),1);};Date.prototype.getLastDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.clearTime=function(clone){if(clone){return this.clone().clearTime();}
-this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};if(Ext.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(num){if(num<=-1){var n=Math.ceil(-num);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else{return Date.brokenSetMonth.apply(this,arguments);}};}
-Date.MILLI="ms";Date.SECOND="s";Date.MINUTE="mi";Date.HOUR="h";Date.DAY="d";Date.MONTH="mo";Date.YEAR="y";Date.prototype.add=function(interval,value){var d=this.clone();if(!interval||value===0)return d;switch(interval.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+value);break;case Date.SECOND:d.setSeconds(this.getSeconds()+value);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+value);break;case Date.HOUR:d.setHours(this.getHours()+value);break;case Date.DAY:d.setDate(this.getDate()+value);break;case Date.MONTH:var day=this.getDate();if(day>28){day=Math.min(day,this.getFirstDateOfMonth().add('mo',value).getLastDateOfMonth().getDate());}
-d.setDate(day);d.setMonth(this.getMonth()+value);break;case Date.YEAR:d.setFullYear(this.getFullYear()+value);break;}
-return d;};
-
-Ext.util.DelayedTask=function(fn,scope,args){var id=null,d,t;var call=function(){var now=new Date().getTime();if(now-t>=d){clearInterval(id);id=null;fn.apply(scope,args||[]);}};this.delay=function(delay,newFn,newScope,newArgs){if(id&&delay!=d){this.cancel();}
-d=delay;t=new Date().getTime();fn=newFn||fn;scope=newScope||scope;args=newArgs||args;if(!id){id=setInterval(call,d);}};this.cancel=function(){if(id){clearInterval(id);id=null;}};};
-
-Ext.util.TaskRunner=function(interval){interval=interval||10;var tasks=[],removeQueue=[];var id=0;var running=false;var stopThread=function(){running=false;clearInterval(id);id=0;};var startThread=function(){if(!running){running=true;id=setInterval(runTasks,interval);}};var removeTask=function(task){removeQueue.push(task);if(task.onStop){task.onStop();}};var runTasks=function(){if(removeQueue.length>0){for(var i=0,len=removeQueue.length;i<len;i++){tasks.remove(removeQueue[i]);}
-removeQueue=[];if(tasks.length<1){stopThread();return;}}
-var now=new Date().getTime();for(var i=0,len=tasks.length;i<len;++i){var t=tasks[i];var itime=now-t.taskRunTime;if(t.interval<=itime){var rt=t.run.apply(t.scope||t,t.args||[++t.taskRunCount]);t.taskRunTime=now;if(rt===false||t.taskRunCount===t.repeat){removeTask(t);return;}}
-if(t.duration&&t.duration<=(now-t.taskStartTime)){removeTask(t);}}};this.start=function(task){tasks.push(task);task.taskStartTime=new Date().getTime();task.taskRunTime=0;task.taskRunCount=0;startThread();return task;};this.stop=function(task){removeTask(task);return task;};this.stopAll=function(){stopThread();for(var i=0,len=tasks.length;i<len;i++){if(tasks[i].onStop){tasks[i].onStop();}}
-tasks=[];removeQueue=[];};};Ext.TaskMgr=new Ext.util.TaskRunner();
-
-Ext.util.MixedCollection=function(allowFunctions,keyFn){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents({"clear":true,"add":true,"replace":true,"remove":true,"sort":true});this.allowFunctions=allowFunctions===true;if(keyFn){this.getKey=keyFn;}
-Ext.util.MixedCollection.superclass.constructor.call(this);};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(key,o){if(arguments.length==1){o=arguments[0];key=this.getKey(o);}
-if(typeof key=="undefined"||key===null){this.length++;this.items.push(o);this.keys.push(null);}else{var old=this.map[key];if(old){return this.replace(key,o);}
-this.length++;this.items.push(o);this.map[key]=o;this.keys.push(key);}
-this.fireEvent("add",this.length-1,o,key);return o;},getKey:function(o){return o.id;},replace:function(key,o){if(arguments.length==1){o=arguments[0];key=this.getKey(o);}
-var old=this.item(key);if(typeof key=="undefined"||key===null||typeof old=="undefined"){return this.add(key,o);}
-var index=this.indexOfKey(key);this.items[index]=o;this.map[key]=o;this.fireEvent("replace",key,old,o);return o;},addAll:function(objs){if(arguments.length>1||objs instanceof Array){var args=arguments.length>1?arguments:objs;for(var i=0,len=args.length;i<len;i++){this.add(args[i]);}}else{for(var key in objs){if(this.allowFunctions||typeof objs[key]!="function"){this.add(objs[key],key);}}}},each:function(fn,scope){var items=[].concat(this.items);for(var i=0,len=items.length;i<len;i++){if(fn.call(scope||items[i],items[i],i,len)===false){break;}}},eachKey:function(fn,scope){for(var i=0,len=this.keys.length;i<len;i++){fn.call(scope||window,this.keys[i],this.items[i],i,len);}},find:function(fn,scope){for(var i=0,len=this.items.length;i<len;i++){if(fn.call(scope||window,this.items[i],this.keys[i])){return this.items[i];}}
-return null;},insert:function(index,key,o){if(arguments.length==2){o=arguments[1];key=this.getKey(o);}
-if(index>=this.length){return this.add(key,o);}
-this.length++;this.items.splice(index,0,o);if(typeof key!="undefined"&&key!=null){this.map[key]=o;}
-this.keys.splice(index,0,key);this.fireEvent("add",index,o,key);return o;},remove:function(o){return this.removeAt(this.indexOf(o));},removeAt:function(index){if(index<this.length&&index>=0){this.length--;var o=this.items[index];this.items.splice(index,1);var key=this.keys[index];if(typeof key!="undefined"){delete this.map[key];}
-this.keys.splice(index,1);this.fireEvent("remove",o,key);}},removeKey:function(key){return this.removeAt(this.indexOfKey(key));},getCount:function(){return this.length;},indexOf:function(o){if(!this.items.indexOf){for(var i=0,len=this.items.length;i<len;i++){if(this.items[i]==o)return i;}
-return-1;}else{return this.items.indexOf(o);}},indexOfKey:function(key){if(!this.keys.indexOf){for(var i=0,len=this.keys.length;i<len;i++){if(this.keys[i]==key)return i;}
-return-1;}else{return this.keys.indexOf(key);}},item:function(key){var item=typeof this.map[key]!="undefined"?this.map[key]:this.items[key];return typeof item!='function'||this.allowFunctions?item:null;},itemAt:function(index){return this.items[index];},key:function(key){return this.map[key];},contains:function(o){return this.indexOf(o)!=-1;},containsKey:function(key){return typeof this.map[key]!="undefined";},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear");},first:function(){return this.items[0];},last:function(){return this.items[this.length-1];},_sort:function(property,dir,fn){var dsc=String(dir).toUpperCase()=="DESC"?-1:1;fn=fn||function(a,b){return a-b;};var c=[],k=this.keys,items=this.items;for(var i=0,len=items.length;i<len;i++){c[c.length]={key:k[i],value:items[i],index:i};}
-c.sort(function(a,b){var v=fn(a[property],b[property])*dsc;if(v==0){v=(a.index<b.index?-1:1);}
-return v;});for(var i=0,len=c.length;i<len;i++){items[i]=c[i].value;k[i]=c[i].key;}
-this.fireEvent("sort",this);},sort:function(dir,fn){this._sort("value",dir,fn);},keySort:function(dir,fn){this._sort("key",dir,fn||function(a,b){return String(a).toUpperCase()-String(b).toUpperCase();});},getRange:function(start,end){var items=this.items;if(items.length<1){return[];}
-start=start||0;end=Math.min(typeof end=="undefined"?this.length-1:end,this.length-1);var r=[];if(start<=end){for(var i=start;i<=end;i++){r[r.length]=items[i];}}else{for(var i=start;i>=end;i--){r[r.length]=items[i];}}
-return r;},filter:function(property,value){if(!value.exec){value=String(value);if(value.length==0){return this.clone();}
-value=new RegExp("^"+Ext.escapeRe(value),"i");}
-return this.filterBy(function(o){return o&&value.test(o[property]);});},filterBy:function(fn,scope){var r=new Ext.util.MixedCollection();r.getKey=this.getKey;var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){if(fn.call(scope||this,it[i],k[i])){r.add(k[i],it[i]);}}
-return r;},clone:function(){var r=new Ext.util.MixedCollection();var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){r.add(k[i],it[i]);}
-r.getKey=this.getKey;return r;}});Ext.util.MixedCollection.prototype.get=Ext.util.MixedCollection.prototype.item;
-
-Ext.util.JSON=new(function(){var useHasOwn={}.hasOwnProperty?true:false;var pad=function(n){return n<10?"0"+n:n;};var m={"\b":'\\b',"\t":'\\t',"\n":'\\n',"\f":'\\f',"\r":'\\r','"':'\\"',"\\":'\\\\'};var encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
-c=b.charCodeAt();return"\\u00"+
-Math.floor(c/16).toString(16)+
-(c%16).toString(16);})+'"';}
-return'"'+s+'"';};var encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(',');}
-a.push(v===null?"null":Ext.util.JSON.encode(v));b=true;}}
-a.push("]");return a.join("");};var encodeDate=function(o){return'"'+o.getFullYear()+"-"+
-pad(o.getMonth()+1)+"-"+
-pad(o.getDate())+"T"+
-pad(o.getHours())+":"+
-pad(o.getMinutes())+":"+
-pad(o.getSeconds())+'"';};this.encode=function(o){if(typeof o=="undefined"||o===null){return"null";}else if(o instanceof Array){return encodeArray(o);}else if(o instanceof Date){return encodeDate(o);}else if(typeof o=="string"){return encodeString(o);}else if(typeof o=="number"){return isFinite(o)?String(o):"null";}else if(typeof o=="boolean"){return String(o);}else{var a=["{"],b,i,v;for(i in o){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(',');}
-a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true;}}}
-a.push("}");return a.join("");}};this.decode=function(json){return eval("("+json+')');};})();Ext.encode=Ext.util.JSON.encode;Ext.decode=Ext.util.JSON.decode;
-
-Ext.util.Format=function(){var trimRe=/^\s+|\s+$/g;return{ellipsis:function(value,len){if(value&&value.length>len){return value.substr(0,len-3)+"...";}
-return value;},undef:function(value){return typeof value!="undefined"?value:"";},htmlEncode:function(value){return!value?value:String(value).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;");},trim:function(value){return String(value).replace(trimRe,"");},substr:function(value,start,length){return String(value).substr(start,length);},lowercase:function(value){return String(value).toLowerCase();},uppercase:function(value){return String(value).toUpperCase();},capitalize:function(value){return!value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase();},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args);}else{return eval(fn).call(window,value);}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);return"$"+v;},date:function(v,format){if(!v){return"";}
-if(!(v instanceof Date)){v=new Date(Date.parse(v));}
-return v.dateFormat(format||"m/d/Y");},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return!v?v:String(v).replace(this.stripTagsRE,"");}};}();
-
-Ext.util.CSS=function(){var rules=null;var doc=document;var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase();};return{createStyleSheet:function(cssText){var ss;if(Ext.isIE){ss=doc.createStyleSheet();ss.cssText=cssText;}else{var head=doc.getElementsByTagName("head")[0];var rules=doc.createElement("style");rules.setAttribute("type","text/css");try{rules.appendChild(doc.createTextNode(cssText));}catch(e){rules.cssText=cssText;}
-head.appendChild(rules);ss=rules.styleSheet?rules.styleSheet:(rules.sheet||doc.styleSheets[doc.styleSheets.length-1]);}
-this.cacheStyleSheet(ss);return ss;},removeStyleSheet:function(id){var existing=doc.getElementById(id);if(existing){existing.parentNode.removeChild(existing);}},swapStyleSheet:function(id,url){this.removeStyleSheet(id);var ss=doc.createElement("link");ss.setAttribute("rel","stylesheet");ss.setAttribute("type","text/css");ss.setAttribute("id",id);ss.setAttribute("href",url);doc.getElementsByTagName("head")[0].appendChild(ss);},refreshCache:function(){return this.getRules(true);},cacheStyleSheet:function(ss){if(!rules){rules={};}
-try{var ssRules=ss.cssRules||ss.rules;for(var j=ssRules.length-1;j>=0;--j){rules[ssRules[j].selectorText]=ssRules[j];}}catch(e){}},getRules:function(refreshCache){if(rules==null||refreshCache){rules={};var ds=doc.styleSheets;for(var i=0,len=ds.length;i<len;i++){try{this.cacheStyleSheet(ds[i]);}catch(e){}}}
-return rules;},getRule:function(selector,refreshCache){var rs=this.getRules(refreshCache);if(!(selector instanceof Array)){return rs[selector];}
-for(var i=0;i<selector.length;i++){if(rs[selector[i]]){return rs[selector[i]];}}
-return null;},updateRule:function(selector,property,value){if(!(selector instanceof Array)){var rule=this.getRule(selector);if(rule){rule.style[property.replace(camelRe,camelFn)]=value;return true;}}else{for(var i=0;i<selector.length;i++){if(this.updateRule(selector[i],property,value)){return true;}}}
-return false;}};}();
-
-Ext.util.ClickRepeater=function(el,config)
-{this.el=Ext.get(el);this.el.unselectable();Ext.apply(this,config);this.addEvents({"mousedown":true,"click":true,"mouseup":true});this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}
-if(this.stopDefault){e.stopEvent();}},this);}
-if(this.handler){this.on("click",this.handler,this.scope||this);}
-Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,docEl:Ext.get(document),handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
-this.mousedownTime=new Date();this.docEl.on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.getInterval(),this);},getInterval:function(){if(!this.accelerate){return this.interval;}
-var pressTime=this.mousedownTime.getElapsed();if(pressTime<500){return 400;}else if(pressTime<1700){return 320;}else if(pressTime<2600){return 250;}else if(pressTime<3500){return 180;}else if(pressTime<4400){return 140;}else if(pressTime<5300){return 80;}else if(pressTime<6200){return 50;}else{return 10;}},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
-this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn);if(this.pressClass){this.el.addClass(this.pressClass);}
-this.click();},handleMouseUp:function(){clearTimeout(this.timer);this.el.un("mouseover",this.handleMouseReturn);this.el.un("mouseout",this.handleMouseOut);this.docEl.un("mouseup",this.handleMouseUp);this.el.removeClass(this.pressClass);this.fireEvent("mouseup",this);}});
-
-Ext.KeyNav=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(!this.disabled){this.disabled=true;this.enable();}};Ext.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",prepareEvent:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(Ext.isSafari&&h&&k>=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,hname){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(Ext.isIE){this.el.on("keydown",this.relay,this);}else{this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);}
-this.disabled=false;}},disable:function(){if(!this.disabled){if(Ext.isIE){this.el.un("keydown",this.relay);}else{this.el.un("keydown",this.prepareEvent);this.el.un("keypress",this.relay);}
-this.disabled=true;}}};
-
-Ext.KeyMap=function(el,config,eventName){this.el=Ext.get(el);this.eventName=eventName||"keydown";this.bindings=[];if(config instanceof Array){for(var i=0,len=config.length;i<len;i++){this.addBinding(config[i]);}}else{this.addBinding(config);}
-this.keyDownDelegate=Ext.EventManager.wrap(this.handleKeyDown,this,true);this.enable();};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(config){var keyCode=config.key,shift=config.shift,ctrl=config.ctrl,alt=config.alt,fn=config.fn,scope=config.scope;if(typeof keyCode=="string"){var ks=[];var keyString=keyCode.toUpperCase();for(var j=0,len=keyString.length;j<len;j++){ks.push(keyString.charCodeAt(j));}
-keyCode=ks;}
-var keyArray=keyCode instanceof Array;var handler=function(e){if((!shift||e.shiftKey)&&(!ctrl||e.ctrlKey)&&(!alt||e.altKey)){var k=e.getKey();if(keyArray){for(var i=0,len=keyCode.length;i<len;i++){if(keyCode[i]==k){if(this.stopEvent){e.stopEvent();}
-fn.call(scope||window,k,e);return;}}}else{if(k==keyCode){if(this.stopEvent){e.stopEvent();}
-fn.call(scope||window,k,e);}}}};this.bindings.push(handler);},handleKeyDown:function(e){if(this.enabled){var b=this.bindings;for(var i=0,len=b.length;i<len;i++){b[i].call(this,e);}}},isEnabled:function(){return this.enabled;},enable:function(){if(!this.enabled){this.el.on(this.eventName,this.keyDownDelegate);this.enabled=true;}},disable:function(){if(this.enabled){this.el.removeListener(this.eventName,this.keyDownDelegate);this.enabled=false;}}};
-
-Ext.util.TextMetrics=function(){var shared;return{measure:function(el,text,fixedWidth){if(!shared){shared=Ext.util.TextMetrics.Instance(el,fixedWidth);}
-shared.bind(el);shared.setFixedWidth(fixedWidth||'auto');return shared.getSize(text);},createInstance:function(el,fixedWidth){return Ext.util.TextMetrics.Instance(el,fixedWidth);}};}();Ext.util.TextMetrics.Instance=function(bindTo,fixedWidth){var ml=new Ext.Element(document.createElement('div'));document.body.appendChild(ml.dom);ml.position('absolute');ml.setLeftTop(-1000,-1000);ml.hide();if(fixedWidth){ml.setWidth(fixedWidth);}
-var instance={getSize:function(text){ml.update(text);var s=ml.getSize();ml.update('');return s;},bind:function(el){ml.setStyle(Ext.fly(el).getStyles('font-size','font-style','font-weight','font-family','line-height'));},setFixedWidth:function(width){ml.setWidth(width);},getWidth:function(text){ml.dom.style.width='auto';return this.getSize(text).width;},getHeight:function(text){return this.getSize(text).height;}};instance.bind(bindTo);return instance;};Ext.Element.measureText=Ext.util.TextMetrics.measure;
-
-Ext.state.Provider=function(){Ext.state.Provider.superclass.constructor.call(this);this.addEvents({"statechange":true});this.state={};Ext.state.Provider.superclass.constructor.call(this);};Ext.extend(Ext.state.Provider,Ext.util.Observable,{get:function(name,defaultValue){return typeof this.state[name]=="undefined"?defaultValue:this.state[name];},clear:function(name){delete this.state[name];this.fireEvent("statechange",this,name,null);},set:function(name,value){this.state[name]=value;this.fireEvent("statechange",this,name,value);},decodeValue:function(cookie){var re=/^(a|n|d|b|s|o)\:(.*)$/;var matches=re.exec(unescape(cookie));if(!matches||!matches[1])return;var type=matches[1];var v=matches[2];switch(type){case"n":return parseFloat(v);case"d":return new Date(Date.parse(v));case"b":return(v=="1");case"a":var all=[];var values=v.split("^");for(var i=0,len=values.length;i<len;i++){all.push(this.decodeValue(values[i]));}
-return all;case"o":var all={};var values=v.split("^");for(var i=0,len=values.length;i<len;i++){var kv=values[i].split("=");all[kv[0]]=this.decodeValue(kv[1]);}
-return all;default:return v;}},encodeValue:function(v){var enc;if(typeof v=="number"){enc="n:"+v;}else if(typeof v=="boolean"){enc="b:"+(v?"1":"0");}else if(v instanceof Date){enc="d:"+v.toGMTString();}else if(v instanceof Array){var flat="";for(var i=0,len=v.length;i<len;i++){flat+=this.encodeValue(v[i]);if(i!=len-1)flat+="^";}
-enc="a:"+flat;}else if(typeof v=="object"){var flat="";for(var key in v){if(typeof v[key]!="function"){flat+=key+"="+this.encodeValue(v[key])+"^";}}
-enc="o:"+flat.substring(0,flat.length-1);}else{enc="s:"+v;}
-return escape(enc);}});Ext.state.Manager=function(){var provider=new Ext.state.Provider();return{setProvider:function(stateProvider){provider=stateProvider;},get:function(key,defaultValue){return provider.get(key,defaultValue);},set:function(key,value){provider.set(key,value);},clear:function(key){provider.clear(key);},getProvider:function(){return provider;}};}();Ext.state.CookieProvider=function(config){Ext.state.CookieProvider.superclass.constructor.call(this);this.path="/";this.expires=new Date(new Date().getTime()+(1000*60*60*24*7));this.domain=null;this.secure=false;Ext.apply(this,config);this.state=this.readCookies();};Ext.extend(Ext.state.CookieProvider,Ext.state.Provider,{set:function(name,value){if(typeof value=="undefined"||value===null){this.clear(name);return;}
-this.setCookie(name,value);Ext.state.CookieProvider.superclass.set.call(this,name,value);},clear:function(name){this.clearCookie(name);Ext.state.CookieProvider.superclass.clear.call(this,name);},readCookies:function(){var cookies={};var c=document.cookie+";";var re=/\s?(.*?)=(.*?);/g;var matches;while((matches=re.exec(c))!=null){var name=matches[1];var value=matches[2];if(name&&name.substring(0,3)=="ys-"){cookies[name.substr(3)]=this.decodeValue(value);}}
-return cookies;},setCookie:function(name,value){document.cookie="ys-"+name+"="+this.encodeValue(value)+
-((this.expires==null)?"":("; expires="+this.expires.toGMTString()))+
-((this.path==null)?"":("; path="+this.path))+
-((this.domain==null)?"":("; domain="+this.domain))+
-((this.secure==true)?"; secure":"");},clearCookie:function(name){document.cookie="ys-"+name+"=null; expires=Thu, 01-Jan-70 00:00:01 GMT"+
-((this.path==null)?"":("; path="+this.path))+
-((this.domain==null)?"":("; domain="+this.domain))+
-((this.secure==true)?"; secure":"");}});
-
-(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
-pad=pad||this.defaultPadding;var b=Ext.get(this.getEl()).getBox();var ce=Ext.get(constrainTo);var s=ce.getScroll();var c,cd=ce.dom;if(cd==document.body){c={x:s.left,y:s.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}else{xy=ce.getXY();c={x:xy[0]+s.left,y:xy[1]+s.top,width:cd.clientWidth,height:cd.clientHeight};}
-var topSpace=b.y-c.y;var leftSpace=b.x-c.x;this.resetConstraints();this.setXConstraint(leftSpace-(pad.left||0),c.width-leftSpace-b.width-(pad.right||0));this.setYConstraint(topSpace-(pad.top||0),c.height-topSpace-b.height-(pad.bottom||0));},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id);}
-return this._domRef;},getDragEl:function(){return Ext.getDom(this.dragElId);},init:function(id,sGroup,config){this.initTarget(id,sGroup,config);Event.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,sGroup,config){this.config=config||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof id!=="string"){id=Ext.id(id);}
-this.id=id;this.addToGroup((sGroup)?sGroup:"default");this.handleElId=id;this.setDragElId(id);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable();},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(iTop,iRight,iBot,iLeft){if(!iRight&&0!==iRight){this.padding=[iTop,iTop,iTop,iTop];}else if(!iBot&&0!==iBot){this.padding=[iTop,iRight,iTop,iRight];}else{this.padding=[iTop,iRight,iBot,iLeft];}},setInitPosition:function(diffX,diffY){var el=this.getEl();if(!this.DDM.verifyEl(el)){return;}
-var dx=diffX||0;var dy=diffY||0;var p=Dom.getXY(el);this.initPageX=p[0]-dx;this.initPageY=p[1]-dy;this.lastPageX=p[0];this.lastPageY=p[1];this.setStartPosition(p);},setStartPosition:function(pos){var p=pos||Dom.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=p[0];this.startPageY=p[1];},addToGroup:function(sGroup){this.groups[sGroup]=true;this.DDM.regDragDrop(this,sGroup);},removeFromGroup:function(sGroup){if(this.groups[sGroup]){delete this.groups[sGroup];}
-this.DDM.removeDDFromGroup(this,sGroup);},setDragElId:function(id){this.dragElId=id;},setHandleElId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-this.handleElId=id;this.DDM.regHandle(this.id,id);},setOuterHandleElId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-Event.on(id,"mousedown",this.handleMouseDown,this);this.setHandleElId(id);this.hasOuterHandles=true;},unreg:function(){Event.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},destroy:function(){this.unreg();},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(e,oDD){if(this.primaryButtonOnly&&e.button!=0){return;}
-if(this.isLocked()){return;}
-this.DDM.refreshCache(this.groups);var pt=new Ext.lib.Point(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(pt,this)){}else{if(this.clickValidator(e)){this.setStartPosition();this.b4MouseDown(e);this.onMouseDown(e);this.DDM.handleMouseDown(e,this);this.DDM.stopEvent(e);}else{}}},clickValidator:function(e){var target=Ext.lib.Event.getTarget(e);return(this.isValidHandleChild(target)&&(this.id==this.handleElId||this.DDM.handleWasClicked(target,this.id)));},addInvalidHandleType:function(tagName){var type=tagName.toUpperCase();this.invalidHandleTypes[type]=type;},addInvalidHandleId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-this.invalidHandleIds[id]=id;},addInvalidHandleClass:function(cssClass){this.invalidHandleClasses.push(cssClass);},removeInvalidHandleType:function(tagName){var type=tagName.toUpperCase();delete this.invalidHandleTypes[type];},removeInvalidHandleId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-delete this.invalidHandleIds[id];},removeInvalidHandleClass:function(cssClass){for(var i=0,len=this.invalidHandleClasses.length;i<len;++i){if(this.invalidHandleClasses[i]==cssClass){delete this.invalidHandleClasses[i];}}},isValidHandleChild:function(node){var valid=true;var nodeName;try{nodeName=node.nodeName.toUpperCase();}catch(e){nodeName=node.nodeName;}
-valid=valid&&!this.invalidHandleTypes[nodeName];valid=valid&&!this.invalidHandleIds[node.id];for(var i=0,len=this.invalidHandleClasses.length;valid&&i<len;++i){valid=!Dom.hasClass(node,this.invalidHandleClasses[i]);}
-return valid;},setXTicks:function(iStartX,iTickSize){this.xTicks=[];this.xTickSize=iTickSize;var tickMap={};for(var i=this.initPageX;i>=this.minX;i=i-iTickSize){if(!tickMap[i]){this.xTicks[this.xTicks.length]=i;tickMap[i]=true;}}
-for(i=this.initPageX;i<=this.maxX;i=i+iTickSize){if(!tickMap[i]){this.xTicks[this.xTicks.length]=i;tickMap[i]=true;}}
-this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(iStartY,iTickSize){this.yTicks=[];this.yTickSize=iTickSize;var tickMap={};for(var i=this.initPageY;i>=this.minY;i=i-iTickSize){if(!tickMap[i]){this.yTicks[this.yTicks.length]=i;tickMap[i]=true;}}
-for(i=this.initPageY;i<=this.maxY;i=i+iTickSize){if(!tickMap[i]){this.yTicks[this.yTicks.length]=i;tickMap[i]=true;}}
-this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(iLeft,iRight,iTickSize){this.leftConstraint=iLeft;this.rightConstraint=iRight;this.minX=this.initPageX-iLeft;this.maxX=this.initPageX+iRight;if(iTickSize){this.setXTicks(this.initPageX,iTickSize);}
-this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(iUp,iDown,iTickSize){this.topConstraint=iUp;this.bottomConstraint=iDown;this.minY=this.initPageY-iUp;this.maxY=this.initPageY+iDown;if(iTickSize){this.setYTicks(this.initPageY,iTickSize);}
-this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var dx=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var dy=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(dx,dy);}else{this.setInitPosition();}
-if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}
-if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(val,tickArray){if(!tickArray){return val;}else if(tickArray[0]>=val){return tickArray[0];}else{for(var i=0,len=tickArray.length;i<len;++i){var next=i+1;if(tickArray[next]&&tickArray[next]>=val){var diff1=val-tickArray[i];var diff2=tickArray[next]-val;return(diff2>diff1)?tickArray[i]:tickArray[next];}}
-return tickArray[tickArray.length-1];}},toString:function(){return("DragDrop "+this.id);}};})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var Event=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initalized:false,locked:false,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(sMethod,args){for(var i in this.ids){for(var j in this.ids[i]){var oDD=this.ids[i][j];if(!this.isTypeOfDD(oDD)){continue;}
-oDD[sMethod].apply(oDD,args);}}},_onLoad:function(){this.init();Event.on(document,"mouseup",this.handleMouseUp,this,true);Event.on(document,"mousemove",this.handleMouseMove,this,true);Event.on(window,"unload",this._onUnload,this,true);Event.on(window,"resize",this._onResize,this,true);},_onResize:function(e){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(oDD,sGroup){if(!this.initialized){this.init();}
-if(!this.ids[sGroup]){this.ids[sGroup]={};}
-this.ids[sGroup][oDD.id]=oDD;},removeDDFromGroup:function(oDD,sGroup){if(!this.ids[sGroup]){this.ids[sGroup]={};}
-var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
-delete this.handleIds[oDD.id];},regHandle:function(sDDId,sHandleId){if(!this.handleIds[sDDId]){this.handleIds[sDDId]={};}
-this.handleIds[sDDId][sHandleId]=sHandleId;},isDragDrop:function(id){return(this.getDDById(id))?true:false;},getRelated:function(p_oDD,bTargetsOnly){var oDDs=[];for(var i in p_oDD.groups){for(j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;}
-if(!bTargetsOnly||dd.isTarget){oDDs[oDDs.length]=dd;}}}
-return oDDs;},isLegalTarget:function(oDD,oTargetDD){var targets=this.getRelated(oDD,true);for(var i=0,len=targets.length;i<len;++i){if(targets[i].id==oTargetDD.id){return true;}}
-return false;},isTypeOfDD:function(oDD){return(oDD&&oDD.__ygDragDrop);},isHandle:function(sDDId,sHandleId){return(this.handleIds[sDDId]&&this.handleIds[sDDId][sHandleId]);},getDDById:function(id){for(var i in this.ids){if(this.ids[i][id]){return this.ids[i][id];}}
-return null;},handleMouseDown:function(e,oDD){if(Ext.QuickTips){Ext.QuickTips.disable();}
-this.currentTarget=Ext.lib.Event.getTarget(e);this.dragCurrent=oDD;var el=oDD.getEl();this.startX=Ext.lib.Event.getPageX(e);this.startY=Ext.lib.Event.getPageY(e);this.deltaX=this.startX-el.offsetLeft;this.deltaY=this.startY-el.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var DDM=Ext.dd.DDM;DDM.startDrag(DDM.startX,DDM.startY);},this.clickTimeThresh);},startDrag:function(x,y){clearTimeout(this.clickTimeout);if(this.dragCurrent){this.dragCurrent.b4StartDrag(x,y);this.dragCurrent.startDrag(x,y);}
-this.dragThreshMet=true;},handleMouseUp:function(e){if(Ext.QuickTips){Ext.QuickTips.enable();}
-if(!this.dragCurrent){return;}
-clearTimeout(this.clickTimeout);if(this.dragThreshMet){this.fireEvents(e,true);}else{}
-this.stopDrag(e);this.stopEvent(e);},stopEvent:function(e){if(this.stopPropagation){e.stopPropagation();}
-if(this.preventDefault){e.preventDefault();}},stopDrag:function(e){if(this.dragCurrent){if(this.dragThreshMet){this.dragCurrent.b4EndDrag(e);this.dragCurrent.endDrag(e);}
-this.dragCurrent.onMouseUp(e);}
-this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(e){if(!this.dragCurrent){return true;}
-if(Ext.isIE&&(e.button!==0&&e.button!==1&&e.button!==2)){this.stopEvent(e);return this.handleMouseUp(e);}
-if(!this.dragThreshMet){var diffX=Math.abs(this.startX-Ext.lib.Event.getPageX(e));var diffY=Math.abs(this.startY-Ext.lib.Event.getPageY(e));if(diffX>this.clickPixelThresh||diffY>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}
-if(this.dragThreshMet){this.dragCurrent.b4Drag(e);this.dragCurrent.onDrag(e);if(!this.dragCurrent.moveOnly){this.fireEvents(e,false);}}
-this.stopEvent(e);return true;},fireEvents:function(e,isDrop){var dc=this.dragCurrent;if(!dc||dc.isLocked()){return;}
-var x=Ext.lib.Event.getPageX(e);var y=Ext.lib.Event.getPageY(e);var pt=new Ext.lib.Point(x,y);var oldOvers=[];var outEvts=[];var overEvts=[];var dropEvts=[];var enterEvts=[];for(var i in this.dragOvers){var ddo=this.dragOvers[i];if(!this.isTypeOfDD(ddo)){continue;}
-if(!this.isOverTarget(pt,ddo,this.mode)){outEvts.push(ddo);}
-oldOvers[i]=true;delete this.dragOvers[i];}
-for(var sGroup in dc.groups){if("string"!=typeof sGroup){continue;}
-for(i in this.ids[sGroup]){var oDD=this.ids[sGroup][i];if(!this.isTypeOfDD(oDD)){continue;}
-if(oDD.isTarget&&!oDD.isLocked()&&oDD!=dc){if(this.isOverTarget(pt,oDD,this.mode)){if(isDrop){dropEvts.push(oDD);}else{if(!oldOvers[oDD.id]){enterEvts.push(oDD);}else{overEvts.push(oDD);}
-this.dragOvers[oDD.id]=oDD;}}}}}
-if(this.mode){if(outEvts.length){dc.b4DragOut(e,outEvts);dc.onDragOut(e,outEvts);}
-if(enterEvts.length){dc.onDragEnter(e,enterEvts);}
-if(overEvts.length){dc.b4DragOver(e,overEvts);dc.onDragOver(e,overEvts);}
-if(dropEvts.length){dc.b4DragDrop(e,dropEvts);dc.onDragDrop(e,dropEvts);}}else{var len=0;for(i=0,len=outEvts.length;i<len;++i){dc.b4DragOut(e,outEvts[i].id);dc.onDragOut(e,outEvts[i].id);}
-for(i=0,len=enterEvts.length;i<len;++i){dc.onDragEnter(e,enterEvts[i].id);}
-for(i=0,len=overEvts.length;i<len;++i){dc.b4DragOver(e,overEvts[i].id);dc.onDragOver(e,overEvts[i].id);}
-for(i=0,len=dropEvts.length;i<len;++i){dc.b4DragDrop(e,dropEvts[i].id);dc.onDragDrop(e,dropEvts[i].id);}}
-if(isDrop&&!dropEvts.length){dc.onInvalidDrop(e);}},getBestMatch:function(dds){var winner=null;var len=dds.length;if(len==1){winner=dds[0];}else{for(var i=0;i<len;++i){var dd=dds[i];if(dd.cursorIsOver){winner=dd;break;}else{if(!winner||winner.overlap.getArea()<dd.overlap.getArea()){winner=dd;}}}}
-return winner;},refreshCache:function(groups){for(var sGroup in groups){if("string"!=typeof sGroup){continue;}
-for(var i in this.ids[sGroup]){var oDD=this.ids[sGroup][i];if(this.isTypeOfDD(oDD)){var loc=this.getLocation(oDD);if(loc){this.locationCache[oDD.id]=loc;}else{delete this.locationCache[oDD.id];}}}}},verifyEl:function(el){try{if(el){var parent=el.offsetParent;if(parent){return true;}}}catch(e){}
-return false;},getLocation:function(oDD){if(!this.isTypeOfDD(oDD)){return null;}
-var el=oDD.getEl(),pos,x1,x2,y1,y2,t,r,b,l;try{pos=Ext.lib.Dom.getXY(el);}catch(e){}
-if(!pos){return null;}
-x1=pos[0];x2=x1+el.offsetWidth;y1=pos[1];y2=y1+el.offsetHeight;t=y1-oDD.padding[0];r=x2+oDD.padding[1];b=y2+oDD.padding[2];l=x1-oDD.padding[3];return new Ext.lib.Region(t,r,b,l);},isOverTarget:function(pt,oTarget,intersect){var loc=this.locationCache[oTarget.id];if(!loc||!this.useCache){loc=this.getLocation(oTarget);this.locationCache[oTarget.id]=loc;}
-if(!loc){return false;}
-oTarget.cursorIsOver=loc.contains(pt);var dc=this.dragCurrent;if(!dc||!dc.getTargetCoord||(!intersect&&!dc.constrainX&&!dc.constrainY)){return oTarget.cursorIsOver;}
-oTarget.overlap=null;var pos=dc.getTargetCoord(pt.x,pt.y);var el=dc.getDragEl();var curRegion=new Ext.lib.Region(pos.y,pos.x+el.offsetWidth,pos.y+el.offsetHeight,pos.x);var overlap=curRegion.intersect(loc);if(overlap){oTarget.overlap=overlap;return(intersect)?true:oTarget.cursorIsOver;}else{return false;}},_onUnload:function(e,me){Ext.dd.DragDropMgr.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}
-this._execOnAll("unreg",[]);for(i in this.elementCache){delete this.elementCache[i];}
-this.elementCache={};this.ids={};},elementCache:{},getElWrapper:function(id){var oWrapper=this.elementCache[id];if(!oWrapper||!oWrapper.el){oWrapper=this.elementCache[id]=new this.ElementWrapper(Ext.getDom(id));}
-return oWrapper;},getElement:function(id){return Ext.getDom(id);},getCss:function(id){var el=Ext.getDom(id);return(el)?el.style:null;},ElementWrapper:function(el){this.el=el||null;this.id=this.el&&el.id;this.css=this.el&&el.style;},getPosX:function(el){return Ext.lib.Dom.getX(el);},getPosY:function(el){return Ext.lib.Dom.getY(el);},swapNode:function(n1,n2){if(n1.swapNode){n1.swapNode(n2);}else{var p=n2.parentNode;var s=n2.nextSibling;if(s==n1){p.insertBefore(n1,n2);}else if(n2==n1.nextSibling){p.insertBefore(n2,n1);}else{n1.parentNode.replaceChild(n2,n1);p.insertBefore(n1,s);}}},getScroll:function(){var t,l,dde=document.documentElement,db=document.body;if(dde&&(dde.scrollTop||dde.scrollLeft)){t=dde.scrollTop;l=dde.scrollLeft;}else if(db){t=db.scrollTop;l=db.scrollLeft;}else{}
-return{top:t,left:l};},getStyle:function(el,styleProp){return Ext.fly(el).getStyle(styleProp);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(moveEl,targetEl){var aCoord=Ext.lib.Dom.getXY(targetEl);Ext.lib.Dom.setXY(moveEl,aCoord);},numericSort:function(a,b){return(a-b);},_timeoutCount:0,_addListeners:function(){var DDM=Ext.dd.DDM;if(Ext.lib.Event&&document){DDM._onLoad();}else{if(DDM._timeoutCount>2000){}else{setTimeout(DDM._addListeners,10);if(document&&document.body){DDM._timeoutCount+=1;}}}},handleWasClicked:function(node,id){if(this.isHandle(id,node.id)){return true;}else{var p=node.parentNode;while(p){if(this.isHandle(id,p.id)){return true;}else{p=p.parentNode;}}}
-return false;}};}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners();}
-Ext.dd.DD=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(iPageX,iPageY){var x=iPageX-this.startPageX;var y=iPageY-this.startPageY;this.setDelta(x,y);},setDelta:function(iDeltaX,iDeltaY){this.deltaX=iDeltaX;this.deltaY=iDeltaY;},setDragElPos:function(iPageX,iPageY){var el=this.getDragEl();this.alignElWithMouse(el,iPageX,iPageY);},alignElWithMouse:function(el,iPageX,iPageY){var oCoord=this.getTargetCoord(iPageX,iPageY);var fly=el.dom?el:Ext.fly(el);if(!this.deltaSetXY){var aCoord=[oCoord.x,oCoord.y];fly.setXY(aCoord);var newLeft=fly.getLeft(true);var newTop=fly.getTop(true);this.deltaSetXY=[newLeft-oCoord.x,newTop-oCoord.y];}else{fly.setLeftTop(oCoord.x+this.deltaSetXY[0],oCoord.y+this.deltaSetXY[1]);}
-this.cachePosition(oCoord.x,oCoord.y);this.autoScroll(oCoord.x,oCoord.y,el.offsetHeight,el.offsetWidth);return oCoord;},cachePosition:function(iPageX,iPageY){if(iPageX){this.lastPageX=iPageX;this.lastPageY=iPageY;}else{var aCoord=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=aCoord[0];this.lastPageY=aCoord[1];}},autoScroll:function(x,y,h,w){if(this.scroll){var clientH=Ext.lib.Dom.getViewWidth();var clientW=Ext.lib.Dom.getViewHeight();var st=this.DDM.getScrollTop();var sl=this.DDM.getScrollLeft();var bot=h+y;var right=w+x;var toBot=(clientH+st-y-this.deltaY);var toRight=(clientW+sl-x-this.deltaX);var thresh=40;var scrAmt=(document.all)?80:30;if(bot>clientH&&toBot<thresh){window.scrollTo(sl,st+scrAmt);}
-if(y<st&&st>0&&y-st<thresh){window.scrollTo(sl,st-scrAmt);}
-if(right>clientW&&toRight<thresh){window.scrollTo(sl+scrAmt,st);}
-if(x<sl&&sl>0&&x-sl<thresh){window.scrollTo(sl-scrAmt,st);}}},getTargetCoord:function(iPageX,iPageY){var x=iPageX-this.deltaX;var y=iPageY-this.deltaY;if(this.constrainX){if(x<this.minX){x=this.minX;}
-if(x>this.maxX){x=this.maxX;}}
-if(this.constrainY){if(y<this.minY){y=this.minY;}
-if(y>this.maxY){y=this.maxY;}}
-x=this.getTick(x,this.xTicks);y=this.getTick(y,this.yTicks);return{x:x,y:y};},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(e){this.autoOffset(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));},b4Drag:function(e){this.setDragElPos(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));},toString:function(){return("DD "+this.id);}});Ext.dd.DDProxy=function(id,sGroup,config){if(id){this.init(id,sGroup,config);this.initFrame();}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var self=this;var body=document.body;if(!body||!body.firstChild){setTimeout(function(){self.createFrame();},50);return;}
-var div=this.getDragEl();if(!div){div=document.createElement("div");div.id=this.dragElId;var s=div.style;s.position="absolute";s.visibility="hidden";s.cursor="move";s.border="2px solid #aaa";s.zIndex=999;body.insertBefore(div,body.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId);},showFrame:function(iPageX,iPageY){var el=this.getEl();var dragEl=this.getDragEl();var s=dragEl.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(s.width,10)/2),Math.round(parseInt(s.height,10)/2));}
-this.setDragElPos(iPageX,iPageY);Ext.fly(dragEl).show();},_resizeProxy:function(){if(this.resizeFrame){var el=this.getEl();Ext.fly(this.getDragEl()).setSize(el.offsetWidth,el.offsetHeight);}},b4MouseDown:function(e){var x=Ext.lib.Event.getPageX(e);var y=Ext.lib.Event.getPageY(e);this.autoOffset(x,y);this.setDragElPos(x,y);},b4StartDrag:function(x,y){this.showFrame(x,y);},b4EndDrag:function(e){Ext.fly(this.getDragEl()).hide();},endDrag:function(e){var lel=this.getEl();var del=this.getDragEl();del.style.visibility="";this.beforeMove();lel.style.visibility="hidden";Ext.dd.DDM.moveToEl(lel,del);del.style.visibility="hidden";lel.style.visibility="";this.afterDrag();},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id);}});Ext.dd.DDTarget=function(id,sGroup,config){if(id){this.initTarget(id,sGroup,config);}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{toString:function(){return("DDTarget "+this.id);}});
-
-Ext.dd.ScrollManager=function(){var ddm=Ext.dd.DragDropMgr;var els={};var dragEl=null;var proc={};var onStop=function(e){dragEl=null;clearProc();};var triggerRefresh=function(){if(ddm.dragCurrent){ddm.refreshCache(ddm.dragCurrent.groups);}};var doScroll=function(){if(ddm.dragCurrent){var dds=Ext.dd.ScrollManager;if(!dds.animate){if(proc.el.scroll(proc.dir,dds.increment)){triggerRefresh();}}else{proc.el.scroll(proc.dir,dds.increment,true,dds.animDuration,triggerRefresh);}}};var clearProc=function(){if(proc.id){clearInterval(proc.id);}
-proc.id=0;proc.el=null;proc.dir="";};var startProc=function(el,dir){clearProc();proc.el=el;proc.dir=dir;proc.id=setInterval(doScroll,Ext.dd.ScrollManager.frequency);};var onFire=function(e,isDrop){if(isDrop||!ddm.dragCurrent){return;}
-var dds=Ext.dd.ScrollManager;if(!dragEl||dragEl!=ddm.dragCurrent){dragEl=ddm.dragCurrent;dds.refreshCache();}
-var xy=Ext.lib.Event.getXY(e);var pt=new Ext.lib.Point(xy[0],xy[1]);for(var id in els){var el=els[id],r=el._region;if(r&&r.contains(pt)&&el.isScrollable()){if(r.bottom-pt.y<=dds.thresh){if(proc.el!=el){startProc(el,"down");}
-return;}else if(r.right-pt.x<=dds.thresh){if(proc.el!=el){startProc(el,"left");}
-return;}else if(pt.y-r.top<=dds.thresh){if(proc.el!=el){startProc(el,"up");}
-return;}else if(pt.x-r.left<=dds.thresh){if(proc.el!=el){startProc(el,"right");}
-return;}}}
-clearProc();};ddm.fireEvents=ddm.fireEvents.createSequence(onFire,ddm);ddm.stopDrag=ddm.stopDrag.createSequence(onStop,ddm);return{register:function(el){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.register(el[i]);}}else{el=Ext.get(el);els[el.id]=el;}},unregister:function(el){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.unregister(el[i]);}}else{el=Ext.get(el);delete els[el.id];}},thresh:25,increment:100,frequency:500,animate:true,animDuration:.4,refreshCache:function(){for(var id in els){if(typeof els[id]=='object'){els[id]._region=els[id].getRegion();}}}};}();
-
-Ext.dd.Registry=function(){var elements={};var handles={};var autoIdSeed=0;var getId=function(el,autogen){if(typeof el=="string"){return el;}
-var id=el.id;if(!id&&autogen!==false){id="extdd-"+(++autoIdSeed);el.id=id;}
-return id;};return{register:function(el,data){data=data||{};if(typeof el=="string"){el=document.getElementById(el);}
-data.ddel=el;elements[getId(el)]=data;if(data.isHandle!==false){handles[data.ddel.id]=data;}
-if(data.handles){var hs=data.handles;for(var i=0,len=hs.length;i<len;i++){handles[getId(hs[i])]=data;}}},unregister:function(el){var id=getId(el,false);var data=elements[id];if(data){delete elements[id];if(data.handles){var hs=data.handles;for(var i=0,len=hs.length;i<len;i++){delete handles[getId(hs[i],false)];}}}},getHandle:function(id){if(typeof id!="string"){id=id.id;}
-return handles[id];},getHandleFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);return t?handles[t.id]:null;},getTarget:function(id){if(typeof id!="string"){id=id.id;}
-return elements[id];},getTargetFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);return t?elements[t.id]||handles[t.id]:null;}};}();
-
-Ext.dd.StatusProxy=function(config){Ext.apply(this,config);this.id=this.id||Ext.id();this.el=new Ext.Layer({dh:{id:this.id,tag:"div",cls:"x-dd-drag-proxy "+this.dropNotAllowed,children:[{tag:"div",cls:"x-dd-drop-icon"},{tag:"div",cls:"x-dd-drag-ghost"}]},shadow:!config||config.shadow!==false});this.ghost=Ext.get(this.el.dom.childNodes[1]);this.dropStatus=this.dropNotAllowed;};Ext.dd.StatusProxy.prototype={dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",setStatus:function(cssClass){cssClass=cssClass||this.dropNotAllowed;if(this.dropStatus!=cssClass){this.el.replaceClass(this.dropStatus,cssClass);this.dropStatus=cssClass;}},reset:function(clearGhost){this.el.dom.className="x-dd-drag-proxy "+this.dropNotAllowed;this.dropStatus=this.dropNotAllowed;if(clearGhost){this.ghost.update("");}},update:function(html){if(typeof html=="string"){this.ghost.update(html);}else{this.ghost.update("");html.style.margin="0";this.ghost.dom.appendChild(html);}},getEl:function(){return this.el;},getGhost:function(){return this.ghost;},hide:function(clear){this.el.hide();if(clear){this.reset(true);}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop();}},show:function(){this.el.show();},sync:function(){this.el.sync();},repair:function(xy,callback,scope){this.callback=callback;this.scope=scope;if(xy&&this.animRepair!==false){this.el.addClass("x-dd-drag-repair");this.el.hideUnders(true);this.anim=this.el.shift({duration:this.repairDuration||.5,easing:'easeOut',xy:xy,stopFx:true,callback:this.afterRepair,scope:this});}else{this.afterRepair();}},afterRepair:function(){this.hide(true);if(typeof this.callback=="function"){this.callback.call(this.scope||this);}
-this.callback=null;this.scope=null;}};
-
-Ext.dd.DragSource=function(el,config){this.el=Ext.get(el);this.dragData={};Ext.apply(this,config);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy();}
-Ext.dd.DragSource.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll===true});this.dragging=false;};Ext.extend(Ext.dd.DragSource,Ext.dd.DDProxy,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",getDragData:function(e){return this.dragData;},onDragEnter:function(e,id){var target=Ext.dd.DragDropMgr.getDDById(id);this.cachedTarget=target;if(this.beforeDragEnter(target,e,id)!==false){if(target.isNotifyTarget){var status=target.notifyEnter(this,e,this.dragData);this.proxy.setStatus(status);}else{this.proxy.setStatus(this.dropAllowed);}
-if(this.afterDragEnter){this.afterDragEnter(target,e,id);}}},beforeDragEnter:function(target,e,id){return true;},alignElWithMouse:function(){Ext.dd.DragSource.superclass.alignElWithMouse.apply(this,arguments);this.proxy.sync();},onDragOver:function(e,id){var target=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragOver(target,e,id)!==false){if(target.isNotifyTarget){var status=target.notifyOver(this,e,this.dragData);this.proxy.setStatus(status);}
-if(this.afterDragOver){this.afterDragOver(target,e,id);}}},beforeDragOver:function(target,e,id){return true;},onDragOut:function(e,id){var target=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragOut(target,e,id)!==false){if(target.isNotifyTarget){target.notifyOut(this,e,this.dragData);}
-this.proxy.reset();if(this.afterDragOut){this.afterDragOut(target,e,id);}}
-this.cachedTarget=null;},beforeDragOut:function(target,e,id){return true;},onDragDrop:function(e,id){var target=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragDrop(target,e,id)!==false){if(target.isNotifyTarget){if(target.notifyDrop(this,e,this.dragData)){this.onValidDrop(target,e,id);}else{this.onInvalidDrop(target,e,id);}}else{this.onValidDrop(target,e,id);}
-if(this.afterDragDrop){this.afterDragDrop(target,e,id);}}},beforeDragDrop:function(target,e,id){return true;},onValidDrop:function(target,e,id){this.hideProxy();if(this.afterValidDrop){this.afterValidDrop(target,e,id);}},getRepairXY:function(e,data){return this.el.getXY();},onInvalidDrop:function(target,e,id){this.beforeInvalidDrop(target,e,id);if(this.cachedTarget){if(this.cachedTarget.isNotifyTarget){this.cachedTarget.notifyOut(this,e,this.dragData);}
-this.cacheTarget=null;}
-this.proxy.repair(this.getRepairXY(e,this.dragData),this.afterRepair,this);if(this.afterInvalidDrop){this.afterInvalidDrop(e,id);}},afterRepair:function(){if(Ext.enableFx){this.el.highlight(this.hlColor||"c3daf9");}
-this.dragging=false;},beforeInvalidDrop:function(target,e,id){return true;},handleMouseDown:function(e){if(this.dragging){return;}
-var data=this.getDragData(e);if(data&&this.onBeforeDrag(data,e)!==false){this.dragData=data;this.proxy.stop();Ext.dd.DragSource.superclass.handleMouseDown.apply(this,arguments);}},onBeforeDrag:function(data,e){return true;},onStartDrag:Ext.emptyFn,startDrag:function(x,y){this.proxy.reset();this.dragging=true;this.proxy.update("");this.onInitDrag(x,y);this.proxy.show();},onInitDrag:function(x,y){var clone=this.el.dom.cloneNode(true);clone.id=Ext.id();this.proxy.update(clone);this.onStartDrag(x,y);return true;},getProxy:function(){return this.proxy;},hideProxy:function(){this.proxy.hide();this.proxy.reset(true);this.dragging=false;},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups);},b4EndDrag:function(e){},endDrag:function(e){this.onEndDrag(this.dragData,e);},onEndDrag:function(data,e){},autoOffset:function(x,y){this.setDelta(-12,-20);}});
-
-Ext.dd.DropTarget=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}
-Ext.dd.DropTarget.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{isTarget:true});};Ext.extend(Ext.dd.DropTarget,Ext.dd.DDTarget,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",isTarget:true,isNotifyTarget:true,notifyEnter:function(dd,e,data){if(this.overClass){this.el.addClass(this.overClass);}
-return this.dropAllowed;},notifyOver:function(dd,e,data){return this.dropAllowed;},notifyOut:function(dd,e,data){if(this.overClass){this.el.removeClass(this.overClass);}},notifyDrop:function(dd,e,data){return false;}});
-
-Ext.dd.DragZone=function(el,config){Ext.dd.DragZone.superclass.constructor.call(this,el,config);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}};Ext.extend(Ext.dd.DragZone,Ext.dd.DragSource,{getDragData:function(e){return Ext.dd.Registry.getHandleFromEvent(e);},onInitDrag:function(x,y){this.proxy.update(this.dragData.ddel.cloneNode(true));this.onStartDrag(x,y);return true;},afterRepair:function(){if(Ext.enableFx){Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor||"c3daf9");}
-this.dragging=false;},getRepairXY:function(e){return Ext.Element.fly(this.dragData.ddel).getXY();}});
-
-Ext.dd.DropZone=function(el,config){Ext.dd.DropZone.superclass.constructor.call(this,el,config);};Ext.extend(Ext.dd.DropZone,Ext.dd.DropTarget,{getTargetFromEvent:function(e){return Ext.dd.Registry.getTargetFromEvent(e);},onNodeEnter:function(n,dd,e,data){},onNodeOver:function(n,dd,e,data){return this.dropAllowed;},onNodeOut:function(n,dd,e,data){},onNodeDrop:function(n,dd,e,data){return false;},onContainerOver:function(dd,e,data){return this.dropNotAllowed;},onContainerDrop:function(dd,e,data){return false;},notifyEnter:function(dd,e,data){return this.dropNotAllowed;},notifyOver:function(dd,e,data){var n=this.getTargetFromEvent(e);if(!n){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);this.lastOverNode=null;}
-return this.onContainerOver(dd,e,data);}
-if(this.lastOverNode!=n){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);}
-this.onNodeEnter(n,dd,e,data);this.lastOverNode=n;}
-return this.onNodeOver(n,dd,e,data);},notifyOut:function(dd,e,data){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);this.lastOverNode=null;}},notifyDrop:function(dd,e,data){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);this.lastOverNode=null;}
-var n=this.getTargetFromEvent(e);return n?this.onNodeDrop(n,dd,e,data):this.onContainerDrop(dd,e,data);},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups);}});
-
-Ext.data.SortTypes={none:function(s){return s;},stripTagsRE:/<\/?[^>]+>/gi,asText:function(s){return String(s).replace(this.stripTagsRE,"");},asUCText:function(s){return String(s).toUpperCase().replace(this.stripTagsRE,"");},asUCString:function(s){return String(s).toUpperCase();},asDate:function(s){if(!s){return 0;}
-if(s instanceof Date){return s.getTime();}
-return Date.parse(String(s));},asFloat:function(s){var val=parseFloat(String(s).replace(/,/g,""));if(isNaN(val))val=0;return val;},asInt:function(s){var val=parseInt(String(s).replace(/,/g,""));if(isNaN(val))val=0;return val;}};
-
-Ext.data.Record=function(data,id){this.id=(id||id===0)?id:++Ext.data.Record.AUTO_ID;this.data=data;};Ext.data.Record.create=function(o){var f=function(){f.superclass.constructor.apply(this,arguments);};Ext.extend(f,Ext.data.Record);var p=f.prototype;p.fields=new Ext.util.MixedCollection(false,function(field){return field.name;});for(var i=0,len=o.length;i<len;i++){p.fields.add(new Ext.data.Field(o[i]));}
-f.getField=function(name){return p.fields.get(name);};return f;};Ext.data.Record.AUTO_ID=1000;Ext.data.Record.EDIT='edit';Ext.data.Record.REJECT='reject';Ext.data.Record.COMMIT='commit';Ext.data.Record.prototype={dirty:false,editing:false,error:null,modified:null,join:function(store){this.store=store;},set:function(name,value){if(this.data[name]==value){return;}
-this.dirty=true;if(!this.modified){this.modified={};}
-if(typeof this.modified[name]=='undefined'){this.modified[name]=this.data[name];}
-this.data[name]=value;if(!this.editing){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified={};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
-this.dirty=false;delete this.modified;this.editing=false;if(this.store){this.store.afterReject(this);}},commit:function(){this.dirty=false;delete this.modified;this.editing=false;if(this.store){this.store.afterCommit(this);}},hasError:function(){return this.error!=null;},clearError:function(){this.error=null;}};
-
-Ext.data.Store=function(config){this.data=new Ext.util.MixedCollection(false);this.data.getKey=function(o){return o.id;};this.baseParams={};this.paramNames={"start":"start","limit":"limit","sort":"sort","dir":"dir"};if(config&&config.data){this.inlineData=config.data;delete config.data;}
-Ext.apply(this,config);if(this.reader){if(!this.recordType){this.recordType=this.reader.recordType;}
-if(this.reader.onMetaChange){this.reader.onMetaChange=this.onMetaChange.createDelegate(this);}}
-if(this.recordType){this.fields=this.recordType.prototype.fields;}
-this.modified=[];this.addEvents({datachanged:true,metachange:true,add:true,remove:true,update:true,clear:true,beforeload:true,load:true,loadexception:true});if(this.proxy){this.relayEvents(this.proxy,["loadexception"]);}
-this.sortToggle={};Ext.data.Store.superclass.constructor.call(this);if(this.inlineData){this.loadData(this.inlineData);delete this.inlineData;}};Ext.extend(Ext.data.Store,Ext.util.Observable,{remoteSort:false,lastOptions:null,add:function(records){records=[].concat(records);for(var i=0,len=records.length;i<len;i++){records[i].join(this);}
-var index=this.data.length;this.data.addAll(records);this.fireEvent("add",this,records,index);},remove:function(record){var index=this.data.indexOf(record);this.data.removeAt(index);this.fireEvent("remove",this,record,index);},removeAll:function(){this.data.clear();this.fireEvent("clear",this);},insert:function(index,records){records=[].concat(records);for(var i=0,len=records.length;i<len;i++){this.data.insert(index,records[i]);records[i].join(this);}
-this.fireEvent("add",this,records,index);},indexOf:function(record){return this.data.indexOf(record);},indexOfId:function(id){return this.data.indexOfKey(id);},getById:function(id){return this.data.key(id);},getAt:function(index){return this.data.itemAt(index);},getRange:function(start,end){return this.data.getRange(start,end);},storeOptions:function(o){o=Ext.apply({},o);delete o.callback;delete o.scope;this.lastOptions=o;},load:function(options){options=options||{};if(this.fireEvent("beforeload",this,options)!==false){this.storeOptions(options);var p=Ext.apply(options.params||{},this.baseParams);if(this.sortInfo&&this.remoteSort){var pn=this.paramNames;p[pn["sort"]]=this.sortInfo.field;p[pn["dir"]]=this.sortInfo.direction;}
-this.proxy.load(p,this.reader,this.loadRecords,this,options);}},reload:function(options){this.load(Ext.applyIf(options||{},this.lastOptions));},loadRecords:function(o,options,success){if(!o||success===false){if(success!==false){this.fireEvent("load",this,[],options);}
-if(options.callback){options.callback.call(options.scope||this,[],options,false);}
-return;}
-var r=o.records,t=o.totalRecords||r.length;for(var i=0,len=r.length;i<len;i++){r[i].join(this);}
-if(!options||options.add!==true){this.data.clear();this.data.addAll(r);this.totalLength=t;this.applySort();this.fireEvent("datachanged",this);}else{this.totalLength=Math.max(t,this.data.length+r.length);this.data.addAll(r);}
-this.fireEvent("load",this,r,options);if(options.callback){options.callback.call(options.scope||this,r,options,true);}},loadData:function(o,append){var r=this.reader.readRecords(o);this.loadRecords(r,{add:append},true);},getCount:function(){return this.data.length||0;},getTotalCount:function(){return this.totalLength||0;},getSortState:function(){return this.sortInfo;},applySort:function(){if(this.sortInfo&&!this.remoteSort){var s=this.sortInfo,f=s.field;var st=this.fields.get(f).sortType;var fn=function(r1,r2){var v1=st(r1.data[f]),v2=st(r2.data[f]);return v1>v2?1:(v1<v2?-1:0);};this.data.sort(s.direction,fn);if(this.snapshot&&this.snapshot!=this.data){this.snapshot.sort(s.direction,fn);}}},setDefaultSort:function(field,dir){this.sortInfo={field:field,direction:dir?dir.toUpperCase():"ASC"};},sort:function(fieldName,dir){var f=this.fields.get(fieldName);if(!dir){if(this.sortInfo&&this.sortInfo.field==f.name){dir=(this.sortToggle[f.name]||"ASC").toggle("ASC","DESC");}else{dir=f.sortDir;}}
-this.sortToggle[f.name]=dir;this.sortInfo={field:f.name,direction:dir};if(!this.remoteSort){this.applySort();this.fireEvent("datachanged",this);}else{this.load(this.lastOptions);}},each:function(fn,scope){this.data.each(fn,scope);},getModifiedRecords:function(){return this.modified;},filter:function(property,value){if(!value.exec){value=String(value);if(value.length==0){return this.clearFilter();}
-value=new RegExp("^"+Ext.escapeRe(value),"i");}
-this.filterBy(function(r){return value.test(r.data[property]);});},filterBy:function(fn,scope){var data=this.snapshot||this.data;this.snapshot=data;this.data=data.filterBy(fn,scope);this.fireEvent("datachanged",this);},clearFilter:function(suppressEvent){if(this.snapshot&&this.snapshot!=this.data){this.data=this.snapshot;delete this.snapshot;if(suppressEvent!==true){this.fireEvent("datachanged",this);}}},afterEdit:function(record){if(this.modified.indexOf(record)==-1){this.modified.push(record);}
-this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);}});
-
-Ext.data.SimpleStore=function(config){Ext.data.SimpleStore.superclass.constructor.call(this,{reader:new Ext.data.ArrayReader({id:config.id},Ext.data.Record.create(config.fields)),proxy:new Ext.data.MemoryProxy(config.data)});this.load();};Ext.extend(Ext.data.SimpleStore,Ext.data.Store);
-
-Ext.data.Connection=function(config){Ext.apply(this,config);this.addEvents({"beforerequest":true,"requestcomplete":true,"requestexception":true});Ext.data.Connection.superclass.constructor.call(this);};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,request:function(options){if(this.fireEvent("beforerequest",this,options)!==false){var p=options.params;if(typeof p=="object"){p=Ext.urlEncode(Ext.apply(options.params,this.extraParams));}
-var cb={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{options:options},timeout:this.timeout};var method=options.method||this.method||(p?"POST":"GET");var url=options.url||this.url;if(this.autoAbort!==false){this.abort();}
-if(method=='GET'&&p){url+=(url.indexOf('?')!=-1?'&':'?')+p;p='';}
-this.transId=Ext.lib.Ajax.request(method,url,cb,p);}else{if(typeof options.callback=="function"){options.callback.call(options.scope||window,options,null,null);}}},isLoading:function(){return this.transId?true:false;},abort:function(){if(this.isLoading()){Ext.lib.Ajax.abort(this.transId);}},handleResponse:function(response){this.transId=false;var options=response.argument.options;this.fireEvent("requestcomplete",this,response,options);if(typeof options.callback=="function"){options.callback.call(options.scope||window,options,true,response);}},handleFailure:function(response,e){this.transId=false;var options=response.argument.options;this.fireEvent("requestexception",this,response,options,e);if(typeof options.callback=="function"){options.callback.call(options.scope||window,options,false,response);}}});
-
-Ext.data.Field=function(config){if(typeof config=="string"){config={name:config};}
-Ext.apply(this,config);if(!this.type){this.type="auto";}
-var st=Ext.data.SortTypes;if(typeof this.sortType=="string"){this.sortType=st[this.sortType];}
-if(!this.sortType){switch(this.type){case"string":this.sortType=st.asUCString;break;case"date":this.sortType=st.asDate;break;default:this.sortType=st.none;}}
-var stripRe=/[\$,%]/g;if(!this.convert){var cv,dateFormat=this.dateFormat;switch(this.type){case"":case"auto":case undefined:cv=function(v){return v;};break;case"string":cv=function(v){return String(v);};break;case"int":cv=function(v){return v!==undefined&&v!==null&&v!==''?parseInt(String(v).replace(stripRe,""),10):'';};break;case"float":cv=function(v){return v!==undefined&&v!==null&&v!==''?parseFloat(String(v).replace(stripRe,""),10):'';};break;case"bool":case"boolean":cv=function(v){return v===true||v==="true"||v==1;};break;case"date":cv=function(v){if(!v){return'';}
-if(v instanceof Date){return v;}
-if(dateFormat){if(dateFormat=="timestamp"){return new Date(v*1000);}
-return Date.parseDate(v,dateFormat);}
-var parsed=Date.parse(v);return parsed?new Date(parsed):null;};break;}
-this.convert=cv;}};Ext.data.Field.prototype={dateFormat:null,defaultValue:"",mapping:null,sortType:null,sortDir:"ASC"};
-
-Ext.data.DataReader=function(meta,recordType){this.meta=meta;this.recordType=recordType instanceof Array?Ext.data.Record.create(recordType):recordType;};Ext.data.DataReader.prototype={};
-
-Ext.data.DataProxy=function(){this.addEvents({beforeload:true,load:true,loadexception:true});Ext.data.DataProxy.superclass.constructor.call(this);};Ext.extend(Ext.data.DataProxy,Ext.util.Observable);
-
-Ext.data.MemoryProxy=function(data){Ext.data.MemoryProxy.superclass.constructor.call(this);this.data=data;};Ext.extend(Ext.data.MemoryProxy,Ext.data.DataProxy,{load:function(params,reader,callback,scope,arg){params=params||{};var result;try{result=reader.readRecords(this.data);}catch(e){this.fireEvent("loadexception",this,arg,null,e);callback.call(scope,null,arg,false);return;}
-callback.call(scope,result,arg,true);},update:function(params,records){}});
-
-Ext.data.HttpProxy=function(conn){Ext.data.HttpProxy.superclass.constructor.call(this);this.conn=conn.events?conn:new Ext.data.Connection(conn);};Ext.extend(Ext.data.HttpProxy,Ext.data.DataProxy,{getConnection:function(){return this.conn;},load:function(params,reader,callback,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){this.conn.request({params:params||{},request:{callback:callback,scope:scope,arg:arg},reader:reader,callback:this.loadResponse,scope:this});}else{callback.call(scope||this,null,arg,false);}},loadResponse:function(o,success,response){if(!success){this.fireEvent("loadexception",this,o,response);o.request.callback.call(o.request.scope,null,o.request.arg,false);return;}
-var result;try{result=o.reader.read(response);}catch(e){this.fireEvent("loadexception",this,o,response,e);o.request.callback.call(o.request.scope,null,o.request.arg,false);return;}
-this.fireEvent("load",this,o,o.request.arg);o.request.callback.call(o.request.scope,result,o.request.arg,true);},update:function(dataSet){},updateResponse:function(dataSet){}});
-
-Ext.data.ScriptTagProxy=function(config){Ext.data.ScriptTagProxy.superclass.constructor.call(this);Ext.apply(this,config);this.head=document.getElementsByTagName("head")[0];};Ext.data.ScriptTagProxy.TRANS_ID=1000;Ext.extend(Ext.data.ScriptTagProxy,Ext.data.DataProxy,{timeout:30000,callbackParam:"callback",nocache:true,load:function(params,reader,callback,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){var p=Ext.urlEncode(Ext.apply(params,this.extraParams));var url=this.url;url+=(url.indexOf("?")!=-1?"&":"?")+p;if(this.nocache){url+="&_dc="+(new Date().getTime());}
-var transId=++Ext.data.ScriptTagProxy.TRANS_ID;var trans={id:transId,cb:"stcCallback"+transId,scriptId:"stcScript"+transId,params:params,arg:arg,url:url,callback:callback,scope:scope,reader:reader};var conn=this;window[trans.cb]=function(o){conn.handleResponse(o,trans);};url+=String.format("&{0}={1}",this.callbackParam,trans.cb);if(this.autoAbort!==false){this.abort();}
-trans.timeoutId=this.handleFailure.defer(this.timeout,this,[trans]);var script=document.createElement("script");script.setAttribute("src",url);script.setAttribute("type","text/javascript");script.setAttribute("id",trans.scriptId);this.head.appendChild(script);this.trans=trans;}else{callback.call(scope||this,null,arg,false);}},isLoading:function(){return this.trans?true:false;},abort:function(){if(this.isLoading()){this.destroyTrans(this.trans);}},destroyTrans:function(trans,isLoaded){this.head.removeChild(document.getElementById(trans.scriptId));clearTimeout(trans.timeoutId);if(isLoaded){window[trans.cb]=undefined;try{delete window[trans.cb];}catch(e){}}else{window[trans.cb]=function(){window[trans.cb]=undefined;try{delete window[trans.cb];}catch(e){}};}},handleResponse:function(o,trans){this.trans=false;this.destroyTrans(trans,true);var result;try{result=trans.reader.readRecords(o);}catch(e){this.fireEvent("loadexception",this,o,trans.arg,e);trans.callback.call(trans.scope||window,null,trans.arg,false);return;}
-this.fireEvent("load",this,o,trans.arg);trans.callback.call(trans.scope||window,result,trans.arg,true);},handleFailure:function(trans){this.trans=false;this.destroyTrans(trans,false);this.fireEvent("loadexception",this,null,trans.arg);trans.callback.call(trans.scope||window,null,trans.arg,false);}});
-
-Ext.data.JsonReader=function(meta,recordType){Ext.data.JsonReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(Ext.data.JsonReader,Ext.data.DataReader,{read:function(response){var json=response.responseText;var o=eval("("+json+")");if(!o){throw{message:"JsonReader.read: Json object not found"};}
-if(o.metaData){delete this.ef;this.meta=o.metaData;this.recordType=Ext.data.Record.create(o.metaData.fields);this.onMetaChange(this.meta,this.recordType,o);}
-return this.readRecords(o);},onMetaChange:function(meta,recordType,o){},simpleAccess:function(obj,subsc){return obj[subsc];},getJsonAccessor:function(){var re=/[\[\.]/;return function(expr){try{return(re.test(expr))?new Function("obj","return obj."+expr):function(obj){return obj[expr];};}catch(e){}
-return Ext.emptyFn;};}(),readRecords:function(o){this.jsonData=o;var s=this.meta,Record=this.recordType,f=Record.prototype.fields,fi=f.items,fl=f.length;if(!this.ef){if(s.totalProperty){this.getTotal=this.getJsonAccessor(s.totalProperty);}
-if(s.successProperty){this.getSuccess=this.getJsonAccessor(s.successProperty);}
-this.getRoot=s.root?this.getJsonAccessor(s.root):function(p){return p;};if(s.id){var g=this.getJsonAccessor(s.id);this.getId=function(rec){var r=g(rec);return(r===undefined||r==="")?null:r;};}else{this.getId=function(){return null;};}
-this.ef=[];for(var i=0;i<fl;i++){f=fi[i];var map=(f.mapping!==undefined&&f.mapping!==null)?f.mapping:f.name;this.ef[i]=this.getJsonAccessor(map);}}
-var root=this.getRoot(o),c=root.length,totalRecords=c,success=true;if(s.totalProperty){var v=parseInt(this.getTotal(o),10);if(!isNaN(v)){totalRecords=v;}}
-if(s.successProperty){var v=this.getSuccess(o);if(v===false||v==='false'){success=false;}}
-var records=[];for(var i=0;i<c;i++){var n=root[i];var values={};var id=this.getId(n);for(var j=0;j<fl;j++){f=fi[j];var v=this.ef[j](n);values[f.name]=f.convert((v!==undefined)?v:f.defaultValue);}
-var record=new Record(values,id);record.json=n;records[i]=record;}
-return{success:success,records:records,totalRecords:totalRecords};}});
-
-Ext.data.XmlReader=function(meta,recordType){Ext.data.XmlReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(response){var doc=response.responseXML;if(!doc){throw{message:"XmlReader.read: XML Document not available"};}
-return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
-if(this.meta.success){var sv=q.selectValue(this.meta.success,root,true);success=sv!==false&&sv!=='false';}
-var records=[];var ns=q.select(this.meta.record,root);for(var i=0,len=ns.length;i<len;i++){var n=ns[i];var values={};var id=sid?q.selectValue(sid,n):undefined;for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var v=q.selectValue(f.mapping||f.name,n,f.defaultValue);v=f.convert(v);values[f.name]=v;}
-var record=new recordType(values,id);record.node=n;records[records.length]=record;}
-return{success:success,records:records,totalRecords:totalRecords||records.length};}});
-
-Ext.data.ArrayReader=function(meta,recordType){Ext.data.ArrayReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(Ext.data.ArrayReader,Ext.data.JsonReader,{readRecords:function(o){var sid=this.meta?this.meta.id:null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];var root=o;for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v);values[f.name]=v;}
-var record=new recordType(values,id);record.json=n;records[records.length]=record;}
-return{records:records,totalRecords:records.length};}});
-
-Ext.data.Tree=function(root){this.nodeHash={};this.root=null;if(root){this.setRootNode(root);}
-this.addEvents({"append":true,"remove":true,"move":true,"insert":true,"beforeappend":true,"beforeremove":true,"beforemove":true,"beforeinsert":true});Ext.data.Tree.superclass.constructor.call(this);};Ext.extend(Ext.data.Tree,Ext.util.Observable,{pathSeparator:"/",getRootNode:function(){return this.root;},setRootNode:function(node){this.root=node;node.ownerTree=this;node.isRoot=true;this.registerNode(node);return node;},getNodeById:function(id){return this.nodeHash[id];},registerNode:function(node){this.nodeHash[node.id]=node;},unregisterNode:function(node){delete this.nodeHash[node.id];},toString:function(){return"[Tree"+(this.id?" "+this.id:"")+"]";}});Ext.data.Node=function(attributes){this.attributes=attributes||{};this.leaf=this.attributes.leaf;this.id=this.attributes.id;if(!this.id){this.id=Ext.id(null,"ynode-");this.attributes.id=this.id;}
-this.childNodes=[];if(!this.childNodes.indexOf){this.childNodes.indexOf=function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
-return-1;};}
-this.parentNode=null;this.firstChild=null;this.lastChild=null;this.previousSibling=null;this.nextSibling=null;this.addEvents({"append":true,"remove":true,"move":true,"insert":true,"beforeappend":true,"beforeremove":true,"beforemove":true,"beforeinsert":true});this.listeners=this.attributes.listeners;Ext.data.Node.superclass.constructor.call(this);};Ext.extend(Ext.data.Node,Ext.util.Observable,{fireEvent:function(evtName){if(Ext.data.Node.superclass.fireEvent.apply(this,arguments)===false){return false;}
-var ot=this.getOwnerTree();if(ot){if(ot.proxyNodeEvent.apply(ot,arguments)===false){return false;}}
-return true;},isLeaf:function(){return this.leaf===true;},setFirstChild:function(node){this.firstChild=node;},setLastChild:function(node){this.lastChild=node;},isLast:function(){return(!this.parentNode?true:this.parentNode.lastChild==this);},isFirst:function(){return(!this.parentNode?true:this.parentNode.firstChild==this);},hasChildNodes:function(){return!this.isLeaf()&&this.childNodes.length>0;},appendChild:function(node){var multi=false;if(node instanceof Array){multi=node;}else if(arguments.length>1){multi=arguments;}
-if(multi){for(var i=0,len=multi.length;i<len;i++){this.appendChild(multi[i]);}}else{if(this.fireEvent("beforeappend",this.ownerTree,this,node)===false){return false;}
-var index=this.childNodes.length;var oldParent=node.parentNode;if(oldParent){if(node.fireEvent("beforemove",node.getOwnerTree(),node,oldParent,this,index)===false){return false;}
-oldParent.removeChild(node);}
-index=this.childNodes.length;if(index==0){this.setFirstChild(node);}
-this.childNodes.push(node);node.parentNode=this;var ps=this.childNodes[index-1];if(ps){node.previousSibling=ps;ps.nextSibling=node;}else{node.previousSibling=null;}
-node.nextSibling=null;this.setLastChild(node);node.setOwnerTree(this.getOwnerTree());this.fireEvent("append",this.ownerTree,this,node,index);if(oldParent){node.fireEvent("move",this.ownerTree,node,oldParent,this,index);}
-return node;}},removeChild:function(node){var index=this.childNodes.indexOf(node);if(index==-1){return false;}
-if(this.fireEvent("beforeremove",this.ownerTree,this,node)===false){return false;}
-this.childNodes.splice(index,1);if(node.previousSibling){node.previousSibling.nextSibling=node.nextSibling;}
-if(node.nextSibling){node.nextSibling.previousSibling=node.previousSibling;}
-if(this.firstChild==node){this.setFirstChild(node.nextSibling);}
-if(this.lastChild==node){this.setLastChild(node.previousSibling);}
-node.setOwnerTree(null);node.parentNode=null;node.previousSibling=null;node.nextSibling=null;this.fireEvent("remove",this.ownerTree,this,node);return node;},insertBefore:function(node,refNode){if(!refNode){return this.appendChild(node);}
-if(node==refNode){return false;}
-if(this.fireEvent("beforeinsert",this.ownerTree,this,node,refNode)===false){return false;}
-var index=this.childNodes.indexOf(refNode);var oldParent=node.parentNode;var refIndex=index;if(oldParent==this&&this.childNodes.indexOf(node)<index){refIndex--;}
-if(oldParent){if(node.fireEvent("beforemove",node.getOwnerTree(),node,oldParent,this,index,refNode)===false){return false;}
-oldParent.removeChild(node);}
-if(refIndex==0){this.setFirstChild(node);}
-this.childNodes.splice(refIndex,0,node);node.parentNode=this;var ps=this.childNodes[refIndex-1];if(ps){node.previousSibling=ps;ps.nextSibling=node;}else{node.previousSibling=null;}
-node.nextSibling=refNode;refNode.previousSibling=node;node.setOwnerTree(this.getOwnerTree());this.fireEvent("insert",this.ownerTree,this,node,refNode);if(oldParent){node.fireEvent("move",this.ownerTree,node,oldParent,this,refIndex,refNode);}
-return node;},item:function(index){return this.childNodes[index];},replaceChild:function(newChild,oldChild){this.insertBefore(newChild,oldChild);this.removeChild(oldChild);return oldChild;},indexOf:function(child){return this.childNodes.indexOf(child);},getOwnerTree:function(){if(!this.ownerTree){var p=this;while(p){if(p.ownerTree){this.ownerTree=p.ownerTree;break;}
-p=p.parentNode;}}
-return this.ownerTree;},getDepth:function(){var depth=0;var p=this;while(p.parentNode){++depth;p=p.parentNode;}
-return depth;},setOwnerTree:function(tree){if(tree!=this.ownerTree){if(this.ownerTree){this.ownerTree.unregisterNode(this);}
-this.ownerTree=tree;var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].setOwnerTree(tree);}
-if(tree){tree.registerNode(this);}}},getPath:function(attr){attr=attr||"id";var p=this.parentNode;var b=[this.attributes[attr]];while(p){b.unshift(p.attributes[attr]);p=p.parentNode;}
-var sep=this.getOwnerTree().pathSeparator;return sep+b.join(sep);},bubble:function(fn,scope,args){var p=this;while(p){if(fn.call(scope||p,args||p)===false){break;}
-p=p.parentNode;}},cascade:function(fn,scope,args){if(fn.call(scope||this,args||this)!==false){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].cascade(fn,scope,args);}}},eachChild:function(fn,scope,args){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){if(fn.call(scope||this,args||cs[i])===false){break;}}},findChild:function(attribute,value){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){if(cs[i].attributes[attribute]==value){return cs[i];}}
-return null;},findChildBy:function(fn,scope){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){if(fn.call(scope||cs[i],cs[i])===true){return cs[i];}}
-return null;},sort:function(fn,scope){var cs=this.childNodes;var len=cs.length;if(len>0){var sortFn=scope?function(){fn.apply(scope,arguments);}:fn;cs.sort(sortFn);for(var i=0;i<len;i++){var n=cs[i];n.previousSibling=cs[i-1];n.nextSibling=cs[i+1];if(i==0){this.setFirstChild(n);}
-if(i==len-1){this.setLastChild(n);}}}},contains:function(node){return node.isAncestor(this);},isAncestor:function(node){var p=this.parentNode;while(p){if(p==node){return true;}
-p=p.parentNode;}
-return false;},toString:function(){return"[Node"+(this.id?" "+this.id:"")+"]";}});
-
-Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});}};}();Ext.Component=function(config){config=config||{};if(config.tagName||config.dom||typeof config=="string"){config={el:config,id:config.id||config};}
-this.initialConfig=config;Ext.apply(this,config);this.addEvents({disable:true,enable:true,beforeshow:true,show:true,beforehide:true,hide:true,beforerender:true,render:true,beforedestroy:true,destroy:true});if(!this.id){this.id="ext-comp-"+(++Ext.Component.AUTO_ID);}
-Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);this.initComponent();if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{hidden:false,disabled:false,disabledClass:"x-item-disabled",rendered:false,allowDomMove:true,ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode];},hideMode:'display',initComponent:Ext.emptyFn,render:function(container,position){if(!this.rendered&&this.fireEvent("beforerender",this)!==false){if(!container&&this.el){this.el=Ext.get(this.el);container=this.el.dom.parentNode;this.allowDomMove=false;}
-this.container=Ext.get(container);this.rendered=true;if(position!==undefined){if(typeof position=='number'){position=this.container.dom.childNodes[position];}else{position=Ext.getDom(position);}}
-this.onRender(this.container,position||null);if(this.cls){this.el.addClass(this.cls);delete this.cls;}
-if(this.style){this.el.applyStyles(this.style);delete this.style;}
-this.fireEvent("render",this);this.afterRender(this.container);if(this.hidden){this.hide();}
-if(this.disabled){this.disable();}}
-return this;},onRender:function(ct,position){if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){ct.dom.insertBefore(this.el.dom,position);}}},getAutoCreate:function(){var cfg=typeof this.autoCreate=="object"?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!cfg.id){cfg.id=this.id;}
-return cfg;},afterRender:Ext.emptyFn,destroy:function(){if(this.fireEvent("beforedestroy",this)!==false){this.purgeListeners();this.beforeDestroy();if(this.rendered){this.el.removeAllListeners();this.el.remove();if(this.actionMode=="container"){this.container.remove();}}
-this.onDestroy();Ext.ComponentMgr.unregister(this);this.fireEvent("destroy",this);}},beforeDestroy:function(){},onDestroy:function(){},getEl:function(){return this.el;},getId:function(){return this.id;},focus:function(selectText){if(this.rendered){this.el.focus();if(selectText===true){this.el.dom.select();}}
-return this;},blur:function(){if(this.rendered){this.el.blur();}
-return this;},disable:function(){if(this.rendered){this.onDisable();}
-this.disabled=true;this.fireEvent("disable",this);return this;},onDisable:function(){this.getActionEl().addClass(this.disabledClass);this.el.dom.disabled=true;},enable:function(){if(this.rendered){this.onEnable();}
-this.disabled=false;this.fireEvent("enable",this);return this;},onEnable:function(){this.getActionEl().removeClass(this.disabledClass);this.el.dom.disabled=false;},setDisabled:function(disabled){this[disabled?"disable":"enable"]();},show:function(){if(this.fireEvent("beforeshow",this)!==false){this.hidden=false;if(this.rendered){this.onShow();}
-this.fireEvent("show",this);}
-return this;},onShow:function(){var ae=this.getActionEl();if(this.hideMode=='visibility'){ae.dom.style.visibility="visible";}else if(this.hideMode=='offsets'){ae.removeClass('x-hidden');}else{ae.dom.style.display="";}},hide:function(){if(this.fireEvent("beforehide",this)!==false){this.hidden=true;if(this.rendered){this.onHide();}
-this.fireEvent("hide",this);}
-return this;},onHide:function(){var ae=this.getActionEl();if(this.hideMode=='visibility'){ae.dom.style.visibility="hidden";}else if(this.hideMode=='offsets'){ae.addClass('x-hidden');}else{ae.dom.style.display="none";}},setVisible:function(visible){if(visible){this.show();}else{this.hide();}
-return this;},isVisible:function(){return this.getActionEl().isVisible();},cloneConfig:function(overrides){overrides=overrides||{};var id=overrides.id||Ext.id();var cfg=Ext.applyIf(overrides,this.initialConfig);cfg.id=id;return new this.__extcls(cfg);}});
-
-(function(){Ext.Layer=function(config,existingEl){config=config||{};var dh=Ext.DomHelper;var cp=config.parentEl,pel=cp?Ext.getDom(cp):document.body;if(existingEl){this.dom=Ext.getDom(existingEl);}
-if(!this.dom){var o=config.dh||{tag:"div",cls:"x-layer"};this.dom=dh.append(pel,o);}
-if(config.cls){this.addClass(config.cls);}
-this.constrain=config.constrain!==false;this.visibilityMode=Ext.Element.VISIBILITY;if(config.id){this.id=this.dom.id=config.id;}else{this.id=Ext.id(this.dom);}
-this.zindex=config.zindex||this.getZIndex();this.position("absolute",this.zindex);if(config.shadow){this.shadowOffset=config.shadowOffset||4;this.shadow=new Ext.Shadow({offset:this.shadowOffset,mode:config.shadow});}else{this.shadowOffset=0;}
-this.useShim=config.shim!==false&&Ext.useShims;this.useDisplay=config.useDisplay;this.hide();};var supr=Ext.Element.prototype;var shims=[];Ext.extend(Ext.Layer,Ext.Element,{getZIndex:function(){return this.zindex||parseInt(this.getStyle("z-index"),10)||11000;},getShim:function(){if(!this.useShim){return null;}
-if(this.shim){return this.shim;}
-var shim=shims.shift();if(!shim){shim=this.createShim();shim.enableDisplayMode('block');shim.dom.style.display='none';shim.dom.style.visibility='visible';}
-var pn=this.dom.parentNode;if(shim.dom.parentNode!=pn){pn.insertBefore(shim.dom,this.dom);}
-shim.setStyle('z-index',this.getZIndex()-2);this.shim=shim;return shim;},hideShim:function(){if(this.shim){this.shim.setDisplayed(false);shims.push(this.shim);delete this.shim;}},disableShadow:function(){if(this.shadow){this.shadowDisabled=true;this.shadow.hide();this.lastShadowOffset=this.shadowOffset;this.shadowOffset=0;}},enableShadow:function(show){if(this.shadow){this.shadowDisabled=false;this.shadowOffset=this.lastShadowOffset;delete this.lastShadowOffset;if(show){this.sync(true);}}},sync:function(doShow){var sw=this.shadow;if(!this.updating&&this.isVisible()&&(sw||this.useShim)){var sh=this.getShim();var w=this.getWidth(),h=this.getHeight();var l=this.getLeft(true),t=this.getTop(true);if(sw&&!this.shadowDisabled){if(doShow&&!sw.isVisible()){sw.show(this);}else{sw.realign(l,t,w,h);}
-if(sh){if(doShow){sh.show();}
-var a=sw.adjusts,s=sh.dom.style;s.left=(Math.min(l,l+a.l))+"px";s.top=(Math.min(t,t+a.t))+"px";s.width=(w+a.w)+"px";s.height=(h+a.h)+"px";}}else if(sh){if(doShow){sh.show();}
-sh.setSize(w,h);sh.setLeftTop(l,t);}}},destroy:function(){this.hideShim();if(this.shadow){this.shadow.hide();}
-this.removeAllListeners();var pn=this.dom.parentNode;if(pn){pn.removeChild(this.dom);}
-Ext.Element.uncache(this.id);},remove:function(){this.destroy();},beginUpdate:function(){this.updating=true;},endUpdate:function(){this.updating=false;this.sync(true);},hideUnders:function(negOffset){if(this.shadow){this.shadow.hide();}
-this.hideShim();},constrainXY:function(){if(this.constrain){var vw=Ext.lib.Dom.getViewWidth(),vh=Ext.lib.Dom.getViewHeight();var s=Ext.get(document).getScroll();var xy=this.getXY();var x=xy[0],y=xy[1];var w=this.dom.offsetWidth+this.shadowOffset,h=this.dom.offsetHeight+this.shadowOffset;var moved=false;if((x+w)>vw+s.left){x=vw-w-this.shadowOffset;moved=true;}
-if((y+h)>vh+s.top){y=vh-h-this.shadowOffset;moved=true;}
-if(x<s.left){x=s.left;moved=true;}
-if(y<s.top){y=s.top;moved=true;}
-if(moved){if(this.avoidY){var ay=this.avoidY;if(y<=ay&&(y+h)>=ay){y=ay-h-5;}}
-xy=[x,y];this.storeXY(xy);supr.setXY.call(this,xy);this.sync();}}},isVisible:function(){return this.visible;},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("");}else if(this.lastXY){supr.setXY.call(this,this.lastXY);}else if(this.lastLT){supr.setLeftTop.call(this,this.lastLT[0],this.lastLT[1]);}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false);}else{this.setLeftTop(-10000,-10000);}},setVisible:function(v,a,d,c,e){if(v){this.showAction();}
-if(a&&v){var cb=function(){this.sync(true);if(c){c();}}.createDelegate(this);supr.setVisible.call(this,true,true,d,cb,e);}else{if(!v){this.hideUnders(true);}
-var cb=c;if(a){cb=function(){this.hideAction();if(c){c();}}.createDelegate(this);}
-supr.setVisible.call(this,v,a,d,cb,e);if(v){this.sync(true);}else if(!a){this.hideAction();}}},storeXY:function(xy){delete this.lastLT;this.lastXY=xy;},storeLeftTop:function(left,top){delete this.lastXY;this.lastLT=[left,top];},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments);},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible());},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide();}},setLeft:function(left){this.storeLeftTop(left,this.getTop(true));supr.setLeft.apply(this,arguments);this.sync();},setTop:function(top){this.storeLeftTop(this.getLeft(true),top);supr.setTop.apply(this,arguments);this.sync();},setLeftTop:function(left,top){this.storeLeftTop(left,top);supr.setLeftTop.apply(this,arguments);this.sync();},setXY:function(xy,a,d,c,e){this.fixDisplay();this.beforeAction();this.storeXY(xy);var cb=this.createCB(c);supr.setXY.call(this,xy,a,d,cb,e);if(!a){cb();}},createCB:function(c){var el=this;return function(){el.constrainXY();el.sync(true);if(c){c();}};},setX:function(x,a,d,c,e){this.setXY([x,this.getY()],a,d,c,e);},setY:function(y,a,d,c,e){this.setXY([this.getX(),y],a,d,c,e);},setSize:function(w,h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setSize.call(this,w,h,a,d,cb,e);if(!a){cb();}},setWidth:function(w,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setWidth.call(this,w,a,d,cb,e);if(!a){cb();}},setHeight:function(h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setHeight.call(this,h,a,d,cb,e);if(!a){cb();}},setBounds:function(x,y,w,h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);if(!a){this.storeXY([x,y]);supr.setXY.call(this,[x,y]);supr.setSize.call(this,w,h,a,d,cb,e);cb();}else{supr.setBounds.call(this,x,y,w,h,a,d,cb,e);}
-return this;},setZIndex:function(zindex){this.zindex=zindex;this.setStyle("z-index",zindex+2);if(this.shadow){this.shadow.setZIndex(zindex+1);}
-if(this.shim){this.shim.setStyle("z-index",zindex);}}});})();
-
-Ext.Shadow=function(config){Ext.apply(this,config);if(typeof this.mode!="string"){this.mode=this.defaultMode;}
-var o=this.offset,a={h:0};var rad=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":a.w=0;a.l=a.t=o;a.t-=1;if(Ext.isIE){a.l-=this.offset+rad;a.t-=this.offset+rad;a.w-=rad;a.h-=rad;a.t+=1;}
-break;case"sides":a.w=(o*2);a.l=-o;a.t=o-1;if(Ext.isIE){a.l-=(this.offset-rad);a.t-=this.offset+rad;a.l+=1;a.w-=(this.offset-rad)*2;a.w-=rad+1;a.h-=1;}
-break;case"frame":a.w=a.h=(o*2);a.l=a.t=-o;a.t+=1;a.h-=2;if(Ext.isIE){a.l-=(this.offset-rad);a.t-=(this.offset-rad);a.l+=1;a.w-=(this.offset+rad+1);a.h-=(this.offset+rad);a.h+=1;}
-break;};this.adjusts=a;};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(target){target=Ext.get(target);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=target.dom){this.el.insertBefore(target);}}
-this.el.setStyle("z-index",this.zIndex||parseInt(target.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";}
-this.realign(target.getLeft(true),target.getTop(true),target.getWidth(),target.getHeight());this.el.dom.style.display="block";},isVisible:function(){return this.el?true:false;},realign:function(l,t,w,h){if(!this.el){return;}
-var a=this.adjusts,d=this.el.dom,s=d.style;var iea=0;s.left=(l+a.l)+"px";s.top=(t+a.t)+"px";var sw=(w+a.w),sh=(h+a.h),sws=sw+"px",shs=sh+"px";if(s.width!=sws||s.height!=shs){s.width=sws;s.height=shs;if(!Ext.isIE){var cn=d.childNodes;var sww=Math.max(0,(sw-12))+"px";cn[0].childNodes[1].style.width=sww;cn[1].childNodes[1].style.width=sww;cn[2].childNodes[1].style.width=sww;cn[1].style.height=Math.max(0,(sh-12))+"px";}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el;}},setZIndex:function(z){this.zIndex=z;if(this.el){this.el.setStyle("z-index",z);}}};Ext.Shadow.Pool=function(){var p=[];var markup=Ext.isIE?'<div class="x-ie-shadow"></div>':'<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';return{pull:function(){var sh=p.shift();if(!sh){sh=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,markup));sh.autoBoxAdjust=false;}
-return sh;},push:function(sh){p.push(sh);}};}();
-
-Ext.BoxComponent=function(config){Ext.BoxComponent.superclass.constructor.call(this,config);this.addEvents({resize:true,move:true});};Ext.extend(Ext.BoxComponent,Ext.Component,{boxReady:false,deferHeight:false,setSize:function(w,h){if(typeof w=='object'){h=w.height;w=w.width;}
-if(!this.boxReady){this.width=w;this.height=h;return this;}
-if(this.lastSize&&this.lastSize.width==w&&this.lastSize.height==h){return this;}
-this.lastSize={width:w,height:h};var adj=this.adjustSize(w,h);var aw=adj.width,ah=adj.height;if(aw!==undefined||ah!==undefined){var rz=this.getResizeEl();if(!this.deferHeight&&aw!==undefined&&ah!==undefined){rz.setSize(aw,ah);}else if(!this.deferHeight&&ah!==undefined){rz.setHeight(ah);}else if(aw!==undefined){rz.setWidth(aw);}
-this.onResize(aw,ah,w,h);this.fireEvent('resize',this,aw,ah,w,h);}
-return this;},getSize:function(){return this.el.getSize();},getPosition:function(local){if(local===true){return[this.el.getLeft(true),this.el.getTop(true)];}
-return this.xy||this.el.getXY();},getBox:function(local){var s=this.el.getSize();if(local){s.x=this.el.getLeft(true);s.y=this.el.getTop(true);}else{var xy=this.xy||this.el.getXY();s.x=xy[0];s.y=xy[1];}
-return s;},updateBox:function(box){this.setSize(box.width,box.height);this.setPagePosition(box.x,box.y);},getResizeEl:function(){return this.resizeEl||this.el;},getPositionEl:function(){return this.positionEl||this.el;},setPosition:function(x,y){this.x=x;this.y=y;if(!this.boxReady){return this;}
-var adj=this.adjustPosition(x,y);var ax=adj.x,ay=adj.y;var el=this.getPositionEl();if(ax!==undefined||ay!==undefined){if(ax!==undefined&&ay!==undefined){el.setLeftTop(ax,ay);}else if(ax!==undefined){el.setLeft(ax);}else if(ay!==undefined){el.setTop(ay);}
-this.onPosition(ax,ay);this.fireEvent('move',this,ax,ay);}
-return this;},setPagePosition:function(x,y){this.pageX=x;this.pageY=y;if(!this.boxReady){return;}
-if(x===undefined||y===undefined){return;}
-var p=this.el.translatePoints(x,y);this.setPosition(p.left,p.top);return this;},onRender:function(ct,position){Ext.BoxComponent.superclass.onRender.call(this,ct,position);if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl);}
-if(this.positionEl){this.positionEl=Ext.get(this.positionEl);}},afterRender:function(){Ext.BoxComponent.superclass.afterRender.call(this);this.boxReady=true;this.setSize(this.width,this.height);if(this.x||this.y){this.setPosition(this.x,this.y);}
-if(this.pageX||this.pageY){this.setPagePosition(this.pageX,this.pageY);}},syncSize:function(){this.setSize(this.el.getWidth(),this.el.getHeight());},onResize:function(adjWidth,adjHeight,rawWidth,rawHeight){},onPosition:function(x,y){},adjustSize:function(w,h){if(this.autoWidth){w='auto';}
-if(this.autoHeight){h='auto';}
-return{width:w,height:h};},adjustPosition:function(x,y){return{x:x,y:y};}});
-
-Ext.SplitBar=function(dragElement,resizingElement,orientation,placement,existingProxy){this.el=Ext.get(dragElement,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(resizingElement,true);this.orientation=orientation||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!existingProxy){this.proxy=Ext.SplitBar.createProxy(this.orientation);}else{this.proxy=Ext.get(existingProxy).dom;}
-this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=placement||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h");}else{this.placement=placement||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v");}
-this.addEvents({"resize":true,"moved":true,"beforeresize":true,"beforeapply":true});Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);if(!this.overlay){var o=Ext.DomHelper.insertFirst(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);o.unselectable();o.enableDisplayMode("block");Ext.SplitBar.prototype.overlay=o;}
-this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();;this.activeMaxSize=this.getMaximumSize();;var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
-this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){this.overlay.hide();}
-var newSize;if(this.orientation==Ext.SplitBar.HORIZONTAL){newSize=this.dragSpecs.startSize+
-(this.placement==Ext.SplitBar.LEFT?endPoint[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-endPoint[0]);}else{newSize=this.dragSpecs.startSize+
-(this.placement==Ext.SplitBar.TOP?endPoint[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-endPoint[1]);}
-newSize=Math.min(Math.max(newSize,this.activeMinSize),this.activeMaxSize);if(newSize!=this.dragSpecs.startSize){if(this.fireEvent('beforeapply',this,newSize)!==false){this.adapter.setElementSize(this,newSize);this.fireEvent("moved",this,newSize);this.fireEvent("resize",this,newSize);}}},getAdapter:function(){return this.adapter;},setAdapter:function(adapter){this.adapter=adapter;this.adapter.init(this);},getMinimumSize:function(){return this.minSize;},setMinimumSize:function(minSize){this.minSize=minSize;},getMaximumSize:function(){return this.maxSize;},setMaximumSize:function(maxSize){this.maxSize=maxSize;},setCurrentSize:function(size){var oldAnimate=this.animate;this.animate=false;this.adapter.setElementSize(this,size);this.animate=oldAnimate;},destroy:function(removeEl){if(this.shim){this.shim.remove();}
-this.dd.unreg();this.proxy.parentNode.removeChild(this.proxy);if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
-
-Ext.View=function(container,tpl,config){this.el=Ext.get(container);if(typeof tpl=="string"){tpl=new Ext.Template(tpl);}
-tpl.compile();this.tpl=tpl;Ext.apply(this,config);this.addEvents({"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"selectionchange":true,"beforeselect":true});this.el.on({"click":this.onClick,"dblclick":this.onDblClick,"contextmenu":this.onContextMenu,scope:this});this.selections=[];this.nodes=[];this.cmp=new Ext.CompositeElementLite([]);if(this.store){this.setStore(this.store,true);}
-Ext.View.superclass.constructor.call(this);};Ext.extend(Ext.View,Ext.util.Observable,{selectedClass:"x-view-selected",emptyText:"",getEl:function(){return this.el;},refresh:function(){var t=this.tpl;this.clearSelections();this.el.update("");var html=[];var records=this.store.getRange();if(records.length<1){this.el.update(this.emptyText);return;}
-for(var i=0,len=records.length;i<len;i++){var data=this.prepareData(records[i].data,i,records[i]);html[html.length]=t.apply(data);}
-this.el.update(html.join(""));this.nodes=this.el.dom.childNodes;this.updateIndexes(0);},prepareData:function(data){return data;},onUpdate:function(ds,record){this.clearSelections();var index=this.store.indexOf(record);var n=this.nodes[index];this.tpl.insertBefore(n,this.prepareData(record.data));n.parentNode.removeChild(n);this.updateIndexes(index,index);},onAdd:function(ds,records,index){this.clearSelections();if(this.nodes.length==0){this.refresh();return;}
-var n=this.nodes[index];for(var i=0,len=records.length;i<len;i++){var d=this.prepareData(records[i].data);if(n){this.tpl.insertBefore(n,d);}else{this.tpl.append(this.el,d);}}
-this.updateIndexes(index);},onRemove:function(ds,record,index){this.clearSelections();this.el.dom.removeChild(this.nodes[index]);this.updateIndexes(index);},refreshNode:function(index){this.onUpdate(this.store,this.store.getAt(index));},updateIndexes:function(startIndex,endIndex){var ns=this.nodes;startIndex=startIndex||0;endIndex=endIndex||ns.length-1;for(var i=startIndex;i<=endIndex;i++){ns[i].nodeIndex=i;}},setStore:function(store,initial){if(!initial&&this.store){this.store.un("datachanged",this.refresh);this.store.un("add",this.onAdd);this.store.un("remove",this.onRemove);this.store.un("update",this.onUpdate);this.store.un("clear",this.refresh);}
-if(store){store.on("datachanged",this.refresh,this);store.on("add",this.onAdd,this);store.on("remove",this.onRemove,this);store.on("update",this.onUpdate,this);store.on("clear",this.refresh,this);}
-this.store=store;if(store){this.refresh();}},findItemFromChild:function(node){var el=this.el.dom;if(!node||node.parentNode==el){return node;}
-var p=node.parentNode;while(p&&p!=el){if(p.parentNode==el){return p;}
-p=p.parentNode;}
-return null;},onClick:function(e){var item=this.findItemFromChild(e.getTarget());if(item){var index=this.indexOf(item);if(this.onItemClick(item,index,e)!==false){this.fireEvent("click",this,index,item,e);}}else{this.clearSelections();}},onContextMenu:function(e){var item=this.findItemFromChild(e.getTarget());if(item){this.fireEvent("contextmenu",this,this.indexOf(item),item,e);}},onDblClick:function(e){var item=this.findItemFromChild(e.getTarget());if(item){this.fireEvent("dblclick",this,this.indexOf(item),item,e);}},onItemClick:function(item,index,e){if(this.fireEvent("beforeclick",this,index,item,e)===false){return false;}
-if(this.multiSelect||this.singleSelect){if(this.multiSelect&&e.shiftKey&&this.lastSelection){this.select(this.getNodes(this.indexOf(this.lastSelection),index),false);}else{this.select(item,this.multiSelect&&e.ctrlKey);this.lastSelection=item;}
-e.preventDefault();}
-return true;},getSelectionCount:function(){return this.selections.length;},getSelectedNodes:function(){return this.selections;},getSelectedIndexes:function(){var indexes=[],s=this.selections;for(var i=0,len=s.length;i<len;i++){indexes.push(s[i].nodeIndex);}
-return indexes;},clearSelections:function(suppressEvent){if(this.nodes&&(this.multiSelect||this.singleSelect)&&this.selections.length>0){this.cmp.elements=this.selections;this.cmp.removeClass(this.selectedClass);this.selections=[];if(!suppressEvent){this.fireEvent("selectionchange",this,this.selections);}}},isSelected:function(node){var s=this.selections;if(s.length<1){return false;}
-node=this.getNode(node);return s.indexOf(node)!==-1;},select:function(nodeInfo,keepExisting,suppressEvent){if(nodeInfo instanceof Array){if(!keepExisting){this.clearSelections(true);}
-for(var i=0,len=nodeInfo.length;i<len;i++){this.select(nodeInfo[i],true,true);}}else{var node=this.getNode(nodeInfo);if(node&&!this.isSelected(node)){if(!keepExisting){this.clearSelections(true);}
-if(this.fireEvent("beforeselect",this,node,this.selections)!==false){Ext.fly(node).addClass(this.selectedClass);this.selections.push(node);if(!suppressEvent){this.fireEvent("selectionchange",this,this.selections);}}}}},getNode:function(nodeInfo){if(typeof nodeInfo=="string"){return document.getElementById(nodeInfo);}else if(typeof nodeInfo=="number"){return this.nodes[nodeInfo];}
-return nodeInfo;},getNodes:function(start,end){var ns=this.nodes;start=start||0;end=typeof end=="undefined"?ns.length-1:end;var nodes=[];if(start<=end){for(var i=start;i<=end;i++){nodes.push(ns[i]);}}else{for(var i=start;i>=end;i--){nodes.push(ns[i]);}}
-return nodes;},indexOf:function(node){node=this.getNode(node);if(typeof node.nodeIndex=="number"){return node.nodeIndex;}
-var ns=this.nodes;for(var i=0,len=ns.length;i<len;i++){if(ns[i]==node){return i;}}
-return-1;}});
-
-Ext.JsonView=function(container,tpl,config){Ext.JsonView.superclass.constructor.call(this,container,tpl,config);var um=this.el.getUpdateManager();um.setRenderer(this);um.on("update",this.onLoad,this);um.on("failure",this.onLoadException,this);this.addEvents({'beforerender':true,'load':true,'loadexception':true});};Ext.extend(Ext.JsonView,Ext.View,{jsonRoot:"",refresh:function(){this.clearSelections();this.el.update("");var html=[];var o=this.jsonData;if(o&&o.length>0){for(var i=0,len=o.length;i<len;i++){var data=this.prepareData(o[i],i,o);html[html.length]=this.tpl.apply(data);}}else{html.push(this.emptyText);}
-this.el.update(html.join(""));this.nodes=this.el.dom.childNodes;this.updateIndexes(0);},load:function(){var um=this.el.getUpdateManager();um.update.apply(um,arguments);},render:function(el,response){this.clearSelections();this.el.update("");var o;try{o=Ext.util.JSON.decode(response.responseText);if(this.jsonRoot){o=eval("o."+this.jsonRoot);}}catch(e){}
-this.jsonData=o;this.beforeRender();this.refresh();},getCount:function(){return this.jsonData?this.jsonData.length:0;},getNodeData:function(node){if(node instanceof Array){var data=[];for(var i=0,len=node.length;i<len;i++){data.push(this.getNodeData(node[i]));}
-return data;}
-return this.jsonData[this.indexOf(node)]||null;},beforeRender:function(){this.snapshot=this.jsonData;if(this.sortInfo){this.sort.apply(this,this.sortInfo);}
-this.fireEvent("beforerender",this,this.jsonData);},onLoad:function(el,o){this.fireEvent("load",this,this.jsonData,o);},onLoadException:function(el,o){this.fireEvent("loadexception",this,o);},filter:function(property,value){if(this.jsonData){var data=[];var ss=this.snapshot;if(typeof value=="string"){var vlen=value.length;if(vlen==0){this.clearFilter();return;}
-value=value.toLowerCase();for(var i=0,len=ss.length;i<len;i++){var o=ss[i];if(o[property].substr(0,vlen).toLowerCase()==value){data.push(o);}}}else if(value.exec){for(var i=0,len=ss.length;i<len;i++){var o=ss[i];if(value.test(o[property])){data.push(o);}}}else{return;}
-this.jsonData=data;this.refresh();}},filterBy:function(fn,scope){if(this.jsonData){var data=[];var ss=this.snapshot;for(var i=0,len=ss.length;i<len;i++){var o=ss[i];if(fn.call(scope||this,o)){data.push(o);}}
-this.jsonData=data;this.refresh();}},clearFilter:function(){if(this.snapshot&&this.jsonData!=this.snapshot){this.jsonData=this.snapshot;this.refresh();}},sort:function(property,dir,sortType){this.sortInfo=Array.prototype.slice.call(arguments,0);if(this.jsonData){var p=property;var dsc=dir&&dir.toLowerCase()=="desc";var f=function(o1,o2){var v1=sortType?sortType(o1[p]):o1[p];var v2=sortType?sortType(o2[p]):o2[p];;if(v1<v2){return dsc?+1:-1;}else if(v1>v2){return dsc?-1:+1;}else{return 0;}};this.jsonData.sort(f);this.refresh();if(this.jsonData!=this.snapshot){this.snapshot.sort(f);}}}});
-
-Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents({select:true});if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=new Ext.MasterTemplate('<tpl><a href="#" class="color-{0}" hidefocus="on"><em><span style="background:#{0}" unselectable="on">&#160;</span></em></a></tpl>');var c=this.colors;for(var i=0,len=c.length;i<len;i++){t.add([c[i]]);}
-var el=document.createElement("div");el.className=this.itemCls;t.overwrite(el);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
-el.child("a.color-"+color).addClass("x-color-palette-sel");this.value=color;this.fireEvent("select",this,color);}}});
-
-Ext.DatePicker=function(config){Ext.DatePicker.superclass.constructor.call(this,config);this.value=config&&config.value?config.value.clearTime():new Date().clearTime();this.addEvents({select:true});if(this.handler){this.on("select",this.handler,this.scope||this);}
-if(!this.disabledDatesRE&&this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
-this.disabledDatesRE=new RegExp(re+")");}};Ext.extend(Ext.DatePicker,Ext.Component,{todayText:"Today",okText:"&#160;OK&#160;",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minDate:null,maxDate:null,minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDays:null,disabledDaysText:"",disabledDatesRE:null,disabledDatesText:"",constrainToViewport:true,monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Next Month (Control+Right)',prevText:'Previous Month (Control+Left)',monthYearText:'Choose a month (Control+Up/Down to move years)',startDay:0,setValue:function(value){var old=this.value;this.value=value.clearTime(true);if(this.el){this.update(this.value);}},getValue:function(){return this.value;},focus:function(){if(this.el){this.update(this.activeDate);}},onRender:function(container,position){var m=['<table cellspacing="0">','<tr><td class="x-date-left"><a href="#" title="',this.prevText,'">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="',this.nextText,'">&#160;</a></td></tr>','<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];var dn=this.dayNames;for(var i=0;i<7;i++){var d=this.startDay+i;if(d>6){d=d-7;}
-m.push("<th><span>",dn[d].substr(0,1),"</span></th>");}
-m[m.length]="</tr></thead><tbody><tr>";for(var i=0;i<42;i++){if(i%7==0&&i!=0){m[m.length]="</tr><tr>";}
-m[m.length]='<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';}
-m[m.length]='</tr></tbody></table></td></tr><tr><td colspan="3" class="x-date-bottom" align="center"></td></tr></table><div class="x-date-mp"></div>';var el=document.createElement("div");el.className="x-date-picker";el.innerHTML=m.join("");container.dom.insertBefore(el,position);this.el=Ext.get(el);this.eventEl=Ext.get(el.firstChild);new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.eventEl.on("mousewheel",this.handleMouseWheel,this);this.monthPicker=this.el.down('div.x-date-mp');this.monthPicker.enableDisplayMode('block');var kn=new Ext.KeyNav(this.eventEl,{"left":function(e){e.ctrlKey?this.showPrevMonth():this.update(this.activeDate.add("d",-1));},"right":function(e){e.ctrlKey?this.showNextMonth():this.update(this.activeDate.add("d",1));},"up":function(e){e.ctrlKey?this.showNextYear():this.update(this.activeDate.add("d",-7));},"down":function(e){e.ctrlKey?this.showPrevYear():this.update(this.activeDate.add("d",7));},"pageUp":function(e){this.showNextMonth();},"pageDown":function(e){this.showPrevMonth();},"enter":function(e){e.stopPropagation();return true;},scope:this});this.eventEl.on("click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button(this.el.child("td.x-date-middle",true),{text:"&#160;",tooltip:this.monthYearText});this.mbtn.on('click',this.showMonthPicker,this);this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");var today=(new Date()).dateFormat(this.format);var todayBtn=new Ext.Button(this.el.child("td.x-date-bottom",true),{text:String.format(this.todayText,today),tooltip:String.format(this.todayTip,today),handler:this.selectToday,scope:this});if(Ext.isIE){this.el.repaint();}
-this.update(this.value);},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var buf=['<table border="0" cellspacing="0">'];for(var i=0;i<6;i++){buf.push('<tr><td class="x-date-mp-month"><a href="#">',this.monthNames[i].substr(0,3),'</a></td>','<td class="x-date-mp-month x-date-mp-sep"><a href="#">',this.monthNames[i+6].substr(0,3),'</a></td>',i==0?'<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td>':'<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>');}
-buf.push('<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',this.okText,'</button><button type="button" class="x-date-mp-cancel">',this.cancelText,'</button></td></tr>','</table>');this.monthPicker.update(buf.join(''));this.monthPicker.on('click',this.onMonthClick,this);this.monthPicker.on('dblclick',this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select('td.x-date-mp-month');this.mpYears=this.monthPicker.select('td.x-date-mp-year');this.mpMonths.each(function(m,a,i){i+=1;if((i%2)==0){m.dom.xmonth=5+Math.round(i*.5);}else{m.dom.xmonth=Math.round((i-1)*.5);}});}},showMonthPicker:function(){this.createMonthPicker();var size=this.el.getSize();this.monthPicker.setSize(size);this.monthPicker.child('table').setSize(size);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn('t',{duration:.2});},updateMPYear:function(y){this.mpyear=y;var ys=this.mpYears.elements;for(var i=1;i<=10;i++){var td=ys[i-1],y2;if((i%2)==0){y2=y+Math.round(i*.5);td.firstChild.innerHTML=y2;td.xyear=y2;}else{y2=y-(5-Math.round(i*.5));td.firstChild.innerHTML=y2;td.xyear=y2;}
-this.mpYears.item(i-1)[y2==this.mpSelYear?'addClass':'removeClass']('x-date-mp-sel');}},updateMPMonth:function(sm){this.mpMonths.each(function(m,a,i){m[m.dom.xmonth==sm?'addClass':'removeClass']('x-date-mp-sel');});},selectMPMonth:function(m){},onMonthClick:function(e,t){e.stopEvent();var el=new Ext.Element(t),pn;if(el.is('button.x-date-mp-cancel')){this.hideMonthPicker();}
-else if(el.is('button.x-date-mp-ok')){this.update(new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}
-else if(pn=el.up('td.x-date-mp-month',2)){this.mpMonths.removeClass('x-date-mp-sel');pn.addClass('x-date-mp-sel');this.mpSelMonth=pn.dom.xmonth;}
-else if(pn=el.up('td.x-date-mp-year',2)){this.mpYears.removeClass('x-date-mp-sel');pn.addClass('x-date-mp-sel');this.mpSelYear=pn.dom.xyear;}
-else if(el.is('a.x-date-mp-prev')){this.updateMPYear(this.mpyear-10);}
-else if(el.is('a.x-date-mp-next')){this.updateMPYear(this.mpyear+10);}},onMonthDblClick:function(e,t){e.stopEvent();var el=new Ext.Element(t),pn;if(pn=el.up('td.x-date-mp-month',2)){this.update(new Date(this.mpSelYear,pn.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}
-else if(pn=el.up('td.x-date-mp-year',2)){this.update(new Date(pn.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}},hideMonthPicker:function(disableAnim){if(this.monthPicker){if(disableAnim===true){this.monthPicker.hide();}else{this.monthPicker.slideOut('t',{duration:.2});}}},showPrevMonth:function(e){this.update(this.activeDate.add("mo",-1));},showNextMonth:function(e){this.update(this.activeDate.add("mo",1));},showPrevYear:function(){this.update(this.activeDate.add("y",-1));},showNextYear:function(){this.update(this.activeDate.add("y",1));},handleMouseWheel:function(e){var delta=e.getWheelDelta();if(delta>0){this.showPrevMonth();e.stopEvent();}else if(delta<0){this.showNextMonth();e.stopEvent();}},handleDateClick:function(e,t){e.stopEvent();if(t.dateValue&&!Ext.fly(t.parentNode).hasClass("x-date-disabled")){this.setValue(new Date(t.dateValue));this.fireEvent("select",this,this.value);}},selectToday:function(){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value);},update:function(date){var vd=this.activeDate;this.activeDate=date;if(vd&&this.el){var t=date.getTime();if(vd.getMonth()==date.getMonth()&&vd.getFullYear()==date.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(c){if(c.dom.firstChild.dateValue==t){c.addClass("x-date-selected");setTimeout(function(){try{c.dom.firstChild.focus();}catch(e){}},50);return false;}});return;}}
-var days=date.getDaysInMonth();var firstOfMonth=date.getFirstDateOfMonth();var startingPos=firstOfMonth.getDay()-this.startDay;if(startingPos<=this.startDay){startingPos+=7;}
-var pm=date.add("mo",-1);var prevStart=pm.getDaysInMonth()-startingPos;var cells=this.cells.elements;var textEls=this.textNodes;days+=startingPos;var day=86400000;var d=(new Date(pm.getFullYear(),pm.getMonth(),prevStart)).clearTime();var today=new Date().clearTime().getTime();var sel=date.clearTime().getTime();var min=this.minDate?this.minDate.clearTime():Number.NEGATIVE_INFINITY;var max=this.maxDate?this.maxDate.clearTime():Number.POSITIVE_INFINITY;var ddMatch=this.disabledDatesRE;var ddText=this.disabledDatesText;var ddays=this.disabledDays?this.disabledDays.join(""):false;var ddaysText=this.disabledDaysText;var format=this.format;var setCellClass=function(cal,cell){cell.title="";var t=d.getTime();cell.firstChild.dateValue=t;if(t==today){cell.className+=" x-date-today";cell.title=cal.todayText;}
-if(t==sel){cell.className+=" x-date-selected";setTimeout(function(){try{cell.firstChild.focus();}catch(e){}},50);}
-if(t<min){cell.className=" x-date-disabled";cell.title=cal.minText;return;}
-if(t>max){cell.className=" x-date-disabled";cell.title=cal.maxText;return;}
-if(ddays){if(ddays.indexOf(d.getDay())!=-1){cell.title=ddaysText;cell.className=" x-date-disabled";}}
-if(ddMatch&&format){var fvalue=d.dateFormat(format);if(ddMatch.test(fvalue)){cell.title=ddText.replace("%0",fvalue);cell.className=" x-date-disabled";}}};var i=0;for(;i<startingPos;i++){textEls[i].innerHTML=(++prevStart);d.setDate(d.getDate()+1);cells[i].className="x-date-prevday";setCellClass(this,cells[i]);}
-for(;i<days;i++){intDay=i-startingPos+1;textEls[i].innerHTML=(intDay);d.setDate(d.getDate()+1);cells[i].className="x-date-active";setCellClass(this,cells[i]);}
-var extraDays=0;for(;i<42;i++){textEls[i].innerHTML=(++extraDays);d.setDate(d.getDate()+1);cells[i].className="x-date-nextday";setCellClass(this,cells[i]);}
-this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}}});
-
-Ext.TabPanel=function(container,config){this.el=Ext.get(container,true);if(config){if(typeof config=="boolean"){this.tabPosition=config?"bottom":"top";}else{Ext.apply(this,config);}}
-if(this.tabPosition=="bottom"){this.bodyEl=Ext.get(this.createBody(this.el.dom));this.el.addClass("x-tabs-bottom");}
-this.stripWrap=Ext.get(this.createStrip(this.el.dom),true);this.stripEl=Ext.get(this.createStripList(this.stripWrap.dom),true);this.stripBody=Ext.get(this.stripWrap.dom.firstChild.firstChild,true);if(Ext.isIE){Ext.fly(this.stripWrap.dom.firstChild).setStyle("overflow-x","hidden");}
-if(this.tabPosition!="bottom"){this.bodyEl=Ext.get(this.createBody(this.el.dom));this.el.addClass("x-tabs-top");}
-this.items=[];this.bodyEl.setStyle("position","relative");this.active=null;this.activateDelegate=this.activate.createDelegate(this);this.addEvents({"tabchange":true,"beforetabchange":true});Ext.EventManager.onWindowResize(this.onResize,this);this.cpad=this.el.getPadding("lr");this.hiddenCount=0;Ext.TabPanel.superclass.constructor.call(this);};Ext.extend(Ext.TabPanel,Ext.util.Observable,{tabPosition:"top",currentTabWidth:0,minTabWidth:40,maxTabWidth:250,preferredTabWidth:175,resizeTabs:false,monitorResize:true,addTab:function(id,text,content,closable){var item=new Ext.TabPanelItem(this,id,text,closable);this.addTabItem(item);if(content){item.setContent(content);}
-return item;},getTab:function(id){return this.items[id];},hideTab:function(id){var t=this.items[id];if(!t.isHidden()){t.setHidden(true);this.hiddenCount++;this.autoSizeTabs();}},unhideTab:function(id){var t=this.items[id];if(t.isHidden()){t.setHidden(false);this.hiddenCount--;this.autoSizeTabs();}},addTabItem:function(item){this.items[item.id]=item;this.items.push(item);if(this.resizeTabs){item.setWidth(this.currentTabWidth||this.preferredTabWidth);this.autoSizeTabs();}else{item.autoSize();}},removeTab:function(id){var items=this.items;var tab=items[id];if(!tab)return;var index=items.indexOf(tab);if(this.active==tab&&items.length>1){var newTab=this.getNextAvailable(index);if(newTab)newTab.activate();}
-this.stripEl.dom.removeChild(tab.pnode.dom);if(tab.bodyEl.dom.parentNode==this.bodyEl.dom){this.bodyEl.dom.removeChild(tab.bodyEl.dom);}
-items.splice(index,1);delete this.items[tab.id];tab.fireEvent("close",tab);tab.purgeListeners();this.autoSizeTabs();},getNextAvailable:function(start){var items=this.items;var index=start;while(index<items.length){var item=items[++index];if(item&&!item.isHidden()){return item;}}
-index=start;while(index>=0){var item=items[--index];if(item&&!item.isHidden()){return item;}}
-return null;},disableTab:function(id){var tab=this.items[id];if(tab&&this.active!=tab){tab.disable();}},enableTab:function(id){var tab=this.items[id];tab.enable();},activate:function(id){var tab=this.items[id];if(!tab){return null;}
-if(tab==this.active){return tab;}
-var e={};this.fireEvent("beforetabchange",this,e,tab);if(e.cancel!==true&&!tab.disabled){if(this.active){this.active.hide();}
-this.active=this.items[id];this.active.show();this.fireEvent("tabchange",this,this.active);}
-return tab;},getActiveTab:function(){return this.active;},syncHeight:function(targetHeight){var height=(targetHeight||this.el.getHeight())-this.el.getBorderWidth("tb")-this.el.getPadding("tb");var bm=this.bodyEl.getMargins();var newHeight=height-(this.stripWrap.getHeight()||0)-(bm.top+bm.bottom);this.bodyEl.setHeight(newHeight);return newHeight;},onResize:function(){if(this.monitorResize){this.autoSizeTabs();}},beginUpdate:function(){this.updating=true;},endUpdate:function(){this.updating=false;this.autoSizeTabs();},autoSizeTabs:function(){var count=this.items.length;var vcount=count-this.hiddenCount;if(!this.resizeTabs||count<1||vcount<1||this.updating)return;var w=Math.max(this.el.getWidth()-this.cpad,10);var availWidth=Math.floor(w/vcount);var b=this.stripBody;if(b.getWidth()>w){var tabs=this.items;this.setTabWidth(Math.max(availWidth,this.minTabWidth)-2);if(availWidth<this.minTabWidth){}}else{if(this.currentTabWidth<this.preferredTabWidth){this.setTabWidth(Math.min(availWidth,this.preferredTabWidth)-2);}}},getCount:function(){return this.items.length;},setTabWidth:function(width){this.currentTabWidth=width;for(var i=0,len=this.items.length;i<len;i++){if(!this.items[i].isHidden())this.items[i].setWidth(width);}},destroy:function(removeEl){Ext.EventManager.removeResizeListener(this.onResize,this);for(var i=0,len=this.items.length;i<len;i++){this.items[i].purgeListeners();}
-if(removeEl===true){this.el.update("");this.el.remove();}}});Ext.TabPanelItem=function(tabPanel,id,text,closable){this.tabPanel=tabPanel;this.id=id;this.disabled=false;this.text=text;this.loaded=false;this.closable=closable;this.bodyEl=Ext.get(tabPanel.createItemBody(tabPanel.bodyEl.dom,id));this.bodyEl.setVisibilityMode(Ext.Element.VISIBILITY);this.bodyEl.setStyle("display","block");this.bodyEl.setStyle("zoom","1");this.hideAction();var els=tabPanel.createStripElements(tabPanel.stripEl.dom,text,closable);this.el=Ext.get(els.el,true);this.inner=Ext.get(els.inner,true);this.textEl=Ext.get(this.el.dom.firstChild.firstChild.firstChild,true);this.pnode=Ext.get(els.el.parentNode,true);this.el.on("mousedown",this.onTabMouseDown,this);this.el.on("click",this.onTabClick,this);if(closable){var c=Ext.get(els.close,true);c.dom.title=this.closeText;c.addClassOnOver("close-over");c.on("click",this.closeClick,this);}
-this.addEvents({"activate":true,"beforeclose":true,"close":true,"deactivate":true});this.hidden=false;Ext.TabPanelItem.superclass.constructor.call(this);};Ext.extend(Ext.TabPanelItem,Ext.util.Observable,{purgeListeners:function(){Ext.util.Observable.prototype.purgeListeners.call(this);this.el.removeAllListeners();},show:function(){this.pnode.addClass("on");this.showAction();if(Ext.isOpera){this.tabPanel.stripWrap.repaint();}
-this.fireEvent("activate",this.tabPanel,this);},isActive:function(){return this.tabPanel.getActiveTab()==this;},hide:function(){this.pnode.removeClass("on");this.hideAction();this.fireEvent("deactivate",this.tabPanel,this);},hideAction:function(){this.bodyEl.hide();this.bodyEl.setStyle("position","absolute");this.bodyEl.setLeft("-20000px");this.bodyEl.setTop("-20000px");},showAction:function(){this.bodyEl.setStyle("position","relative");this.bodyEl.setTop("");this.bodyEl.setLeft("");this.bodyEl.show();},setTooltip:function(text){if(Ext.QuickTips&&Ext.QuickTips.isEnabled()){this.textEl.dom.qtip=text;this.textEl.dom.removeAttribute('title');}else{this.textEl.dom.title=text;}},onTabClick:function(e){e.preventDefault();this.tabPanel.activate(this.id);},onTabMouseDown:function(e){e.preventDefault();this.tabPanel.activate(this.id);},getWidth:function(){return this.inner.getWidth();},setWidth:function(width){var iwidth=width-this.pnode.getPadding("lr");this.inner.setWidth(iwidth);this.textEl.setWidth(iwidth-this.inner.getPadding("lr"));this.pnode.setWidth(width);},setHidden:function(hidden){this.hidden=hidden;this.pnode.setStyle("display",hidden?"none":"");},isHidden:function(){return this.hidden;},getText:function(){return this.text;},autoSize:function(){this.textEl.setWidth(1);this.setWidth(this.textEl.dom.scrollWidth+this.pnode.getPadding("lr")+this.inner.getPadding("lr"));},setText:function(text){this.text=text;this.textEl.update(text);this.setTooltip(text);if(!this.tabPanel.resizeTabs){this.autoSize();}},activate:function(){this.tabPanel.activate(this.id);},disable:function(){if(this.tabPanel.active!=this){this.disabled=true;this.pnode.addClass("disabled");}},enable:function(){this.disabled=false;this.pnode.removeClass("disabled");},setContent:function(content,loadScripts){this.bodyEl.update(content,loadScripts);},getUpdateManager:function(){return this.bodyEl.getUpdateManager();},setUrl:function(url,params,loadOnce){if(this.refreshDelegate){this.un('activate',this.refreshDelegate);}
-this.refreshDelegate=this._handleRefresh.createDelegate(this,[url,params,loadOnce]);this.on("activate",this.refreshDelegate);return this.bodyEl.getUpdateManager();},_handleRefresh:function(url,params,loadOnce){if(!loadOnce||!this.loaded){var updater=this.bodyEl.getUpdateManager();updater.update(url,params,this._setLoaded.createDelegate(this));}},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();}},_setLoaded:function(){this.loaded=true;},closeClick:function(e){var o={};e.stopEvent();this.fireEvent("beforeclose",this,o);if(o.cancel!==true){this.tabPanel.removeTab(this.id);}},closeText:"Close this tab"});Ext.TabPanel.prototype.createStrip=function(container){var strip=document.createElement("div");strip.className="x-tabs-wrap";container.appendChild(strip);return strip;};Ext.TabPanel.prototype.createStripList=function(strip){strip.innerHTML='<div class="x-tabs-strip-wrap"><table class="x-tabs-strip" cellspacing="0" cellpadding="0" border="0"><tbody><tr></tr></tbody></table></div>';return strip.firstChild.firstChild.firstChild.firstChild;};Ext.TabPanel.prototype.createBody=function(container){var body=document.createElement("div");Ext.id(body,"tab-body");Ext.fly(body).addClass("x-tabs-body");container.appendChild(body);return body;};Ext.TabPanel.prototype.createItemBody=function(bodyEl,id){var body=Ext.getDom(id);if(!body){body=document.createElement("div");body.id=id;}
-Ext.fly(body).addClass("x-tabs-item-body");bodyEl.insertBefore(body,bodyEl.firstChild);return body;};Ext.TabPanel.prototype.createStripElements=function(stripEl,text,closable){var td=document.createElement("td");stripEl.appendChild(td);if(closable){td.className="x-tabs-closable";if(!this.closeTpl){this.closeTpl=new Ext.Template('<a href="#" class="x-tabs-right"><span class="x-tabs-left"><em class="x-tabs-inner">'+'<span unselectable="on"'+(this.disableTooltips?'':' title="{text}"')+' class="x-tabs-text">{text}</span>'+'<div unselectable="on" class="close-icon">&#160;</div></em></span></a>');}
-var el=this.closeTpl.overwrite(td,{"text":text});var close=el.getElementsByTagName("div")[0];var inner=el.getElementsByTagName("em")[0];return{"el":el,"close":close,"inner":inner};}else{if(!this.tabTpl){this.tabTpl=new Ext.Template('<a href="#" class="x-tabs-right"><span class="x-tabs-left"><em class="x-tabs-inner">'+'<span unselectable="on"'+(this.disableTooltips?'':' title="{text}"')+' class="x-tabs-text">{text}</span></em></span></a>');}
-var el=this.tabTpl.overwrite(td,{"text":text});var inner=el.getElementsByTagName("em")[0];return{"el":el,"inner":inner};}};
-
-Ext.Button=function(renderTo,config){Ext.apply(this,config);this.addEvents({"click":true,"toggle":true,'mouseover':true,'mouseout':true});if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);}
-if(renderTo){this.render(renderTo);}
-Ext.Button.superclass.constructor.call(this);};Ext.extend(Ext.Button,Ext.util.Observable,{hidden:false,disabled:false,pressed:false,tabIndex:undefined,enableToggle:false,menu:undefined,menuAlign:"tl-bl?",iconCls:undefined,type:'button',menuClassTarget:'tr',clickEvent:'click',handleMouseEvents:true,tooltipType:'qtip',render:function(renderTo){var btn;if(this.hideParent){this.parentEl=Ext.get(renderTo);}
-if(!this.dhconfig){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template('<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>','<td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i>&#160;</i></td>',"</tr></tbody></table>");}
-this.template=Ext.Button.buttonTemplate;}
-btn=this.template.append(renderTo,[this.text||'&#160;',this.type],true);var btnEl=btn.child("button:first");btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);if(this.cls){btn.addClass(this.cls);}
-if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
-if(this.iconCls){btnEl.addClass(this.iconCls);if(!this.cls){btn.addClass(this.text?'x-btn-text-icon':'x-btn-icon');}}
-if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;}
-if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.tips(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}}else{btn=Ext.DomHelper.append(Ext.get(renderTo).dom,this.dhconfig,true);}
-this.el=btn;if(this.id){this.el.dom.id=this.el.id=this.id;}
-if(this.menu){this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}
-btn.addClass("x-btn");if(Ext.isIE&&!Ext.isIE7){this.autoWidth.defer(1,this);}else{this.autoWidth();}
-if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mouseout",this.onMouseOut,this);btn.on("mousedown",this.onMouseDown,this);}
-btn.on(this.clickEvent,this.onClick,this);if(this.hidden){this.hide();}
-if(this.disabled){this.disable();}
-Ext.ButtonToggleMgr.register(this);if(this.pressed){this.el.addClass("x-btn-pressed");}
-if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);}},getEl:function(){return this.el;},destroy:function(){Ext.ButtonToggleMgr.unregister(this);this.el.removeAllListeners();this.purgeListeners();this.el.remove();},autoWidth:function(){if(this.el){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child('button');if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
-if(this.minWidth){if(this.hidden){this.el.beginMeasure();}
-if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth);}
-if(this.hidden){this.el.endMeasure();}}}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setText:function(text){this.text=text;if(this.el){this.el.child("td.x-btn-center button.x-btn-text").update(text);}
-this.autoWidth();},getText:function(){return this.text;},show:function(){this.hidden=false;if(this.el){this[this.hideParent?'parentEl':'el'].setStyle("display","");}},hide:function(){this.hidden=true;if(this.el){this[this.hideParent?'parentEl':'el'].setStyle("display","none");}},setVisible:function(visible){if(visible){this.show();}else{this.hide();}},toggle:function(state){state=state===undefined?!this.pressed:state;if(state!=this.pressed){if(state){this.el.addClass("x-btn-pressed");this.pressed=true;this.fireEvent("toggle",this,true);}else{this.el.removeClass("x-btn-pressed");this.pressed=false;this.fireEvent("toggle",this,false);}
-if(this.toggleHandler){this.toggleHandler.call(this.scope||this,this,state);}}},focus:function(){this.el.child('button:first').focus();},disable:function(){if(this.el){this.el.addClass("x-btn-disabled");}
-this.disabled=true;},enable:function(){if(this.el){this.el.removeClass("x-btn-disabled");}
-this.disabled=false;},setDisabled:function(v){this[v!==true?"enable":"disable"]();},onClick:function(e){if(e){e.preventDefault();}
-if(e.button!=0){return;}
-if(!this.disabled){if(this.enableToggle){this.toggle();}
-if(this.menu&&!this.menu.isVisible()){this.menu.show(this.el,this.menuAlign);}
-this.fireEvent("click",this,e);if(this.handler){this.el.removeClass("x-btn-over");this.handler.call(this.scope||this,this,e);}}},onMouseOver:function(e){if(!this.disabled){this.el.addClass("x-btn-over");this.fireEvent('mouseover',this,e);}},onMouseOut:function(e){if(!e.within(this.el,true)){this.el.removeClass("x-btn-over");this.fireEvent('mouseout',this,e);}},onFocus:function(e){if(!this.disabled){this.el.addClass("x-btn-focus");}},onBlur:function(e){this.el.removeClass("x-btn-focus");},onMouseDown:function(e){if(!this.disabled&&e.button==0){this.el.addClass("x-btn-click");Ext.get(document).on('mouseup',this.onMouseUp,this);}},onMouseUp:function(e){if(e.button==0){this.el.removeClass("x-btn-click");Ext.get(document).un('mouseup',this.onMouseUp,this);}},onMenuShow:function(e){this.el.addClass("x-btn-menu-active");},onMenuHide:function(e){this.el.removeClass("x-btn-menu-active");}});Ext.ButtonToggleMgr=function(){var groups={};function toggleGroup(btn,state){if(state){var g=groups[btn.toggleGroup];for(var i=0,l=g.length;i<l;i++){if(g[i]!=btn){g[i].toggle(false);}}}}
-return{register:function(btn){if(!btn.toggleGroup){return;}
-var g=groups[btn.toggleGroup];if(!g){g=groups[btn.toggleGroup]=[];}
-g.push(btn);btn.on("toggle",toggleGroup);},unregister:function(btn){if(!btn.toggleGroup){return;}
-var g=groups[btn.toggleGroup];if(g){g.remove(btn);btn.un("toggle",toggleGroup);}}};}();
-
-Ext.MenuButton=function(renderTo,config){Ext.MenuButton.superclass.constructor.call(this,renderTo,config);this.addEvents({"arrowclick":true});};Ext.extend(Ext.MenuButton,Ext.Button,{render:function(renderTo){var tpl=new Ext.Template('<table cellspacing="0" class="x-btn-menu-wrap x-btn"><tr><td>','<table cellspacing="0" class="x-btn-wrap x-btn-menu-text-wrap"><tbody>','<tr><td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><button class="x-btn-text" type="{1}">{0}</button></td></tr>',"</tbody></table></td><td>",'<table cellspacing="0" class="x-btn-wrap x-btn-menu-arrow-wrap"><tbody>','<tr><td class="x-btn-center"><button class="x-btn-menu-arrow-el" type="button">&#160;</button></td><td class="x-btn-right"><i>&#160;</i></td></tr>',"</tbody></table></td></tr></table>");var btn=tpl.append(renderTo,[this.text,this.type],true);if(this.cls){btn.addClass(this.cls);}
-if(this.icon){btn.child("button").setStyle('background-image','url('+this.icon+')');}
-this.el=btn;this.autoWidth();if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mouseout",this.onMouseOut,this);btn.on("mousedown",this.onMouseDown,this);btn.on("mouseup",this.onMouseUp,this);}
-btn.on(this.clickEvent,this.onClick,this);if(this.tooltip){var btnEl=btn.child("button:first");if(typeof this.tooltip=='object'){Ext.QuickTips.tips(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}
-if(this.arrowTooltip){var btnEl=btn.child("button:nth(2)");btnEl.dom[this.tooltipType]=this.arrowTooltip;}
-if(this.hidden){this.hide();}
-if(this.disabled){this.disable();}
-if(this.menu){this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}},autoWidth:function(){if(this.el){var tbl=this.el.child("table:first");var tbl2=this.el.child("table:last");this.el.setWidth("auto");tbl.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child('button:first');if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
-if(this.minWidth){if(this.hidden){this.el.beginMeasure();}
-if((tbl.getWidth()+tbl2.getWidth())<this.minWidth){tbl.setWidth(this.minWidth-tbl2.getWidth());}
-if(this.hidden){this.el.endMeasure();}}
-this.el.setWidth(tbl.getWidth()+tbl2.getWidth());}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setArrowHandler:function(handler,scope){this.arrowHandler=handler;this.scope=scope;},focus:function(){if(this.el){this.el.child("button:first").focus();}},onClick:function(e){e.preventDefault();if(!this.disabled){if(e.getTarget(".x-btn-menu-arrow-wrap")){if(this.menu&&!this.menu.isVisible()){this.menu.show(this.el,this.menuAlign);}
-this.fireEvent("arrowclick",this,e);if(this.arrowHandler){this.arrowHandler.call(this.scope||this,this,e);}}else{this.fireEvent("click",this,e);if(this.handler){this.handler.call(this.scope||this,this,e);}}}},onMouseDown:function(e){if(!this.disabled){Ext.fly(e.getTarget("table")).addClass("x-btn-click");}},onMouseUp:function(e){Ext.fly(e.getTarget("table")).removeClass("x-btn-click");}});
-
-Ext.Toolbar=function(container,buttons,config){if(container instanceof Array){buttons=container;config=buttons;container=null;}
-Ext.apply(this,config);this.buttons=buttons;if(container){this.render(container);}};Ext.Toolbar.prototype={render:function(ct){this.el=Ext.get(ct);if(this.cls){this.el.addClass(this.cls);}
-this.el.update('<div class="x-toolbar x-small-editor"><table cellspacing="0"><tr></tr></table></div>');this.tr=this.el.child("tr",true);var autoId=0;this.items=new Ext.util.MixedCollection(false,function(o){return o.id||("item"+(++autoId));});if(this.buttons){this.add.apply(this,this.buttons);delete this.buttons;}},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.applyTo){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){this.addButton(el);}}},getEl:function(){return this.el;},addSeparator:function(){return this.addItem(new Ext.Toolbar.Separator());},addSpacer:function(){return this.addItem(new Ext.Toolbar.Spacer());},addFill:function(){return this.addItem(new Ext.Toolbar.Fill());},addElement:function(el){return this.addItem(new Ext.Toolbar.Item(el));},addItem:function(item){var td=this.nextBlock();item.render(td);this.items.add(item);return item;},addButton:function(config){if(config instanceof Array){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
-return buttons;}
-var b=config;if(!(config instanceof Ext.Toolbar.Button)){b=new Ext.Toolbar.Button(config);}
-var td=this.nextBlock();b.render(td);this.items.add(b);return b;},addText:function(text){return this.addItem(new Ext.Toolbar.TextItem(text));},insertButton:function(index,item){if(item instanceof Array){var buttons=[];for(var i=0,len=item.length;i<len;i++){buttons.push(this.insertButton(index+i,item[i]));}
-return buttons;}
-if(!(item instanceof Ext.Toolbar.Button)){item=new Ext.Toolbar.Button(item);}
-var td=document.createElement("td");this.tr.insertBefore(td,this.tr.childNodes[index]);item.render(td);this.items.insert(index,item);return item;},addDom:function(config,returnEl){var td=this.nextBlock();Ext.DomHelper.overwrite(td,config);var ti=new Ext.Toolbar.Item(td.firstChild);ti.render(td);this.items.add(ti);return ti;},addField:function(field){var td=this.nextBlock();field.render(td);var ti=new Ext.Toolbar.Item(td.firstChild);ti.render(td);this.items.add(ti);return ti;},nextBlock:function(){var td=document.createElement("td");this.tr.appendChild(td);return td;},destroy:function(){if(this.items){Ext.destroy.apply(Ext,this.items.items);}
-Ext.Element.uncache(this.el,this.tr);}};Ext.Toolbar.Item=function(el){this.el=Ext.getDom(el);this.id=Ext.id(this.el);this.hidden=false;};Ext.Toolbar.Item.prototype={getEl:function(){return this.el;},render:function(td){this.td=td;td.appendChild(this.el);},destroy:function(){this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},setVisible:function(visible){if(visible){this.show();}else{this.hide();}},focus:function(){Ext.fly(this.el).focus();},disable:function(){Ext.fly(this.td).addClass("x-item-disabled");this.disabled=true;this.el.disabled=true;},enable:function(){Ext.fly(this.td).removeClass("x-item-disabled");this.disabled=false;this.el.disabled=false;}};Ext.Toolbar.Separator=function(){var s=document.createElement("span");s.className="ytb-sep";Ext.Toolbar.Separator.superclass.constructor.call(this,s);};Ext.extend(Ext.Toolbar.Separator,Ext.Toolbar.Item,{enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.Toolbar.Spacer=function(){var s=document.createElement("div");s.className="ytb-spacer";Ext.Toolbar.Spacer.superclass.constructor.call(this,s);};Ext.extend(Ext.Toolbar.Spacer,Ext.Toolbar.Item,{enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.Toolbar.Fill=Ext.extend(Ext.Toolbar.Spacer,{render:function(td){td.style.width='100%';Ext.Toolbar.Fill.superclass.render.call(this,td);}});Ext.Toolbar.TextItem=function(text){var s=document.createElement("span");s.className="ytb-text";s.innerHTML=text;Ext.Toolbar.TextItem.superclass.constructor.call(this,s);};Ext.extend(Ext.Toolbar.TextItem,Ext.Toolbar.Item,{enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.Toolbar.Button=function(config){Ext.Toolbar.Button.superclass.constructor.call(this,null,config);};Ext.extend(Ext.Toolbar.Button,Ext.Button,{render:function(td){this.td=td;Ext.Toolbar.Button.superclass.render.call(this,td);},destroy:function(){Ext.Toolbar.Button.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},disable:function(){Ext.fly(this.td).addClass("x-item-disabled");this.disabled=true;},enable:function(){Ext.fly(this.td).removeClass("x-item-disabled");this.disabled=false;}});Ext.ToolbarButton=Ext.Toolbar.Button;Ext.Toolbar.MenuButton=function(config){Ext.Toolbar.MenuButton.superclass.constructor.call(this,null,config);};Ext.extend(Ext.Toolbar.MenuButton,Ext.MenuButton,{render:function(td){this.td=td;Ext.Toolbar.MenuButton.superclass.render.call(this,td);},destroy:function(){Ext.Toolbar.MenuButton.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";}});
-
-Ext.PagingToolbar=function(el,ds,config){Ext.PagingToolbar.superclass.constructor.call(this,el,null,config);this.ds=ds;this.cursor=0;this.renderButtons(this.el);this.bind(ds);};Ext.extend(Ext.PagingToolbar,Ext.Toolbar,{pageSize:20,displayMsg:'Displaying {0} - {1} of {2}',emptyMsg:'No data to display',beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(el){Ext.PagingToolbar.superclass.render.call(this,el);this.first=this.addButton({tooltip:this.firstText,cls:"x-btn-icon x-grid-page-first",disabled:true,handler:this.onClick.createDelegate(this,["first"])});this.prev=this.addButton({tooltip:this.prevText,cls:"x-btn-icon x-grid-page-prev",disabled:true,handler:this.onClick.createDelegate(this,["prev"])});this.addSeparator();this.add(this.beforePageText);this.field=Ext.get(this.addDom({tag:"input",type:"text",size:"3",value:"1",cls:"x-grid-page-number"}).el);this.field.on("keydown",this.onPagingKeydown,this);this.field.on("focus",function(){this.dom.select();});this.afterTextEl=this.addText(String.format(this.afterPageText,1));this.field.setHeight(18);this.addSeparator();this.next=this.addButton({tooltip:this.nextText,cls:"x-btn-icon x-grid-page-next",disabled:true,handler:this.onClick.createDelegate(this,["next"])});this.last=this.addButton({tooltip:this.lastText,cls:"x-btn-icon x-grid-page-last",disabled:true,handler:this.onClick.createDelegate(this,["last"])});this.addSeparator();this.loading=this.addButton({tooltip:this.refreshText,cls:"x-btn-icon x-grid-loading",disabled:true,handler:this.onClick.createDelegate(this,["refresh"])});if(this.displayInfo){this.displayEl=Ext.fly(this.el.dom.firstChild).createChild({cls:'x-paging-info'});}},updateInfo:function(){if(this.displayEl){var count=this.ds.getCount();var msg=count==0?this.emptyMsg:String.format(this.displayMsg,this.cursor+1,this.cursor+count,this.ds.getTotalCount());this.displayEl.update(msg);}},onLoad:function(ds,r,o){this.cursor=o.params?o.params.start:0;var d=this.getPageData(),ap=d.activePage,ps=d.pages;this.afterTextEl.el.innerHTML=String.format(this.afterPageText,d.pages);this.field.dom.value=ap;this.first.setDisabled(ap==1);this.prev.setDisabled(ap==1);this.next.setDisabled(ap==ps);this.last.setDisabled(ap==ps);this.loading.enable();this.updateInfo();},getPageData:function(){var total=this.ds.getTotalCount();return{total:total,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:total<this.pageSize?1:Math.ceil(total/this.pageSize)};},onLoadError:function(){this.loading.enable();},onPagingKeydown:function(e){var k=e.getKey();var d=this.getPageData();if(k==e.RETURN){var v=this.field.dom.value,pageNum;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.dom.value=d.activePage;return;}
-pageNum=Math.min(Math.max(1,pageNum),d.pages)-1;this.ds.load({params:{start:pageNum*this.pageSize,limit:this.pageSize}});e.stopEvent();}
-else if(k==e.HOME||(k==e.UP&&e.ctrlKey)||(k==e.PAGEUP&&e.ctrlKey)||(k==e.RIGHT&&e.ctrlKey)||k==e.END||(k==e.DOWN&&e.ctrlKey)||(k==e.LEFT&&e.ctrlKey)||(k==e.PAGEDOWN&&e.ctrlKey))
-{var pageNum=(k==e.HOME||(k==e.DOWN&&e.ctrlKey)||(k==e.LEFT&&e.ctrlKey)||(k==e.PAGEDOWN&&e.ctrlKey))?1:d.pages;this.field.dom.value=pageNum;this.ds.load({params:{start:(pageNum-1)*this.pageSize,limit:this.pageSize}});e.stopEvent();}
-else if(k==e.UP||k==e.RIGHT||k==e.PAGEUP||k==e.DOWN||k==e.LEFT||k==e.PAGEDOWN)
-{var v=this.field.dom.value,pageNum;var increment=(e.shiftKey)?10:1;if(k==e.DOWN||k==e.LEFT||k==e.PAGEDOWN)
-increment*=-1;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.dom.value=d.activePage;return;}
-else if(parseInt(v,10)+increment>=1&parseInt(v,10)+increment<=d.pages)
-{this.field.dom.value=parseInt(v,10)+increment;pageNum=Math.min(Math.max(1,pageNum+increment),d.pages)-1;this.ds.load({params:{start:pageNum*this.pageSize,limit:this.pageSize}});}
-e.stopEvent();}},beforeLoad:function(){if(this.loading){this.loading.disable();}},onClick:function(which){var ds=this.ds;switch(which){case"first":ds.load({params:{start:0,limit:this.pageSize}});break;case"prev":ds.load({params:{start:Math.max(0,this.cursor-this.pageSize),limit:this.pageSize}});break;case"next":ds.load({params:{start:this.cursor+this.pageSize,limit:this.pageSize}});break;case"last":var total=ds.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;ds.load({params:{start:lastStart,limit:this.pageSize}});break;case"refresh":ds.load({params:{start:this.cursor,limit:this.pageSize}});break;}},unbind:function(ds){ds.un("beforeload",this.beforeLoad,this);ds.un("load",this.onLoad,this);ds.un("loadexception",this.onLoadError,this);this.ds=undefined;},bind:function(ds){ds.on("beforeload",this.beforeLoad,this);ds.on("load",this.onLoad,this);ds.on("loadexception",this.onLoadError,this);this.ds=ds;}});
-
-Ext.Resizable=function(el,config){this.el=Ext.get(el);if(config&&config.wrap){config.resizeChild=this.el;this.el=this.el.wrap(typeof config.wrap=="object"?config.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=config.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(config.resizeChild.getPositioning());config.resizeChild.clearPositioning();if(!config.width||!config.height){var csize=config.resizeChild.getSize();this.el.setSize(csize.width,csize.height);}
-if(config.pinned&&!config.adjustments){config.adjustments="auto";}}
-this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"});this.proxy.unselectable();this.proxy.enableDisplayMode('block');Ext.apply(this,config);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned");}
-var position=this.el.getStyle("position");if(position!="absolute"&&position!="fixed"){this.el.setStyle("position","relative");}
-if(!this.handles){this.handles='s,e,se';if(this.multiDirectional){this.handles+=',n,w';}}
-if(this.handles=="all"){this.handles="n s e w ne nw se sw";}
-var hs=this.handles.split(/\s*?[,;]\s*?| /);var ps=Ext.Resizable.positions;for(var i=0,len=hs.length;i<len;i++){if(hs[i]&&ps[hs[i]]){var pos=ps[hs[i]];this[pos]=new Ext.Resizable.Handle(this,pos,this.disableTrackOver,this.transparent);}}
-this.corner=this.southeast;if(this.handles.indexOf("n")!=-1||this.handles.indexOf("w")!=-1){this.updateBox=true;}
-this.activeHandle=null;if(this.resizeChild){if(typeof this.resizeChild=="boolean"){this.resizeChild=Ext.get(this.el.dom.firstChild,true);}else{this.resizeChild=Ext.get(this.resizeChild,true);}}
-if(this.adjustments=="auto"){var rc=this.resizeChild;var hw=this.west,he=this.east,hn=this.north,hs=this.south;if(rc&&(hw||hn)){rc.position("relative");rc.setLeft(hw?hw.el.getWidth():0);rc.setTop(hn?hn.el.getHeight():0);}
-this.adjustments=[(he?-he.el.getWidth():0)+(hw?-hw.el.getWidth():0),(hn?-hn.el.getHeight():0)+(hs?-hs.el.getHeight():0)-1];}
-if(this.draggable){this.dd=this.dynamic?this.el.initDD(null):this.el.initDDProxy(null,{dragElId:this.proxy.id});this.dd.setHandleElId(this.resizeChild?this.resizeChild.id:this.el.id);}
-this.addEvents({"beforeresize":true,"resize":true});if(this.width!==null&&this.height!==null){this.resizeTo(this.width,this.height);}else{this.updateChildSize();}
-if(Ext.isIE){this.el.dom.style.zoom=1;}
-Ext.Resizable.superclass.constructor.call(this);};Ext.extend(Ext.Resizable,Ext.util.Observable,{resizeChild:false,adjustments:[0,0],minWidth:5,minHeight:5,maxWidth:10000,maxHeight:10000,enabled:true,animate:false,duration:.35,dynamic:false,handles:false,multiDirectional:false,disableTrackOver:false,easing:'easeOutStrong',widthIncrement:0,heightIncrement:0,pinned:false,width:null,height:null,preserveRatio:false,transparent:false,minX:0,minY:0,draggable:false,constrainTo:undefined,resizeRegion:undefined,resizeTo:function(width,height){this.el.setSize(width,height);this.updateChildSize();this.fireEvent("resize",this,width,height,null);},startSizing:function(e,handle){this.fireEvent("beforeresize",this,e);if(this.enabled){if(!this.overlay){this.overlay=this.el.createProxy({tag:"div",cls:"x-resizable-overlay",html:"&#160;"});this.overlay.unselectable();this.overlay.enableDisplayMode("block");this.overlay.on("mousemove",this.onMouseMove,this);this.overlay.on("mouseup",this.onMouseUp,this);}
-this.overlay.setStyle("cursor",handle.el.getStyle("cursor"));this.resizing=true;this.startBox=this.el.getBox();this.startPoint=e.getXY();this.offsets=[(this.startBox.x+this.startBox.width)-this.startPoint[0],(this.startBox.y+this.startBox.height)-this.startPoint[1]];this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();if(this.constrainTo){var ct=Ext.get(this.constrainTo);this.resizeRegion=ct.getRegion().adjust(ct.getFrameWidth('t'),ct.getFrameWidth('l'),-ct.getFrameWidth('b'),-ct.getFrameWidth('r'));}
-this.proxy.setStyle('visibility','hidden');this.proxy.show();this.proxy.setBox(this.startBox);if(!this.dynamic){this.proxy.setStyle('visibility','visible');}}},onMouseDown:function(handle,e){if(this.enabled){e.stopEvent();this.activeHandle=handle;this.startSizing(e,handle);}},onMouseUp:function(e){var size=this.resizeElement();this.resizing=false;this.handleOut();this.overlay.hide();this.proxy.hide();this.fireEvent("resize",this,size.width,size.height,e);},updateChildSize:function(){if(this.resizeChild){var el=this.el;var child=this.resizeChild;var adj=this.adjustments;if(el.dom.offsetWidth){var b=el.getSize(true);child.setSize(b.width+adj[0],b.height+adj[1]);}
-if(Ext.isIE){setTimeout(function(){if(el.dom.offsetWidth){var b=el.getSize(true);child.setSize(b.width+adj[0],b.height+adj[1]);}},10);}}},snap:function(value,inc,min){if(!inc||!value)return value;var newValue=value;var m=value%inc;if(m>0){if(m>(inc/2)){newValue=value+(inc-m);}else{newValue=value-m;}}
-return Math.max(min,newValue);},resizeElement:function(){var box=this.proxy.getBox();if(this.updateBox){this.el.setBox(box,false,this.animate,this.duration,null,this.easing);}else{this.el.setSize(box.width,box.height,this.animate,this.duration,null,this.easing);}
-this.updateChildSize();if(!this.dynamic){this.proxy.hide();}
-return box;},constrain:function(v,diff,m,mx){if(v-diff<m){diff=v-m;}else if(v-diff>mx){diff=mx-v;}
-return diff;},onMouseMove:function(e){if(this.enabled){try{if(this.resizeRegion&&!this.resizeRegion.contains(e.getPoint())){return;}
-var curSize=this.curSize||this.startBox;var x=this.startBox.x,y=this.startBox.y;var ox=x,oy=y;var w=curSize.width,h=curSize.height;var ow=w,oh=h;var mw=this.minWidth,mh=this.minHeight;var mxw=this.maxWidth,mxh=this.maxHeight;var wi=this.widthIncrement;var hi=this.heightIncrement;var eventXY=e.getXY();var diffX=-(this.startPoint[0]-Math.max(this.minX,eventXY[0]));var diffY=-(this.startPoint[1]-Math.max(this.minY,eventXY[1]));var pos=this.activeHandle.position;switch(pos){case"east":w+=diffX;w=Math.min(Math.max(mw,w),mxw);break;case"south":h+=diffY;h=Math.min(Math.max(mh,h),mxh);break;case"southeast":w+=diffX;h+=diffY;w=Math.min(Math.max(mw,w),mxw);h=Math.min(Math.max(mh,h),mxh);break;case"north":diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"west":diffX=this.constrain(w,diffX,mw,mxw);x+=diffX;w-=diffX;break;case"northeast":w+=diffX;w=Math.min(Math.max(mw,w),mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"northwest":diffX=this.constrain(w,diffX,mw,mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;x+=diffX;w-=diffX;break;case"southwest":diffX=this.constrain(w,diffX,mw,mxw);h+=diffY;h=Math.min(Math.max(mh,h),mxh);x+=diffX;w-=diffX;break;}
-var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;}
-w=sw;h=sh;}
-if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}}
-this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){this.proxy.remove();if(this.overlay){this.overlay.removeAllListeners();this.overlay.remove();}
-var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){var h=this[ps[k]];h.el.removeAllListeners();h.el.remove();}}
-if(removeEl){this.el.update("");this.el.remove();}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;}
-this.position=pos;this.rz=rz;this.el=this.tpl.append(rz.el.dom,[this.position],true);this.el.unselectable();if(transparent){this.el.setOpacity(0);}
-this.el.on("mousedown",this.onMouseDown,this);if(!disableTrackOver){this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this);}};Ext.Resizable.Handle.prototype={afterResize:function(rz){},onMouseDown:function(e){this.rz.onMouseDown(this,e);},onMouseOver:function(e){this.rz.handleOver(this,e);},onMouseOut:function(e){this.rz.handleOut(this,e);}};
-
-Ext.Editor=function(field,config){Ext.Editor.superclass.constructor.call(this,config);this.field=field;this.addEvents({"beforestartedit":true,"startedit":true,"beforecomplete":true,"complete":true,"specialkey":true});};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,updateEl:false,onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
-this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');}
-this.field.show();this.field.on("blur",this.onBlur,this);this.relayEvents(this.field,["specialkey"]);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},startEdit:function(el,value){if(this.editing){this.completeEdit();}
-this.boundEl=Ext.get(el);var v=value!==undefined?value:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body);}
-if(this.fireEvent("beforestartedit",this,this.boundEl,v)===false){return;}
-this.startValue=v;this.field.setValue(v);if(this.autoSize){var sz=this.boundEl.getSize();switch(this.autoSize){case"width":this.setSize(sz.width,"");break;case"height":this.setSize("",sz.height);break;default:this.setSize(sz.width,sz.height);}}
-this.el.alignTo(this.boundEl,this.alignment);this.editing=true;if(Ext.QuickTips){Ext.QuickTips.disable();}
-this.show();},setSize:function(w,h){this.field.setSize(w,h);if(this.el){this.el.sync();}},realign:function(){this.el.alignTo(this.boundEl,this.alignment);},completeEdit:function(remainVisible){if(!this.editing){return;}
-var v=this.getValue();if(this.revertInvalid!==false&&!this.field.isValid()){v=this.startValue;this.cancelEdit(true);}
-if(String(v)==String(this.startValue)&&this.ignoreNoChange){this.editing=false;this.hide();return;}
-if(this.fireEvent("beforecomplete",this,v,this.startValue)!==false){this.editing=false;if(this.updateEl&&this.boundEl){this.boundEl.update(v);}
-if(remainVisible!==true){this.hide();}
-this.fireEvent("complete",this,v,this.startValue);}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide();}
-this.field.show();if(Ext.isIE&&!this.fixIEFocus){this.fixIEFocus=true;this.deferredFocus.defer(50,this);}else{this.field.focus();}
-this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){this.setValue(this.startValue);if(remainVisible!==true){this.hide();}}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;}
-this.field.blur();if(this.field.collapse){this.field.collapse();}
-this.el.hide();if(this.hideEl!==false){this.boundEl.show();}
-if(Ext.QuickTips){Ext.QuickTips.enable();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();}});
-
-Ext.BasicDialog=function(el,config){this.el=Ext.get(el);var dh=Ext.DomHelper;if(!this.el&&config&&config.autoCreate){if(typeof config.autoCreate=="object"){if(!config.autoCreate.id){config.autoCreate.id=el;}
-this.el=dh.append(document.body,config.autoCreate,true);}else{this.el=dh.append(document.body,{tag:"div",id:el,style:'visibility:hidden;'},true);}}
-el=this.el;el.setDisplayed(true);el.hide=this.hideAction;this.id=el.id;el.addClass("x-dlg");Ext.apply(this,config);this.proxy=el.createProxy("x-dlg-proxy");this.proxy.hide=this.hideAction;this.proxy.setOpacity(.5);this.proxy.hide();if(config.width){el.setWidth(config.width);}
-if(config.height){el.setHeight(config.height);}
-this.size=el.getSize();if(typeof config.x!="undefined"&&typeof config.y!="undefined"){this.xy=[config.x,config.y];}else{this.xy=el.getCenterXY(true);}
-this.header=el.child("> .x-dlg-hd");this.body=el.child("> .x-dlg-bd");this.footer=el.child("> .x-dlg-ft");if(!this.header){this.header=el.createChild({tag:"div",cls:"x-dlg-hd",html:"&#160;"},this.body?this.body.dom:null);}
-if(!this.body){this.body=el.createChild({tag:"div",cls:"x-dlg-bd"});}
-this.header.unselectable();if(this.title){this.header.update(this.title);}
-this.focusEl=el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1"});this.focusEl.swallowEvent("click",true);this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"},true);this.bwrap=this.body.wrap({tag:"div",cls:"x-dlg-dlg-body"});if(this.footer){this.bwrap.dom.appendChild(this.footer.dom);}
-this.bg=this.el.createChild({tag:"div",cls:"x-dlg-bg",html:'<div class="x-dlg-bg-left"><div class="x-dlg-bg-right"><div class="x-dlg-bg-center">&#160;</div></div></div>'});this.centerBg=this.bg.child("div.x-dlg-bg-center");if(this.autoScroll!==false&&!this.autoTabs){this.body.setStyle("overflow","auto");}
-this.toolbox=this.el.createChild({cls:"x-dlg-toolbox"});if(this.closable!==false){this.el.addClass("x-dlg-closable");this.close=this.toolbox.createChild({cls:"x-dlg-close"});this.close.on("click",this.closeClick,this);this.close.addClassOnOver("x-dlg-close-over");}
-if(this.collapsible!==false){this.collapseBtn=this.toolbox.createChild({cls:"x-dlg-collapse"});this.collapseBtn.on("click",this.collapseClick,this);this.collapseBtn.addClassOnOver("x-dlg-collapse-over");this.header.on("dblclick",this.collapseClick,this);}
-if(this.resizable!==false){this.el.addClass("x-dlg-resizable");this.resizer=new Ext.Resizable(el,{minWidth:this.minWidth||80,minHeight:this.minHeight||80,handles:this.resizeHandles||"all",pinned:true});this.resizer.on("beforeresize",this.beforeResize,this);this.resizer.on("resize",this.onResize,this);}
-if(this.draggable!==false){el.addClass("x-dlg-draggable");if(!this.proxyDrag){var dd=new Ext.dd.DD(el.dom.id,"WindowDrag");}
-else{var dd=new Ext.dd.DDProxy(el.dom.id,"WindowDrag",{dragElId:this.proxy.id});}
-dd.setHandleElId(this.header.id);dd.endDrag=this.endMove.createDelegate(this);dd.startDrag=this.startMove.createDelegate(this);dd.onDrag=this.onDrag.createDelegate(this);dd.scroll=false;this.dd=dd;}
-if(this.modal){this.mask=dh.append(document.body,{tag:"div",cls:"x-dlg-mask"},true);this.mask.enableDisplayMode("block");this.mask.hide();this.el.addClass("x-dlg-modal");}
-if(this.shadow){this.shadow=new Ext.Shadow({mode:typeof this.shadow=="string"?this.shadow:"sides",offset:this.shadowOffset});}else{this.shadowOffset=0;}
-if(Ext.useShims&&this.shim!==false){this.shim=this.el.createShim();this.shim.hide=this.hideAction;this.shim.hide();}else{this.shim=false;}
-if(this.autoTabs){this.initTabs();}
-this.addEvents({"keydown":true,"move":true,"resize":true,"beforehide":true,"hide":true,"beforeshow":true,"show":true});el.on("keydown",this.onKeyDown,this);el.on("mousedown",this.toFront,this);Ext.EventManager.onWindowResize(this.adjustViewport,this,true);this.el.hide();Ext.DialogManager.register(this);Ext.BasicDialog.superclass.constructor.call(this);};Ext.extend(Ext.BasicDialog,Ext.util.Observable,{shadowOffset:Ext.isIE?6:5,minHeight:80,minWidth:200,minButtonWidth:75,defaultButton:null,buttonAlign:"right",tabTag:'div',firstShow:true,setTitle:function(text){this.header.update(text);return this;},closeClick:function(){this.hide();},collapseClick:function(){this[this.collapsed?"expand":"collapse"]();},collapse:function(){if(!this.collapsed){this.collapsed=true;this.el.addClass("x-dlg-collapsed");this.restoreHeight=this.el.getHeight();this.resizeTo(this.el.getWidth(),this.header.getHeight());}},expand:function(){if(this.collapsed){this.collapsed=false;this.el.removeClass("x-dlg-collapsed");this.resizeTo(this.el.getWidth(),this.restoreHeight);}},initTabs:function(){var tabs=this.getTabs();while(tabs.getTab(0)){tabs.removeTab(0);}
-this.el.select(this.tabTag+'.x-dlg-tab').each(function(el){var dom=el.dom;tabs.addTab(Ext.id(dom),dom.title);dom.title="";});tabs.activate(0);return tabs;},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getHeaderFooterHeight(true)+40);},onResize:function(){this.refreshSize();this.syncBodyHeight();this.adjustAssets();this.focus();this.fireEvent("resize",this,this.size.width,this.size.height);},onKeyDown:function(e){if(this.isVisible()){this.fireEvent("keydown",this,e);}},resizeTo:function(width,height){this.el.setSize(width,height);this.size={width:width,height:height};this.syncBodyHeight();if(this.fixedcenter){this.center();}
-if(this.isVisible()){this.constrainXY();this.adjustAssets();}
-this.fireEvent("resize",this,width,height);return this;},setContentSize:function(w,h){h+=this.getHeaderFooterHeight()+this.body.getMargins("tb");w+=this.body.getMargins("lr")+this.bwrap.getMargins("lr")+this.centerBg.getPadding("lr");h+=this.body.getPadding("tb")+this.bwrap.getBorderWidth("tb")+this.body.getBorderWidth("tb")+this.el.getBorderWidth("tb");w+=this.body.getPadding("lr")+this.bwrap.getBorderWidth("lr")+this.body.getBorderWidth("lr")+this.bwrap.getPadding("lr")+this.el.getBorderWidth("lr");if(this.tabs){h+=this.tabs.stripWrap.getHeight()+this.tabs.bodyEl.getMargins("tb")+this.tabs.bodyEl.getPadding("tb");w+=this.tabs.bodyEl.getMargins("lr")+this.tabs.bodyEl.getPadding("lr");}
-this.resizeTo(w,h);return this;},addKeyListener:function(key,fn,scope){var keyCode,shift,ctrl,alt;if(typeof key=="object"&&!(key instanceof Array)){keyCode=key["key"];shift=key["shift"];ctrl=key["ctrl"];alt=key["alt"];}else{keyCode=key;}
-var handler=function(dlg,e){if((!shift||e.shiftKey)&&(!ctrl||e.ctrlKey)&&(!alt||e.altKey)){var k=e.getKey();if(keyCode instanceof Array){for(var i=0,len=keyCode.length;i<len;i++){if(keyCode[i]==k){fn.call(scope||window,dlg,k,e);return;}}}else{if(k==keyCode){fn.call(scope||window,dlg,k,e);}}}};this.on("keydown",handler);return this;},getTabs:function(){if(!this.tabs){this.el.addClass("x-dlg-auto-tabs");this.body.addClass(this.tabPosition=="bottom"?"x-tabs-bottom":"x-tabs-top");this.tabs=new Ext.TabPanel(this.body.dom,this.tabPosition=="bottom");}
-return this.tabs;},addButton:function(config,handler,scope){var dh=Ext.DomHelper;if(!this.footer){this.footer=dh.append(this.bwrap,{tag:"div",cls:"x-dlg-ft"},true);}
-if(!this.btnContainer){var tb=this.footer.createChild({tag:"div",cls:"x-dlg-btns x-dlg-btns-"+this.buttonAlign,html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'},null,true);this.btnContainer=tb.firstChild.firstChild.firstChild;}
-var bconfig={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bconfig.text=config;}else{if(config.tag){bconfig.dhconfig=config;}else{Ext.apply(bconfig,config);}}
-var btn=new Ext.Button(this.btnContainer.appendChild(document.createElement("td")),bconfig);this.syncBodyHeight();if(!this.buttons){this.buttons=[];}
-this.buttons.push(btn);return btn;},setDefaultButton:function(btn){this.defaultButton=btn;return this;},getHeaderFooterHeight:function(safe){var height=0;if(this.header){height+=this.header.getHeight();}
-if(this.footer){var fm=this.footer.getMargins();height+=(this.footer.getHeight()+fm.top+fm.bottom);}
-height+=this.bwrap.getPadding("tb")+this.bwrap.getBorderWidth("tb");height+=this.centerBg.getPadding("tb");return height;},syncBodyHeight:function(){var bd=this.body,cb=this.centerBg,bw=this.bwrap;var height=this.size.height-this.getHeaderFooterHeight(false);bd.setHeight(height-bd.getMargins("tb"));var hh=this.header.getHeight();var h=this.size.height-hh;cb.setHeight(h);bw.setLeftTop(cb.getPadding("l"),hh+cb.getPadding("t"));bw.setHeight(h-cb.getPadding("tb"));bw.setWidth(this.el.getWidth(true)-cb.getPadding("lr"));bd.setWidth(bw.getWidth(true));if(this.tabs){this.tabs.syncHeight();if(Ext.isIE){this.tabs.el.repaint();}}},restoreState:function(){var box=Ext.state.Manager.get(this.stateId||(this.el.id+"-state"));if(box&&box.width){this.xy=[box.x,box.y];this.resizeTo(box.width,box.height);}
-return this;},beforeShow:function(){this.expand();if(this.fixedcenter){this.xy=this.el.getCenterXY(true);}
-if(this.modal){Ext.get(document.body).addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show();}
-this.constrainXY();},animShow:function(){var b=Ext.get(this.animateTarget,true).getBox();this.proxy.setSize(b.width,b.height);this.proxy.setLocation(b.x,b.y);this.proxy.show();this.proxy.setBounds(this.xy[0],this.xy[1],this.size.width,this.size.height,true,.35,this.showEl.createDelegate(this));},show:function(animateTarget){if(this.fireEvent("beforeshow",this)===false){return;}
-if(this.syncHeightBeforeShow){this.syncBodyHeight();}else if(this.firstShow){this.firstShow=false;this.syncBodyHeight();}
-this.animateTarget=animateTarget||this.animateTarget;if(!this.el.isVisible()){this.beforeShow();if(this.animateTarget){this.animShow();}else{this.showEl();}}
-return this;},showEl:function(){this.proxy.hide();this.el.setXY(this.xy);this.el.show();this.adjustAssets(true);this.toFront();this.focus();if(Ext.isIE){this.el.repaint();}
-this.fireEvent("show",this);},focus:function(){if(this.defaultButton){this.defaultButton.focus();}else{this.focusEl.focus();}},constrainXY:function(){if(this.constraintoviewport!==false){if(!this.viewSize){if(this.container){var s=this.container.getSize();this.viewSize=[s.width,s.height];}else{this.viewSize=[Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()];}}
-var s=Ext.get(this.container||document).getScroll();var x=this.xy[0],y=this.xy[1];var w=this.size.width,h=this.size.height;var vw=this.viewSize[0],vh=this.viewSize[1];var moved=false;if(x+w>vw+s.left){x=vw-w;moved=true;}
-if(y+h>vh+s.top){y=vh-h;moved=true;}
-if(x<s.left){x=s.left;moved=true;}
-if(y<s.top){y=s.top;moved=true;}
-if(moved){this.xy=[x,y];if(this.isVisible()){this.el.setLocation(x,y);this.adjustAssets();}}}},onDrag:function(){if(!this.proxyDrag){this.xy=this.el.getXY();this.adjustAssets();}},adjustAssets:function(doShow){var x=this.xy[0],y=this.xy[1];var w=this.size.width,h=this.size.height;if(doShow===true){if(this.shadow){this.shadow.show(this.el);}
-if(this.shim){this.shim.show();}}
-if(this.shadow&&this.shadow.isVisible()){this.shadow.show(this.el);}
-if(this.shim&&this.shim.isVisible()){this.shim.setBounds(x,y,w,h);}},adjustViewport:function(w,h){if(!w||!h){w=Ext.lib.Dom.getViewWidth();h=Ext.lib.Dom.getViewHeight();}
-this.viewSize=[w,h];if(this.modal&&this.mask.isVisible()){this.mask.setSize(w,h);this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));}
-if(this.isVisible()){this.constrainXY();}},destroy:function(removeEl){if(this.isVisible()){this.animateTarget=null;this.hide();}
-Ext.EventManager.removeResizeListener(this.adjustViewport,this);if(this.tabs){this.tabs.destroy(removeEl);}
-Ext.destroy(this.shim,this.proxy,this.resizer,this.close,this.mask);if(this.dd){this.dd.unreg();}
-if(this.buttons){for(var i=0,len=this.buttons.length;i<len;i++){this.buttons[i].destroy();}}
-this.el.removeAllListeners();if(removeEl===true){this.el.update("");this.el.remove();}
-Ext.DialogManager.unregister(this);},startMove:function(){if(this.proxyDrag){this.proxy.show();}
-if(this.constraintoviewport!==false){this.dd.constrainTo(document.body,{right:this.shadowOffset,bottom:this.shadowOffset});}},endMove:function(){if(!this.proxyDrag){Ext.dd.DD.prototype.endDrag.apply(this.dd,arguments);}else{Ext.dd.DDProxy.prototype.endDrag.apply(this.dd,arguments);this.proxy.hide();}
-this.refreshSize();this.adjustAssets();this.focus();this.fireEvent("move",this,this.xy[0],this.xy[1]);},toFront:function(){Ext.DialogManager.bringToFront(this);return this;},toBack:function(){Ext.DialogManager.sendToBack(this);return this;},center:function(){var xy=this.el.getCenterXY(true);this.moveTo(xy[0],xy[1]);return this;},moveTo:function(x,y){this.xy=[x,y];if(this.isVisible()){this.el.setXY(this.xy);this.adjustAssets();}
-return this;},alignTo:function(element,position,offsets){this.xy=this.el.getAlignToXY(element,position,offsets);if(this.isVisible()){this.el.setXY(this.xy);this.adjustAssets();}
-return this;},anchorTo:function(el,alignment,offsets,monitorScroll){var action=function(){this.alignTo(el,alignment,offsets);};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',action,this,{buffer:tm=='number'?monitorScroll:50});}
-action.call(this);return this;},isVisible:function(){return this.el.isVisible();},animHide:function(callback){var b=Ext.get(this.animateTarget).getBox();this.proxy.show();this.proxy.setBounds(this.xy[0],this.xy[1],this.size.width,this.size.height);this.el.hide();this.proxy.setBounds(b.x,b.y,b.width,b.height,true,.35,this.hideEl.createDelegate(this,[callback]));},hide:function(callback){if(this.fireEvent("beforehide",this)===false){return;}
-if(this.shadow){this.shadow.hide();}
-if(this.shim){this.shim.hide();}
-if(this.animateTarget){this.animHide(callback);}else{this.el.hide();this.hideEl(callback);}
-return this;},hideEl:function(callback){this.proxy.hide();if(this.modal){this.mask.hide();Ext.get(document.body).removeClass("x-body-masked");}
-this.fireEvent("hide",this);if(typeof callback=="function"){callback();}},hideAction:function(){this.setLeft("-10000px");this.setTop("-10000px");this.setStyle("visibility","hidden");},refreshSize:function(){this.size=this.el.getSize();this.xy=this.el.getXY();Ext.state.Manager.set(this.stateId||this.el.id+"-state",this.el.getBox());},setZIndex:function(index){if(this.modal){this.mask.setStyle("z-index",index);}
-if(this.shim){this.shim.setStyle("z-index",++index);}
-if(this.shadow){this.shadow.setZIndex(++index);}
-this.el.setStyle("z-index",++index);if(this.proxy){this.proxy.setStyle("z-index",++index);}
-if(this.resizer){this.resizer.proxy.setStyle("z-index",++index);}
-this.lastZIndex=index;},getEl:function(){return this.el;}});Ext.DialogManager=function(){var list={};var accessList=[];var front=null;var sortDialogs=function(d1,d2){return(!d1._lastAccess||d1._lastAccess<d2._lastAccess)?-1:1;};var orderDialogs=function(){accessList.sort(sortDialogs);var seed=Ext.DialogManager.zseed;for(var i=0,len=accessList.length;i<len;i++){var dlg=accessList[i];if(dlg){dlg.setZIndex(seed+(i*10));}}};return{zseed:9000,register:function(dlg){list[dlg.id]=dlg;accessList.push(dlg);},unregister:function(dlg){delete list[dlg.id];if(!accessList.indexOf){for(var i=0,len=accessList.length;i<len;i++){if(accessList[i]==dlg){accessList.splice(i,1);return;}}}else{var i=accessList.indexOf(dlg);if(i!=-1){accessList.splice(i,1);}}},get:function(id){return typeof id=="object"?id:list[id];},bringToFront:function(dlg){dlg=this.get(dlg);if(dlg!=front){front=dlg;dlg._lastAccess=new Date().getTime();orderDialogs();}
-return dlg;},sendToBack:function(dlg){dlg=this.get(dlg);dlg._lastAccess=-(new Date().getTime());orderDialogs();return dlg;},hideAll:function(){for(var id in list){if(list[id]&&typeof list[id]!="function"&&list[id].isVisible()){list[id].hide();}}}};}();Ext.LayoutDialog=function(el,config){config.autoTabs=false;Ext.LayoutDialog.superclass.constructor.call(this,el,config);this.body.setStyle({overflow:"hidden",position:"relative"});this.layout=new Ext.BorderLayout(this.body.dom,config);this.layout.monitorWindowResize=false;this.el.addClass("x-dlg-auto-layout");this.center=Ext.BasicDialog.prototype.center;this.on("show",this.layout.layout,this.layout,true);};Ext.extend(Ext.LayoutDialog,Ext.BasicDialog,{endUpdate:function(){this.layout.endUpdate();},beginUpdate:function(){this.layout.beginUpdate();},getLayout:function(){return this.layout;},showEl:function(){Ext.LayoutDialog.superclass.showEl.apply(this,arguments);if(Ext.isIE7){this.layout.layout();}},syncBodyHeight:function(){Ext.LayoutDialog.superclass.syncBodyHeight.call(this);if(this.layout){this.layout.layout();}}});
-
-Ext.MessageBox=function(){var dlg,opt,mask,waitTimer;var bodyEl,msgEl,textboxEl,textareaEl,progressEl,pp;var buttons,activeTextEl,bwidth;var handleButton=function(button){dlg.hide();Ext.callback(opt.fn,opt.scope||window,[button,activeTextEl.dom.value],1);};var handleHide=function(){if(opt&&opt.cls){dlg.el.removeClass(opt.cls);}
-if(waitTimer){Ext.TaskMgr.stop(waitTimer);waitTimer=null;}};var updateButtons=function(b){var width=0;if(!b){buttons["ok"].hide();buttons["cancel"].hide();buttons["yes"].hide();buttons["no"].hide();dlg.footer.dom.style.display='none';return width;}
-dlg.footer.dom.style.display='';for(var k in buttons){if(typeof buttons[k]!="function"){if(b[k]){buttons[k].show();buttons[k].setText(typeof b[k]=="string"?b[k]:Ext.MessageBox.buttonText[k]);width+=buttons[k].el.getWidth()+15;}else{buttons[k].hide();}}}
-return width;};var handleEsc=function(d,k,e){if(opt&&opt.closable!==false){dlg.hide();}
-if(e){e.stopEvent();}};return{getDialog:function(){if(!dlg){dlg=new Ext.BasicDialog("x-msg-box",{autoCreate:true,shadow:true,draggable:true,resizable:false,constraintoviewport:false,fixedcenter:true,collapsible:false,shim:true,modal:true,width:400,height:100,buttonAlign:"center",closeClick:function(){if(opt&&opt.buttons&&opt.buttons.no&&!opt.buttons.cancel){handleButton("no");}else{handleButton("cancel");}}});dlg.on("hide",handleHide);mask=dlg.mask;dlg.addKeyListener(27,handleEsc);buttons={};var bt=this.buttonText;buttons["ok"]=dlg.addButton(bt["ok"],handleButton.createCallback("ok"));buttons["yes"]=dlg.addButton(bt["yes"],handleButton.createCallback("yes"));buttons["no"]=dlg.addButton(bt["no"],handleButton.createCallback("no"));buttons["cancel"]=dlg.addButton(bt["cancel"],handleButton.createCallback("cancel"));bodyEl=dlg.body.createChild({tag:"div",html:'<span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea><div class="ext-mb-progress-wrap"><div class="ext-mb-progress"><div class="ext-mb-progress-bar">&#160;</div></div></div>'});msgEl=bodyEl.dom.firstChild;textboxEl=Ext.get(bodyEl.dom.childNodes[2]);textboxEl.enableDisplayMode();textboxEl.addKeyListener([10,13],function(){if(dlg.isVisible()&&opt&&opt.buttons){if(opt.buttons.ok){handleButton("ok");}else if(opt.buttons.yes){handleButton("yes");}}});textareaEl=Ext.get(bodyEl.dom.childNodes[3]);textareaEl.enableDisplayMode();progressEl=Ext.get(bodyEl.dom.childNodes[4]);progressEl.enableDisplayMode();var pf=progressEl.dom.firstChild;pp=Ext.get(pf.firstChild);pp.setHeight(pf.offsetHeight);}
-return dlg;},updateText:function(text){if(!dlg.isVisible()&&!opt.width){dlg.resizeTo(this.maxWidth,100);}
-msgEl.innerHTML=text||'&#160;';var w=Math.max(Math.min(opt.width||msgEl.offsetWidth,this.maxWidth),Math.max(opt.minWidth||this.minWidth,bwidth));if(opt.prompt){activeTextEl.setWidth(w);}
-if(dlg.isVisible()){dlg.fixedcenter=false;}
-dlg.setContentSize(w,bodyEl.getHeight());if(dlg.isVisible()){dlg.fixedcenter=true;}
-return this;},updateProgress:function(value,text){if(text){this.updateText(text);}
-pp.setWidth(Math.floor(value*progressEl.dom.firstChild.offsetWidth));return this;},isVisible:function(){return dlg&&dlg.isVisible();},hide:function(){if(this.isVisible()){dlg.hide();}},show:function(options){if(this.isVisible()){this.hide();}
-var d=this.getDialog();opt=options;d.setTitle(opt.title||"&#160;");d.close.setDisplayed(opt.closable!==false);activeTextEl=textboxEl;opt.prompt=opt.prompt||(opt.multiline?true:false);if(opt.prompt){if(opt.multiline){textboxEl.hide();textareaEl.show();textareaEl.setHeight(typeof opt.multiline=="number"?opt.multiline:this.defaultTextHeight);activeTextEl=textareaEl;}else{textboxEl.show();textareaEl.hide();}}else{textboxEl.hide();textareaEl.hide();}
-progressEl.setDisplayed(opt.progress===true);this.updateProgress(0);activeTextEl.dom.value=opt.value||"";if(opt.prompt){dlg.setDefaultButton(activeTextEl);}else{var bs=opt.buttons;var db=null;if(bs&&bs.ok){db=buttons["ok"];}else if(bs&&bs.yes){db=buttons["yes"];}
-dlg.setDefaultButton(db);}
-bwidth=updateButtons(opt.buttons);this.updateText(opt.msg);if(opt.cls){d.el.addClass(opt.cls);}
-d.proxyDrag=opt.proxyDrag===true;d.modal=opt.modal!==false;d.mask=opt.modal!==false?mask:false;if(!d.isVisible()){document.body.appendChild(dlg.el.dom);d.animateTarget=null;d.show(options.animEl);}
-return this;},progress:function(title,msg){this.show({title:title,msg:msg,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth});return this;},alert:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.OK,fn:fn,scope:scope});return this;},wait:function(msg,title){this.show({title:title,msg:msg,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});waitTimer=Ext.TaskMgr.start({run:function(i){Ext.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);},interval:1000});return this;},confirm:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.YESNO,fn:fn,scope:scope});return this;},prompt:function(title,msg,fn,scope,multiline){this.show({title:title,msg:msg,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:scope,prompt:true,multiline:multiline});return this;},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();Ext.Msg=Ext.MessageBox;
-
-Ext.QuickTips=function(){var el,tipBody,tipBodyText,tipTitle,tm,cfg,close,tagEls={},esc,removeCls=null,bdLeft,bdRight;var ce,bd,xy,dd;var visible=false,disabled=true,inited=false;var showProc=1,hideProc=1,dismissProc=1,locks=[];var onOver=function(e){if(disabled){return;}
-var t=e.getTarget();if(!t||t.nodeType!==1||t==document||t==document.body){return;}
-if(ce&&t==ce.el){clearTimeout(hideProc);return;}
-if(t&&tagEls[t.id]){tagEls[t.id].el=t;showProc=show.defer(tm.showDelay,tm,[tagEls[t.id]]);return;}
-var ttp,et=Ext.fly(t);var ns=cfg.namespace;if(tm.interceptTitles&&t.title){ttp=t.title;t.qtip=ttp;t.removeAttribute("title");e.preventDefault();}else{ttp=t.qtip||et.getAttributeNS(ns,cfg.attribute);}
-if(ttp){showProc=show.defer(tm.showDelay,tm,[{el:t,text:ttp,width:et.getAttributeNS(ns,cfg.width),autoHide:et.getAttributeNS(ns,cfg.hide)!="user",title:et.getAttributeNS(ns,cfg.title),cls:et.getAttributeNS(ns,cfg.cls)}]);}};var onOut=function(e){clearTimeout(showProc);var t=e.getTarget();if(t&&ce&&ce.el==t&&(tm.autoHide&&ce.autoHide!==false)){hideProc=setTimeout(hide,tm.hideDelay);}};var onMove=function(e){if(disabled){return;}
-xy=e.getXY();xy[1]+=18;if(tm.trackMouse&&ce){el.setXY(xy);}};var onDown=function(e){clearTimeout(showProc);clearTimeout(hideProc);if(!e.within(el)){if(tm.hideOnClick){hide();tm.disable();}}};var onUp=function(e){tm.enable();};var getPad=function(){return bdLeft.getPadding('l')+bdRight.getPadding('r');};var show=function(o){if(disabled){return;}
-clearTimeout(dismissProc);ce=o;if(removeCls){el.removeClass(removeCls);removeCls=null;}
-if(ce.cls){el.addClass(ce.cls);removeCls=ce.cls;}
-if(ce.title){tipTitle.update(ce.title);tipTitle.show();}else{tipTitle.update('');tipTitle.hide();}
-el.dom.style.width=tm.maxWidth+'px';tipBodyText.update(o.text);var p=getPad(),w=ce.width;if(!w){var td=tipBodyText.dom;var aw=Math.max(td.offsetWidth,td.clientWidth,td.scrollWidth);if(aw>tm.maxWidth){w=tm.maxWidth;}else if(aw<tm.minWidth){w=tm.minWidth;}else{w=aw;}}
-el.setWidth(parseInt(w,10)+p);if(ce.autoHide===false){close.setDisplayed(true);if(dd){dd.unlock();}}else{close.setDisplayed(false);if(dd){dd.lock();}}
-if(xy){el.avoidY=xy[1]-18;el.setXY(xy);}
-if(tm.animate){el.setOpacity(.1);el.setStyle("visibility","visible");el.fadeIn({callback:afterShow});}else{afterShow();}};var afterShow=function(){if(ce){el.show();esc.enable();if(tm.autoDismiss&&ce.autoHide!==false){dismissProc=setTimeout(hide,tm.autoDismissDelay);}}};var hide=function(noanim){clearTimeout(dismissProc);clearTimeout(hideProc);ce=null;if(el.isVisible()){esc.disable();if(noanim!==true&&tm.animate){el.fadeOut({callback:afterHide});}else{afterHide();}}};var afterHide=function(){el.hide();if(removeCls){el.removeClass(removeCls);removeCls=null;}};return{minWidth:40,maxWidth:300,interceptTitles:false,trackMouse:false,hideOnClick:true,showDelay:500,hideDelay:200,autoHide:true,autoDismiss:true,autoDismissDelay:5000,animate:false,init:function(){tm=Ext.QuickTips;cfg=tm.tagConfig;if(!inited){if(!Ext.isReady){Ext.onReady(Ext.QuickTips.init,Ext.QuickTips);return;}
-el=new Ext.Layer({cls:"x-tip",shadow:"drop",shim:true,constrain:true,shadowOffset:4});el.fxDefaults={stopFx:true};el.update('<div class="x-tip-top-left"><div class="x-tip-top-right"><div class="x-tip-top"></div></div></div><div class="x-tip-bd-left"><div class="x-tip-bd-right"><div class="x-tip-bd"><div class="x-tip-close"></div><h3></h3><div class="x-tip-bd-inner"></div><div class="x-clear"></div></div></div></div><div class="x-tip-ft-left"><div class="x-tip-ft-right"><div class="x-tip-ft"></div></div></div>');tipTitle=el.child('h3');tipTitle.enableDisplayMode("block");tipBody=el.child('div.x-tip-bd');tipBodyText=el.child('div.x-tip-bd-inner');bdLeft=el.child('div.x-tip-bd-left');bdRight=el.child('div.x-tip-bd-right');close=el.child('div.x-tip-close');close.enableDisplayMode("block");close.on("click",hide);var d=Ext.get(document);d.on("mousedown",onDown);d.on("mouseup",onUp);d.on("mouseover",onOver);d.on("mouseout",onOut);d.on("mousemove",onMove);esc=d.addKeyListener(27,hide);esc.disable();if(Ext.dd.DD){dd=el.initDD("default",null,{onDrag:function(){el.sync();}});dd.setHandleElId(tipTitle.id);dd.lock();}
-inited=true;}
-this.enable();},register:function(config){var cs=config instanceof Array?config:arguments;for(var i=0,len=cs.length;i<len;i++){var c=cs[i];var target=c.target;if(target){if(target instanceof Array){for(var j=0,jlen=target.length;j<jlen;j++){tagEls[target[j]]=c;}}else{tagEls[typeof target=='string'?target:Ext.id(target.id)]=c;}}}},unregister:function(el){delete tagEls[Ext.id(el)];},enable:function(){if(inited){locks.pop();if(locks.length<1){disabled=false;}}},disable:function(){disabled=true;clearTimeout(showProc);clearTimeout(hideProc);clearTimeout(dismissProc);if(ce){hide(true);}
-locks.push(1);},isEnabled:function(){return!disabled;},tagConfig:{namespace:"ext",attribute:"qtip",width:"width",target:"target",title:"qtitle",hide:"hide",cls:"qclass"}};}();Ext.QuickTips.tips=Ext.QuickTips.register;
-
-Ext.tree.TreePanel=function(el,config){Ext.apply(this,config);Ext.tree.TreePanel.superclass.constructor.call(this);this.el=Ext.get(el);this.el.addClass('x-tree');this.id=this.el.id;this.addEvents({"beforeload":true,"load":true,"textchange":true,"beforeexpand":true,"beforecollapse":true,"expand":true,"disabledchange":true,"collapse":true,"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"beforechildrenrendered":true,"startdrag":true,"enddrag":true,"dragdrop":true,"beforenodedrop":true,"nodedrop":true,"nodedragover":true});if(this.singleExpand){this.on("beforeexpand",this.restrictExpand,this);}};Ext.extend(Ext.tree.TreePanel,Ext.data.Tree,{rootVisible:true,animate:Ext.enableFx,lines:true,enableDD:false,hlDrop:Ext.enableFx,proxyNodeEvent:function(){this.fireEvent.apply(this,arguments);},restrictExpand:function(node){var p=node.parentNode;if(p){if(p.expandedChild&&p.expandedChild.parentNode==p){p.expandedChild.collapse();}
-p.expandedChild=node;}},setRootNode:function(node){Ext.tree.TreePanel.superclass.setRootNode.call(this,node);if(!this.rootVisible){node.ui=new Ext.tree.RootTreeNodeUI(node);}
-return node;},getEl:function(){return this.el;},getLoader:function(){return this.loader;},expandAll:function(){this.root.expand(true);},collapseAll:function(){this.root.collapse(true);},getSelectionModel:function(){if(!this.selModel){this.selModel=new Ext.tree.DefaultSelectionModel();}
-return this.selModel;},expandPath:function(path,attr,callback){attr=attr||"id";var keys=path.split(this.pathSeparator);var curNode=this.root;if(curNode.attributes[attr]!=keys[1]){if(callback){callback(false,null);}
-return;}
-var index=1;var f=function(){if(++index==keys.length){if(callback){callback(true,curNode);}
-return;}
-var c=curNode.findChild(attr,keys[index]);if(!c){if(callback){callback(false,curNode);}
-return;}
-curNode=c;c.expand(false,false,f);};curNode.expand(false,false,f);},selectPath:function(path,attr,callback){attr=attr||"id";var keys=path.split(this.pathSeparator);var v=keys.pop();if(keys.length>0){var f=function(success,node){if(success&&node){var n=node.findChild(attr,v);if(n){n.select();if(callback){callback(true,n);}}}else{if(callback){callback(false,n);}}};this.expandPath(keys.join(this.pathSeparator),attr,f);}else{this.root.select();if(callback){callback(true,this.root);}}},getTreeEl:function(){return this.el;},render:function(){this.innerCt=this.el.createChild({tag:"ul",cls:"x-tree-root-ct "+
-(this.lines?"x-tree-lines":"x-tree-no-lines")});if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}
-if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true});}
-if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll});}
-this.getSelectionModel().init(this);this.root.render();if(!this.rootVisible){this.root.renderChildren();}
-return this;}});
-
-Ext.tree.DefaultSelectionModel=function(){this.selNode=null;this.addEvents({"selectionchange":true,"beforeselect":true});};Ext.extend(Ext.tree.DefaultSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){this.select(node);},select:function(node){var last=this.selNode;if(last!=node&&this.fireEvent('beforeselect',this,node,last)!==false){if(last){last.ui.onSelectedChange(false);}
-this.selNode=node;node.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,node,last);}
-return node;},unselect:function(node){if(this.selNode==node){this.clearSelections();}},clearSelections:function(){var n=this.selNode;if(n){n.ui.onSelectedChange(false);this.selNode=null;this.fireEvent("selectionchange",this,null);}
-return n;},getSelectedNode:function(){return this.selNode;},isSelected:function(node){return this.selNode==node;},selectPrevious:function(){var s=this.selNode||this.lastSelNode;if(!s){return null;}
-var ps=s.previousSibling;if(ps){if(!ps.isExpanded()||ps.childNodes.length<1){return this.select(ps);}else{var lc=ps.lastChild;while(lc&&lc.isExpanded()&&lc.childNodes.length>0){lc=lc.lastChild;}
-return this.select(lc);}}else if(s.parentNode&&(this.tree.rootVisible||!s.parentNode.isRoot)){return this.select(s.parentNode);}
-return null;},selectNext:function(){var s=this.selNode||this.lastSelNode;if(!s){return null;}
-if(s.firstChild&&s.isExpanded()){return this.select(s.firstChild);}else if(s.nextSibling){return this.select(s.nextSibling);}else if(s.parentNode){var newS=null;s.parentNode.bubble(function(){if(this.nextSibling){newS=this.getOwnerTree().selModel.select(this.nextSibling);return false;}});return newS;}
-return null;},onKeyDown:function(e){var s=this.selNode||this.lastSelNode;var sm=this;if(!s){return;}
-var k=e.getKey();switch(k){case e.DOWN:e.stopEvent();this.selectNext();break;case e.UP:e.stopEvent();this.selectPrevious();break;case e.RIGHT:e.preventDefault();if(s.hasChildNodes()){if(!s.isExpanded()){s.expand();}else if(s.firstChild){this.select(s.firstChild,e);}}
-break;case e.LEFT:e.preventDefault();if(s.hasChildNodes()&&s.isExpanded()){s.collapse();}else if(s.parentNode&&(this.tree.rootVisible||s.parentNode!=this.tree.getRootNode())){this.select(s.parentNode,e);}
-break;};}});Ext.tree.MultiSelectionModel=function(){this.selNodes=[];this.selMap={};this.addEvents({"selectionchange":true});};Ext.extend(Ext.tree.MultiSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){this.select(node,e,e.ctrlKey);},select:function(node,e,keepExisting){if(keepExisting!==true){this.clearSelections(true);}
-if(this.isSelected(node)){this.lastSelNode=node;return node;}
-this.selNodes.push(node);this.selMap[node.id]=node;this.lastSelNode=node;node.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return node;},unselect:function(node){if(this.selMap[node.id]){node.ui.onSelectedChange(false);var sn=this.selNodes;var index=-1;if(sn.indexOf){index=sn.indexOf(node);}else{for(var i=0,len=sn.length;i<len;i++){if(sn[i]==node){index=i;break;}}}
-if(index!=-1){this.selNodes.splice(index,1);}
-delete this.selMap[node.id];this.fireEvent("selectionchange",this,this.selNodes);}},clearSelections:function(suppressEvent){var sn=this.selNodes;if(sn.length>0){for(var i=0,len=sn.length;i<len;i++){sn[i].ui.onSelectedChange(false);}
-this.selNodes=[];this.selMap={};if(suppressEvent!==true){this.fireEvent("selectionchange",this,this.selNodes);}}},isSelected:function(node){return this.selMap[node.id]?true:false;},getSelectedNodes:function(){return this.selNodes;},onKeyDown:Ext.tree.DefaultSelectionModel.prototype.onKeyDown,selectNext:Ext.tree.DefaultSelectionModel.prototype.selectNext,selectPrevious:Ext.tree.DefaultSelectionModel.prototype.selectPrevious});
-
-Ext.tree.TreeNode=function(attributes){attributes=attributes||{};if(typeof attributes=="string"){attributes={text:attributes};}
-this.childrenRendered=false;this.rendered=false;Ext.tree.TreeNode.superclass.constructor.call(this,attributes);this.expanded=attributes.expanded===true;this.isTarget=attributes.isTarget!==false;this.draggable=attributes.draggable!==false&&attributes.allowDrag!==false;this.allowChildren=attributes.allowChildren!==false&&attributes.allowDrop!==false;this.text=attributes.text;this.disabled=attributes.disabled===true;this.addEvents({"textchange":true,"beforeexpand":true,"beforecollapse":true,"expand":true,"disabledchange":true,"collapse":true,"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"beforechildrenrendered":true});var uiClass=this.attributes.uiProvider||Ext.tree.TreeNodeUI;this.ui=new uiClass(this);};Ext.extend(Ext.tree.TreeNode,Ext.data.Node,{preventHScroll:true,isExpanded:function(){return this.expanded;},getUI:function(){return this.ui;},setFirstChild:function(node){var of=this.firstChild;Ext.tree.TreeNode.superclass.setFirstChild.call(this,node);if(this.childrenRendered&&of&&node!=of){of.renderIndent(true,true);}
-if(this.rendered){this.renderIndent(true,true);}},setLastChild:function(node){var ol=this.lastChild;Ext.tree.TreeNode.superclass.setLastChild.call(this,node);if(this.childrenRendered&&ol&&node!=ol){ol.renderIndent(true,true);}
-if(this.rendered){this.renderIndent(true,true);}},appendChild:function(){var node=Ext.tree.TreeNode.superclass.appendChild.apply(this,arguments);if(node&&this.childrenRendered){node.render();}
-this.ui.updateExpandIcon();return node;},removeChild:function(node){this.ownerTree.getSelectionModel().unselect(node);Ext.tree.TreeNode.superclass.removeChild.apply(this,arguments);if(this.childrenRendered){node.ui.remove();}
-if(this.childNodes.length<1){this.collapse(false,false);}else{this.ui.updateExpandIcon();}
-return node;},insertBefore:function(node,refNode){var newNode=Ext.tree.TreeNode.superclass.insertBefore.apply(this,arguments);if(newNode&&refNode&&this.childrenRendered){node.render();}
-this.ui.updateExpandIcon();return newNode;},setText:function(text){var oldText=this.text;this.text=text;this.attributes.text=text;if(this.rendered){this.ui.onTextChange(this,text,oldText);}
-this.fireEvent("textchange",this,text,oldText);},select:function(){this.getOwnerTree().getSelectionModel().select(this);},unselect:function(){this.getOwnerTree().getSelectionModel().unselect(this);},isSelected:function(){return this.getOwnerTree().getSelectionModel().isSelected(this);},expand:function(deep,anim,callback){if(!this.expanded){if(this.fireEvent("beforeexpand",this,deep,anim)===false){return;}
-if(!this.childrenRendered){this.renderChildren();}
-this.expanded=true;if(!this.isHiddenRoot()&&(this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animExpand(function(){this.fireEvent("expand",this);if(typeof callback=="function"){callback(this);}
-if(deep===true){this.expandChildNodes(true);}}.createDelegate(this));return;}else{this.ui.expand();this.fireEvent("expand",this);if(typeof callback=="function"){callback(this);}}}else{if(typeof callback=="function"){callback(this);}}
-if(deep===true){this.expandChildNodes(true);}},isHiddenRoot:function(){return this.isRoot&&!this.getOwnerTree().rootVisible;},collapse:function(deep,anim){if(this.expanded&&!this.isHiddenRoot()){if(this.fireEvent("beforecollapse",this,deep,anim)===false){return;}
-this.expanded=false;if((this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animCollapse(function(){this.fireEvent("collapse",this);if(deep===true){this.collapseChildNodes(true);}}.createDelegate(this));return;}else{this.ui.collapse();this.fireEvent("collapse",this);}}
-if(deep===true){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(true,false);}}},delayedExpand:function(delay){if(!this.expandProcId){this.expandProcId=this.expand.defer(delay,this);}},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);}
-this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.getPath(),false,function(){tree.getTreeEl().scrollChildIntoView(this.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
-this.fireEvent("disabledchange",this,true);},enable:function(){this.disabled=false;if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,false);}
-this.fireEvent("disabledchange",this,false);},renderChildren:function(suppressEvent){if(suppressEvent!==false){this.fireEvent("beforechildrenrendered",this);}
-var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}
-this.childrenRendered=true;},sort:function(fn,scope){Ext.tree.TreeNode.superclass.sort.apply(this,arguments);if(this.childrenRendered){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}}},render:function(bulkRender){this.ui.render(bulkRender);if(!this.rendered){this.rendered=true;if(this.expanded){this.expanded=false;this.expand(false,false);}}},renderIndent:function(deep,refresh){if(refresh){this.ui.childIndent=null;}
-this.ui.renderIndent();if(deep===true&&this.childrenRendered){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].renderIndent(true,refresh);}}}});
-
-Ext.tree.AsyncTreeNode=function(config){this.loaded=false;this.loading=false;Ext.tree.AsyncTreeNode.superclass.constructor.apply(this,arguments);this.addEvents({'beforeload':true,'load':true});};Ext.extend(Ext.tree.AsyncTreeNode,Ext.tree.TreeNode,{expand:function(deep,anim,callback){if(this.loading){var timer;var f=function(){if(!this.loading){clearInterval(timer);this.expand(deep,anim,callback);}}.createDelegate(this);timer=setInterval(f,200);return;}
-if(!this.loaded){if(this.fireEvent("beforeload",this)===false){return;}
-this.loading=true;this.ui.beforeLoad(this);var loader=this.loader||this.attributes.loader||this.getOwnerTree().getLoader();if(loader){loader.load(this,this.loadComplete.createDelegate(this,[deep,anim,callback]));return;}}
-Ext.tree.AsyncTreeNode.superclass.expand.call(this,deep,anim,callback);},isLoading:function(){return this.loading;},loadComplete:function(deep,anim,callback){this.loading=false;this.loaded=true;this.ui.afterLoad(this);this.fireEvent("load",this);this.expand(deep,anim,callback);},isLoaded:function(){return this.loaded;},hasChildNodes:function(){if(!this.isLeaf()&&!this.loaded){return true;}else{return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this);}},reload:function(callback){this.collapse(false,false);while(this.firstChild){this.removeChild(this.firstChild);}
-this.childrenRendered=false;this.loaded=false;if(this.isHiddenRoot()){this.expanded=false;}
-this.expand(false,false,callback);}});
-
-Ext.tree.TreeNodeUI=function(node){this.node=node;this.rendered=false;this.animating=false;this.emptyIcon=Ext.BLANK_IMAGE_URL;};Ext.tree.TreeNodeUI.prototype={removeChild:function(node){if(this.rendered){this.ctNode.removeChild(node.ui.getEl());}},beforeLoad:function(){this.addClass("x-tree-node-loading");},afterLoad:function(){this.removeClass("x-tree-node-loading");},onTextChange:function(node,text,oldText){if(this.rendered){this.textNode.innerHTML=text;}},onDisableChange:function(node,state){this.disabled=state;if(state){this.addClass("x-tree-node-disabled");}else{this.removeClass("x-tree-node-disabled");}},onSelectedChange:function(state){if(state){this.focus();this.addClass("x-tree-selected");}else{this.removeClass("x-tree-selected");}},onMove:function(tree,node,oldParent,newParent,index,refNode){this.childIndent=null;if(this.rendered){var targetNode=newParent.ui.getContainer();if(!targetNode){this.holder=document.createElement("div");this.holder.appendChild(this.wrap);return;}
-var insertBefore=refNode?refNode.ui.getEl():null;if(insertBefore){targetNode.insertBefore(this.wrap,insertBefore);}else{targetNode.appendChild(this.wrap);}
-this.node.renderIndent(true);}},addClass:function(cls){if(this.elNode){Ext.fly(this.elNode).addClass(cls);}},removeClass:function(cls){if(this.elNode){Ext.fly(this.elNode).removeClass(cls);}},remove:function(){if(this.rendered){this.holder=document.createElement("div");this.holder.appendChild(this.wrap);}},fireEvent:function(){return this.node.fireEvent.apply(this.node,arguments);},initEvents:function(){this.node.on("move",this.onMove,this);var E=Ext.EventManager;var a=this.anchor;var el=Ext.fly(a);if(Ext.isOpera){el.setStyle("text-decoration","none");}
-el.on("click",this.onClick,this);el.on("dblclick",this.onDblClick,this);el.on("contextmenu",this.onContextMenu,this);var icon=Ext.fly(this.iconNode);icon.on("click",this.onClick,this);icon.on("dblclick",this.onDblClick,this);icon.on("contextmenu",this.onContextMenu,this);E.on(this.ecNode,"click",this.ecClick,this,true);if(this.node.disabled){this.addClass("x-tree-node-disabled");}
-if(this.node.hidden){this.addClass("x-tree-node-disabled");}
-var ot=this.node.getOwnerTree();var dd=ot.enableDD||ot.enableDrag||ot.enableDrop;if(dd&&(!this.node.isRoot||ot.rootVisible)){Ext.dd.Registry.register(this.elNode,{node:this.node,handles:[this.iconNode,this.textNode],isHandle:false});}},hide:function(){if(this.rendered){this.wrap.style.display="none";}},show:function(){if(this.rendered){this.wrap.style.display="";}},onContextMenu:function(e){e.preventDefault();this.focus();this.fireEvent("contextmenu",this.node,e);},onClick:function(e){if(this.dropping){return;}
-if(this.fireEvent("beforeclick",this.node,e)!==false){if(!this.disabled&&this.node.attributes.href){this.fireEvent("click",this.node,e);return;}
-e.preventDefault();if(this.disabled){return;}
-if(this.node.attributes.singleClickExpand&&!this.animating&&this.node.hasChildNodes()){this.node.toggle();}
-this.fireEvent("click",this.node,e);}else{e.stopEvent();}},onDblClick:function(e){e.preventDefault();if(this.disabled){return;}
-if(!this.animating&&this.node.hasChildNodes()){this.node.toggle();}
-this.fireEvent("dblclick",this.node,e);},ecClick:function(e){if(!this.animating&&this.node.hasChildNodes()){this.node.toggle();}},startDrop:function(){this.dropping=true;},endDrop:function(){setTimeout(function(){this.dropping=false;}.createDelegate(this),50);},expand:function(){this.updateExpandIcon();this.ctNode.style.display="";},focus:function(){if(!this.node.preventHScroll){try{this.anchor.focus();}catch(e){}}else if(!Ext.isIE){try{var noscroll=this.node.getOwnerTree().getTreeEl().dom;var l=noscroll.scrollLeft;this.anchor.focus();noscroll.scrollLeft=l;}catch(e){}}},blur:function(){try{this.anchor.blur();}catch(e){}},animExpand:function(callback){var ct=Ext.get(this.ctNode);ct.stopFx();if(!this.node.hasChildNodes()){this.updateExpandIcon();this.ctNode.style.display="";Ext.callback(callback);return;}
-this.animating=true;this.updateExpandIcon();ct.slideIn('t',{callback:function(){this.animating=false;Ext.callback(callback);},scope:this,duration:this.node.ownerTree.duration||.25});},highlight:function(){var tree=this.node.getOwnerTree();Ext.fly(this.wrap).highlight(tree.hlColor||"C3DAF9",{endColor:tree.hlBaseColor});},collapse:function(){this.updateExpandIcon();this.ctNode.style.display="none";},animCollapse:function(callback){var ct=Ext.get(this.ctNode);ct.enableDisplayMode('block');ct.stopFx();this.animating=true;this.updateExpandIcon();ct.slideOut('t',{callback:function(){this.animating=false;Ext.callback(callback);},scope:this,duration:this.node.ownerTree.duration||.25});},getContainer:function(){return this.ctNode;},getEl:function(){return this.wrap;},appendDDGhost:function(ghostNode){ghostNode.appendChild(this.elNode.cloneNode(true));},getDDRepairXY:function(){return Ext.lib.Dom.getXY(this.iconNode);},onRender:function(){this.render();},render:function(bulkRender){var n=this.node,a=n.attributes;var targetNode=n.parentNode?n.parentNode.ui.getContainer():n.ownerTree.innerCt.dom;if(!this.rendered){this.rendered=true;this.renderElements(n,a,targetNode,bulkRender);if(a.qtip){if(this.textNode.setAttributeNS){this.textNode.setAttributeNS("ext","qtip",a.qtip);if(a.qtipTitle){this.textNode.setAttributeNS("ext","qtitle",a.qtipTitle);}}else{this.textNode.setAttribute("ext:qtip",a.qtip);if(a.qtipTitle){this.textNode.setAttribute("ext:qtitle",a.qtipTitle);}}}else if(a.qtipCfg){a.qtipCfg.target=Ext.id(this.textNode);Ext.QuickTips.register(a.qtipCfg);}
-this.initEvents();if(!this.node.expanded){this.updateExpandIcon();}}else{if(bulkRender===true){targetNode.appendChild(this.wrap);}}},renderElements:function(n,a,targetNode,bulkRender){this.indentMarkup=n.parentNode?n.parentNode.ui.getChildIndent():'';var buf=['<li class="x-tree-node"><div class="x-tree-node-el ',a.cls,'">','<span class="x-tree-node-indent">',this.indentMarkup,"</span>",'<img src="',this.emptyIcon,'" class="x-tree-ec-icon">','<img src="',a.icon||this.emptyIcon,'" class="x-tree-node-icon',(a.icon?" x-tree-node-inline-icon":""),(a.iconCls?" "+a.iconCls:""),'" unselectable="on">','<a hidefocus="on" href="',a.href?a.href:"#",'" tabIndex="1" ',a.hrefTarget?' target="'+a.hrefTarget+'"':"",'><span unselectable="on">',n.text,"</span></a></div>",'<ul class="x-tree-node-ct" style="display:none;"></ul>',"</li>"];if(bulkRender!==true&&n.nextSibling&&n.nextSibling.ui.getEl()){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",n.nextSibling.ui.getEl(),buf.join(""));}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",targetNode,buf.join(""));}
-this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var cs=this.elNode.childNodes;this.indentNode=cs[0];this.ecNode=cs[1];this.iconNode=cs[2];this.anchor=cs[3];this.textNode=cs[3].firstChild;},getAnchor:function(){return this.anchor;},getTextEl:function(){return this.textNode;},getIconEl:function(){return this.iconNode;},updateExpandIcon:function(){if(this.rendered){var n=this.node,c1,c2;var cls=n.isLast()?"x-tree-elbow-end":"x-tree-elbow";var hasChild=n.hasChildNodes();if(hasChild){if(n.expanded){cls+="-minus";c1="x-tree-node-collapsed";c2="x-tree-node-expanded";}else{cls+="-plus";c1="x-tree-node-expanded";c2="x-tree-node-collapsed";}
-if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false;}
-if(this.c1!=c1||this.c2!=c2){Ext.fly(this.elNode).replaceClass(c1,c2);this.c1=c1;this.c2=c2;}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-leaf");delete this.c1;delete this.c2;this.wasLeaf=true;}}
-var ecc="x-tree-ec-icon "+cls;if(this.ecc!=ecc){this.ecNode.className=ecc;this.ecc=ecc;}}},getChildIndent:function(){if(!this.childIndent){var buf=[];var p=this.node;while(p){if(!p.isRoot||(p.isRoot&&p.ownerTree.rootVisible)){if(!p.isLast()){buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-elbow-line">');}else{buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-icon">');}}
-p=p.parentNode;}
-this.childIndent=buf.join("");}
-return this.childIndent;},renderIndent:function(){if(this.rendered){var indent="";var p=this.node.parentNode;if(p){indent=p.ui.getChildIndent();}
-if(this.indentMarkup!=indent){this.indentNode.innerHTML=indent;this.indentMarkup=indent;}
-this.updateExpandIcon();}}};Ext.tree.RootTreeNodeUI=function(){Ext.tree.RootTreeNodeUI.superclass.constructor.apply(this,arguments);};Ext.extend(Ext.tree.RootTreeNodeUI,Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var targetNode=this.node.ownerTree.innerCt.dom;this.node.expanded=true;targetNode.innerHTML='<div class="x-tree-root-node"></div>';this.wrap=this.ctNode=targetNode.firstChild;}},collapse:function(){},expand:function(){}});
-
-Ext.tree.TreeLoader=function(config){this.baseParams={};this.requestMethod="POST";Ext.apply(this,config);this.addEvents({"beforeload":true,"load":true,"loadexception":true});Ext.tree.TreeLoader.superclass.constructor.call(this);};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,load:function(node,callback){if(this.clearOnLoad){while(node.firstChild){node.removeChild(node.firstChild);}}
-if(node.attributes.children){var cs=node.attributes.children;for(var i=0,len=cs.length;i<len;i++){node.appendChild(this.createNode(cs[i]));}
-if(typeof callback=="function"){callback();}}else if(this.dataUrl){this.requestData(node,callback);}},getParams:function(node){var buf=[],bp=this.baseParams;for(var key in bp){if(typeof bp[key]!="function"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(bp[key]),"&");}}
-buf.push("node=",encodeURIComponent(node.id));return buf.join("");},requestData:function(node,callback){if(this.fireEvent("beforeload",this,node,callback)!==false){var params=this.getParams(node);var cb={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{callback:callback,node:node}};this.transId=Ext.lib.Ajax.request(this.requestMethod,this.dataUrl,cb,params);}else{if(typeof callback=="function"){callback();}}},isLoading:function(){return this.transId?true:false;},abort:function(){if(this.isLoading()){Ext.lib.Ajax.abort(this.transId);}},createNode:function(attr){if(this.applyLoader!==false){attr.loader=this;}
-if(typeof attr.uiProvider=='string'){attr.uiProvider=this.uiProviders[attr.uiProvider]||eval(attr.uiProvider);}
-return(attr.leaf?new Ext.tree.TreeNode(attr):new Ext.tree.AsyncTreeNode(attr));},processResponse:function(response,node,callback){var json=response.responseText;try{var o=eval("("+json+")");for(var i=0,len=o.length;i<len;i++){var n=this.createNode(o[i]);if(n){node.appendChild(n);}}
-if(typeof callback=="function"){callback(this,node);}}catch(e){this.handleFailure(response);}},handleResponse:function(response){this.transId=false;var a=response.argument;this.processResponse(response,a.node,a.callback);this.fireEvent("load",this,a.node,response);},handleFailure:function(response){this.transId=false;var a=response.argument;this.fireEvent("loadexception",this,a.node,response);if(typeof a.callback=="function"){a.callback(this,a.node);}}});
-
-Ext.tree.TreeFilter=function(tree,config){this.tree=tree;this.filtered={};Ext.apply(this,config,{clearBlank:false,reverse:false,autoClear:false,remove:false});};Ext.tree.TreeFilter.prototype={filter:function(value,attr,startNode){attr=attr||"text";var f;if(typeof value=="string"){var vlen=value.length;if(vlen==0&&this.clearBlank){this.clearFilter();return;}
-value=value.toLowerCase();f=function(n){return n.attributes[attr].substr(0,vlen).toLowerCase()==value;};}else if(value.exec){f=function(n){return value.test(n.attributes[attr]);};}else{throw'Illegal filter type, must be string or regex';}
-this.filterBy(f,null,startNode);},filterBy:function(fn,scope,startNode){startNode=startNode||this.tree.root;if(this.autoClear){this.clearFilter();}
-var af=this.filtered,rv=this.reverse;var f=function(n){if(n==startNode){return true;}
-if(af[n.id]){return false;}
-var m=fn.call(scope||n,n);if(!m||rv){af[n.id]=n;n.ui.hide();return false;}
-return true;};startNode.cascade(f);if(this.remove){for(var id in af){if(typeof id!="function"){var n=af[id];if(n&&n.parentNode){n.parentNode.removeChild(n);}}}}},clear:function(){var t=this.tree;var af=this.filtered;for(var id in af){if(typeof id!="function"){var n=af[id];if(n){n.ui.show();}}}
-this.filtered={};}};
-
-Ext.tree.TreeSorter=function(tree,config){Ext.apply(this,config);tree.on("beforechildrenrendered",this.doSort,this);tree.on("append",this.updateSort,this);tree.on("insert",this.updateSort,this);var dsc=this.dir&&this.dir.toLowerCase()=="desc";var p=this.property||"text";var sortType=this.sortType;var fs=this.folderSort;var cs=this.caseSensitive===true;var leafAttr=this.leafAttr||'leaf';this.sortFn=function(n1,n2){if(fs){if(n1.attributes[leafAttr]&&!n2.attributes[leafAttr]){return 1;}
-if(!n1.attributes[leafAttr]&&n2.attributes[leafAttr]){return-1;}}
-var v1=sortType?sortType(n1):(cs?n1[p]:n1[p].toUpperCase());var v2=sortType?sortType(n2):(cs?n2[p]:n2[p].toUpperCase());if(v1<v2){return dsc?+1:-1;}else if(v1>v2){return dsc?-1:+1;}else{return 0;}};};Ext.tree.TreeSorter.prototype={doSort:function(node){node.sort(this.sortFn);},compareNodes:function(n1,n2){return(n1.text.toUpperCase()>n2.text.toUpperCase()?1:-1);},updateSort:function(tree,node){if(node.childrenRendered){this.doSort.defer(1,this,[node]);}}};
-
-if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(tree,config){this.allowParentInsert=false;this.allowContainerDrop=false;this.appendOnly=false;Ext.tree.TreeDropZone.superclass.constructor.call(this,tree.innerCt,config);this.tree=tree;this.lastInsertClass="x-tree-no-status";this.dragOverData={};};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(node){if(node.hasChildNodes()&&!node.isExpanded()){node.expand(false,null,this.triggerCacheRefresh.createDelegate(this));}},queueExpand:function(node){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[node]);},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false;}},isValidDropPoint:function(n,pt,dd,e,data){if(!n||!data){return false;}
-var targetNode=n.node;var dropNode=data.node;if(!(targetNode&&targetNode.isTarget&&pt)){return false;}
-if(pt=="append"&&targetNode.allowChildren===false){return false;}
-if((pt=="above"||pt=="below")&&(targetNode.parentNode&&targetNode.parentNode.allowChildren===false)){return false;}
-if(dropNode&&(targetNode==dropNode||dropNode.contains(targetNode))){return false;}
-var overEvent=this.dragOverData;overEvent.tree=this.tree;overEvent.target=targetNode;overEvent.data=data;overEvent.point=pt;overEvent.source=dd;overEvent.rawEvent=e;overEvent.dropNode=dropNode;overEvent.cancel=false;var result=this.tree.fireEvent("nodedragover",overEvent);return overEvent.cancel===false&&result!==false;},getDropPoint:function(e,n,dd){var tn=n.node;if(tn.isRoot){return tn.allowChildren!==false?"append":false;}
-var dragEl=n.ddel;var t=Ext.lib.Dom.getY(dragEl),b=t+dragEl.offsetHeight;var y=Ext.lib.Event.getPageY(e);var noAppend=tn.allowChildren===false||tn.isLeaf();if(this.appendOnly||tn.parentNode.allowChildren===false){return noAppend?false:"append";}
-var noBelow=false;if(!this.allowParentInsert){noBelow=tn.hasChildNodes()&&tn.isExpanded();}
-var q=(b-t)/(noAppend?2:3);if(y>=t&&y<(t+q)){return"above";}else if(!noBelow&&(noAppend||y>=b-q&&y<=b)){return"below";}else{return"append";}},onNodeEnter:function(n,dd,e,data){this.cancelExpand();},onNodeOver:function(n,dd,e,data){var pt=this.getDropPoint(e,n,dd);var node=n.node;if(!this.expandProcId&&pt=="append"&&node.hasChildNodes()&&!n.node.isExpanded()){this.queueExpand(node);}else if(pt!="append"){this.cancelExpand();}
-var returnCls=this.dropNotAllowed;if(this.isValidDropPoint(n,pt,dd,e,data)){if(pt){var el=n.ddel;var cls;if(pt=="above"){returnCls=n.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";cls="x-tree-drag-insert-above";}else if(pt=="below"){returnCls=n.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";cls="x-tree-drag-insert-below";}else{returnCls="x-tree-drop-ok-append";cls="x-tree-drag-append";}
-if(this.lastInsertClass!=cls){Ext.fly(el).replaceClass(this.lastInsertClass,cls);this.lastInsertClass=cls;}}}
-return returnCls;},onNodeOut:function(n,dd,e,data){this.cancelExpand();this.removeDropIndicators(n);},onNodeDrop:function(n,dd,e,data){var point=this.getDropPoint(e,n,dd);var targetNode=n.node;targetNode.ui.startDrop();if(!this.isValidDropPoint(n,point,dd,e,data)){targetNode.ui.endDrop();return false;}
-var dropNode=data.node||(dd.getTreeNode?dd.getTreeNode(data,targetNode,point,e):null);var dropEvent={tree:this.tree,target:targetNode,data:data,point:point,source:dd,rawEvent:e,dropNode:dropNode,cancel:!dropNode};var retval=this.tree.fireEvent("beforenodedrop",dropEvent);if(retval===false||dropEvent.cancel===true||!dropEvent.dropNode){targetNode.ui.endDrop();return false;}
-targetNode=dropEvent.target;if(point=="append"&&!targetNode.isExpanded()){targetNode.expand(false,null,function(){this.completeDrop(dropEvent);}.createDelegate(this));}else{this.completeDrop(dropEvent);}
-return true;},completeDrop:function(de){var ns=de.dropNode,p=de.point,t=de.target;if(!(ns instanceof Array)){ns=[ns];}
-var n;for(var i=0,len=ns.length;i<len;i++){n=ns[i];if(p=="above"){t.parentNode.insertBefore(n,t);}else if(p=="below"){t.parentNode.insertBefore(n,t.nextSibling);}else{t.appendChild(n);}}
-n.ui.focus();if(this.tree.hlDrop){n.ui.highlight();}
-t.ui.endDrop();this.tree.fireEvent("nodedrop",de);},afterNodeMoved:function(dd,data,e,targetNode,dropNode){if(this.tree.hlDrop){dropNode.ui.focus();dropNode.ui.highlight();}
-this.tree.fireEvent("nodedrop",this.tree,targetNode,data,dd,e);},getTree:function(){return this.tree;},removeDropIndicators:function(n){if(n&&n.ddel){var el=n.ddel;Ext.fly(el).removeClass(["x-tree-drag-insert-above","x-tree-drag-insert-below","x-tree-drag-append"]);this.lastInsertClass="_noclass";}},beforeDragDrop:function(target,e,id){this.cancelExpand();return true;},afterRepair:function(data){if(data&&Ext.enableFx){data.node.ui.highlight();}
-this.hideProxy();}});}
-
-if(Ext.dd.DragZone){Ext.tree.TreeDragZone=function(tree,config){Ext.tree.TreeDragZone.superclass.constructor.call(this,tree.getTreeEl(),config);this.tree=tree;};Ext.extend(Ext.tree.TreeDragZone,Ext.dd.DragZone,{ddGroup:"TreeDD",onBeforeDrag:function(data,e){var n=data.node;return n&&n.draggable&&!n.disabled;},onInitDrag:function(e){var data=this.dragData;this.tree.getSelectionModel().select(data.node);this.proxy.update("");data.node.ui.appendDDGhost(this.proxy.ghost.dom);this.tree.fireEvent("startdrag",this.tree,data.node,e);},getRepairXY:function(e,data){return data.node.ui.getDDRepairXY();},onEndDrag:function(data,e){this.tree.fireEvent("enddrag",this.tree,data.node,e);},onValidDrop:function(dd,e,id){this.tree.fireEvent("dragdrop",this.tree,this.dragData.node,dd,e);this.hideProxy();},beforeInvalidDrop:function(e,id){var sm=this.tree.getSelectionModel();sm.clearSelections();sm.select(this.dragData.node);}});}
-
-Ext.tree.TreeEditor=function(tree,config){config=config||{};var field=config.events?config:new Ext.form.TextField(config);Ext.tree.TreeEditor.superclass.constructor.call(this,field);this.tree=tree;tree.on('beforeclick',this.beforeNodeClick,this);tree.getTreeEl().on('mousedown',this.hide,this);this.on('complete',this.updateNode,this);this.on('beforestartedit',this.fitToTree,this);this.on('startedit',this.bindScroll,this,{delay:10});this.on('specialkey',this.onSpecialKey,this);};Ext.extend(Ext.tree.TreeEditor,Ext.Editor,{alignment:"l-l",autoSize:false,hideEl:false,cls:"x-small-editor x-tree-editor",shim:false,shadow:"frame",maxWidth:250,fitToTree:function(ed,el){var td=this.tree.getTreeEl().dom,nd=el.dom;if(td.scrollLeft>nd.offsetLeft){td.scrollLeft=nd.offsetLeft;}
-var w=Math.min(this.maxWidth,(td.clientWidth>20?td.clientWidth:td.offsetWidth)-Math.max(0,nd.offsetLeft-td.scrollLeft)-5);this.setSize(w,'');},triggerEdit:function(node){this.completeEdit();this.editNode=node;this.startEdit(node.ui.textNode,node.text);},bindScroll:function(){this.tree.getTreeEl().on('scroll',this.cancelEdit,this);},beforeNodeClick:function(node){if(this.tree.getSelectionModel().isSelected(node)){this.triggerEdit(node);return false;}},updateNode:function(ed,value){this.tree.getTreeEl().un('scroll',this.cancelEdit,this);this.editNode.setText(value);},onSpecialKey:function(field,e){var k=e.getKey();if(k==e.ESC){e.stopEvent();this.cancelEdit();}else if(k==e.ENTER&&!e.hasModifier()){e.stopEvent();this.completeEdit();}}});
-
-Ext.menu.Menu=function(config){Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents({beforeshow:true,beforehide:true,show:true,hide:true,click:true,mouseover:true,mouseout:true,itemclick:true});Ext.menu.MenuMgr.register(this);var mis=this.items;this.items=new Ext.util.MixedCollection();if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,hidden:true,render:function(){if(this.el){return;}
-var el=this.el=new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});this.keyNav=new Ext.menu.MenuNav(this);if(this.plain){el.addClass("x-menu-plain");}
-if(this.cls){el.addClass(this.cls);}
-this.focusEl=el.createChild({tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"});var ul=el.createChild({tag:"ul",cls:"x-menu-list"});ul.on("click",this.onClick,this);ul.on("mouseover",this.onMouseOver,this);ul.on("mouseout",this.onMouseOut,this);this.items.each(function(item){var li=document.createElement("li");li.className="x-menu-list-item";ul.dom.appendChild(li);item.render(li,this);},this);this.ul=ul;this.autoWidth();},autoWidth:function(){var el=this.el,ul=this.ul;if(!el){return;}
-var w=this.width;if(w){el.setWidth(w);}else if(Ext.isIE){el.setWidth(this.minWidth);var t=el.dom.offsetWidth;el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));}},delayAutoWidth:function(){if(this.rendered){if(!this.awTask){this.awTask=new Ext.util.DelayedTask(this.autoWidth,this);}
-this.awTask.delay(20);}},findTargetItem:function(e){var t=e.getTarget(".x-menu-list-item",this.ul,true);if(t&&t.menuItemId){return this.items.get(t.menuItemId);}},onClick:function(e){var t;if(t=this.findTargetItem(e)){t.onClick(e);this.fireEvent("click",this,t,e);}},setActiveItem:function(item,autoExpand){if(item!=this.activeItem){if(this.activeItem){this.activeItem.deactivate();}
-this.activeItem=item;item.activate(autoExpand);}else if(autoExpand){item.expandMenu();}},tryActivate:function(start,step){var items=this.items;for(var i=start,len=items.length;i>=0&&i<len;i+=step){var item=items.get(i);if(!item.disabled&&item.canActivate){this.setActiveItem(item,false);return item;}}
-return false;},onMouseOver:function(e){var t;if(t=this.findTargetItem(e)){if(t.canActivate&&!t.disabled){this.setActiveItem(t,true);}}
-this.fireEvent("mouseover",this,e,t);},onMouseOut:function(e){var t;if(t=this.findTargetItem(e)){if(t==this.activeItem&&t.shouldDeactivate(e)){this.activeItem.deactivate();delete this.activeItem;}}
-this.fireEvent("mouseout",this,e,t);},isVisible:function(){return this.el&&!this.hidden;},show:function(el,pos,parentMenu){this.parentMenu=parentMenu;if(!this.el){this.render();}
-this.fireEvent("beforeshow",this);this.showAt(this.el.getAlignToXY(el,pos||this.defaultAlign),parentMenu,false);},showAt:function(xy,parentMenu,_fireBefore){this.parentMenu=parentMenu;if(!this.el){this.render();}
-if(_fireBefore!==false){this.fireEvent("beforeshow",this);}
-this.el.setXY(xy);this.el.show();this.hidden=false;this.focus();this.fireEvent("show",this);},focus:function(){if(!this.hidden){this.doFocus.defer(50,this);}},doFocus:function(){if(!this.hidden){this.focusEl.focus();}},hide:function(deep){if(this.el&&this.isVisible()){this.fireEvent("beforehide",this);if(this.activeItem){this.activeItem.deactivate();this.activeItem=null;}
-this.el.hide();this.hidden=true;this.fireEvent("hide",this);}
-if(deep===true&&this.parentMenu){this.parentMenu.hide(true);}},add:function(){var a=arguments,l=a.length,item;for(var i=0;i<l;i++){var el=a[i];if(el.render){item=this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){item=this.addSeparator();}else{item=this.addText(el);}}else if(el.tagName||el.el){item=this.addElement(el);}else if(typeof el=="object"){item=this.addMenuItem(el);}}
-return item;},getEl:function(){if(!this.el){this.render();}
-return this.el;},addSeparator:function(){return this.addItem(new Ext.menu.Separator());},addElement:function(el){return this.addItem(new Ext.menu.BaseItem(el));},addItem:function(item){this.items.add(item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.appendChild(li);item.render(li,this);this.delayAutoWidth();}
-return item;},addMenuItem:function(config){if(!(config instanceof Ext.menu.Item)){if(typeof config.checked=="boolean"){config=new Ext.menu.CheckItem(config);}else{config=new Ext.menu.Item(config);}}
-return this.addItem(config);},addText:function(text){return this.addItem(new Ext.menu.TextItem(text));},insert:function(index,item){this.items.insert(index,item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.insertBefore(li,this.ul.dom.childNodes[index]);item.render(li,this);this.delayAutoWidth();}
-return item;},remove:function(item){this.items.removeKey(item.id);item.destroy();},removeAll:function(){var f;while(f=this.items.first()){this.remove(f);}}});Ext.menu.MenuNav=function(menu){Ext.menu.MenuNav.superclass.constructor.call(this,menu.el);this.scope=this.menu=menu;};Ext.extend(Ext.menu.MenuNav,Ext.KeyNav,{doRelay:function(e,h){var k=e.getKey();if(!this.menu.activeItem&&e.isNavKeyPress()&&k!=e.SPACE&&k!=e.RETURN){this.menu.tryActivate(0,1);return false;}
-return h.call(this.scope||this,e,this.menu);},up:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)-1,-1)){m.tryActivate(m.items.length-1,-1);}},down:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)+1,1)){m.tryActivate(0,1);}},right:function(e,m){if(m.activeItem){m.activeItem.expandMenu(true);}},left:function(e,m){m.hide();if(m.parentMenu&&m.parentMenu.activeItem){m.parentMenu.activeItem.activate();}},enter:function(e,m){if(m.activeItem){e.stopPropagation();m.activeItem.onClick(e);m.fireEvent("click",this,m.activeItem);return true;}}});
-
-Ext.menu.MenuMgr=function(){var menus,active,groups={},attached=false,lastShow=new Date();function init(){menus={},active=new Ext.util.MixedCollection();Ext.get(document).addKeyListener(27,function(){if(active.length>0){hideAll();}});}
-function hideAll(){if(active.length>0){var c=active.clone();c.each(function(m){m.hide();});}}
-function onHide(m){active.remove(m);if(active.length<1){Ext.get(document).un("mousedown",onMouseDown);attached=false;}}
-function onShow(m){var last=active.last();lastShow=new Date();active.add(m);if(!attached){Ext.get(document).on("mousedown",onMouseDown);attached=true;}
-if(m.parentMenu){m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"),10)+3);m.parentMenu.activeChild=m;}else if(last&&last.isVisible()){m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"),10)+3);}}
-function onBeforeHide(m){if(m.activeChild){m.activeChild.hide();}
-if(m.autoHideTimer){clearTimeout(m.autoHideTimer);delete m.autoHideTimer;}}
-function onBeforeShow(m){var pm=m.parentMenu;if(!pm&&!m.allowOtherMenus){hideAll();}else if(pm&&pm.activeChild){pm.activeChild.hide();}}
-function onMouseDown(e){if(lastShow.getElapsed()>50&&active.length>0&&!e.getTarget(".x-menu")){hideAll();}}
-function onBeforeCheck(mi,state){if(state){var g=groups[mi.group];for(var i=0,l=g.length;i<l;i++){if(g[i]!=mi){g[i].setChecked(false);}}}}
-return{hideAll:function(){hideAll();},register:function(menu){if(!menus){init();}
-menus[menu.id]=menu;menu.on("beforehide",onBeforeHide);menu.on("hide",onHide);menu.on("beforeshow",onBeforeShow);menu.on("show",onShow);var g=menu.group;if(g&&menu.events["checkchange"]){if(!groups[g]){groups[g]=[];}
-groups[g].push(menu);menu.on("checkchange",onCheck);}},get:function(menu){if(typeof menu=="string"){return menus[menu];}else if(menu.events){return menu;}else if(typeof menu.length=='number'){return new Ext.menu.Menu({items:menu});}else{return new Ext.menu.Menu(menu);}},unregister:function(menu){delete menus[menu.id];menu.un("beforehide",onBeforeHide);menu.un("hide",onHide);menu.un("beforeshow",onBeforeShow);menu.un("show",onShow);var g=menu.group;if(g&&menu.events["checkchange"]){groups[g].remove(menu);menu.un("checkchange",onCheck);}},registerCheckable:function(menuItem){var g=menuItem.group;if(g){if(!groups[g]){groups[g]=[];}
-groups[g].push(menuItem);menuItem.on("beforecheckchange",onBeforeCheck);}},unregisterCheckable:function(menuItem){var g=menuItem.group;if(g){groups[g].remove(menuItem);menuItem.un("beforecheckchange",onBeforeCheck);}}};}();
-
-Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents({click:true,activate:true,deactivate:true});if(this.handler){this.on("click",this.handler,this.scope,true);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,hideDelay:100,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},onClick:function(e){if(!this.disabled&&this.fireEvent("click",this,e)!==false&&this.parentMenu.fireEvent("itemclick",this,e)!==false){this.handleClick(e);}else{e.stopEvent();}},activate:function(){if(this.disabled){return false;}
-var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.hideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
-
-Ext.menu.TextItem=function(text){this.text=text;Ext.menu.TextItem.superclass.constructor.call(this);};Ext.extend(Ext.menu.TextItem,Ext.menu.BaseItem,{hideOnClick:false,itemCls:"x-menu-text",onRender:function(){var s=document.createElement("span");s.className=this.itemCls;s.innerHTML=this.text;this.el=s;Ext.menu.TextItem.superclass.onRender.apply(this,arguments);}});
-
-Ext.menu.Separator=function(config){Ext.menu.Separator.superclass.constructor.call(this,config);};Ext.extend(Ext.menu.Separator,Ext.menu.BaseItem,{itemCls:"x-menu-sep",hideOnClick:false,onRender:function(li){var s=document.createElement("span");s.className=this.itemCls;s.innerHTML="&#160;";this.el=s;li.addClass("x-menu-sep-li");Ext.menu.Separator.superclass.onRender.apply(this,arguments);}});
-
-Ext.menu.Item=function(config){Ext.menu.Item.superclass.constructor.call(this,config);if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);}};Ext.extend(Ext.menu.Item,Ext.menu.BaseItem,{itemCls:"x-menu-item",canActivate:true,ctype:"Ext.menu.Item",onRender:function(container,position){var el=document.createElement("a");el.hideFocus=true;el.unselectable="on";el.href=this.href||"#";if(this.hrefTarget){el.target=this.hrefTarget;}
-el.className=this.itemCls+(this.menu?" x-menu-item-arrow":"")+(this.cls?" "+this.cls:"");el.innerHTML=String.format('<img src="{0}" class="x-menu-item-icon {2}" />{1}',this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||'');this.el=el;Ext.menu.Item.superclass.onRender.call(this,container,position);},setText:function(text){this.text=text;if(this.rendered){this.el.update(String.format('<img src="{0}" class="x-menu-item-icon {2}">{1}',this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||''));this.parentMenu.autoWidth();}},handleClick:function(e){if(!this.href){e.stopEvent();}
-Ext.menu.Item.superclass.handleClick.apply(this,arguments);},activate:function(autoExpand){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(autoExpand){this.expandMenu();}}
-return true;},shouldDeactivate:function(e){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,e)){if(this.menu&&this.menu.isVisible()){return!this.menu.getEl().getRegion().contains(e.getPoint());}
-return true;}
-return false;},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu();},expandMenu:function(autoActivate){if(!this.disabled&&this.menu){if(!this.menu.isVisible()){this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);}
-if(autoActivate){this.menu.tryActivate(0,1);}}},hideMenu:function(){if(this.menu&&this.menu.isVisible()){this.menu.hide();}}});
-
-Ext.menu.CheckItem=function(config){Ext.menu.CheckItem.superclass.constructor.call(this,config);this.addEvents({"beforecheckchange":true,"checkchange":true});if(this.checkHandler){this.on('checkchange',this.checkHandler,this.scope);}};Ext.extend(Ext.menu.CheckItem,Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",onRender:function(c){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass);}
-Ext.menu.MenuMgr.registerCheckable(this);if(this.checked){this.checked=false;this.setChecked(true,true);}},destroy:function(){if(this.rendered){Ext.menu.MenuMgr.unregisterCheckable(this);}
-Ext.menu.CheckItem.superclass.destroy.apply(this,arguments);},setChecked:function(state,suppressEvent){if(this.checked!=state&&this.fireEvent("beforecheckchange",this,state)!==false){if(this.container){this.container[state?"addClass":"removeClass"]("x-menu-item-checked");}
-this.checked=state;if(suppressEvent!==true){this.fireEvent("checkchange",this,state);}}},handleClick:function(e){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked);}
-Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments);}});
-
-Ext.menu.Adapter=function(component,config){Ext.menu.Adapter.superclass.constructor.call(this,config);this.component=component;};Ext.extend(Ext.menu.Adapter,Ext.menu.BaseItem,{canActivate:true,onRender:function(container,position){this.component.render(container);this.el=this.component.getEl();},activate:function(){if(this.disabled){return false;}
-this.component.focus();this.fireEvent("activate",this);return true;},deactivate:function(){this.fireEvent("deactivate",this);},disable:function(){this.component.disable();Ext.menu.Adapter.superclass.disable.call(this);},enable:function(){this.component.enable();Ext.menu.Adapter.superclass.enable.call(this);}});
-
-Ext.menu.DateItem=function(config){Ext.menu.DateItem.superclass.constructor.call(this,new Ext.DatePicker(config),config);this.picker=this.component;this.addEvents({select:true});this.picker.on("render",function(picker){picker.getEl().swallowEvent("click");picker.container.addClass("x-menu-date-item");});this.picker.on("select",this.onSelect,this);};Ext.extend(Ext.menu.DateItem,Ext.menu.Adapter,{onSelect:function(picker,date){this.fireEvent("select",this,date,picker);Ext.menu.DateItem.superclass.handleClick.call(this);}});
-
-Ext.menu.ColorItem=function(config){Ext.menu.ColorItem.superclass.constructor.call(this,new Ext.ColorPalette(config),config);this.palette=this.component;this.relayEvents(this.palette,["select"]);if(this.selectHandler){this.on('select',this.selectHandler,this.scope);}};Ext.extend(Ext.menu.ColorItem,Ext.menu.Adapter);
-
-Ext.menu.DateMenu=function(config){Ext.menu.DateMenu.superclass.constructor.call(this,config);this.plain=true;var di=new Ext.menu.DateItem(config);this.add(di);this.picker=di.picker;this.relayEvents(di,["select"]);this.on('beforeshow',function(){if(this.picker){this.picker.hideMonthPicker(true);}},this);};Ext.extend(Ext.menu.DateMenu,Ext.menu.Menu,{cls:'x-date-menu'});
-
-Ext.menu.ColorMenu=function(config){Ext.menu.ColorMenu.superclass.constructor.call(this,config);this.plain=true;var ci=new Ext.menu.ColorItem(config);this.add(ci);this.palette=ci.palette;this.relayEvents(ci,["select"]);};Ext.extend(Ext.menu.ColorMenu,Ext.menu.Menu);
-
-Ext.form.Field=function(config){Ext.form.Field.superclass.constructor.call(this,config);};Ext.extend(Ext.form.Field,Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:'qtip',msgFx:'normal',inputType:undefined,isFormField:true,hasFocus:false,value:undefined,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents({focus:true,blur:true,specialkey:true,change:true,invalid:true,valid:true});},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:(this.hiddenName||'');},applyTo:function(target){this.allowDomMove=false;this.el=Ext.get(target);this.render(this.el.dom.parentNode);return this;},onRender:function(ct,position){Ext.form.Field.superclass.onRender.call(this,ct,position);if(!this.el){var cfg=this.getAutoCreate();if(!cfg.name){cfg.name=this.name||this.id;}
-if(this.inputType){cfg.type=this.inputType;}
-if(this.tabIndex!==undefined){cfg.tabIndex=this.tabIndex;}
-this.el=ct.createChild(cfg,position);}
-var type=this.el.dom.type;if(type){if(type=='password'){type='text';}
-this.el.addClass('x-form-'+type);}
-if(this.readOnly){this.el.dom.readOnly=true;}
-this.el.addClass([this.fieldClass,this.cls]);this.initValue();},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(this.el.dom.value.length>0){this.setValue(this.el.dom.value);}},isDirty:function(){if(this.disabled){return false;}
-return String(this.getValue())!==String(this.originalValue);},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();},fireKey:function(e){if(e.isNavKeyPress()){this.fireEvent("specialkey",this,e);}},reset:function(){this.setValue(this.originalValue);this.clearInvalid();},initEvents:function(){this.el.on(Ext.isIE?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);this.el.on("blur",this.onBlur,this);this.originalValue=this.getValue();},onFocus:function(){if(!Ext.isOpera){this.el.addClass(this.focusClass);}
-this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this);},onBlur:function(){this.el.removeClass(this.focusClass);this.hasFocus=false;if(this.validationEvent!==false&&this.validateOnBlur&&this.validationEvent!="blur"){this.validate();}
-var v=this.getValue();if(v!=this.startValue){this.fireEvent('change',this,v,this.startValue);}
-this.fireEvent("blur",this);},isValid:function(preventMark){if(this.disabled){return true;}
-var restore=this.preventMark;this.preventMark=preventMark===true;var v=this.validateValue(this.getRawValue());this.preventMark=restore;return v;},validate:function(){if(this.disabled||this.validateValue(this.getRawValue())){this.clearInvalid();return true;}
-return false;},validateValue:function(value){return true;},markInvalid:function(msg){if(!this.rendered||this.preventMark){return;}
-this.el.addClass(this.invalidClass);msg=msg||this.invalidText;switch(this.msgTarget){case'qtip':this.el.dom.qtip=msg;this.el.dom.qclass='x-form-invalid-tip';break;case'title':this.el.dom.title=msg;break;case'under':if(!this.errorEl){var elp=this.el.findParent('.x-form-element',5,true);this.errorEl=elp.createChild({cls:'x-form-invalid-msg'});this.errorEl.setWidth(elp.getWidth(true)-20);}
-this.errorEl.update(msg);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl,this);break;case'side':if(!this.errorIcon){var elp=this.el.findParent('.x-form-element',5,true);this.errorIcon=elp.createChild({cls:'x-form-invalid-icon'});}
-this.alignErrorIcon();this.errorIcon.dom.qtip=msg;this.errorIcon.dom.qclass='x-form-invalid-tip';this.errorIcon.show();break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML=msg;t.style.display=this.msgDisplay;break;}
-this.fireEvent('invalid',this,msg);},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,'tl-tr',[2,0]);},clearInvalid:function(){if(!this.rendered||this.preventMark){return;}
-this.el.removeClass(this.invalidClass);switch(this.msgTarget){case'qtip':this.el.dom.qtip='';break;case'title':this.el.dom.title='';break;case'under':if(this.errorEl){Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl,this);}
-break;case'side':if(this.errorIcon){this.errorIcon.dom.qtip='';this.errorIcon.hide();}
-break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML='';t.style.display='none';break;}
-this.fireEvent('valid',this);},getRawValue:function(){return this.el.getValue();},getValue:function(){var v=this.el.getValue();if(v==this.emptyText||v===undefined){v='';}
-return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);return s;},adjustWidth:function(tag,w){tag=tag.toLowerCase();if(typeof w=='number'&&Ext.isStrict&&!Ext.isSafari){if(Ext.isIE&&(tag=='input'||tag=='textarea')){if(tag=='input'){return w+2;}
-if(tag='textarea'){return w-2;}}else if(Ext.isGecko&&tag=='textarea'){return w-6;}else if(Ext.isOpera){if(tag=='input'){return w+2;}
-if(tag='textarea'){return w-2;}}}
-return w;}});Ext.form.Field.msgFx={normal:{show:function(msgEl,f){msgEl.setDisplayed('block');},hide:function(msgEl,f){msgEl.setDisplayed(false).update('');}},slide:{show:function(msgEl,f){msgEl.slideIn('t',{stopFx:true});},hide:function(msgEl,f){msgEl.slideOut('t',{stopFx:true,useDisplay:true});}},slideRight:{show:function(msgEl,f){msgEl.fixDisplay();msgEl.alignTo(f.el,'tl-tr');msgEl.slideIn('l',{stopFx:true});},hide:function(msgEl,f){msgEl.slideOut('l',{stopFx:true,useDisplay:true});}}};
-
-Ext.form.TextField=function(config){Ext.form.TextField.superclass.constructor.call(this,config);this.addEvents({autosize:true});};Ext.extend(Ext.form.TextField,Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:'x-form-empty-field',initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=='keyup'){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.el.on('keyup',this.filterValidation,this);}
-else if(this.validationEvent!==false){this.el.on(this.validationEvent,this.validate,this,{buffer:this.validationDelay});}
-if(this.selectOnFocus||this.emptyText){this.on("focus",this.preFocus,this);if(this.emptyText){this.on('blur',this.postBlur,this);this.applyEmptyText();}}
-if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+'Mask']))){this.el.on("keypress",this.filterKeys,this);}
-if(this.grow){this.el.on("keyup",this.onKeyUp,this,{buffer:50});this.el.on("click",this.autoSize,this);}},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUp:function(e){if(!e.isNavKeyPress()){this.autoSize();}},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.getRawValue()==this.emptyText){this.setRawValue('');}
-this.el.removeClass(this.emptyClass);}
-if(this.selectOnFocus){this.el.dom.select();}},postBlur:function(){this.applyEmptyText();},filterKeys:function(e){var k=e.getKey();if(!Ext.isIE&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}
-if(Ext.isIE&&(k==e.BACKSPACE||k==e.DELETE||e.isNavKeyPress()||k==e.HOME||k==e.END)){return;}
-var c=e.getCharCode();if(!this.maskRe.test(String.fromCharCode(c)||'')){e.stopEvent();}},setValue:function(v){if(this.emptyText&&v!==undefined&&v!==null&&v!==''){this.el.removeClass(this.emptyClass);}
-Ext.form.TextField.superclass.setValue.apply(this,arguments);},validateValue:function(value){if(value.length<1||value===this.emptyText){if(this.allowBlank){this.clearInvalid();return true;}else{this.markInvalid(this.blankText);return false;}}
-if(value.length<this.minLength){this.markInvalid(String.format(this.minLengthText,this.minLength));return false;}
-if(value.length>this.maxLength){this.markInvalid(String.format(this.maxLengthText,this.maxLength));return false;}
-if(this.vtype){var vt=Ext.form.VTypes;if(!vt[this.vtype](value,this)){this.markInvalid(this.vtypeText||vt[this.vtype+'Text']);return false;}}
-if(typeof this.validator=="function"){var msg=this.validator(value);if(msg!==true){this.markInvalid(msg);return false;}}
-if(this.regex&&!this.regex.test(value)){this.markInvalid(this.regexText);return false;}
-return true;},selectText:function(start,end){var v=this.getRawValue();if(v.length>0){start=start===undefined?0:start;end=end===undefined?v.length:end;var d=this.el.dom;if(d.setSelectionRange){d.setSelectionRange(start,end);}else if(d.createTextRange){var range=d.createTextRange();range.moveStart("character",start);range.moveEnd("character",v.length-end);range.select();}}},autoSize:function(){if(!this.grow||!this.rendered){return;}
-if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el);}
-var el=this.el;var v=el.dom.value+"&#160;";var w=Math.min(this.growMax,Math.max(this.metrics.getWidth(v)+10,this.growMin));this.el.setWidth(w);this.fireEvent("autosize",this,w);}});
-
-Ext.form.TriggerField=function(config){Ext.form.TriggerField.superclass.constructor.call(this,config);this.mimicing=false;this.on('disable',this.disableWrapper,this);this.on('enable',this.enableWrapper,this);};Ext.extend(Ext.form.TriggerField,Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,onResize:function(w,h){Ext.form.TriggerField.superclass.onResize.apply(this,arguments);if(typeof w=='number'){this.el.setWidth(this.adjustWidth('input',w-this.trigger.getWidth()));}},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);},onRender:function(ct,position){Ext.form.TriggerField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false);}
-this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove();}
-if(this.wrap){this.wrap.remove();}
-Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this);if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e,t){if(!this.wrap.contains(t)&&this.validateBlur()){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur);if(this.monitorTab){this.el.un("keydown",this.checkTab,this);}
-this.beforeBlur();this.wrap.removeClass('x-trigger-wrap-focus');Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e,t){return true;},disableWrapper:function(){if(this.wrap){this.wrap.addClass('x-item-disabled');}},enableWrapper:function(){if(this.wrap){this.wrap.removeClass('x-item-disabled');}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
-t.on("click",this['on'+triggerIndex+'Click'],this,{preventDefault:true});t.addClassOnOver('x-form-trigger-over');t.addClassOnClick('x-form-trigger-click');},this);this.triggers=ts.elements;},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});
-
-Ext.form.TextArea=function(config){Ext.form.TextArea.superclass.constructor.call(this,config);if(this.minHeight!==undefined){this.growMin=this.minHeight;}
-if(this.maxHeight!==undefined){this.growMax=this.maxHeight;}};Ext.extend(Ext.form.TextArea,Ext.form.TextField,{growMin:60,growMax:1000,preventScrollbars:false,onRender:function(ct,position){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:300px;height:60px;",autocomplete:"off"};}
-Ext.form.TextArea.superclass.onRender.call(this,ct,position);if(this.grow){this.textSizeEl=Ext.DomHelper.append(document.body,{tag:"pre",cls:"x-form-grow-sizer"});if(this.preventScrollbars){this.el.setStyle("overflow","hidden");}
-this.el.setHeight(this.growMin);}},onDestroy:function(){if(this.textSizeEl){this.textSizeEl.remove();}
-Ext.form.TextArea.superclass.onDestroy.call(this);},onKeyUp:function(e){if(!e.isNavKeyPress()||e.getKey()==e.ENTER){this.autoSize();}},autoSize:function(){if(!this.grow||!this.textSizeEl){return;}
-var el=this.el;var v=el.dom.value;var ts=this.textSizeEl;Ext.fly(ts).setWidth(this.el.getWidth());if(v.length<1){v="&#160;&#160;";}else{if(Ext.isIE){v=v.replace(/\n/g,'<p>&#160;</p>');}
-v+="&#160;\n&#160;";}
-ts.innerHTML=v;var h=Math.min(this.growMax,Math.max(ts.offsetHeight,this.growMin));if(h!=this.lastHeight){this.lastHeight=h;this.el.setHeight(h);this.fireEvent("autosize",this,h);}},setValue:function(v){Ext.form.TextArea.superclass.setValue.call(this,v);this.autoSize();}});
-
-Ext.form.NumberField=function(config){Ext.form.NumberField.superclass.constructor.call(this,config);};Ext.extend(Ext.form.NumberField,Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",initEvents:function(){Ext.form.NumberField.superclass.initEvents.call(this);var allowed="0123456789";if(this.allowDecimals){allowed+=this.decimalSeparator;}
-if(this.allowNegative){allowed+="-";}
-var keyPress=function(e){var k=e.getKey();if(!Ext.isIE&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}
-var c=e.getCharCode();if(allowed.indexOf(String.fromCharCode(c))===-1){e.stopEvent();}};this.el.on("keypress",keyPress,this);},validateValue:function(value){if(!Ext.form.NumberField.superclass.validateValue.call(this,value)){return false;}
-if(value.length<1){return true;}
-value=String(value).replace(this.decimalSeparator,".");if(isNaN(value)){this.markInvalid(String.format(this.nanText,value));return false;}
-var num=this.parseValue(value);if(num<this.minValue){this.markInvalid(String.format(this.minText,this.minValue));return false;}
-if(num>this.maxValue){this.markInvalid(String.format(this.maxText,this.maxValue));return false;}
-return true;},parseValue:function(value){return parseFloat(String(value).replace(this.decimalSeparator,"."));},fixPrecision:function(value){if(!this.allowDecimals||this.decimalPrecision==-1||isNaN(value)||value==0||!value){return value;}
-var scale=Math.pow(10,this.decimalPrecision+1);var fixed=this.decimalPrecisionFcn(value*scale);fixed=this.decimalPrecisionFcn(fixed/10);return fixed/(scale/10);},decimalPrecisionFcn:function(v){return Math.floor(v);}});
-
-Ext.form.DateField=function(config){Ext.form.DateField.superclass.constructor.call(this,config);if(typeof this.minValue=="string")this.minValue=this.parseDate(this.minValue);if(typeof this.maxValue=="string")this.maxValue=this.parseDate(this.maxValue);this.ddMatch=null;if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
-this.ddMatch=new RegExp(re+")");}};Ext.extend(Ext.form.DateField,Ext.form.TriggerField,{format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",minValue:null,maxValue:null,minText:"The date in this field must be after {0}",maxText:"The date in this field must be before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},validateValue:function(value){value=this.formatDate(value);if(!Ext.form.DateField.superclass.validateValue.call(this,value)){return false;}
-if(value.length<1){return true;}
-var svalue=value;value=this.parseDate(value);if(!value){this.markInvalid(String.format(this.invalidText,svalue,this.format));return false;}
-var time=value.getTime();if(this.minValue&&time<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));return false;}
-if(this.maxValue&&time>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}
-if(this.disabledDays){var day=value.getDay();for(var i=0;i<this.disabledDays.length;i++){if(day===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);return false;}}}
-var fvalue=this.formatDate(value);if(this.ddMatch&&this.ddMatch.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
-return true;},validateBlur:function(){return!this.menu||!this.menu.isVisible();},getValue:function(){return this.parseDate(Ext.form.DateField.superclass.getValue.call(this))||"";},setValue:function(date){Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(date)));},parseDate:function(value){if(!value||value instanceof Date){return value;}
-var v=Date.parseDate(value,this.format);if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}
-for(var i=0,len=this.altFormatsArray.length;i<len&&!v;i++){v=Date.parseDate(value,this.altFormatsArray[i]);}}
-return v;},formatDate:function(date){return(!date||!(date instanceof Date))?date:date.dateFormat(this.format);},menuListeners:{select:function(m,d){this.setValue(d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}
-if(this.menu==null){this.menu=new Ext.menu.DateMenu();}
-Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});
-
-Ext.form.ComboBox=function(config){Ext.form.ComboBox.superclass.constructor.call(this,config);this.addEvents({'expand':true,'collapse':true,'beforeselect':true,'select':true,'beforequery':true});if(this.transform){var s=Ext.getDom(this.transform);if(!this.hiddenName){this.hiddenName=s.name;}
-if(!this.store){this.mode='local';var d=[],opts=s.options;for(var i=0,len=opts.length;i<len;i++){var o=opts[i];var value=(Ext.isIE?o.getAttributeNode('value').specified:o.hasAttribute('value'))?o.value:o.text;if(o.selected){this.value=value;}
-d.push([value,o.text]);}
-this.store=new Ext.data.SimpleStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
-s.name=Ext.id();if(!this.lazyRender){this.target=true;this.el=Ext.DomHelper.insertBefore(s,this.autoCreate||this.defaultAutoCreate);s.parentNode.removeChild(s);this.render(this.el.parentNode);}else{s.parentNode.removeChild(s);}}
-this.selectedIndex=-1;if(this.mode=='local'){if(config.queryDelay===undefined){this.queryDelay=10;}
-if(config.minChars===undefined){this.minChars=0;}}};Ext.extend(Ext.form.ComboBox,Ext.form.TriggerField,{defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off"},listWidth:undefined,displayField:undefined,valueField:undefined,hiddenName:undefined,listClass:'',selectedClass:'x-combo-selected',triggerClass:'x-form-arrow-trigger',shadow:'sides',listAlign:'tl-bl?',maxHeight:300,triggerAction:'query',minChars:4,typeAhead:false,queryDelay:500,pageSize:0,selectOnFocus:false,queryParam:'query',loadingText:'Loading...',resizable:false,handleHeight:8,editable:true,allQuery:'',mode:'remote',minListWidth:70,forceSelection:false,typeAheadDelay:250,valueNotFoundText:undefined,onRender:function(ct,position){Ext.form.ComboBox.superclass.onRender.call(this,ct,position);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.hiddenName,id:this.hiddenName},'before',true);this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';this.el.dom.removeAttribute('name');}
-if(Ext.isGecko){this.el.dom.setAttribute('autocomplete','off');}
-var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
-this.innerList=this.list.createChild({cls:cls+'-inner'});this.innerList.on('mouseover',this.onViewOver,this);this.innerList.on('mousemove',this.onViewMove,this);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'))
-if(this.pageSize){this.footer=this.list.createChild({cls:cls+'-ft'});this.pageTb=new Ext.PagingToolbar(this.footer,this.store,{pageSize:this.pageSize});this.assetHeight+=this.footer.getHeight();}
-if(!this.tpl){this.tpl='<div class="'+cls+'-item">{'+this.displayField+'}</div>';}
-this.view=new Ext.View(this.innerList,this.tpl,{singleSelect:true,store:this.store,selectedClass:this.selectedClass});this.view.on('click',this.onViewClick,this);this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.collapse,this);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:'se'});this.resizer.on('resize',function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;this.listWidth=w;this.restrictHeight();},this);this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom',this.handleHeight+'px');}
-if(!this.editable){this.editable=true;this.setEditable(false);}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){if(!this.isExpanded()){this.onTriggerClick();}else{this.inKeyMode=true;this.selectNext();}},"enter":function(e){this.onViewClick();},"esc":function(e){this.collapse();},"tab":function(e){this.onViewClick(false);return true;},scope:this,doRelay:function(foo,bar,hname){if(hname=='down'||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments);}
-return true;}});this.queryDelay=Math.max(this.queryDelay||10,this.mode=='local'?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this);}
-if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this);}
-if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){this.view.setStore(null);this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners();}
-if(this.list){this.list.destroy();}
-if(this.store){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.collapse,this);}
-Ext.form.ComboBox.superclass.onDestroy.call(this);},fireKey:function(e){if(e.isNavKeyPress()&&!this.list.isVisible()){this.fireEvent("specialkey",this,e);}},onResize:function(w,h){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var lw=Math.max(w,this.minListWidth);this.list.setWidth(lw);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'))}},setEditable:function(value){if(value==this.editable){return;}
-this.editable=value;if(!value){this.el.dom.setAttribute('readOnly',true);this.el.on('mousedown',this.onTriggerClick,this);this.el.addClass('x-combo-noedit');}else{this.el.dom.setAttribute('readOnly',false);this.el.un('mousedown',this.onTriggerClick,this);this.el.removeClass('x-combo-noedit');}},onBeforeLoad:function(){if(!this.hasFocus){return;}
-this.innerList.update(this.loadingText?'<div class="loading-indicator">'+this.loadingText+'</div>':'');this.restrictHeight();this.selectedIndex=-1;},onLoad:function(){if(!this.hasFocus){return;}
-if(this.store.getCount()>0){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select();}
-if(!this.selectByValue(this.value,true)){this.select(0,true);}}else{this.selectNext();if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay);}}}else{this.onEmptyResults();}},onTypeAhead:function(){if(this.store.getCount()>0){var r=this.store.getAt(0);var newValue=r.data[this.displayField];var len=newValue.length;var selStart=this.getRawValue().length;if(selStart!=len){this.setRawValue(newValue);this.selectText(selStart,newValue.length);}}},onSelect:function(record,index){if(this.fireEvent('beforeselect',this,record,index)!==false){this.setValue(record.data[this.valueField||this.displayField]);this.collapse();this.fireEvent('select',this,record,index);}},getValue:function(){if(this.valueField){return typeof this.value!='undefined'?this.value:'';}else{return Ext.form.ComboBox.superclass.getValue.call(this);}},clearValue:function(){if(this.hiddenField){this.hiddenField.value='';}
-this.setRawValue('');this.lastSelectionText='';},setValue:function(v){var text=v;if(this.valueField){var r=this.findRecord(this.valueField,v);if(r){text=r.data[this.displayField];}else if(this.valueNotFoundText!==undefined){text=this.valueNotFoundText;}}
-this.lastSelectionText=text;if(this.hiddenField){this.hiddenField.value=v;}
-Ext.form.ComboBox.superclass.setValue.call(this,text);this.value=v;},findRecord:function(prop,value){var record;if(this.store.getCount()>0){this.store.each(function(r){if(r.data[prop]==value){record=r;return false;}});}
-return record;},onViewMove:function(e,t){this.inKeyMode=false;},onViewOver:function(e,t){if(this.inKeyMode){return;}
-var item=this.view.findItemFromChild(t);if(item){var index=this.view.indexOf(item);this.select(index,false);}},onViewClick:function(doFocus){var index=this.view.getSelectedIndexes()[0];var r=this.store.getAt(index);if(r){this.onSelect(r,index);}
-if(doFocus!==false){this.el.focus();}},restrictHeight:function(){this.innerList.dom.style.height='';var inner=this.innerList.dom;var h=Math.max(inner.clientHeight,inner.offsetHeight,inner.scrollHeight);this.innerList.setHeight(h<this.maxHeight?'auto':this.maxHeight);this.list.beginUpdate();this.list.setHeight(this.innerList.getHeight()+this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight);this.list.alignTo(this.el,this.listAlign);this.list.endUpdate();},onEmptyResults:function(){this.collapse();},isExpanded:function(){return this.list.isVisible();},selectByValue:function(v,scrollIntoView){if(v!==undefined&&v!==null){var r=this.findRecord(this.valueField||this.displayField,v);if(r){this.select(this.store.indexOf(r),scrollIntoView);return true;}}
-return false;},select:function(index,scrollIntoView){this.selectedIndex=index;this.view.select(index);if(scrollIntoView!==false){var el=this.view.getNode(index);if(el){this.innerList.scrollChildIntoView(el,false);}}},selectNext:function(){var ct=this.store.getCount();if(ct>0){if(this.selectedIndex==-1){this.select(0);}else if(this.selectedIndex<ct-1){this.select(this.selectedIndex+1);}}},selectPrev:function(){var ct=this.store.getCount();if(ct>0){if(this.selectedIndex==-1){this.select(0);}else if(this.selectedIndex!=0){this.select(this.selectedIndex-1);}}},onKeyUp:function(e){if(this.editable!==false&&!e.isSpecialKey()){this.lastKey=e.getKey();this.dqTask.delay(this.queryDelay);}},validateBlur:function(){return!this.list||!this.list.isVisible();},initQuery:function(){this.doQuery(this.getRawValue());},doForce:function(){if(this.el.dom.value.length>0){this.el.dom.value=this.lastSelectionText===undefined?'':this.lastSelectionText;this.applyEmptyText();}},doQuery:function(q,forceAll){if(q===undefined||q===null){q='';}
-var qe={query:q,forceAll:forceAll,combo:this,cancel:false};if(this.fireEvent('beforequery',qe)===false||qe.cancel){return false;}
-q=qe.query;forceAll=qe.forceAll;if(forceAll===true||(q.length>=this.minChars)){if(this.lastQuery!=q){this.lastQuery=q;if(this.mode=='local'){this.selectedIndex=-1;if(forceAll){this.store.clearFilter();}else{this.store.filter(this.displayField,q);}
-this.onLoad();}else{this.store.baseParams[this.queryParam]=q;this.store.load({params:this.getParams(q)});this.expand();}}else{this.selectedIndex=-1;this.onLoad();}}},getParams:function(q){var p={};if(this.pageSize){p.start=0;p.limit=this.pageSize;}
-return p;},collapse:function(){if(!this.isExpanded()){return;}
-this.list.hide();Ext.get(document).un('mousedown',this.collapseIf,this);this.fireEvent('collapse',this);},collapseIf:function(e){if(!e.within(this.wrap)&&!e.within(this.list)){this.collapse();}},expand:function(){if(this.isExpanded()||!this.hasFocus){return;}
-this.list.alignTo(this.el,this.listAlign);this.list.show();Ext.get(document).on('mousedown',this.collapseIf,this);this.fireEvent('expand',this);},onTriggerClick:function(){if(this.disabled){return;}
-if(this.isExpanded()){this.collapse();this.el.focus();}else{this.hasFocus=true;if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());}
-this.el.focus();}}});
-
-Ext.form.Checkbox=function(config){Ext.form.Checkbox.superclass.constructor.call(this,config);this.addEvents({check:true});};Ext.extend(Ext.form.Checkbox,Ext.form.Field,{focusClass:"x-form-check-focus",fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:'checkbox',autocomplete:"off"},boxLabel:undefined,onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel){this.el.alignTo(this.wrap,'c-c');}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.el.on("click",this.onClick,this);this.el.on("change",this.onClick,this);},getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}
-this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});}
-if(this.checked){this.setValue(true);}},initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
-return false;},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked);}},setValue:function(v){this.checked=(v===true||v==='true'||v=='1');if(this.el&&this.el.dom){this.el.dom.checked=this.checked;}
-this.fireEvent("check",this,this.checked);}});
-
-Ext.form.Radio=function(){Ext.form.Radio.superclass.constructor.apply(this,arguments);};Ext.extend(Ext.form.Radio,Ext.form.Checkbox,{inputType:'radio',getGroupValue:function(){return this.el.up('form').child('input[name='+this.el.dom.name+']:checked',true).value;}});
-
-Ext.form.HtmlEditor=Ext.extend(Ext.form.Field,{enableFormat:true,enableFontSize:true,enableColors:true,enableAlignments:true,enableLists:true,enableSourceEdit:true,validationEvent:false,deferHeight:true,initialized:false,activated:false,sourceEditMode:false,onFocus:Ext.emptyFn,iframePad:3,defaultAutoCreate:{tag:"textarea",style:"width:500px;height:300px;",autocomplete:"off"},initComponent:function(){this.addEvents({initialize:true,beforesync:true,beforepush:true,sync:true,push:true,editmodechange:true})},createToolbar:function(editor){function btn(id,toggle,handler){return{id:id,cls:'x-btn-icon x-edit-'+id,enableToggle:toggle!==false,scope:editor,handler:handler||editor.relayBtnCmd,clickEvent:'mousedown',tooltip:editor.buttonTips[id]||undefined,tabIndex:-1};}
-var tb=new Ext.Toolbar(this.wrap.dom.firstChild);tb.el.on('click',function(e){e.preventDefault();});if(this.enableFormat){tb.add(btn('bold'),btn('italic'),btn('underline'));};if(this.enableFontSize){tb.add('-',btn('increasefontsize',false,this.adjustFont),btn('decreasefontsize',false,this.adjustFont));};if(this.enableColors){tb.add('-',{id:'forecolor',cls:'x-btn-icon x-edit-forecolor',clickEvent:'mousedown',tooltip:editor.buttonTips['forecolor']||undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({allowReselect:true,focus:Ext.emptyFn,value:'000000',plain:true,selectHandler:function(cp,color){this.execCmd('forecolor',Ext.isSafari||Ext.isIE?'#'+color:color);this.deferFocus();},scope:this,clickEvent:'mousedown'})},{id:'backcolor',cls:'x-btn-icon x-edit-backcolor',clickEvent:'mousedown',tooltip:editor.buttonTips['backcolor']||undefined,tabIndex:-1,menu:new Ext.menu.ColorMenu({focus:Ext.emptyFn,value:'FFFFFF',plain:true,allowReselect:true,selectHandler:function(cp,color){if(Ext.isGecko){this.execCmd('useCSS',false);this.execCmd('hilitecolor',color);this.execCmd('useCSS',true);this.deferFocus();}else{this.execCmd(Ext.isOpera?'hilitecolor':'backcolor',Ext.isSafari||Ext.isIE?'#'+color:color);this.deferFocus();}},scope:this,clickEvent:'mousedown'})});};if(this.enableAlignments){tb.add('-',btn('justifyleft'),btn('justifycenter'),btn('justifyright'));};if(!Ext.isSafari){if(this.enableLists){tb.add('-',btn('insertorderedlist'),btn('insertunorderedlist'));}
-if(this.enableSourceEdit){tb.add('-',btn('sourceedit',true,function(btn){this.toggleSourceEdit(btn.pressed);}));}}
-this.tb=tb;},getDocMarkup:function(){return'<html><head><style type="text/css">body{border:0;margin:0;padding:3px;height:98%;cursor:text;}</style></head><body></body></html>';},onRender:function(ct,position){Ext.form.HtmlEditor.superclass.onRender.call(this,ct,position);this.el.dom.style.border='0 none';this.el.addClass('x-hidden');if(Ext.isIE){this.el.applyStyles('margin-top:-1px;margin-bottom:-1px;')}
-this.wrap=this.el.wrap({cls:'x-html-editor-wrap',cn:{cls:'x-html-editor-tb'}});this.createToolbar(this);this.tb.items.each(function(item){if(item.id!='sourceedit'){item.disable();}});var iframe=document.createElement('iframe');iframe.name=Ext.id();iframe.frameBorder='no';iframe.src="javascript:false";this.wrap.dom.appendChild(iframe);this.iframe=iframe;if(Ext.isIE){this.doc=iframe.contentWindow.document;this.win=iframe.contentWindow;}else{this.doc=(iframe.contentDocument||window.frames[iframe.name].document);this.win=window.frames[iframe.name];}
-this.doc.designMode='on';this.doc.open();this.doc.write(this.getDocMarkup())
-this.doc.close();var task={run:function(){if(this.doc.body||this.doc.readyState=='complete'){this.doc.designMode="on";Ext.TaskMgr.stop(task);this.initEditor.defer(10,this);}},interval:10,duration:10000,scope:this};Ext.TaskMgr.start(task);if(!this.width){this.setSize(this.el.getSize());}},onResize:function(w,h){Ext.form.HtmlEditor.superclass.onResize.apply(this,arguments);if(this.el&&this.iframe){if(typeof w=='number'){var aw=w-this.wrap.getFrameWidth('lr');this.el.setWidth(this.adjustWidth('textarea',aw));this.iframe.style.width=aw+'px';}
-if(typeof h=='number'){var ah=h-this.wrap.getFrameWidth('tb')-this.tb.el.getHeight();this.el.setHeight(this.adjustWidth('textarea',ah));this.iframe.style.height=ah+'px';if(this.doc){(this.doc.body||this.doc.documentElement).style.height=(ah-(this.iframePad*2))+'px';}}}},toggleSourceEdit:function(sourceEditMode){if(sourceEditMode===undefined){sourceEditMode=!this.sourceEditMode;}
-this.sourceEditMode=sourceEditMode===true;var btn=this.tb.items.get('sourceedit');if(btn.pressed!==this.sourceEditMode){btn.toggle(this.sourceEditMode);return;}
-if(this.sourceEditMode){this.tb.items.each(function(item){if(item.id!='sourceedit'){item.disable();}});this.syncValue();this.iframe.className='x-hidden';this.el.removeClass('x-hidden');this.el.focus();}else{if(this.initialized){this.tb.items.each(function(item){item.enable();});}
-this.pushValue();this.iframe.className='';this.el.addClass('x-hidden');this.deferFocus();}
-this.setSize(this.wrap.getSize());this.fireEvent('editmodechange',this,this.sourceEditMode);},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},initEvents:function(){this.originalValue=this.getValue();},markInvalid:Ext.emptyFn,clearInvalid:Ext.emptyFn,setValue:function(v){Ext.form.HtmlEditor.superclass.setValue.call(this,v);this.pushValue();},cleanHtml:function(html){html=String(html);if(html.length>5){if(Ext.isSafari){html=html.replace(/\sclass="(?:Apple-style-span|khtml-block-placeholder)"/gi,'');}}
-if(html=='&nbsp;'){html='';}
-return html;},syncValue:function(){if(this.initialized){var bd=(this.doc.body||this.doc.documentElement);var html=bd.innerHTML;if(Ext.isSafari){var bs=bd.getAttribute('style');var m=bs.match(/text-align:(.*?);/i);if(m&&m[1]){html='<div style="'+m[0]+'">'+html+'</div>';}}
-html=this.cleanHtml(html);if(this.fireEvent('beforesync',this,html)!==false){this.el.dom.value=html;this.fireEvent('sync',this,html);}}},pushValue:function(){if(this.initialized){var v=this.el.dom.value;if(v.length<1){v='&nbsp;';}
-if(this.fireEvent('beforepush',this,v)!==false){(this.doc.body||this.doc.documentElement).innerHTML=v;this.fireEvent('push',this,v);}}},deferFocus:function(){this.focus.defer(10,this);},focus:function(){if(this.win&&!this.sourceEditMode){this.win.focus();}else{this.el.focus();}},initEditor:function(){var dbody=(this.doc.body||this.doc.documentElement);var ss=this.el.getStyles('font-size','font-family','background-image','background-repeat');ss['background-attachment']='fixed';dbody.bgProperties='fixed';Ext.DomHelper.applyStyles(dbody,ss);Ext.EventManager.on(this.doc,{'mousedown':this.onEditorEvent,'dblclick':this.onEditorEvent,'click':this.onEditorEvent,'keyup':this.onEditorEvent,buffer:100,scope:this});if(Ext.isGecko){Ext.EventManager.on(this.doc,'keypress',this.applyCommand,this);}
-if(Ext.isIE||Ext.isSafari||Ext.isOpera){Ext.EventManager.on(this.doc,'keydown',this.fixTab,this);}
-this.initialized=true;this.fireEvent('initialize',this);this.pushValue();},onDestroy:function(){if(this.rendered){this.tb.items.each(function(item){if(item.menu){item.menu.removeAll();if(item.menu.el){item.menu.el.destroy();}}
-item.destroy();});this.wrap.dom.innerHTML='';this.wrap.remove();}},onFirstFocus:function(){this.activated=true;this.tb.items.each(function(item){item.enable();});if(Ext.isGecko){this.win.focus();var s=this.win.getSelection();if(!s.focusNode||s.focusNode.nodeType!=3){var r=s.getRangeAt(0);r.selectNodeContents((this.doc.body||this.doc.documentElement));r.collapse(true);this.deferFocus();}
-try{this.execCmd('useCSS',true);this.execCmd('styleWithCSS',false);}catch(e){}}},adjustFont:function(btn){var adjust=btn.id=='increasefontsize'?1:-1;if(Ext.isSafari){adjust*=2;}
-var v=parseInt(this.doc.queryCommandValue('FontSize')||3,10);v=Math.max(1,v+adjust);this.execCmd('FontSize',v+(Ext.isSafari?'px':0));},onEditorEvent:function(e){this.updateToolbar();},updateToolbar:function(){if(!this.activated){this.onFirstFocus();return;}
-var btns=this.tb.items.map,doc=this.doc;if(this.enableFormat){btns.bold.toggle(doc.queryCommandState('bold'));btns.italic.toggle(doc.queryCommandState('italic'));btns.underline.toggle(doc.queryCommandState('underline'));}
-if(this.enableAlignments){btns.justifyleft.toggle(doc.queryCommandState('justifyleft'));btns.justifycenter.toggle(doc.queryCommandState('justifycenter'));btns.justifyright.toggle(doc.queryCommandState('justifyright'));}
-if(!Ext.isSafari&&this.enableLists){btns.insertorderedlist.toggle(doc.queryCommandState('insertorderedlist'));btns.insertunorderedlist.toggle(doc.queryCommandState('insertunorderedlist'));}
-if(this.enableColors){btns.forecolor.menu.hide();btns.backcolor.menu.hide();}
-this.syncValue();},relayBtnCmd:function(btn){this.relayCmd(btn.id);},relayCmd:function(cmd,value){this.win.focus();this.execCmd(cmd,value);this.updateToolbar();this.deferFocus();},execCmd:function(cmd,value){this.doc.execCommand(cmd,false,value===undefined?null:value);},applyCommand:function(e){if(e.ctrlKey){var c=e.getCharCode(),cmd;if(c>0){c=String.fromCharCode(c);switch(c){case'b':cmd='bold';break;case'i':cmd='italic';break;case'u':cmd='underline';break;}
-if(cmd){this.win.focus();this.execCmd(cmd);this.deferFocus();e.preventDefault();}}}},fixTab:function(e){if(e.getKey()==e.TAB){e.stopEvent();if(Ext.isIE){var r=this.doc.selection.createRange();if(r){r.collapse(true);r.pasteHTML('&nbsp;&nbsp;&nbsp;&nbsp;');this.deferFocus();}}else if(Ext.isOpera){this.win.focus();this.execCmd('InsertHTML','&nbsp;&nbsp;&nbsp;&nbsp;');this.deferFocus();}else{this.execCmd('InsertText','\t');this.deferFocus();}}},getToolbar:function(){return this.tb;},buttonTips:{bold:{title:'Bold (Ctrl+B)',text:'Make the selected text bold.',cls:'x-html-editor-tip'},italic:{title:'Italic (Ctrl+I)',text:'Make the selected text italic.',cls:'x-html-editor-tip'},underline:{title:'Underline (Ctrl+U)',text:'Underline the selected text.',cls:'x-html-editor-tip'},increasefontsize:{title:'Grow Text',text:'Increase the font size.',cls:'x-html-editor-tip'},decreasefontsize:{title:'Shrink Text',text:'Decrease the font size.',cls:'x-html-editor-tip'},backcolor:{title:'Text Highlight Color',text:'Change the background color of the selected text.',cls:'x-html-editor-tip'},forecolor:{title:'Font Color',text:'Change the color of the selected text.',cls:'x-html-editor-tip'},justifyleft:{title:'Align Text Left',text:'Align text to the left.',cls:'x-html-editor-tip'},justifycenter:{title:'Center Text',text:'Center text in the editor.',cls:'x-html-editor-tip'},justifyright:{title:'Align Text Right',text:'Align text to the right.',cls:'x-html-editor-tip'},insertunorderedlist:{title:'Bullet List',text:'Start a bulleted list.',cls:'x-html-editor-tip'},insertorderedlist:{title:'Numbered List',text:'Start a numbered list.',cls:'x-html-editor-tip'},sourceedit:{title:'Source Edit',text:'Switch to source editing mode.',cls:'x-html-editor-tip'}}});
-
-Ext.form.BasicForm=function(el,config){Ext.apply(this,config);this.items=new Ext.util.MixedCollection(false,function(o){return o.id||(o.id=Ext.id());});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(el){this.initEl(el);}
-Ext.form.BasicForm.superclass.constructor.call(this);};Ext.extend(Ext.form.BasicForm,Ext.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,waitMsgTarget:undefined,initEl:function(el){this.el=Ext.get(el);this.id=this.el.id||Ext.id();this.el.on('submit',this.onSubmit,this);this.el.addClass('x-form');},onSubmit:function(e){e.stopEvent();},isValid:function(){var valid=true;this.items.each(function(f){if(!f.validate()){valid=false;}});return valid;},isDirty:function(){var dirty=false;this.items.each(function(f){if(f.isDirty()){dirty=true;return false;}});return dirty;},doAction:function(action,options){if(typeof action=='string'){action=new Ext.form.Action.ACTION_TYPES[action](this,options);}
-if(this.fireEvent('beforeaction',this,action)!==false){this.beforeAction(action);action.run.defer(100,action);}
-return this;},submit:function(options){this.doAction('submit',options);return this;},load:function(options){this.doAction('load',options);return this;},updateRecord:function(record){record.beginEdit();var fs=record.fields;fs.each(function(f){var field=this.findField(f.name);if(field){record.set(f.name,field.getValue());}},this);record.endEdit();return this;},loadRecord:function(record){this.setValues(record.data);return this;},beforeAction:function(action){var o=action.options;if(o.waitMsg){if(this.waitMsgTarget===true){this.el.mask(o.waitMsg,'x-mask-loading');}else if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(o.waitMsg,'x-mask-loading');}else{Ext.MessageBox.wait(o.waitMsg,o.waitTitle||this.waitTitle||'Please Wait...');}}},afterAction:function(action,success){this.activeAction=null;var o=action.options;if(o.waitMsg){if(this.waitMsgTarget===true){this.el.unmask();}else if(this.waitMsgTarget){this.waitMsgTarget.unmask();}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide();}}
-if(success){if(o.reset){this.reset();}
-Ext.callback(o.success,o.scope,[this,action]);this.fireEvent('actioncomplete',this,action);}else{Ext.callback(o.failure,o.scope,[this,action]);this.fireEvent('actionfailed',this,action);}},findField:function(id){var field=this.items.get(id);if(!field){this.items.each(function(f){if(f.isFormField&&(f.dataIndex==id||f.id==id||f.getName()==id)){field=f;return false;}});}
-return field||null;},markInvalid:function(errors){if(errors instanceof Array){for(var i=0,len=errors.length;i<len;i++){var fieldError=errors[i];var f=this.findField(fieldError.id);if(f){f.markInvalid(fieldError.msg);}}}else{var field,id;for(id in errors){if(typeof errors[id]!='function'&&(field=this.findField(id))){field.markInvalid(errors[id]);}}}
-return this;},setValues:function(values){if(values instanceof Array){for(var i=0,len=values.length;i<len;i++){var v=values[i];var f=this.findField(v.id);if(f){f.setValue(v.value);if(this.trackResetOnLoad){f.originalValue=f.getValue();}}}}else{var field,id;for(id in values){if(typeof values[id]!='function'&&(field=this.findField(id))){field.setValue(values[id]);if(this.trackResetOnLoad){field.originalValue=field.getValue();}}}}
-return this;},getValues:function(asString){var fs=Ext.lib.Ajax.serializeForm(this.el.dom);if(asString===true){return fs;}
-return Ext.urlDecode(fs);},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});return this;},reset:function(){this.items.each(function(f){f.reset();});return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(field){this.items.remove(field);return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyTo(f.id);}});return this;},applyToFields:function(o){this.items.each(function(f){Ext.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Ext.applyIf(f,o);});return this;}});Ext.BasicForm=Ext.form.BasicForm;
-
-Ext.form.Form=function(config){Ext.form.Form.superclass.constructor.call(this,null,config);this.url=this.url||this.action;if(!this.root){this.root=new Ext.form.Layout(Ext.applyIf({id:Ext.id()},config));}
-this.active=this.root;this.buttons=[];this.addEvents({clientvalidation:true});};Ext.extend(Ext.form.Form,Ext.form.BasicForm,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,column:function(c){var col=new Ext.form.Column(c);this.start(col);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end();}
-return col;},fieldset:function(c){var fs=new Ext.form.FieldSet(c);this.start(fs);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end();}
-return fs;},container:function(c){var l=new Ext.form.Layout(c);this.start(l);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end();}
-return l;},start:function(c){Ext.applyIf(c,{'labelAlign':this.active.labelAlign,'labelWidth':this.active.labelWidth,'itemCls':this.active.itemCls});this.active.stack.push(c);c.ownerCt=this.active;this.active=c;return this;},end:function(){if(this.active==this.root){return this;}
-this.active=this.active.ownerCt;return this;},add:function(){this.active.stack.push.apply(this.active.stack,arguments);var r=[];for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i].isFormField){r.push(a[i]);}}
-if(r.length>0){Ext.form.Form.superclass.add.apply(this,r);}
-return this;},render:function(ct){ct=Ext.get(ct);var o=this.autoCreate||{tag:'form',method:this.method||'POST',id:this.id||Ext.id()};this.initEl(ct.createChild(o));this.root.render(this.el);this.items.each(function(f){f.render('x-form-el-'+f.id);});if(this.buttons.length>0){var tb=this.el.createChild({cls:'x-form-btns-ct',cn:{cls:"x-form-btns x-form-btns-"+this.buttonAlign,html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'}},null,true);var tr=tb.getElementsByTagName('tr')[0];for(var i=0,len=this.buttons.length;i<len;i++){var b=this.buttons[i];var td=document.createElement('td');td.className='x-form-btn-td';b.render(tr.appendChild(td));}}
-if(this.monitorValid){this.startMonitoring();}
-return this;},addButton:function(config,handler,scope){var bc={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bc.text=config;}else{Ext.apply(bc,config);}
-var btn=new Ext.Button(null,bc);this.buttons.push(btn);return btn;},startMonitoring:function(){if(!this.bound){this.bound=true;Ext.TaskMgr.start({run:this.bindHandler,interval:this.monitorPoll||200,scope:this});}},stopMonitoring:function(){this.bound=false;},bindHandler:function(){if(!this.bound){return false;}
-var valid=true;this.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});for(var i=0,len=this.buttons.length;i<len;i++){var btn=this.buttons[i];if(btn.formBind===true&&btn.disabled===valid){btn.setDisabled(!valid);}}
-this.fireEvent('clientvalidation',this,valid);}});Ext.Form=Ext.form.Form;
-
-Ext.form.Action=function(form,options){this.form=form;this.options=options||{};};Ext.form.Action.CLIENT_INVALID='client';Ext.form.Action.SERVER_INVALID='server';Ext.form.Action.CONNECT_FAILURE='connect';Ext.form.Action.LOAD_FAILURE='load';Ext.form.Action.prototype={type:'default',failureType:undefined,response:undefined,result:undefined,run:function(options){},success:function(response){},handleResponse:function(response){},failure:function(response){this.response=response;this.failureType=Ext.form.Action.CONNECT_FAILURE;this.form.afterAction(this,false);},processResponse:function(response){this.response=response;if(!response.responseText){return true;}
-this.result=this.handleResponse(response);return this.result;},getUrl:function(appendParams){var url=this.options.url||this.form.url||this.form.el.dom.action;if(appendParams){var p=this.getParams();if(p){url+=(url.indexOf('?')!=-1?'&':'?')+p;}}
-return url;},getMethod:function(){return(this.options.method||this.form.method||this.form.el.dom.method||'POST').toUpperCase();},getParams:function(){var bp=this.form.baseParams;var p=this.options.params;if(p){if(typeof p=="object"){p=Ext.urlEncode(Ext.applyIf(p,bp));}else if(typeof p=='string'&&bp){p+='&'+Ext.urlEncode(bp);}}else if(bp){p=Ext.urlEncode(bp);}
-return p;},createCallback:function(){return{success:this.success,failure:this.failure,scope:this,timeout:(this.form.timeout*1000),upload:this.form.fileUpload?this.success:undefined};}};Ext.form.Action.Submit=function(form,options){Ext.form.Action.Submit.superclass.constructor.call(this,form,options);};Ext.extend(Ext.form.Action.Submit,Ext.form.Action,{type:'submit',run:function(){var o=this.options;var isPost=this.getMethod()=='POST';if(o.clientValidation===false||this.form.isValid()){Ext.lib.Ajax.formRequest(this.form.el.dom,this.getUrl(!isPost),this.createCallback(),isPost?this.getParams():null,this.form.fileUpload,Ext.SSL_SECURE_URL);}else if(o.clientValidation!==false){this.failureType=Ext.form.Action.CLIENT_INVALID;this.form.afterAction(this,false);}},success:function(response){var result=this.processResponse(response);if(result===true||result.success){this.form.afterAction(this,true);return;}
-if(result.errors){this.form.markInvalid(result.errors);this.failureType=Ext.form.Action.SERVER_INVALID;}
-this.form.afterAction(this,false);},handleResponse:function(response){if(this.form.errorReader){var rs=this.form.errorReader.read(response);var errors=[];if(rs.records){for(var i=0,len=rs.records.length;i<len;i++){var r=rs.records[i];errors[i]=r.data;}}
-if(errors.length<1){errors=null;}
-return{success:rs.success,errors:errors};}
-return Ext.decode(response.responseText);}});Ext.form.Action.Load=function(form,options){Ext.form.Action.Load.superclass.constructor.call(this,form,options);this.reader=this.form.reader;};Ext.extend(Ext.form.Action.Load,Ext.form.Action,{type:'load',run:function(){Ext.lib.Ajax.request(this.getMethod(),this.getUrl(false),this.createCallback(),this.getParams());},success:function(response){var result=this.processResponse(response);if(result===true||!result.success||!result.data){this.failureType=Ext.form.Action.LOAD_FAILURE;this.form.afterAction(this,false);return;}
-this.form.clearInvalid();this.form.setValues(result.data);this.form.afterAction(this,true);},handleResponse:function(response){if(this.form.reader){var rs=this.form.reader.read(response);var data=rs.records&&rs.records[0]?rs.records[0].data:null;return{success:rs.success,data:data};}
-return Ext.decode(response.responseText);}});Ext.form.Action.ACTION_TYPES={'load':Ext.form.Action.Load,'submit':Ext.form.Action.Submit};
-
-Ext.form.Layout=function(config){Ext.form.Layout.superclass.constructor.call(this,config);this.stack=[];};Ext.extend(Ext.form.Layout,Ext.Component,{clear:true,labelSeparator:':',hideLabels:false,defaultAutoCreate:{tag:'div',cls:'x-form-ct'},onRender:function(ct,position){if(this.el){this.el=Ext.get(this.el);}else{var cfg=this.getAutoCreate();this.el=ct.createChild(cfg,position);}
-if(this.style){this.el.applyStyles(this.style);}
-if(this.labelAlign){this.el.addClass('x-form-label-'+this.labelAlign);}
-if(this.hideLabels){this.labelStyle="display:none";this.elementStyle="padding-left:0;";}else{if(typeof this.labelWidth=='number'){this.labelStyle="width:"+this.labelWidth+"px;";this.elementStyle="padding-left:"+((this.labelWidth+(typeof this.labelPad=='number'?this.labelPad:5))+'px')+";";}
-if(this.labelAlign=='top'){this.labelStyle="width:auto;";this.elementStyle="padding-left:0;";}}
-var stack=this.stack;var slen=stack.length;if(slen>0){if(!this.fieldTpl){var t=new Ext.Template('<div class="x-form-item {5}">','<label for="{0}" style="{2}">{1}{4}</label>','<div class="x-form-element" id="x-form-el-{0}" style="{3}">','</div>','</div><div class="x-form-clear-left"></div>');t.disableFormats=true;t.compile();Ext.form.Layout.prototype.fieldTpl=t;}
-for(var i=0;i<slen;i++){if(stack[i].isFormField){this.renderField(stack[i]);}else{this.renderComponent(stack[i]);}}}
-if(this.clear){this.el.createChild({cls:'x-form-clear'});}},renderField:function(f){this.fieldTpl.append(this.el,[f.id,f.fieldLabel,f.labelStyle||this.labelStyle||'',this.elementStyle||'',typeof f.labelSeparator=='undefined'?this.labelSeparator:f.labelSeparator,f.itemCls||this.itemCls||'']);},renderComponent:function(c){c.render(this.el);}});Ext.form.Column=function(config){Ext.form.Column.superclass.constructor.call(this,config);};Ext.extend(Ext.form.Column,Ext.form.Layout,{defaultAutoCreate:{tag:'div',cls:'x-form-ct x-form-column'},onRender:function(ct,position){Ext.form.Column.superclass.onRender.call(this,ct,position);if(this.width){this.el.setWidth(this.width);}}});Ext.form.FieldSet=function(config){Ext.form.FieldSet.superclass.constructor.call(this,config);};Ext.extend(Ext.form.FieldSet,Ext.form.Layout,{defaultAutoCreate:{tag:'fieldset',cn:{tag:'legend'}},onRender:function(ct,position){Ext.form.FieldSet.superclass.onRender.call(this,ct,position);if(this.legend){this.setLegend(this.legend);}},setLegend:function(text){if(this.rendered){this.el.child('legend').update(text);}}});
-
-Ext.form.VTypes=function(){var alpha=/^[a-zA-Z_]+$/;var alphanum=/^[a-zA-Z0-9_]+$/;var email=/^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;var url=/(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;return{'email':function(v){return email.test(v);},'emailText':'This field should be an e-mail address in the format "user@domain.com"','emailMask':/[a-z0-9_\.\-@]/i,'url':function(v){return url.test(v);},'urlText':'This field should be a URL in the format "http:/'+'/www.domain.com"','alpha':function(v){return alpha.test(v);},'alphaText':'This field should only contain letters and _','alphaMask':/[a-z_]/i,'alphanum':function(v){return alphanum.test(v);},'alphanumText':'This field should only contain letters, numbers and _','alphanumMask':/[a-z0-9_]/i};}();
-
-Ext.LayoutManager=function(container,config){Ext.LayoutManager.superclass.constructor.call(this);this.el=Ext.get(container);if(this.el.dom==document.body&&Ext.isIE&&!config.allowScroll){document.body.scroll="no";}else if(this.el.dom!=document.body&&this.el.getStyle('position')=='static'){this.el.position('relative');}
-this.id=this.el.id;this.el.addClass("x-layout-container");this.monitorWindowResize=true;this.regions={};this.addEvents({"layout":true,"regionresized":true,"regioncollapsed":true,"regionexpanded":true});this.updating=false;Ext.EventManager.onWindowResize(this.onWindowResize,this,true);};Ext.extend(Ext.LayoutManager,Ext.util.Observable,{isUpdating:function(){return this.updating;},beginUpdate:function(){this.updating=true;},endUpdate:function(noLayout){this.updating=false;if(!noLayout){this.layout();}},layout:function(){},onRegionResized:function(region,newSize){this.fireEvent("regionresized",region,newSize);this.layout();},onRegionCollapsed:function(region){this.fireEvent("regioncollapsed",region);},onRegionExpanded:function(region){this.fireEvent("regionexpanded",region);},getViewSize:function(){var size;if(this.el.dom!=document.body){size=this.el.getSize();}else{size={width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}
-size.width-=this.el.getBorderWidth("lr")-this.el.getPadding("lr");size.height-=this.el.getBorderWidth("tb")-this.el.getPadding("tb");return size;},getEl:function(){return this.el;},getRegion:function(target){return this.regions[target.toLowerCase()];},onWindowResize:function(){if(this.monitorWindowResize){this.layout();}}});
-
-Ext.BorderLayout=function(container,config){config=config||{};Ext.BorderLayout.superclass.constructor.call(this,container,config);this.factory=config.factory||Ext.BorderLayout.RegionFactory;for(var i=0,len=this.factory.validRegions.length;i<len;i++){var target=this.factory.validRegions[i];if(config[target]){this.addRegion(target,config[target]);}}};Ext.extend(Ext.BorderLayout,Ext.LayoutManager,{addRegion:function(target,config){if(!this.regions[target]){var r=this.factory.create(target,this,config);this.bindRegion(target,r);}
-return this.regions[target];},bindRegion:function(name,r){this.regions[name]=r;r.on("visibilitychange",this.layout,this);r.on("paneladded",this.layout,this);r.on("panelremoved",this.layout,this);r.on("invalidated",this.layout,this);r.on("resized",this.onRegionResized,this);r.on("collapsed",this.onRegionCollapsed,this);r.on("expanded",this.onRegionExpanded,this);},layout:function(){if(this.updating)return;var size=this.getViewSize();var w=size.width,h=size.height;var centerW=w,centerH=h,centerY=0,centerX=0;var rs=this.regions;var n=rs["north"],s=rs["south"],west=rs["west"],e=rs["east"],c=rs["center"];if(n&&n.isVisible()){var b=n.getBox();var m=n.getMargins();b.width=w-(m.left+m.right);b.x=m.left;b.y=m.top;centerY=b.height+b.y+m.bottom;centerH-=centerY;n.updateBox(this.safeBox(b));}
-if(s&&s.isVisible()){var b=s.getBox();var m=s.getMargins();b.width=w-(m.left+m.right);b.x=m.left;var totalHeight=(b.height+m.top+m.bottom);b.y=h-totalHeight+m.top;centerH-=totalHeight;s.updateBox(this.safeBox(b));}
-if(west&&west.isVisible()){var b=west.getBox();var m=west.getMargins();b.height=centerH-(m.top+m.bottom);b.x=m.left;b.y=centerY+m.top;var totalWidth=(b.width+m.left+m.right);centerX+=totalWidth;centerW-=totalWidth;west.updateBox(this.safeBox(b));}
-if(e&&e.isVisible()){var b=e.getBox();var m=e.getMargins();b.height=centerH-(m.top+m.bottom);var totalWidth=(b.width+m.left+m.right);b.x=w-totalWidth+m.left;b.y=centerY+m.top;centerW-=totalWidth;e.updateBox(this.safeBox(b));}
-if(c){var m=c.getMargins();var centerBox={x:centerX+m.left,y:centerY+m.top,width:centerW-(m.left+m.right),height:centerH-(m.top+m.bottom)};c.updateBox(this.safeBox(centerBox));}
-this.el.repaint();this.fireEvent("layout",this);},safeBox:function(box){box.width=Math.max(0,box.width);box.height=Math.max(0,box.height);return box;},add:function(target,panel){target=target.toLowerCase();return this.regions[target].add(panel);},remove:function(target,panel){target=target.toLowerCase();return this.regions[target].remove(panel);},findPanel:function(panelId){var rs=this.regions;for(var target in rs){if(typeof rs[target]!="function"){var p=rs[target].getPanel(panelId);if(p){return p;}}}
-return null;},showPanel:function(panelId){var rs=this.regions;for(var target in rs){var r=rs[target];if(typeof r!="function"){if(r.hasPanel(panelId)){return r.showPanel(panelId);}}}
-return null;},restoreState:function(provider){if(!provider){provider=Ext.state.Manager;}
-var sm=new Ext.LayoutStateManager();sm.init(this,provider);},batchAdd:function(regions){this.beginUpdate();for(var rname in regions){var lr=this.regions[rname];if(lr){this.addTypedPanels(lr,regions[rname]);}}
-this.endUpdate();},addTypedPanels:function(lr,ps){if(typeof ps=='string'){lr.add(new Ext.ContentPanel(ps));}
-else if(ps instanceof Array){for(var i=0,len=ps.length;i<len;i++){this.addTypedPanels(lr,ps[i]);}}
-else if(!ps.events){var el=ps.el;delete ps.el;lr.add(new Ext.ContentPanel(el||Ext.id(),ps));}
-else{lr.add(ps);}}});Ext.BorderLayout.create=function(config,targetEl){var layout=new Ext.BorderLayout(targetEl||document.body,config);layout.beginUpdate();var regions=Ext.BorderLayout.RegionFactory.validRegions;for(var j=0,jlen=regions.length;j<jlen;j++){var lr=regions[j];if(layout.regions[lr]&&config[lr].panels){var r=layout.regions[lr];var ps=config[lr].panels;layout.addTypedPanels(r,ps);}}
-layout.endUpdate();return layout;};Ext.BorderLayout.RegionFactory={validRegions:["north","south","east","west","center"],create:function(target,mgr,config){target=target.toLowerCase();if(config.lightweight||config.basic){return new Ext.BasicLayoutRegion(mgr,config,target);}
-switch(target){case"north":return new Ext.NorthLayoutRegion(mgr,config);case"south":return new Ext.SouthLayoutRegion(mgr,config);case"east":return new Ext.EastLayoutRegion(mgr,config);case"west":return new Ext.WestLayoutRegion(mgr,config);case"center":return new Ext.CenterLayoutRegion(mgr,config);}
-throw'Layout region "'+target+'" not supported.';}};
-
-Ext.BasicLayoutRegion=function(mgr,config,pos,skipConfig){this.mgr=mgr;this.position=pos;this.events={"beforeremove":true,"invalidated":true,"visibilitychange":true,"paneladded":true,"panelremoved":true,"collapsed":true,"expanded":true,"slideshow":true,"slidehide":true,"panelactivated":true,"resized":true};this.panels=new Ext.util.MixedCollection();this.panels.getKey=this.getPanelId.createDelegate(this);this.box=null;this.activePanel=null;if(skipConfig!==true){this.applyConfig(config);}};Ext.extend(Ext.BasicLayoutRegion,Ext.util.Observable,{getPanelId:function(p){return p.getId();},applyConfig:function(config){this.margins=config.margins||this.margins||{top:0,left:0,right:0,bottom:0};this.config=config;},resizeTo:function(newSize){var el=this.el?this.el:(this.activePanel?this.activePanel.getEl():null);if(el){switch(this.position){case"east":case"west":el.setWidth(newSize);this.fireEvent("resized",this,newSize);break;case"north":case"south":el.setHeight(newSize);this.fireEvent("resized",this,newSize);break;}}},getBox:function(){return this.activePanel?this.activePanel.getEl().getBox(false,true):null;},getMargins:function(){return this.margins;},updateBox:function(box){this.box=box;var el=this.activePanel.getEl();el.dom.style.left=box.x+"px";el.dom.style.top=box.y+"px";this.activePanel.setSize(box.width,box.height);},getEl:function(){return this.activePanel;},isVisible:function(){return this.activePanel?true:false;},setActivePanel:function(panel){panel=this.getPanel(panel);if(this.activePanel&&this.activePanel!=panel){this.activePanel.setActiveState(false);this.activePanel.getEl().setLeftTop(-10000,-10000);}
-this.activePanel=panel;panel.setActiveState(true);if(this.box){panel.setSize(this.box.width,this.box.height);}
-this.fireEvent("panelactivated",this,panel);this.fireEvent("invalidated");},showPanel:function(panel){if(panel=this.getPanel(panel)){this.setActivePanel(panel);}
-return panel;},getActivePanel:function(){return this.activePanel;},add:function(panel){if(arguments.length>1){for(var i=0,len=arguments.length;i<len;i++){this.add(arguments[i]);}
-return null;}
-if(this.hasPanel(panel)){this.showPanel(panel);return panel;}
-var el=panel.getEl();if(el.dom.parentNode!=this.mgr.el.dom){this.mgr.el.dom.appendChild(el.dom);}
-if(panel.setRegion){panel.setRegion(this);}
-this.panels.add(panel);el.setStyle("position","absolute");if(!panel.background){this.setActivePanel(panel);if(this.config.initialSize&&this.panels.getCount()==1){this.resizeTo(this.config.initialSize);}}
-this.fireEvent("paneladded",this,panel);return panel;},hasPanel:function(panel){if(typeof panel=="object"){panel=panel.getId();}
-return this.getPanel(panel)?true:false;},remove:function(panel,preservePanel){panel=this.getPanel(panel);if(!panel){return null;}
-var e={};this.fireEvent("beforeremove",this,panel,e);if(e.cancel===true){return null;}
-var panelId=panel.getId();this.panels.removeKey(panelId);return panel;},getPanel:function(id){if(typeof id=="object"){return id;}
-return this.panels.get(id);},getPosition:function(){return this.position;}});
-
-Ext.LayoutRegion=function(mgr,config,pos){Ext.LayoutRegion.superclass.constructor.call(this,mgr,config,pos,true);var dh=Ext.DomHelper;this.el=dh.append(mgr.el.dom,{tag:"div",cls:"x-layout-panel x-layout-panel-"+this.position},true);this.titleEl=dh.append(this.el.dom,{tag:"div",unselectable:"on",cls:"x-unselectable x-layout-panel-hd x-layout-title-"+this.position,children:[{tag:"span",cls:"x-unselectable x-layout-panel-hd-text",unselectable:"on",html:"&#160;"},{tag:"div",cls:"x-unselectable x-layout-panel-hd-tools",unselectable:"on"}]},true);this.titleEl.enableDisplayMode();this.titleTextEl=this.titleEl.dom.firstChild;this.tools=Ext.get(this.titleEl.dom.childNodes[1],true);this.closeBtn=this.createTool(this.tools.dom,"x-layout-close");this.closeBtn.enableDisplayMode();this.closeBtn.on("click",this.closeClicked,this);this.closeBtn.hide();this.createBody(config);this.visible=true;this.collapsed=false;if(config.hideWhenEmpty){this.hide();this.on("paneladded",this.validateVisibility,this);this.on("panelremoved",this.validateVisibility,this);}
-this.applyConfig(config);};Ext.extend(Ext.LayoutRegion,Ext.BasicLayoutRegion,{createBody:function(){this.bodyEl=this.el.createChild({tag:"div",cls:"x-layout-panel-body"});},applyConfig:function(c){if(c.collapsible&&this.position!="center"&&!this.collapsedEl){var dh=Ext.DomHelper;if(c.titlebar!==false){this.collapseBtn=this.createTool(this.tools.dom,"x-layout-collapse-"+this.position);this.collapseBtn.on("click",this.collapse,this);this.collapseBtn.enableDisplayMode();if(c.showPin===true||this.showPin){this.stickBtn=this.createTool(this.tools.dom,"x-layout-stick");this.stickBtn.enableDisplayMode();this.stickBtn.on("click",this.expand,this);this.stickBtn.hide();}}
-this.collapsedEl=dh.append(this.mgr.el.dom,{cls:"x-layout-collapsed x-layout-collapsed-"+this.position,children:[{cls:"x-layout-collapsed-tools",children:[{cls:"x-layout-ctools-inner"}]}]},true);if(c.floatable!==false){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.collapseClick,this);}
-if(c.collapsedTitle&&(this.position=="north"||this.position=="south")){this.collapsedTitleTextEl=dh.append(this.collapsedEl.dom,{tag:"div",cls:"x-unselectable x-layout-panel-hd-text",id:"message",unselectable:"on",style:{"float":"left"}});this.collapsedTitleTextEl.innerHTML=c.collapsedTitle;}
-this.expandBtn=this.createTool(this.collapsedEl.dom.firstChild.firstChild,"x-layout-expand-"+this.position);this.expandBtn.on("click",this.expand,this);}
-if(this.collapseBtn){this.collapseBtn.setVisible(c.collapsible==true);}
-this.cmargins=c.cmargins||this.cmargins||(this.position=="west"||this.position=="east"?{top:0,left:2,right:2,bottom:0}:{top:2,left:0,right:0,bottom:2});this.margins=c.margins||this.margins||{top:0,left:0,right:0,bottom:0};this.bottomTabs=c.tabPosition!="top";this.autoScroll=c.autoScroll||false;if(this.autoScroll){this.bodyEl.setStyle("overflow","auto");}else{this.bodyEl.setStyle("overflow","hidden");}
-if((!c.titlebar&&!c.title)||c.titlebar===false){this.titleEl.hide();}else{this.titleEl.show();if(c.title){this.titleTextEl.innerHTML=c.title;}}
-this.duration=c.duration||.30;this.slideDuration=c.slideDuration||.45;this.config=c;if(c.collapsed){this.collapse(true);}
-if(c.hidden){this.hide();}},isVisible:function(){return this.visible;},setCollapsedTitle:function(title){title=title||"&#160;";if(this.collapsedTitleTextEl){this.collapsedTitleTextEl.innerHTML=title;}},getBox:function(){var b;if(!this.collapsed){b=this.el.getBox(false,true);}else{b=this.collapsedEl.getBox(false,true);}
-return b;},getMargins:function(){return this.collapsed?this.cmargins:this.margins;},highlight:function(){this.el.addClass("x-layout-panel-dragover");},unhighlight:function(){this.el.removeClass("x-layout-panel-dragover");},updateBox:function(box){this.box=box;if(!this.collapsed){this.el.dom.style.left=box.x+"px";this.el.dom.style.top=box.y+"px";this.updateBody(box.width,box.height);}else{this.collapsedEl.dom.style.left=box.x+"px";this.collapsedEl.dom.style.top=box.y+"px";this.collapsedEl.setSize(box.width,box.height);}
-if(this.tabs){this.tabs.autoSizeTabs();}},updateBody:function(w,h){if(w!==null){this.el.setWidth(w);w-=this.el.getBorderWidth("rl");if(this.config.adjustments){w+=this.config.adjustments[0];}}
-if(h!==null){this.el.setHeight(h);h=this.titleEl&&this.titleEl.isDisplayed()?h-(this.titleEl.getHeight()||0):h;h-=this.el.getBorderWidth("tb");if(this.config.adjustments){h+=this.config.adjustments[1];}
-this.bodyEl.setHeight(h);if(this.tabs){h=this.tabs.syncHeight(h);}}
-if(this.panelSize){w=w!==null?w:this.panelSize.width;h=h!==null?h:this.panelSize.height;}
-if(this.activePanel){var el=this.activePanel.getEl();w=w!==null?w:el.getWidth();h=h!==null?h:el.getHeight();this.panelSize={width:w,height:h};this.activePanel.setSize(w,h);}
-if(Ext.isIE&&this.tabs){this.tabs.el.repaint();}},getEl:function(){return this.el;},hide:function(){if(!this.collapsed){this.el.dom.style.left="-2000px";this.el.hide();}else{this.collapsedEl.dom.style.left="-2000px";this.collapsedEl.hide();}
-this.visible=false;this.fireEvent("visibilitychange",this,false);},show:function(){if(!this.collapsed){this.el.show();}else{this.collapsedEl.show();}
-this.visible=true;this.fireEvent("visibilitychange",this,true);},closeClicked:function(){if(this.activePanel){this.remove(this.activePanel);}},collapseClick:function(e){if(this.isSlid){e.stopPropagation();this.slideIn();}else{e.stopPropagation();this.slideOut();}},collapse:function(skipAnim){if(this.collapsed)return;this.collapsed=true;if(this.split){this.split.el.hide();}
-if(this.config.animate&&skipAnim!==true){this.fireEvent("invalidated",this);this.animateCollapse();}else{this.el.setLocation(-20000,-20000);this.el.hide();this.collapsedEl.show();this.fireEvent("collapsed",this);this.fireEvent("invalidated",this);}},animateCollapse:function(){},expand:function(e,skipAnim){if(e)e.stopPropagation();if(!this.collapsed||this.el.hasActiveFx())return;if(this.isSlid){this.afterSlideIn();skipAnim=true;}
-this.collapsed=false;if(this.config.animate&&skipAnim!==true){this.animateExpand();}else{this.el.show();if(this.split){this.split.el.show();}
-this.collapsedEl.setLocation(-2000,-2000);this.collapsedEl.hide();this.fireEvent("invalidated",this);this.fireEvent("expanded",this);}},animateExpand:function(){},initTabs:function(){this.bodyEl.setStyle("overflow","hidden");var ts=new Ext.TabPanel(this.bodyEl.dom,{tabPosition:this.bottomTabs?'bottom':'top',disableTooltips:this.config.disableTabTips});if(this.config.hideTabs){ts.stripWrap.setDisplayed(false);}
-this.tabs=ts;ts.resizeTabs=this.config.resizeTabs===true;ts.minTabWidth=this.config.minTabWidth||40;ts.maxTabWidth=this.config.maxTabWidth||250;ts.preferredTabWidth=this.config.preferredTabWidth||150;ts.monitorResize=false;ts.bodyEl.setStyle("overflow",this.config.autoScroll?"auto":"hidden");ts.bodyEl.addClass('x-layout-tabs-body');this.panels.each(this.initPanelAsTab,this);},initPanelAsTab:function(panel){var ti=this.tabs.addTab(panel.getEl().id,panel.getTitle(),null,this.config.closeOnTab&&panel.isClosable());if(panel.tabTip!==undefined){ti.setTooltip(panel.tabTip);}
-ti.on("activate",function(){this.setActivePanel(panel);},this);if(this.config.closeOnTab){ti.on("beforeclose",function(t,e){e.cancel=true;this.remove(panel);},this);}
-return ti;},updatePanelTitle:function(panel,title){if(this.activePanel==panel){this.updateTitle(title);}
-if(this.tabs){var ti=this.tabs.getTab(panel.getEl().id);ti.setText(title);if(panel.tabTip!==undefined){ti.setTooltip(panel.tabTip);}}},updateTitle:function(title){if(this.titleTextEl&&!this.config.title){this.titleTextEl.innerHTML=(typeof title!="undefined"&&title.length>0?title:"&#160;");}},setActivePanel:function(panel){panel=this.getPanel(panel);if(this.activePanel&&this.activePanel!=panel){this.activePanel.setActiveState(false);}
-this.activePanel=panel;panel.setActiveState(true);if(this.panelSize){panel.setSize(this.panelSize.width,this.panelSize.height);}
-if(this.closeBtn){this.closeBtn.setVisible(!this.config.closeOnTab&&!this.isSlid&&panel.isClosable());}
-this.updateTitle(panel.getTitle());if(this.tabs){this.fireEvent("invalidated",this);}
-this.fireEvent("panelactivated",this,panel);},showPanel:function(panel){if(panel=this.getPanel(panel)){if(this.tabs){var tab=this.tabs.getTab(panel.getEl().id);if(tab.isHidden()){this.tabs.unhideTab(tab.id);}
-tab.activate();}else{this.setActivePanel(panel);}}
-return panel;},getActivePanel:function(){return this.activePanel;},validateVisibility:function(){if(this.panels.getCount()<1){this.updateTitle("&#160;");this.closeBtn.hide();this.hide();}else{if(!this.isVisible()){this.show();}}},add:function(panel){if(arguments.length>1){for(var i=0,len=arguments.length;i<len;i++){this.add(arguments[i]);}
-return null;}
-if(this.hasPanel(panel)){this.showPanel(panel);return panel;}
-panel.setRegion(this);this.panels.add(panel);if(this.panels.getCount()==1&&!this.config.alwaysShowTabs){this.bodyEl.dom.appendChild(panel.getEl().dom);if(panel.background!==true){this.setActivePanel(panel);}
-this.fireEvent("paneladded",this,panel);return panel;}
-if(!this.tabs){this.initTabs();}else{this.initPanelAsTab(panel);}
-if(panel.background!==true){this.tabs.activate(panel.getEl().id);}
-this.fireEvent("paneladded",this,panel);return panel;},hidePanel:function(panel){if(this.tabs&&(panel=this.getPanel(panel))){this.tabs.hideTab(panel.getEl().id);}},unhidePanel:function(panel){if(this.tabs&&(panel=this.getPanel(panel))){this.tabs.unhideTab(panel.getEl().id);}},clearPanels:function(){while(this.panels.getCount()>0){this.remove(this.panels.first());}},remove:function(panel,preservePanel){panel=this.getPanel(panel);if(!panel){return null;}
-var e={};this.fireEvent("beforeremove",this,panel,e);if(e.cancel===true){return null;}
-preservePanel=(typeof preservePanel!="undefined"?preservePanel:(this.config.preservePanels===true||panel.preserve===true));var panelId=panel.getId();this.panels.removeKey(panelId);if(preservePanel){document.body.appendChild(panel.getEl().dom);}
-if(this.tabs){this.tabs.removeTab(panel.getEl().id);}else if(!preservePanel){this.bodyEl.dom.removeChild(panel.getEl().dom);}
-if(this.panels.getCount()==1&&this.tabs&&!this.config.alwaysShowTabs){var p=this.panels.first();var tempEl=document.createElement("div");tempEl.appendChild(p.getEl().dom);this.bodyEl.update("");this.bodyEl.dom.appendChild(p.getEl().dom);tempEl=null;this.updateTitle(p.getTitle());this.tabs=null;this.bodyEl.setStyle("overflow",this.config.autoScroll?"auto":"hidden");this.setActivePanel(p);}
-panel.setRegion(null);if(this.activePanel==panel){this.activePanel=null;}
-if(this.config.autoDestroy!==false&&preservePanel!==true){try{panel.destroy();}catch(e){}}
-this.fireEvent("panelremoved",this,panel);return panel;},getTabs:function(){return this.tabs;},createTool:function(parentEl,className){var btn=Ext.DomHelper.append(parentEl,{tag:"div",cls:"x-layout-tools-button",children:[{tag:"div",cls:"x-layout-tools-button-inner "+className,html:"&#160;"}]},true);btn.addClassOnOver("x-layout-tools-button-over");return btn;}});
-
-Ext.SplitLayoutRegion=function(mgr,config,pos,cursor){this.cursor=cursor;Ext.SplitLayoutRegion.superclass.constructor.call(this,mgr,config,pos);};Ext.extend(Ext.SplitLayoutRegion,Ext.LayoutRegion,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,applyConfig:function(config){Ext.SplitLayoutRegion.superclass.applyConfig.call(this,config);if(config.split){if(!this.split){var splitEl=Ext.DomHelper.append(this.mgr.el.dom,{tag:"div",id:this.el.id+"-split",cls:"x-layout-split x-layout-split-"+this.position,html:"&#160;"});this.split=new Ext.SplitBar(splitEl,this.el,this.orientation);this.split.on("moved",this.onSplitMove,this);this.split.useShim=config.useShim===true;this.split.getMaximumSize=this[this.position=='north'||this.position=='south'?'getVMaxSize':'getHMaxSize'].createDelegate(this);if(this.useSplitTips){this.split.el.dom.title=config.collapsible?this.collapsibleSplitTip:this.splitTip;}
-if(config.collapsible){this.split.el.on("dblclick",this.collapse,this);}}
-if(typeof config.minSize!="undefined"){this.split.minSize=config.minSize;}
-if(typeof config.maxSize!="undefined"){this.split.maxSize=config.maxSize;}
-if(config.hideWhenEmpty||config.hidden){this.hideSplitter();}}},getHMaxSize:function(){var cmax=this.config.maxSize||10000;var center=this.mgr.getRegion("center");return Math.min(cmax,(this.el.getWidth()+center.getEl().getWidth())-center.getMinWidth());},getVMaxSize:function(){var cmax=this.config.maxSize||10000;var center=this.mgr.getRegion("center");return Math.min(cmax,(this.el.getHeight()+center.getEl().getHeight())-center.getMinHeight());},onSplitMove:function(split,newSize){this.fireEvent("resized",this,newSize);},getSplitBar:function(){return this.split;},hide:function(){this.hideSplitter();Ext.SplitLayoutRegion.superclass.hide.call(this);},hideSplitter:function(){if(this.split){this.split.el.setLocation(-2000,-2000);this.split.el.hide();}},show:function(){if(this.split){this.split.el.show();}
-Ext.SplitLayoutRegion.superclass.show.call(this);},beforeSlide:function(){if(Ext.isGecko){this.bodyEl.clip();if(this.tabs)this.tabs.bodyEl.clip();if(this.activePanel){this.activePanel.getEl().clip();if(this.activePanel.beforeSlide){this.activePanel.beforeSlide();}}}},afterSlide:function(){if(Ext.isGecko){this.bodyEl.unclip();if(this.tabs)this.tabs.bodyEl.unclip();if(this.activePanel){this.activePanel.getEl().unclip();if(this.activePanel.afterSlide){this.activePanel.afterSlide();}}}},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){var st=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={"mouseout":function(e){if(!e.within(this.el,true)){st.delay(500);}},"mouseover":function(e){st.cancel();},scope:this};}
-this.el.on(this.autoHideHd);}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);}},clearMonitor:function(){Ext.get(document).un("click",this.slideInIf,this);},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return;}
-this.isSlid=true;if(this.collapseBtn){this.collapseBtn.hide();}
-this.closeBtnState=this.closeBtn.getStyle('display');this.closeBtn.hide();if(this.stickBtn){this.stickBtn.show();}
-this.el.show();this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.beforeSlide();this.el.setStyle("z-index",10001);this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.get(document).on("click",this.slideInIf,this);this.fireEvent("slideshow",this);},scope:this,block:true});},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");if(this.collapseBtn){this.collapseBtn.show();}
-this.closeBtn.setStyle('display',this.closeBtnState);if(this.stickBtn){this.stickBtn.hide();}
-this.fireEvent("slidehide",this);},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;}
-this.isSlid=false;this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.setLeftTop(-10000,-10000);this.afterSlide();this.afterSlideIn();Ext.callback(cb);},scope:this,block:true});},slideInIf:function(e){if(!e.within(this.el)){this.slideIn();}},animateCollapse:function(){this.beforeSlide();this.el.setStyle("z-index",20000);var anchor=this.getSlideAnchor();this.el.slideOut(anchor,{callback:function(){this.el.setStyle("z-index","");this.collapsedEl.slideIn(anchor,{duration:.3});this.afterSlide();this.el.setLocation(-10000,-10000);this.el.hide();this.fireEvent("collapsed",this);},scope:this,block:true});},animateExpand:function(){this.beforeSlide();this.el.alignTo(this.collapsedEl,this.getCollapseAnchor(),this.getExpandAdj());this.el.setStyle("z-index",20000);this.collapsedEl.hide({duration:.1});this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.el.setStyle("z-index","");this.afterSlide();if(this.split){this.split.el.show();}
-this.fireEvent("invalidated",this);this.fireEvent("expanded",this);},scope:this,block:true});},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function(){return this.anchors[this.position];},getCollapseAnchor:function(){return this.canchors[this.position];},getSlideAnchor:function(){return this.sanchors[this.position];},getAlignAdj:function(){var cm=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break;}},getExpandAdj:function(){var c=this.collapsedEl,cm=this.cmargins;switch(this.position){case"west":return[-(cm.right+c.getWidth()+cm.left),0];break;case"east":return[cm.right+c.getWidth()+cm.left,0];break;case"north":return[0,-(cm.top+cm.bottom+c.getHeight())];break;case"south":return[0,cm.top+cm.bottom+c.getHeight()];break;}}});
-
-Ext.CenterLayoutRegion=function(mgr,config){Ext.CenterLayoutRegion.superclass.constructor.call(this,mgr,config,"center");this.visible=true;this.minWidth=config.minWidth||20;this.minHeight=config.minHeight||20;};Ext.extend(Ext.CenterLayoutRegion,Ext.LayoutRegion,{hide:function(){},show:function(){},getMinWidth:function(){return this.minWidth;},getMinHeight:function(){return this.minHeight;}});Ext.NorthLayoutRegion=function(mgr,config){Ext.NorthLayoutRegion.superclass.constructor.call(this,mgr,config,"north","n-resize");if(this.split){this.split.placement=Ext.SplitBar.TOP;this.split.orientation=Ext.SplitBar.VERTICAL;this.split.el.addClass("x-layout-split-v");}
-var size=config.initialSize||config.height;if(typeof size!="undefined"){this.el.setHeight(size);}};Ext.extend(Ext.NorthLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.VERTICAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){box.height+=this.split.el.getHeight();}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){box.height-=this.split.el.getHeight();this.split.el.setLeft(box.x);this.split.el.setTop(box.y+box.height);this.split.el.setWidth(box.width);}
-if(this.collapsed){this.updateBody(box.width,null);}
-Ext.NorthLayoutRegion.superclass.updateBox.call(this,box);}});Ext.SouthLayoutRegion=function(mgr,config){Ext.SouthLayoutRegion.superclass.constructor.call(this,mgr,config,"south","s-resize");if(this.split){this.split.placement=Ext.SplitBar.BOTTOM;this.split.orientation=Ext.SplitBar.VERTICAL;this.split.el.addClass("x-layout-split-v");}
-var size=config.initialSize||config.height;if(typeof size!="undefined"){this.el.setHeight(size);}};Ext.extend(Ext.SouthLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.VERTICAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){var sh=this.split.el.getHeight();box.height+=sh;box.y-=sh;}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){var sh=this.split.el.getHeight();box.height-=sh;box.y+=sh;this.split.el.setLeft(box.x);this.split.el.setTop(box.y-sh);this.split.el.setWidth(box.width);}
-if(this.collapsed){this.updateBody(box.width,null);}
-Ext.SouthLayoutRegion.superclass.updateBox.call(this,box);}});Ext.EastLayoutRegion=function(mgr,config){Ext.EastLayoutRegion.superclass.constructor.call(this,mgr,config,"east","e-resize");if(this.split){this.split.placement=Ext.SplitBar.RIGHT;this.split.orientation=Ext.SplitBar.HORIZONTAL;this.split.el.addClass("x-layout-split-h");}
-var size=config.initialSize||config.width;if(typeof size!="undefined"){this.el.setWidth(size);}};Ext.extend(Ext.EastLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.HORIZONTAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){var sw=this.split.el.getWidth();box.width+=sw;box.x-=sw;}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){var sw=this.split.el.getWidth();box.width-=sw;this.split.el.setLeft(box.x);this.split.el.setTop(box.y);this.split.el.setHeight(box.height);box.x+=sw;}
-if(this.collapsed){this.updateBody(null,box.height);}
-Ext.EastLayoutRegion.superclass.updateBox.call(this,box);}});Ext.WestLayoutRegion=function(mgr,config){Ext.WestLayoutRegion.superclass.constructor.call(this,mgr,config,"west","w-resize");if(this.split){this.split.placement=Ext.SplitBar.LEFT;this.split.orientation=Ext.SplitBar.HORIZONTAL;this.split.el.addClass("x-layout-split-h");}
-var size=config.initialSize||config.width;if(typeof size!="undefined"){this.el.setWidth(size);}};Ext.extend(Ext.WestLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.HORIZONTAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){box.width+=this.split.el.getWidth();}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){var sw=this.split.el.getWidth();box.width-=sw;this.split.el.setLeft(box.x+box.width);this.split.el.setTop(box.y);this.split.el.setHeight(box.height);}
-if(this.collapsed){this.updateBody(null,box.height);}
-Ext.WestLayoutRegion.superclass.updateBox.call(this,box);}});
-
-Ext.LayoutStateManager=function(layout){this.state={north:{},south:{},east:{},west:{}};};Ext.LayoutStateManager.prototype={init:function(layout,provider){this.provider=provider;var state=provider.get(layout.id+"-layout-state");if(state){var wasUpdating=layout.isUpdating();if(!wasUpdating){layout.beginUpdate();}
-for(var key in state){if(typeof state[key]!="function"){var rstate=state[key];var r=layout.getRegion(key);if(r&&rstate){if(rstate.size){r.resizeTo(rstate.size);}
-if(rstate.collapsed==true){r.collapse(true);}else{r.expand(null,true);}}}}
-if(!wasUpdating){layout.endUpdate();}
-this.state=state;}
-this.layout=layout;layout.on("regionresized",this.onRegionResized,this);layout.on("regioncollapsed",this.onRegionCollapsed,this);layout.on("regionexpanded",this.onRegionExpanded,this);},storeState:function(){this.provider.set(this.layout.id+"-layout-state",this.state);},onRegionResized:function(region,newSize){this.state[region.getPosition()].size=newSize;this.storeState();},onRegionCollapsed:function(region){this.state[region.getPosition()].collapsed=true;this.storeState();},onRegionExpanded:function(region){this.state[region.getPosition()].collapsed=false;this.storeState();}};
-
-Ext.ContentPanel=function(el,config,content){if(el.autoCreate){config=el;el=Ext.id();}
-this.el=Ext.get(el);if(!this.el&&config&&config.autoCreate){if(typeof config.autoCreate=="object"){if(!config.autoCreate.id){config.autoCreate.id=config.id||el;}
-this.el=Ext.DomHelper.append(document.body,config.autoCreate,true);}else{this.el=Ext.DomHelper.append(document.body,{tag:"div",cls:"x-layout-inactive-content",id:config.id||el},true);}}
-this.closable=false;this.loaded=false;this.active=false;if(typeof config=="string"){this.title=config;}else{Ext.apply(this,config);}
-if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl,true);}else{this.resizeEl=this.el;}
-this.addEvents({"activate":true,"deactivate":true,"resize":true});if(this.autoScroll){this.resizeEl.setStyle("overflow","auto");}
-content=content||this.content;if(content){this.setContent(content);}
-if(config&&config.url){this.setUrl(this.url,this.params,this.loadOnce);}
-Ext.ContentPanel.superclass.constructor.call(this);};Ext.extend(Ext.ContentPanel,Ext.util.Observable,{tabTip:'',setRegion:function(region){this.region=region;if(region){this.el.replaceClass("x-layout-inactive-content","x-layout-active-content");}else{this.el.replaceClass("x-layout-active-content","x-layout-inactive-content");}},getToolbar:function(){return this.toolbar;},setActiveState:function(active){this.active=active;if(!active){this.fireEvent("deactivate",this);}else{this.fireEvent("activate",this);}},setContent:function(content,loadScripts){this.el.update(content,loadScripts);},ignoreResize:function(w,h){if(this.lastSize&&this.lastSize.width==w&&this.lastSize.height==h){return true;}else{this.lastSize={width:w,height:h};return false;}},getUpdateManager:function(){return this.el.getUpdateManager();},load:function(){var um=this.el.getUpdateManager();um.update.apply(um,arguments);return this;},setUrl:function(url,params,loadOnce){if(this.refreshDelegate){this.removeListener("activate",this.refreshDelegate);}
-this.refreshDelegate=this._handleRefresh.createDelegate(this,[url,params,loadOnce]);this.on("activate",this.refreshDelegate);return this.el.getUpdateManager();},_handleRefresh:function(url,params,loadOnce){if(!loadOnce||!this.loaded){var updater=this.el.getUpdateManager();updater.update(url,params,this._setLoaded.createDelegate(this));}},_setLoaded:function(){this.loaded=true;},getId:function(){return this.el.id;},getEl:function(){return this.el;},adjustForComponents:function(width,height){if(this.resizeEl!=this.el){width-=this.el.getFrameWidth('lr');height-=this.el.getFrameWidth('tb');}
-if(this.toolbar){var te=this.toolbar.getEl();height-=te.getHeight();te.setWidth(width);}
-if(this.adjustments){width+=this.adjustments[0];height+=this.adjustments[1];}
-return{"width":width,"height":height};},setSize:function(width,height){if(this.fitToFrame&&!this.ignoreResize(width,height)){if(this.fitContainer&&this.resizeEl!=this.el){this.el.setSize(width,height);}
-var size=this.adjustForComponents(width,height);this.resizeEl.setSize(this.autoWidth?"auto":size.width,this.autoHeight?"auto":size.height);this.fireEvent('resize',this,size.width,size.height);}},getTitle:function(){return this.title;},setTitle:function(title){this.title=title;if(this.region){this.region.updatePanelTitle(this,title);}},isClosable:function(){return this.closable;},beforeSlide:function(){this.el.clip();this.resizeEl.clip();},afterSlide:function(){this.el.unclip();this.resizeEl.unclip();},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();}},destroy:function(){this.el.removeAllListeners();var tempEl=document.createElement("span");tempEl.appendChild(this.el.dom);tempEl.innerHTML="";this.el.remove();this.el=null;}});Ext.GridPanel=function(grid,config){this.wrapper=Ext.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(grid.getGridEl().dom);Ext.GridPanel.superclass.constructor.call(this,this.wrapper,config);if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);}
-grid.monitorWindowResize=false;grid.autoHeight=false;grid.autoWidth=false;this.grid=grid;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel");};Ext.extend(Ext.GridPanel,Ext.ContentPanel,{getId:function(){return this.grid.id;},getGrid:function(){return this.grid;},setSize:function(width,height){if(!this.ignoreResize(width,height)){var grid=this.grid;var size=this.adjustForComponents(width,height);grid.getGridEl().setSize(size.width,size.height);grid.autoSize();}},beforeSlide:function(){this.grid.getView().scroller.clip();},afterSlide:function(){this.grid.getView().scroller.unclip();},destroy:function(){this.grid.destroy();delete this.grid;Ext.GridPanel.superclass.destroy.call(this);}});Ext.NestedLayoutPanel=function(layout,config){Ext.NestedLayoutPanel.superclass.constructor.call(this,layout.getEl(),config);layout.monitorWindowResize=false;this.layout=layout;this.layout.getEl().addClass("x-layout-nested-layout");};Ext.extend(Ext.NestedLayoutPanel,Ext.ContentPanel,{setSize:function(width,height){if(!this.ignoreResize(width,height)){var size=this.adjustForComponents(width,height);var el=this.layout.getEl();el.setSize(size.width,size.height);var touch=el.dom.offsetWidth;this.layout.layout();if(Ext.isIE&&!this.initialized){this.initialized=true;this.layout.layout();}}},getLayout:function(){return this.layout;}});Ext.ScrollPanel=function(el,config,content){config=config||{};config.fitToFrame=true;Ext.ScrollPanel.superclass.constructor.call(this,el,config,content);this.el.dom.style.overflow="hidden";var wrap=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");this.el.on("mousewheel",this.onWheel,this);var up=wrap.createChild({cls:"x-scroller-up",html:"&#160;"},this.el.dom);var down=wrap.createChild({cls:"x-scroller-down",html:"&#160;"});up.unselectable();down.unselectable();up.on("click",this.scrollUp,this);down.on("click",this.scrollDown,this);up.addClassOnOver("x-scroller-btn-over");down.addClassOnOver("x-scroller-btn-over");up.addClassOnClick("x-scroller-btn-click");down.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(up.getHeight()+down.getHeight())];this.resizeEl=this.el;this.el=wrap;this.up=up;this.down=down;};Ext.extend(Ext.ScrollPanel,Ext.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this});},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this});},afterScroll:function(){var el=this.resizeEl;var t=el.dom.scrollTop,h=el.dom.scrollHeight,ch=el.dom.clientHeight;this.up[t==0?"addClass":"removeClass"]("x-scroller-btn-disabled");this.down[h-t<=ch?"addClass":"removeClass"]("x-scroller-btn-disabled");},setSize:function(){Ext.ScrollPanel.superclass.setSize.apply(this,arguments);this.afterScroll();},onWheel:function(e){var d=e.getWheelDelta();this.resizeEl.dom.scrollTop-=(d*this.wheelIncrement);this.afterScroll();e.stopEvent();},setContent:function(content,loadScripts){this.resizeEl.update(content,loadScripts);}});
-
-Ext.ReaderLayout=function(config,renderTo){var c=config||{size:{}};Ext.ReaderLayout.superclass.constructor.call(this,renderTo||document.body,{north:c.north!==false?Ext.apply({split:false,initialSize:32,titlebar:false},c.north):false,west:c.west!==false?Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}},c.west):false,east:c.east!==false?Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}},c.east):false,center:Ext.apply({tabPosition:'top',autoScroll:false,closeOnTab:true,titlebar:false,margins:{left:c.west!==false?0:5,right:c.east!==false?0:5,bottom:5,top:2}},c.center)});this.el.addClass('x-reader');this.beginUpdate();var inner=new Ext.BorderLayout(Ext.get(document.body).createChild(),{south:c.preview!==false?Ext.apply({split:true,initialSize:200,minSize:100,autoScroll:true,collapsible:true,titlebar:true,cmargins:{top:5,left:0,right:0,bottom:0}},c.preview):false,center:Ext.apply({autoScroll:false,titlebar:false,minHeight:200},c.listView)});this.add('center',new Ext.NestedLayoutPanel(inner,Ext.apply({title:c.mainTitle||'',tabTip:''},c.innerPanelCfg)));this.endUpdate();this.regions.preview=inner.getRegion('south');this.regions.listView=inner.getRegion('center');};Ext.extend(Ext.ReaderLayout,Ext.BorderLayout);
-
-Ext.grid.Grid=function(container,config){this.container=Ext.get(container);this.container.update("");this.container.setStyle("overflow","hidden");this.container.addClass('x-grid-container');this.id=this.container.id;Ext.apply(this,config);if(this.ds){this.dataSource=this.ds;delete this.ds;}
-if(this.cm){this.colModel=this.cm;delete this.cm;}
-if(this.sm){this.selModel=this.sm;delete this.sm;}
-if(this.width){this.container.setWidth(this.width);}
-if(this.height){this.container.setHeight(this.height);}
-this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,render:true});Ext.grid.Grid.superclass.constructor.call(this);};Ext.extend(Ext.grid.Grid,Ext.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,rendered:false,render:function(){var c=this.container;if((!c.dom.offsetHeight||c.dom.offsetHeight<20)||c.getStyle("height")=="auto"){this.autoHeight=true;}
-var view=this.getView();view.init(this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);view.render();if(this.loadMask){this.loadMask=new Ext.LoadMask(this.container,Ext.apply({store:this.dataSource},this.loadMask));}
-this.rendered=true;this.fireEvent('render',this);return this;},reconfigure:function(dataSource,colModel){if(this.loadMask){this.loadMask.destroy();this.loadMask=new Ext.LoadMask(this.container,Ext.apply({store:dataSource},this.loadMask));}
-this.view.bind(dataSource,colModel);this.dataSource=dataSource;this.colModel=colModel;this.view.refresh(true);},onKeyDown:function(e){this.fireEvent("keydown",e);},destroy:function(removeEl,keepListeners){if(this.loadMask){this.loadMask.destroy();}
-var c=this.container;c.removeAllListeners();this.view.destroy();this.colModel.purgeListeners();if(!keepListeners){this.purgeListeners();}
-c.update("");if(removeEl===true){c.remove();}},processEvent:function(name,e){this.fireEvent(name,e);var t=e.getTarget();var v=this.view;var header=v.findHeaderIndex(t);if(header!==false){this.fireEvent("header"+name,this,header,e);}else{var row=v.findRowIndex(t);var cell=v.findCellIndex(t);if(row!==false){this.fireEvent("row"+name,this,row,e);if(cell!==false){this.fireEvent("cell"+name,this,row,cell,e);}}}},onClick:function(e){this.processEvent("click",e);},onContextMenu:function(e,t){this.processEvent("contextmenu",e);},onDblClick:function(e){this.processEvent("dblclick",e);},walkCells:function(row,col,step,fn,scope){var cm=this.colModel,clen=cm.getColumnCount();var ds=this.dataSource,rlen=ds.getCount(),first=true;if(step<0){if(col<0){row--;first=false;}
-while(row>=0){if(!first){col=clen-1;}
-first=false;while(col>=0){if(fn.call(scope||this,row,col,cm)===true){return[row,col];}
-col--;}
-row--;}}else{if(col>=clen){row++;first=false;}
-while(row<rlen){if(!first){col=0;}
-first=false;while(col<clen){if(fn.call(scope||this,row,col,cm)===true){return[row,col];}
-col++;}
-row++;}}
-return null;},getSelections:function(){return this.selModel.getSelections();},autoSize:function(){if(this.rendered){this.view.layout();if(this.view.adjustForScroll){this.view.adjustForScroll();}}},getGridEl:function(){return this.container;},stopEditing:function(){},getSelectionModel:function(){if(!this.selModel){this.selModel=new Ext.grid.RowSelectionModel();}
-return this.selModel;},getDataSource:function(){return this.dataSource;},getColumnModel:function(){return this.colModel;},getView:function(){if(!this.view){this.view=new Ext.grid.GridView(this.viewConfig);}
-return this.view;},getDragDropText:function(){var count=this.selModel.getCount();return String.format(this.ddText,count,count==1?'':'s');}});Ext.grid.Grid.prototype.ddText="{0} selected row{1}";
-
-Ext.grid.AbstractGridView=function(){this.grid=null;this.events={"beforerowremoved":true,"beforerowsinserted":true,"beforerefresh":true,"rowremoved":true,"rowsinserted":true,"rowupdated":true,"refresh":true};Ext.grid.AbstractGridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.AbstractGridView,Ext.util.Observable,{rowClass:"x-grid-row",cellClass:"x-grid-cell",tdClass:"x-grid-td",hdClass:"x-grid-hd",splitClass:"x-grid-hd-split",init:function(grid){this.grid=grid;var cid=this.grid.getGridEl().id;this.colSelector="#"+cid+" ."+this.cellClass+"-";this.tdSelector="#"+cid+" ."+this.tdClass+"-";this.hdSelector="#"+cid+" ."+this.hdClass+"-";this.splitSelector="#"+cid+" ."+this.splitClass+"-";},getColumnRenderers:function(){var renderers=[];var cm=this.grid.colModel;var colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){renderers[i]=cm.getRenderer(i);}
-return renderers;},getColumnIds:function(){var ids=[];var cm=this.grid.colModel;var colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){ids[i]=cm.getColumnId(i);}
-return ids;},getDataIndexes:function(){if(!this.indexMap){this.indexMap=this.buildIndexMap();}
-return this.indexMap.colToData;},getColumnIndexByDataIndex:function(dataIndex){if(!this.indexMap){this.indexMap=this.buildIndexMap();}
-return this.indexMap.dataToCol[dataIndex];},setCSSStyle:function(colIndex,name,value){var selector="#"+this.grid.id+" .x-grid-col-"+colIndex;Ext.util.CSS.updateRule(selector,name,value);},generateRules:function(cm){var ruleBuf=[];for(var i=0,len=cm.getColumnCount();i<len;i++){var cid=cm.getColumnId(i);ruleBuf.push(this.colSelector,cid," {\n",cm.config[i].css,"}\n",this.tdSelector,cid," {\n}\n",this.hdSelector,cid," {\n}\n",this.splitSelector,cid," {\n}\n");}
-return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));}});
-
-Ext.grid.GridView=function(config){Ext.grid.GridView.superclass.constructor.call(this);this.el=null;Ext.apply(this,config);};Ext.extend(Ext.grid.GridView,Ext.grid.AbstractGridView,{rowClass:"x-grid-row",cellClass:"x-grid-col",tdClass:"x-grid-td",hdClass:"x-grid-hd",splitClass:"x-grid-split",sortClasses:["sort-asc","sort-desc"],enableMoveAnim:false,hlColor:"C3DAF9",dh:Ext.DomHelper,fly:Ext.Element.fly,css:Ext.util.CSS,borderWidth:1,splitOffset:3,scrollIncrement:22,cellRE:/(?:.*?)x-grid-(?:hd|cell|csplit)-(?:[\d]+)-([\d]+)(?:.*?)/,findRE:/\s?(?:x-grid-hd|x-grid-col|x-grid-csplit)\s/,bind:function(ds,cm){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange);this.ds.un("add",this.onAdd);this.ds.un("remove",this.onRemove);this.ds.un("update",this.onUpdate);this.ds.un("clear",this.onClear);}
-if(ds){ds.on("load",this.onLoad,this);ds.on("datachanged",this.onDataChange,this);ds.on("add",this.onAdd,this);ds.on("remove",this.onRemove,this);ds.on("update",this.onUpdate,this);ds.on("clear",this.onClear,this);}
-this.ds=ds;if(this.cm){this.cm.un("widthchange",this.onColWidthChange,this);this.cm.un("headerchange",this.onHeaderChange,this);this.cm.un("hiddenchange",this.onHiddenChange,this);this.cm.un("columnmoved",this.onColumnMove,this);this.cm.un("columnlockchange",this.onColumnLock,this);}
-if(cm){this.generateRules(cm);cm.on("widthchange",this.onColWidthChange,this);cm.on("headerchange",this.onHeaderChange,this);cm.on("hiddenchange",this.onHiddenChange,this);cm.on("columnmoved",this.onColumnMove,this);cm.on("columnlockchange",this.onColumnLock,this);}
-this.cm=cm;},init:function(grid){Ext.grid.GridView.superclass.init.call(this,grid);this.bind(grid.dataSource,grid.colModel);grid.on("headerclick",this.handleHeaderClick,this);if(grid.trackMouseOver){grid.on("mouseover",this.onRowOver,this);grid.on("mouseout",this.onRowOut,this);}
-grid.cancelTextSelection=function(){};this.gridId=grid.id;var tpls=this.templates||{};if(!tpls.master){tpls.master=new Ext.Template('<div class="x-grid" hidefocus="true">','<div class="x-grid-topbar"></div>','<div class="x-grid-scroller"><div></div></div>','<div class="x-grid-locked">','<div class="x-grid-header">{lockedHeader}</div>','<div class="x-grid-body">{lockedBody}</div>',"</div>",'<div class="x-grid-viewport">','<div class="x-grid-header">{header}</div>','<div class="x-grid-body">{body}</div>',"</div>",'<div class="x-grid-bottombar"></div>','<a href="#" class="x-grid-focus" tabIndex="-1"></a>','<div class="x-grid-resize-proxy">&#160;</div>',"</div>");tpls.master.disableformats=true;}
-if(!tpls.header){tpls.header=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0">','<tbody><tr class="x-grid-hd-row">{cells}</tr></tbody>',"</table>{splits}");tpls.header.disableformats=true;}
-tpls.header.compile();if(!tpls.hcell){tpls.hcell=new Ext.Template('<td class="x-grid-hd x-grid-td-{id} {cellId}"><div title="{title}" class="x-grid-hd-inner x-grid-hd-{id}">','<div class="x-grid-hd-text" unselectable="on">{value}<img class="x-grid-sort-icon" src="',Ext.BLANK_IMAGE_URL,'" /></div>',"</div></td>");tpls.hcell.disableFormats=true;}
-tpls.hcell.compile();if(!tpls.hsplit){tpls.hsplit=new Ext.Template('<div class="x-grid-split {splitId} x-grid-split-{id}" style="{style}" unselectable="on">&#160;</div>');tpls.hsplit.disableFormats=true;}
-tpls.hsplit.compile();if(!tpls.body){tpls.body=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0">',"<tbody>{rows}</tbody>","</table>");tpls.body.disableFormats=true;}
-tpls.body.compile();if(!tpls.row){tpls.row=new Ext.Template('<tr class="x-grid-row {alt}">{cells}</tr>');tpls.row.disableFormats=true;}
-tpls.row.compile();if(!tpls.cell){tpls.cell=new Ext.Template('<td class="x-grid-col x-grid-td-{id} {cellId} {css}" tabIndex="0">','<div class="x-grid-col-{id} x-grid-cell-inner"><div class="x-grid-cell-text" unselectable="on" {attr}>{value}</div></div>',"</td>");tpls.cell.disableFormats=true;}
-tpls.cell.compile();this.templates=tpls;},onColWidthChange:function(){this.updateColumns.apply(this,arguments);},onHeaderChange:function(){this.updateHeaders.apply(this,arguments);},onHiddenChange:function(){this.handleHiddenChange.apply(this,arguments);},onColumnMove:function(){this.handleColumnMove.apply(this,arguments);},onColumnLock:function(){this.handleLockChange.apply(this,arguments);},onDataChange:function(){this.refresh();this.updateHeaderSortState();},onClear:function(){this.refresh();},onUpdate:function(ds,record){this.refreshRow(record);},refreshRow:function(record){var ds=this.ds,index;if(typeof record=='number'){index=record;record=ds.getAt(index);}else{index=ds.indexOf(record);}
-var rows=this.getRowComposite(index);var cls=[];this.insertRows(ds,index,index,true);this.onRemove(ds,record,index+1,true);this.syncRowHeights(index,index);this.layout();this.fireEvent("rowupdated",this,index,record);},onAdd:function(ds,records,index){this.insertRows(ds,index,index+(records.length-1));},onRemove:function(ds,record,index,isUpdate){if(isUpdate!==true){this.fireEvent("beforerowremoved",this,index,record);}
-var bt=this.getBodyTable(),lt=this.getLockedTable();if(bt.rows[index]){bt.firstChild.removeChild(bt.rows[index]);}
-if(lt.rows[index]){lt.firstChild.removeChild(lt.rows[index]);}
-if(isUpdate!==true){this.stripeRows(index);this.syncRowHeights(index,index);this.layout();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},scrollToTop:function(){if(this.scroller){this.scroller.dom.scrollTop=0;this.syncScroll();}},getHeaderPanel:function(doShow){if(doShow){this.headerPanel.show();}
-return this.headerPanel;},getFooterPanel:function(doShow){if(doShow){this.footerPanel.show();}
-return this.footerPanel;},initElements:function(){var E=Ext.Element;var el=this.grid.getGridEl().dom.firstChild;var cs=el.childNodes;this.el=new E(el);this.headerPanel=new E(el.firstChild);this.headerPanel.enableDisplayMode("block");this.scroller=new E(cs[1]);this.scrollSizer=new E(this.scroller.dom.firstChild);this.lockedWrap=new E(cs[2]);this.lockedHd=new E(this.lockedWrap.dom.firstChild);this.lockedBody=new E(this.lockedWrap.dom.childNodes[1]);this.mainWrap=new E(cs[3]);this.mainHd=new E(this.mainWrap.dom.firstChild);this.mainBody=new E(this.mainWrap.dom.childNodes[1]);this.footerPanel=new E(cs[4]);this.footerPanel.enableDisplayMode("block");this.focusEl=new E(cs[5]);this.focusEl.swallowEvent("click",true);this.resizeProxy=new E(cs[6]);this.headerSelector=String.format('#{0} td.x-grid-hd, #{1} td.x-grid-hd',this.lockedHd.id,this.mainHd.id);this.splitterSelector=String.format('#{0} div.x-grid-split, #{1} div.x-grid-split',this.lockedHd.id,this.mainHd.id);},getHeaderCell:function(index){return Ext.DomQuery.select(this.headerSelector)[index];},getHeaderCellMeasure:function(index){return this.getHeaderCell(index).firstChild;},getHeaderCellText:function(index){return this.getHeaderCell(index).firstChild.firstChild;},getLockedTable:function(){return this.lockedBody.dom.firstChild;},getBodyTable:function(){return this.mainBody.dom.firstChild;},getLockedRow:function(index){return this.getLockedTable().rows[index];},getRow:function(index){return this.getBodyTable().rows[index];},getRowComposite:function(index){if(!this.rowEl){this.rowEl=new Ext.CompositeElementLite();}
-var els=[],lrow,mrow;if(lrow=this.getLockedRow(index)){els.push(lrow);}
-if(mrow=this.getRow(index)){els.push(mrow);}
-this.rowEl.elements=els;return this.rowEl;},getCell:function(rowIndex,colIndex){var locked=this.cm.getLockedCount();var source;if(colIndex<locked){source=this.lockedBody.dom.firstChild;}else{source=this.mainBody.dom.firstChild;colIndex-=locked;}
-return source.rows[rowIndex].childNodes[colIndex];},getCellText:function(rowIndex,colIndex){return this.getCell(rowIndex,colIndex).firstChild.firstChild;},getCellBox:function(cell){var b=this.fly(cell).getBox();if(Ext.isOpera){b.y=cell.offsetTop+this.mainBody.getY();}
-return b;},getCellIndex:function(cell){var id=String(cell.className).match(this.cellRE);if(id){return parseInt(id[1],10);}
-return 0;},findHeaderIndex:function(n){var r=Ext.fly(n).findParent("td."+this.hdClass,6);return r?this.getCellIndex(r):false;},findHeaderCell:function(n){var r=Ext.fly(n).findParent("td."+this.hdClass,6);return r?r:false;},findRowIndex:function(n){if(!n){return false;}
-var r=Ext.fly(n).findParent("tr."+this.rowClass,6);return r?r.rowIndex:false;},findCellIndex:function(node){var stop=this.el.dom;while(node&&node!=stop){if(this.findRE.test(node.className)){return this.getCellIndex(node);}
-node=node.parentNode;}
-return false;},getColumnId:function(index){return this.cm.getColumnId(index);},getSplitters:function(){if(this.splitterSelector){return Ext.DomQuery.select(this.splitterSelector);}else{return null;}},getSplitter:function(index){return this.getSplitters()[index];},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.getRowComposite(row).addClass("x-grid-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&row!==this.findRowIndex(e.getRelatedTarget())){this.getRowComposite(row).removeClass("x-grid-row-over");}},renderHeaders:function(){var cm=this.cm;var ct=this.templates.hcell,ht=this.templates.header,st=this.templates.hsplit;var cb=[],lb=[],sb=[],lsb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.cellId="x-grid-hd-0-"+i;p.splitId="x-grid-csplit-0-"+i;p.id=cm.getColumnId(i);p.title=cm.getColumnTooltip(i)||"";p.value=cm.getColumnHeader(i)||"";p.style=(this.grid.enableColumnResize===false||!cm.isResizable(i)||cm.isFixed(i))?'cursor:default':'';if(!cm.isLocked(i)){cb[cb.length]=ct.apply(p);sb[sb.length]=st.apply(p);}else{lb[lb.length]=ct.apply(p);lsb[lsb.length]=st.apply(p);}}
-return[ht.apply({cells:lb.join(""),splits:lsb.join("")}),ht.apply({cells:cb.join(""),splits:sb.join("")})];},updateHeaders:function(){var html=this.renderHeaders();this.lockedHd.update(html[0]);this.mainHd.update(html[1]);},focusRow:function(row){var x=this.scroller.dom.scrollLeft;this.focusCell(row,0,false);this.scroller.dom.scrollLeft=x;},focusCell:function(row,col,hscroll){var el=this.ensureVisible(row,col,hscroll);this.focusEl.alignTo(el,"tl-tl");if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},ensureVisible:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
-if(row<0&&row>=this.ds.getCount()){return;}
-col=(col!==undefined?col:0);var cm=this.grid.colModel;while(cm.isHidden(col)){col++;}
-var el=this.getCell(row,col);if(!el){return;}
-var c=this.scroller.dom;var ctop=parseInt(el.offsetTop,10);var cleft=parseInt(el.offsetLeft,10);var cbot=ctop+el.offsetHeight;var cright=cleft+el.offsetWidth;var ch=c.clientHeight-this.mainHd.dom.offsetHeight;var stop=parseInt(c.scrollTop,10);var sleft=parseInt(c.scrollLeft,10);var sbot=stop+ch;var sright=sleft+c.clientWidth;if(ctop<stop){c.scrollTop=ctop;}else if(cbot>sbot){c.scrollTop=cbot-ch;}
-if(hscroll!==false){if(cleft<sleft){c.scrollLeft=cleft;}else if(cright>sright){c.scrollLeft=cright-c.clientWidth;}}
-return el;},updateColumns:function(){this.grid.stopEditing();var cm=this.grid.colModel,colIds=this.getColumnIds();var pos=0;for(var i=0,len=cm.getColumnCount();i<len;i++){var w=cm.getColumnWidth(i);this.css.updateRule(this.colSelector+colIds[i],"width",(w-this.borderWidth)+"px");this.css.updateRule(this.hdSelector+colIds[i],"width",(w-this.borderWidth)+"px");}
-this.updateSplitters();},generateRules:function(cm){var ruleBuf=[];for(var i=0,len=cm.getColumnCount();i<len;i++){var cid=cm.getColumnId(i);var align='';if(cm.config[i].align){align='text-align:'+cm.config[i].align+';';}
-var hidden='';if(cm.isHidden(i)){hidden='display:none;';}
-var width="width:"+(cm.getColumnWidth(i)-this.borderWidth)+"px;";ruleBuf.push(this.colSelector,cid," {\n",cm.config[i].css,align,width,"\n}\n",this.hdSelector,cid," {\n",align,width,"}\n",this.tdSelector,cid," {\n",hidden,"\n}\n",this.splitSelector,cid," {\n",hidden,"\n}\n");}
-return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));},updateSplitters:function(){var cm=this.cm,s=this.getSplitters();if(s){var pos=0,locked=true;for(var i=0,len=cm.getColumnCount();i<len;i++){if(cm.isHidden(i))continue;var w=cm.getColumnWidth(i);if(!cm.isLocked(i)&&locked){pos=0;locked=false;}
-pos+=w;s[i].style.left=(pos-this.splitOffset)+"px";}}},handleHiddenChange:function(colModel,colIndex,hidden){if(hidden){this.hideColumn(colIndex);}else{this.unhideColumn(colIndex);}},hideColumn:function(colIndex){var cid=this.getColumnId(colIndex);this.css.updateRule(this.tdSelector+cid,"display","none");this.css.updateRule(this.splitSelector+cid,"display","none");if(Ext.isSafari){this.updateHeaders();}
-this.updateSplitters();this.layout();},unhideColumn:function(colIndex){var cid=this.getColumnId(colIndex);this.css.updateRule(this.tdSelector+cid,"display","");this.css.updateRule(this.splitSelector+cid,"display","");if(Ext.isSafari){this.updateHeaders();}
-this.updateSplitters();this.layout();},insertRows:function(dm,firstRow,lastRow,isUpdate){if(firstRow==0&&lastRow==dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
-var s=this.getScrollState();var markup=this.renderRows(firstRow,lastRow);this.bufferRows(markup[0],this.getLockedTable(),firstRow);this.bufferRows(markup[1],this.getBodyTable(),firstRow);this.restoreScroll(s);if(!isUpdate){this.fireEvent("rowsinserted",this,firstRow,lastRow);this.syncRowHeights(firstRow,lastRow);this.stripeRows(firstRow);this.layout();}}},bufferRows:function(markup,target,index){var before=null,trows=target.rows,tbody=target.tBodies[0];if(index<trows.length){before=trows[index];}
-var b=document.createElement("div");b.innerHTML="<table><tbody>"+markup+"</tbody></table>";var rows=b.firstChild.rows;for(var i=0,len=rows.length;i<len;i++){if(before){tbody.insertBefore(rows[0],before);}else{tbody.appendChild(rows[0]);}}
-b.innerHTML="";b=null;},deleteRows:function(dm,firstRow,lastRow){if(dm.getRowCount()<1){this.fireEvent("beforerefresh",this);this.mainBody.update("");this.lockedBody.update("");this.fireEvent("refresh",this);}else{this.fireEvent("beforerowsdeleted",this,firstRow,lastRow);var bt=this.getBodyTable();var tbody=bt.firstChild;var rows=bt.rows;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){tbody.removeChild(rows[firstRow]);}
-this.stripeRows(firstRow);this.fireEvent("rowsdeleted",this,firstRow,lastRow);}},updateRows:function(dataSource,firstRow,lastRow){var s=this.getScrollState();this.refresh();this.restoreScroll(s);},handleSort:function(dataSource,sortColumnIndex,sortDir,noRefresh){if(!noRefresh){this.refresh();}
-this.updateHeaderSortState();},getScrollState:function(){var sb=this.scroller.dom;return{left:sb.scrollLeft,top:sb.scrollTop};},stripeRows:function(startRow){if(!this.grid.stripeRows||this.ds.getCount()<1){return;}
-startRow=startRow||0;var rows=this.getBodyTable().rows;var lrows=this.getLockedTable().rows;var cls=' x-grid-row-alt ';for(var i=startRow,len=rows.length;i<len;i++){var row=rows[i],lrow=lrows[i];var isAlt=((i+1)%2==0);var hasAlt=(' '+row.className+' ').indexOf(cls)!=-1;if(isAlt==hasAlt){continue;}
-if(isAlt){row.className+=" x-grid-row-alt";}else{row.className=row.className.replace("x-grid-row-alt","");}
-if(lrow){lrow.className=row.className;}}},restoreScroll:function(state){var sb=this.scroller.dom;sb.scrollLeft=state.left;sb.scrollTop=state.top;this.syncScroll();},syncScroll:function(){var sb=this.scroller.dom;var sh=this.mainHd.dom;var bs=this.mainBody.dom;var lv=this.lockedBody.dom;sh.scrollLeft=bs.scrollLeft=sb.scrollLeft;lv.scrollTop=bs.scrollTop=sb.scrollTop;},handleScroll:function(e){this.syncScroll();var sb=this.scroller.dom;this.grid.fireEvent("bodyscroll",sb.scrollLeft,sb.scrollTop);e.stopEvent();},handleWheel:function(e){var d=e.getWheelDelta();this.scroller.dom.scrollTop-=d*22;this.lockedBody.dom.scrollTop=this.mainBody.dom.scrollTop=this.scroller.dom.scrollTop;e.stopEvent();},renderRows:function(startRow,endRow){var g=this.grid,cm=g.colModel,ds=g.dataSource,stripe=g.stripeRows;var colCount=cm.getColumnCount();if(ds.getCount()<1){return["",""];}
-var cs=[];for(var i=0;i<colCount;i++){var name=cm.getDataIndex(i);cs[i]={name:typeof name=='undefined'?ds.fields.get(i).name:name,renderer:cm.getRenderer(i),id:cm.getColumnId(i),locked:cm.isLocked(i)};}
-startRow=startRow||0;endRow=typeof endRow=="undefined"?ds.getCount()-1:endRow;var rs=ds.getRange(startRow,endRow);return this.doRender(cs,rs,ds,startRow,colCount,stripe);},doRender:Ext.isGecko?function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row;var buf="",lbuf="",cb,lcb,c,p={},rp={},r,rowIndex;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb="";lcb="";rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.cellId="x-grid-cell-"+rowIndex+"-"+i;p.id=c.id;p.css=p.attr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=p.css?' x-grid-dirty-cell':'x-grid-dirty-cell';}
-var markup=ct.apply(p);if(!c.locked){cb+=markup;}else{lcb+=markup;}}
-var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid-row-alt";}
-if(r.dirty){alt[1]=" x-grid-dirty-row";}
-rp.cells=lcb;if(this.getRowClass){alt[2]=this.getRowClass(r,rowIndex);}
-rp.alt=alt.join(" ");lbuf+=rt.apply(rp);rp.cells=cb;buf+=rt.apply(rp);}
-return[lbuf,buf];}:function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row;var buf=[],lbuf=[],cb,lcb,c,p={},rp={},r,rowIndex;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb=[];lcb=[];rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.cellId="x-grid-cell-"+rowIndex+"-"+i;p.id=c.id;p.css=p.attr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=p.css?' x-grid-dirty-cell':'x-grid-dirty-cell';}
-var markup=ct.apply(p);if(!c.locked){cb[cb.length]=markup;}else{lcb[lcb.length]=markup;}}
-var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid-row-alt";}
-if(r.dirty){alt[1]=" x-grid-dirty-row";}
-rp.cells=lcb;if(this.getRowClass){alt[2]=this.getRowClass(r,rowIndex);}
-rp.alt=alt.join(" ");rp.cells=lcb.join("");lbuf[lbuf.length]=rt.apply(rp);rp.cells=cb.join("");buf[buf.length]=rt.apply(rp);}
-return[lbuf.join(""),buf.join("")];},renderBody:function(){var markup=this.renderRows();var bt=this.templates.body;return[bt.apply({rows:markup[0]}),bt.apply({rows:markup[1]})];},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing();var result=this.renderBody();this.lockedBody.update(result[0]);this.mainBody.update(result[1]);if(headersToo===true){this.updateHeaders();this.updateColumns();this.updateSplitters();this.updateHeaderSortState();}
-this.syncRowHeights();this.layout();this.fireEvent("refresh",this);},handleColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},afterMove:function(colIndex){if(this.enableMoveAnim&&Ext.enableFx){this.fly(this.getHeaderCell(colIndex).firstChild).highlight(this.hlColor);}},updateCell:function(dm,rowIndex,dataIndex){var colIndex=this.getColumnIndexByDataIndex(dataIndex);if(typeof colIndex=="undefined"){return;}
-var cm=this.grid.colModel;var cell=this.getCell(rowIndex,colIndex);var cellText=this.getCellText(rowIndex,colIndex);var p={cellId:"x-grid-cell-"+rowIndex+"-"+colIndex,id:cm.getColumnId(colIndex),css:colIndex==cm.getColumnCount()-1?"x-grid-col-last":""};var renderer=cm.getRenderer(colIndex);var val=renderer(dm.getValueAt(rowIndex,dataIndex),p,rowIndex,colIndex,dm);if(typeof val=="undefined"||val==="")val="&#160;";cellText.innerHTML=val;cell.className=this.cellClass+" "+p.cellId+" "+p.css;this.syncRowHeights(rowIndex,rowIndex);},calcColumnWidth:function(colIndex,maxRowsToMeasure){var maxWidth=0;if(this.grid.autoSizeHeaders){var h=this.getHeaderCellMeasure(colIndex);maxWidth=Math.max(maxWidth,h.scrollWidth);}
-var tb,index;if(this.cm.isLocked(colIndex)){tb=this.getLockedTable();index=colIndex;}else{tb=this.getBodyTable();index=colIndex-this.cm.getLockedCount();}
-if(tb&&tb.rows){var rows=tb.rows;var stopIndex=Math.min(maxRowsToMeasure||rows.length,rows.length);for(var i=0;i<stopIndex;i++){var cell=rows[i].childNodes[index].firstChild;maxWidth=Math.max(maxWidth,cell.scrollWidth);}}
-return maxWidth+5;},autoSizeColumn:function(colIndex,forceMinSize,suppressEvent){if(this.cm.isHidden(colIndex)){return;}
-if(forceMinSize){var cid=this.cm.getColumnId(colIndex);this.css.updateRule(this.colSelector+cid,"width",this.grid.minColumnWidth+"px");if(this.grid.autoSizeHeaders){this.css.updateRule(this.hdSelector+cid,"width",this.grid.minColumnWidth+"px");}}
-var newWidth=this.calcColumnWidth(colIndex);this.cm.setColumnWidth(colIndex,Math.max(this.grid.minColumnWidth,newWidth),suppressEvent);if(!suppressEvent){this.grid.fireEvent("columnresize",colIndex,newWidth);}},autoSizeColumns:function(){var cm=this.grid.colModel;var colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){this.autoSizeColumn(i,true,true);}
-if(cm.getTotalWidth()<this.scroller.dom.clientWidth){this.fitColumns();}else{this.updateColumns();this.layout();}},fitColumns:function(reserveScrollSpace){var cm=this.grid.colModel;var colCount=cm.getColumnCount();var cols=[];var width=0;var i,w;for(i=0;i<colCount;i++){if(!cm.isHidden(i)&&!cm.isFixed(i)){w=cm.getColumnWidth(i);cols.push(i);cols.push(w);width+=w;}}
-var avail=Math.min(this.scroller.dom.clientWidth,this.el.getWidth());if(reserveScrollSpace){avail-=17;}
-var frac=(avail-cm.getTotalWidth())/width;while(cols.length){w=cols.pop();i=cols.pop();cm.setColumnWidth(i,Math.floor(w+w*frac),true);}
-this.updateColumns();this.layout();},onRowSelect:function(rowIndex){var row=this.getRowComposite(rowIndex);row.addClass("x-grid-row-selected");},onRowDeselect:function(rowIndex){var row=this.getRowComposite(rowIndex);row.removeClass("x-grid-row-selected");},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){Ext.fly(cell).addClass("x-grid-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){Ext.fly(cell).removeClass("x-grid-cell-selected");}},updateHeaderSortState:function(){var state=this.ds.getSortState();if(!state){return;}
-this.sortState=state;var sortColumn=this.cm.findColumnIndex(state.field);if(sortColumn!=-1){var sortDir=state.direction;var sc=this.sortClasses;var hds=this.el.select(this.headerSelector).removeClass(sc);hds.item(sortColumn).addClass(sc[sortDir=="DESC"?1:0]);}},handleHeaderClick:function(g,index){if(this.headersDisabled){return;}
-var dm=g.dataSource,cm=g.colModel;if(!cm.isSortable(index)){return;}
-g.stopEditing();dm.sort(cm.getDataIndex(index));},destroy:function(){if(this.colMenu){this.colMenu.removeAll();Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.getEl().remove();delete this.colMenu;}
-if(this.hmenu){this.hmenu.removeAll();Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.getEl().remove();delete this.hmenu;}
-if(this.grid.enableColumnMove){var dds=Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];if(dds){for(var dd in dds){if(!dds[dd].config.isTarget&&dds[dd].dragElId){var elid=dds[dd].dragElId;dds[dd].unreg();Ext.get(elid).remove();}else if(dds[dd].config.isTarget){dds[dd].proxyTop.remove();dds[dd].proxyBottom.remove();dds[dd].unreg();}
-if(Ext.dd.DDM.locationCache[dd]){delete Ext.dd.DDM.locationCache[dd];}}
-delete Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];}}
-this.bind(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},handleLockChange:function(){this.refresh(true);},onDenyColumnLock:function(){},onDenyColumnHide:function(){},handleHdMenuClick:function(item){var index=this.hdCtxIndex;var cm=this.cm,ds=this.ds;switch(item.id){case"asc":ds.sort(cm.getDataIndex(index),"ASC");break;case"desc":ds.sort(cm.getDataIndex(index),"DESC");break;case"lock":var lc=cm.getLockedCount();if(cm.getColumnCount(true)<=lc+1){this.onDenyColumnLock();return;}
-if(lc!=index){cm.setLocked(index,true,true);cm.moveColumn(index,lc);this.grid.fireEvent("columnmove",index,lc);}else{cm.setLocked(index,true);}
-break;case"unlock":var lc=cm.getLockedCount();if((lc-1)!=index){cm.setLocked(index,false,true);cm.moveColumn(index,lc-1);this.grid.fireEvent("columnmove",index,lc-1);}else{cm.setLocked(index,false);}
-break;default:index=cm.getIndexById(item.id.substr(4));if(index!=-1){if(item.checked&&cm.getColumnCount(true)<=1){this.onDenyColumnHide();return false;}
-cm.setHidden(index,item.checked);}}
-return true;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false}));}},handleHdCtx:function(g,index,e){e.stopEvent();var hd=this.getHeaderCell(index);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));if(this.grid.enableColLock!==false){ms.get("lock").setDisabled(cm.isLocked(index));ms.get("unlock").setDisabled(!cm.isLocked(index));}
-this.hmenu.show(hd,"tl-bl");},handleHdOver:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd&&!this.headersDisabled){if(this.grid.colModel.isSortable(this.getCellIndex(hd))){this.fly(hd).addClass("x-grid-hd-over");}}},handleHdOut:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd){this.fly(hd).removeClass("x-grid-hd-over");}},handleSplitDblClick:function(e,t){var i=this.getCellIndex(t);if(this.grid.enableColumnResize!==false&&this.cm.isResizable(i)&&!this.cm.isFixed(i)){this.autoSizeColumn(i,true);this.layout();}},render:function(){var cm=this.cm;var colCount=cm.getColumnCount();if(this.grid.monitorWindowResize===true){Ext.EventManager.onWindowResize(this.onWindowResize,this,true);}
-var header=this.renderHeaders();var body=this.templates.body.apply({rows:""});var html=this.templates.master.apply({lockedBody:body,body:body,lockedHeader:header[0],header:header[1]});this.grid.getGridEl().dom.innerHTML=html;this.initElements();this.scroller.on("scroll",this.handleScroll,this);this.lockedBody.on("mousewheel",this.handleWheel,this);this.mainBody.on("mousewheel",this.handleWheel,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});this.lockedHd.on("mouseover",this.handleHdOver,this);this.lockedHd.on("mouseout",this.handleHdOut,this);this.lockedHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});if(this.grid.enableColumnResize!==false&&Ext.grid.SplitDragZone){new Ext.grid.SplitDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}
-this.updateSplitters();if(this.grid.enableColumnMove&&Ext.grid.HeaderDragZone){new Ext.grid.HeaderDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);new Ext.grid.HeaderDropZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}
-if(this.grid.enableCtxMenu!==false&&Ext.menu.Menu){this.hmenu=new Ext.menu.Menu({id:this.grid.id+"-hctx"});this.hmenu.add({id:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{id:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});if(this.grid.enableColLock!==false){this.hmenu.add('-',{id:"lock",text:this.lockText,cls:"xg-hmenu-lock"},{id:"unlock",text:this.unlockText,cls:"xg-hmenu-unlock"});}
-if(this.grid.enableColumnHide!==false){this.colMenu=new Ext.menu.Menu({id:this.grid.id+"-hcols-menu"});this.colMenu.on("beforeshow",this.beforeColMenuShow,this);this.colMenu.on("itemclick",this.handleHdMenuClick,this);this.hmenu.add('-',{id:"columns",text:this.columnsText,menu:this.colMenu});}
-this.hmenu.on("itemclick",this.handleHdMenuClick,this);this.grid.on("headercontextmenu",this.handleHdCtx,this);}
-if((this.grid.enableDragDrop||this.grid.enableDrag)&&Ext.grid.GridDragZone){this.dd=new Ext.grid.GridDragZone(this.grid,{ddGroup:this.grid.ddGroup||'GridDD'});}
-this.updateHeaderSortState();this.beforeInitialResize();this.layout(true);this.renderPhase2.defer(1,this);},renderPhase2:function(){this.refresh();if(this.grid.autoSizeColumns){this.autoSizeColumns();}},beforeInitialResize:function(){},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);var cid=cm.getColumnId(i);this.css.updateRule(this.colSelector+cid,"width",(w-this.borderWidth)+"px");this.css.updateRule(this.hdSelector+cid,"width",(w-this.borderWidth)+"px");this.updateSplitters();this.layout();this.grid.fireEvent("columnresize",i,w);},syncRowHeights:function(startIndex,endIndex){if(this.grid.enableRowHeightSync===true&&this.cm.getLockedCount()>0){startIndex=startIndex||0;var mrows=this.getBodyTable().rows;var lrows=this.getLockedTable().rows;var len=mrows.length-1;endIndex=Math.min(endIndex||len,len);for(var i=startIndex;i<=endIndex;i++){var m=mrows[i],l=lrows[i];var h=Math.max(m.offsetHeight,l.offsetHeight);m.style.height=l.style.height=h+"px";}}},layout:function(initialRender,is2ndPass){var g=this.grid;var auto=g.autoHeight;var scrollOffset=16;var c=g.getGridEl(),cm=this.cm,expandCol=g.autoExpandColumn,gv=this;if(!c.dom.offsetWidth){if(initialRender){this.lockedWrap.show();this.mainWrap.show();}
-return;}
-var hasLock=this.cm.isLocked(0);var tbh=this.headerPanel.getHeight();var bbh=this.footerPanel.getHeight();if(auto){var ch=this.getBodyTable().offsetHeight+tbh+bbh+this.mainHd.getHeight();var newHeight=ch+c.getBorderWidth("tb");if(g.maxHeight){newHeight=Math.min(g.maxHeight,newHeight);}
-c.setHeight(newHeight);}
-if(g.autoWidth){c.setWidth(cm.getTotalWidth()+c.getBorderWidth('lr'));}
-var s=this.scroller;var csize=c.getSize(true);this.el.setSize(csize.width,csize.height);this.headerPanel.setWidth(csize.width);this.footerPanel.setWidth(csize.width);var hdHeight=this.mainHd.getHeight();var vw=csize.width;var vh=csize.height-(tbh+bbh);s.setSize(vw,vh);var bt=this.getBodyTable();var ltWidth=hasLock?Math.max(this.getLockedTable().offsetWidth,this.lockedHd.dom.firstChild.offsetWidth):0;var scrollHeight=bt.offsetHeight;var scrollWidth=ltWidth+bt.offsetWidth;var vscroll=false,hscroll=false;this.scrollSizer.setSize(scrollWidth,scrollHeight+hdHeight);var lw=this.lockedWrap,mw=this.mainWrap;var lb=this.lockedBody,mb=this.mainBody;setTimeout(function(){var t=s.dom.offsetTop;var w=s.dom.clientWidth,h=s.dom.clientHeight;lw.setTop(t);lw.setSize(ltWidth,h);mw.setLeftTop(ltWidth,t);mw.setSize(w-ltWidth,h);lb.setHeight(h-hdHeight);mb.setHeight(h-hdHeight);if(is2ndPass!==true&&!gv.userResized&&expandCol){var ci=cm.getIndexById(expandCol);var tw=cm.getTotalWidth(false);var currentWidth=cm.getColumnWidth(ci);var cw=Math.min(Math.max(((w-tw)+currentWidth-2)-(w<=s.dom.offsetWidth?0:18),g.autoExpandMin),g.autoExpandMax);if(currentWidth!=cw){cm.setColumnWidth(ci,cw,true);gv.css.updateRule(gv.colSelector+expandCol,"width",(cw-gv.borderWidth)+"px");gv.css.updateRule(gv.hdSelector+expandCol,"width",(cw-gv.borderWidth)+"px");gv.updateSplitters();gv.layout(false,true);}}
-if(initialRender){lw.show();mw.show();}},10);},onWindowResize:function(){if(!this.grid.monitorWindowResize||this.grid.autoHeight){return;}
-this.layout();},appendFooter:function(parentEl){return null;},sortAscText:"Sort Ascending",sortDescText:"Sort Descending",lockText:"Lock Column",unlockText:"Unlock Column",columnsText:"Columns"});
-
-Ext.grid.HeaderDragZone=function(grid,hd,hd2){this.grid=grid;this.view=grid.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,hd);if(hd2){this.setHandleElId(Ext.id(hd));this.setOuterHandleElId(Ext.id(hd2));}
-this.scroll=false;};Ext.extend(Ext.grid.HeaderDragZone,Ext.dd.DragZone,{maxDragWidth:120,getDragData:function(e){var t=Ext.lib.Event.getTarget(e);var h=this.view.findHeaderCell(t);if(h){return{ddel:h.firstChild,header:h};}
-return false;},onInitDrag:function(e){this.view.headersDisabled=true;var clone=this.dragData.ddel.cloneNode(true);clone.id=Ext.id();clone.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(clone);return true;},afterValidDrop:function(){var v=this.view;setTimeout(function(){v.headersDisabled=false;},50);},afterInvalidDrop:function(){var v=this.view;setTimeout(function(){v.headersDisabled=false;},50);}});Ext.grid.HeaderDropZone=function(grid,hd,hd2){this.grid=grid;this.view=grid.getView();this.proxyTop=Ext.DomHelper.append(document.body,{tag:"div",cls:"col-move-top",html:"&#160;"},true);this.proxyBottom=Ext.DomHelper.append(document.body,{tag:"div",cls:"col-move-bottom",html:"&#160;"},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden");};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,grid.getGridEl().dom);};Ext.extend(Ext.grid.HeaderDropZone,Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,getTargetFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);var cindex=this.view.findCellIndex(t);if(cindex!==false){return this.view.getHeaderCell(cindex);}},nextVisible:function(h){var v=this.view,cm=this.grid.colModel;h=h.nextSibling;while(h){if(!cm.isHidden(v.getCellIndex(h))){return h;}
-h=h.nextSibling;}
-return null;},prevVisible:function(h){var v=this.view,cm=this.grid.colModel;h=h.prevSibling;while(h){if(!cm.isHidden(v.getCellIndex(h))){return h;}
-h=h.prevSibling;}
-return null;},positionIndicator:function(h,n,e){var x=Ext.lib.Event.getPageX(e);var r=Ext.lib.Dom.getRegion(n.firstChild);var px,pt,py=r.top+this.proxyOffsets[1];if((r.right-x)<=(r.right-r.left)/2){px=r.right+this.view.borderWidth;pt="after";}else{px=r.left;pt="before";}
-var oldIndex=this.view.getCellIndex(h);var newIndex=this.view.getCellIndex(n);if(this.grid.colModel.isFixed(newIndex)){return false;}
-var locked=this.grid.colModel.isLocked(newIndex);if(pt=="after"){newIndex++;}
-if(oldIndex<newIndex){newIndex--;}
-if(oldIndex==newIndex&&(locked==this.grid.colModel.isLocked(oldIndex))){return false;}
-px+=this.proxyOffsets[0];this.proxyTop.setLeftTop(px,py);this.proxyTop.show();if(!this.bottomOffset){this.bottomOffset=this.view.mainHd.getHeight();}
-this.proxyBottom.setLeftTop(px,py+this.proxyTop.dom.offsetHeight+this.bottomOffset);this.proxyBottom.show();return pt;},onNodeEnter:function(n,dd,e,data){if(data.header!=n){this.positionIndicator(data.header,n,e);}},onNodeOver:function(n,dd,e,data){var result=false;if(data.header!=n){result=this.positionIndicator(data.header,n,e);}
-if(!result){this.proxyTop.hide();this.proxyBottom.hide();}
-return result?this.dropAllowed:this.dropNotAllowed;},onNodeOut:function(n,dd,e,data){this.proxyTop.hide();this.proxyBottom.hide();},onNodeDrop:function(n,dd,e,data){var h=data.header;if(h!=n){var cm=this.grid.colModel;var x=Ext.lib.Event.getPageX(e);var r=Ext.lib.Dom.getRegion(n.firstChild);var pt=(r.right-x)<=((r.right-r.left)/2)?"after":"before";var oldIndex=this.view.getCellIndex(h);var newIndex=this.view.getCellIndex(n);var locked=cm.isLocked(newIndex);if(pt=="after"){newIndex++;}
-if(oldIndex<newIndex){newIndex--;}
-if(oldIndex==newIndex&&(locked==cm.isLocked(oldIndex))){return false;}
-cm.setLocked(oldIndex,locked,true);cm.moveColumn(oldIndex,newIndex);this.grid.fireEvent("columnmove",oldIndex,newIndex);return true;}
-return false;}});Ext.grid.GridView.ColumnDragZone=function(grid,hd){Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this,grid,hd,null);this.proxy.el.addClass('x-grid3-col-dd');};Ext.extend(Ext.grid.GridView.ColumnDragZone,Ext.grid.HeaderDragZone,{handleMouseDown:function(e){},callHandleMouseDown:function(e){Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this,e);}});
-
-Ext.grid.SplitDragZone=function(grid,hd,hd2){this.grid=grid;this.view=grid.getView();this.proxy=this.view.resizeProxy;Ext.grid.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.setHandleElId(Ext.id(hd));this.setOuterHandleElId(Ext.id(hd2));this.scroll=false;};Ext.extend(Ext.grid.SplitDragZone,Ext.dd.DDProxy,{fly:Ext.Element.fly,b4StartDrag:function(x,y){this.view.headersDisabled=true;this.proxy.setHeight(this.view.mainWrap.getHeight());var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){ev=Ext.EventObject.setEvent(e);var t=this.fly(ev.getTarget());if(t.hasClass("x-grid-split")){this.cellIndex=this.view.getCellIndex(t.dom);this.split=t.dom;this.cm=this.grid.colModel;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this,arguments);}}},endDrag:function(e){this.view.headersDisabled=false;var endX=Math.max(this.minX,Ext.lib.Event.getPageX(e));var diff=endX-this.startPos;this.view.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+diff);},autoOffset:function(){this.setDelta(0,0);}});
-
-Ext.grid.GridDragZone=function(grid,config){this.view=grid.getView();Ext.grid.GridDragZone.superclass.constructor.call(this,this.view.mainBody.dom,config);if(this.view.lockedBody){this.setHandleElId(Ext.id(this.view.mainBody.dom));this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom));}
-this.scroll=false;this.grid=grid;this.ddel=document.createElement('div');this.ddel.className='x-grid-dd-wrap';};Ext.extend(Ext.grid.GridDragZone,Ext.dd.DragZone,{ddGroup:"GridDD",getDragData:function(e){var t=Ext.lib.Event.getTarget(e);var rowIndex=this.view.findRowIndex(t);if(rowIndex!==false){var sm=this.grid.selModel;if(!sm.isSelected(rowIndex)||e.hasModifier()){sm.handleMouseDown(e,t);}
-return{grid:this.grid,ddel:this.ddel,rowIndex:rowIndex,selections:sm.getSelections()};}
-return false;},onInitDrag:function(e){var data=this.dragData;this.ddel.innerHTML=this.grid.getDragDropText();this.proxy.update(this.ddel);},afterRepair:function(){this.dragging=false;},getRepairXY:function(e,data){return false;},onEndDrag:function(data,e){},onValidDrop:function(dd,e,id){this.hideProxy();},beforeInvalidDrop:function(e,id){}});
-
-Ext.grid.ColumnModel=function(config){Ext.grid.ColumnModel.superclass.constructor.call(this);this.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){if(typeof config[i].dataIndex=="undefined"){config[i].dataIndex=i;}
-if(typeof config[i].renderer=="string"){config[i].renderer=Ext.util.Format[config[i].renderer];}
-if(typeof config[i].id=="undefined"){config[i].id=i;}
-this.lookup[config[i].id]=config[i];}
-this.defaultWidth=100;this.defaultSortable=false;this.addEvents({"widthchange":true,"headerchange":true,"hiddenchange":true,"columnmoved":true,"columnlockchange":true});Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{getColumnId:function(index){return this.config[index].id;},getColumnById:function(id){return this.lookup[id];},getIndexById:function(id){for(var i=0,len=this.config.length;i<len;i++){if(this.config[i].id==id){return i;}}
-return-1;},moveColumn:function(oldIndex,newIndex){var c=this.config[oldIndex];this.config.splice(oldIndex,1);this.config.splice(newIndex,0,c);this.dataMap=null;this.fireEvent("columnmoved",this,oldIndex,newIndex);},isLocked:function(colIndex){return this.config[colIndex].locked===true;},setLocked:function(colIndex,value,suppressEvent){if(this.isLocked(colIndex)==value){return;}
-this.config[colIndex].locked=value;if(!suppressEvent){this.fireEvent("columnlockchange",this,colIndex,value);}},getTotalLockedWidth:function(){var totalWidth=0;for(var i=0;i<this.config.length;i++){if(this.isLocked(i)&&!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}
-return totalWidth;},getLockedCount:function(){for(var i=0,len=this.config.length;i<len;i++){if(!this.isLocked(i)){return i;}}},getColumnCount:function(visibleOnly){if(visibleOnly===true){var c=0;for(var i=0,len=this.config.length;i<len;i++){if(!this.isHidden(i)){c++;}}
-return c;}
-return this.config.length;},getColumnsBy:function(fn,scope){var r=[];for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(fn.call(scope||this,c,i)===true){r[r.length]=c;}}
-return r;},isSortable:function(col){if(typeof this.config[col].sortable=="undefined"){return this.defaultSortable;}
-return this.config[col].sortable;},getRenderer:function(col){if(!this.config[col].renderer){return Ext.grid.ColumnModel.defaultRenderer;}
-return this.config[col].renderer;},setRenderer:function(col,fn){this.config[col].renderer=fn;},getColumnWidth:function(col){return this.config[col].width||this.defaultWidth;},setColumnWidth:function(col,width,suppressEvent){this.config[col].width=width;this.totalWidth=null;if(!suppressEvent){this.fireEvent("widthchange",this,col,width);}},getTotalWidth:function(includeHidden){if(!this.totalWidth){this.totalWidth=0;for(var i=0,len=this.config.length;i<len;i++){if(includeHidden||!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}}
-return this.totalWidth;},getColumnHeader:function(col){return this.config[col].header;},setColumnHeader:function(col,header){this.config[col].header=header;this.fireEvent("headerchange",this,col,header);},getColumnTooltip:function(col){return this.config[col].tooltip;},setColumnTooltip:function(col,tooltip){this.config[col].tooltip=tooltip;},getDataIndex:function(col){return this.config[col].dataIndex;},setDataIndex:function(col,dataIndex){this.config[col].dataIndex=dataIndex;},findColumnIndex:function(dataIndex){var c=this.config;for(var i=0,len=c.length;i<len;i++){if(c[i].dataIndex==dataIndex){return i;}}
-return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].editor;},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){this.config[colIndex].hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
-return value;};Ext.grid.DefaultColumnModel=Ext.grid.ColumnModel;
-
-Ext.grid.AbstractSelectionModel=function(){this.locked=false;Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.AbstractSelectionModel,Ext.util.Observable,{init:function(grid){this.grid=grid;this.initEvents();},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;}});
-
-Ext.grid.RowSelectionModel=function(config){Ext.apply(this,config);this.selections=new Ext.util.MixedCollection(false,function(o){return o.id;});this.last=false;this.lastActive=false;this.addEvents({"selectionchange":true,"beforerowselect":true,"rowselect":true,"rowdeselect":true});this.locked=false;};Ext.extend(Ext.grid.RowSelectionModel,Ext.grid.AbstractSelectionModel,{singleSelect:false,initEvents:function(){if(!this.grid.enableDragDrop&&!this.grid.enableDrag){this.grid.on("mousedown",this.handleMouseDown,this);}
-this.rowNav=new Ext.KeyNav(this.grid.getGridEl(),{"up":function(e){if(!e.shiftKey){this.selectPrevious(e.shiftKey);}else if(this.last!==false&&this.lastActive!==false){var last=this.last;this.selectRange(this.last,this.lastActive-1);this.grid.getView().focusRow(this.lastActive);if(last!==false){this.last=last;}}else{this.selectFirstRow();}},"down":function(e){if(!e.shiftKey){this.selectNext(e.shiftKey);}else if(this.last!==false&&this.lastActive!==false){var last=this.last;this.selectRange(this.last,this.lastActive+1);this.grid.getView().focusRow(this.lastActive);if(last!==false){this.last=last;}}else{this.selectFirstRow();}},scope:this});var view=this.grid.view;view.on("refresh",this.onRefresh,this);view.on("rowupdated",this.onRowUpdated,this);view.on("rowremoved",this.onRemove,this);},onRefresh:function(){var ds=this.grid.dataSource,i,v=this.grid.view;var s=this.selections;s.each(function(r){if((i=ds.indexOfId(r.id))!=-1){v.onRowSelect(i);}else{s.remove(r);}});},onRemove:function(v,index,r){this.selections.remove(r);},onRowUpdated:function(v,index,r){if(this.isSelected(r)){v.onRowSelect(index);}},selectRecords:function(records,keepExisting){if(!keepExisting){this.clearSelections();}
-var ds=this.grid.dataSource;for(var i=0,len=records.length;i<len;i++){this.selectRow(ds.indexOf(records[i]),true);}},getCount:function(){return this.selections.length;},selectFirstRow:function(){this.selectRow(0);},selectLastRow:function(keepExisting){this.selectRow(this.grid.dataSource.getCount()-1,keepExisting);},selectNext:function(keepExisting){if(this.last!==false&&(this.last+1)<this.grid.dataSource.getCount()){this.selectRow(this.last+1,keepExisting);this.grid.getView().focusRow(this.last);}},selectPrevious:function(keepExisting){if(this.last){this.selectRow(this.last-1,keepExisting);this.grid.getView().focusRow(this.last);}},getSelections:function(){return[].concat(this.selections.items);},getSelected:function(){return this.selections.itemAt(0);},clearSelections:function(fast){if(this.locked)return;if(fast!==true){var ds=this.grid.dataSource;var s=this.selections;s.each(function(r){this.deselectRow(ds.indexOfId(r.id));},this);s.clear();}else{this.selections.clear();}
-this.last=false;},selectAll:function(){if(this.locked)return;this.selections.clear();for(var i=0,len=this.grid.dataSource.getCount();i<len;i++){this.selectRow(i,true);}},hasSelection:function(){return this.selections.length>0;},isSelected:function(index){var r=typeof index=="number"?this.grid.dataSource.getAt(index):index;return(r&&this.selections.key(r.id)?true:false);},isIdSelected:function(id){return(this.selections.key(id)?true:false);},handleMouseDown:function(e,t){var view=this.grid.getView(),rowIndex;if(this.isLocked()||(rowIndex=view.findRowIndex(t))===false){return;};if(e.shiftKey&&this.last!==false){var last=this.last;this.selectRange(last,rowIndex,e.ctrlKey);this.last=last;view.focusRow(rowIndex);}else{var isSelected=this.isSelected(rowIndex);if(e.button!=0&&isSelected){view.focusRow(rowIndex);}else if(e.ctrlKey&&isSelected){this.deselectRow(rowIndex);}else{this.selectRow(rowIndex,e.button==0&&(e.ctrlKey||e.shiftKey));view.focusRow(rowIndex);}}},selectRows:function(rows,keepExisting){if(!keepExisting){this.clearSelections();}
-for(var i=0,len=rows.length;i<len;i++){this.selectRow(rows[i],true);}},selectRange:function(startRow,endRow,keepExisting){if(this.locked)return;if(!keepExisting){this.clearSelections();}
-if(startRow<=endRow){for(var i=startRow;i<=endRow;i++){this.selectRow(i,true);}}else{for(var i=startRow;i>=endRow;i--){this.selectRow(i,true);}}},deselectRange:function(startRow,endRow,preventViewNotify){if(this.locked)return;for(var i=startRow;i<=endRow;i++){this.deselectRow(i,preventViewNotify);}},selectRow:function(index,keepExisting,preventViewNotify){if(this.locked||(index<0||index>=this.grid.dataSource.getCount()))return;if(this.fireEvent("beforerowselect",this,index,keepExisting)!==false){if(!keepExisting||this.singleSelect){this.clearSelections();}
-var r=this.grid.dataSource.getAt(index);this.selections.add(r);this.last=this.lastActive=index;if(!preventViewNotify){this.grid.getView().onRowSelect(index);}
-this.fireEvent("rowselect",this,index,r);this.fireEvent("selectionchange",this);}},deselectRow:function(index,preventViewNotify){if(this.locked)return;if(this.last==index){this.last=false;}
-if(this.lastActive==index){this.lastActive=false;}
-var r=this.grid.dataSource.getAt(index);this.selections.remove(r);if(!preventViewNotify){this.grid.getView().onRowDeselect(index);}
-this.fireEvent("rowdeselect",this,index);this.fireEvent("selectionchange",this);},restoreLast:function(){if(this._last){this.last=this._last;}},acceptsNav:function(row,col,cm){return!cm.isHidden(col)&&cm.isCellEditable(col,row);},onEditorKey:function(field,e){var k=e.getKey(),newCell,g=this.grid,ed=g.activeEditor;if(k==e.TAB){e.stopEvent();ed.completeEdit();if(e.shiftKey){newCell=g.walkCells(ed.row,ed.col-1,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row,ed.col+1,1,this.acceptsNav,this);}}else if(k==e.ENTER&&!e.ctrlKey){e.stopEvent();ed.completeEdit();if(e.shiftKey){newCell=g.walkCells(ed.row-1,ed.col,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row+1,ed.col,1,this.acceptsNav,this);}}else if(k==e.ESC){ed.cancelEdit();}
-if(newCell){g.startEditing(newCell[0],newCell[1]);}}});
-
-Ext.grid.CellSelectionModel=function(config){Ext.apply(this,config);this.selection=null;this.addEvents({"beforecellselect":true,"cellselect":true,"selectionchange":true});};Ext.extend(Ext.grid.CellSelectionModel,Ext.grid.AbstractSelectionModel,{initEvents:function(){this.grid.on("mousedown",this.handleMouseDown,this);this.grid.getGridEl().on(Ext.isIE?"keydown":"keypress",this.handleKeyDown,this);var view=this.grid.view;view.on("refresh",this.onViewChange,this);view.on("rowupdated",this.onRowUpdated,this);view.on("beforerowremoved",this.clearSelections,this);view.on("beforerowsinserted",this.clearSelections,this);if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this);}},beforeEdit:function(e){this.select(e.row,e.column,false,true,e.record);},onRowUpdated:function(v,index,r){if(this.selection&&this.selection.record==r){v.onCellSelect(index,this.selection.cell[1]);}},onViewChange:function(){this.clearSelections(true);},getSelectedCell:function(){return this.selection?this.selection.cell:null;},clearSelections:function(preventNotify){var s=this.selection;if(s){if(preventNotify!==true){this.grid.view.onCellDeselect(s.cell[0],s.cell[1]);}
-this.selection=null;this.fireEvent("selectionchange",this,null);}},hasSelection:function(){return this.selection?true:false;},handleMouseDown:function(e,t){var v=this.grid.getView();if(this.isLocked()){return;};var row=v.findRowIndex(t);var cell=v.findCellIndex(t);if(row!==false&&cell!==false){this.select(row,cell);}},select:function(rowIndex,colIndex,preventViewNotify,preventFocus,r){if(this.fireEvent("beforecellselect",this,rowIndex,colIndex)!==false){this.clearSelections();r=r||this.grid.dataSource.getAt(rowIndex);this.selection={record:r,cell:[rowIndex,colIndex]};if(!preventViewNotify){var v=this.grid.getView();v.onCellSelect(rowIndex,colIndex);if(preventFocus!==true){v.focusCell(rowIndex,colIndex);}}
-this.fireEvent("cellselect",this,rowIndex,colIndex);this.fireEvent("selectionchange",this,this.selection);}},isSelectable:function(rowIndex,colIndex,cm){return!cm.isHidden(colIndex);},handleKeyDown:function(e){if(!e.isNavKeyPress()){return;}
-var g=this.grid,s=this.selection;if(!s){e.stopEvent();var cell=g.walkCells(0,0,1,this.isSelectable,this);if(cell){this.select(cell[0],cell[1]);}
-return;}
-var sm=this;var walk=function(row,col,step){return g.walkCells(row,col,step,sm.isSelectable,sm);};var k=e.getKey(),r=s.cell[0],c=s.cell[1];var newCell;switch(k){case e.TAB:if(e.shiftKey){newCell=walk(r,c-1,-1);}else{newCell=walk(r,c+1,1);}
-break;case e.DOWN:newCell=walk(r+1,c,1);break;case e.UP:newCell=walk(r-1,c,-1);break;case e.RIGHT:newCell=walk(r,c+1,1);break;case e.LEFT:newCell=walk(r,c-1,-1);break;case e.ENTER:if(g.isEditor&&!g.editing){g.startEditing(r,c);e.stopEvent();return;}
-break;};if(newCell){this.select(newCell[0],newCell[1]);e.stopEvent();}},acceptsNav:function(row,col,cm){return!cm.isHidden(col)&&cm.isCellEditable(col,row);},onEditorKey:function(field,e){var k=e.getKey(),newCell,g=this.grid,ed=g.activeEditor;if(k==e.TAB){if(e.shiftKey){newCell=g.walkCells(ed.row,ed.col-1,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row,ed.col+1,1,this.acceptsNav,this);}
-e.stopEvent();}else if(k==e.ENTER&&!e.ctrlKey){ed.completeEdit();e.stopEvent();}else if(k==e.ESC){ed.cancelEdit();}
-if(newCell){g.startEditing(newCell[0],newCell[1]);}}});
-
-Ext.grid.EditorGrid=function(container,config){Ext.grid.EditorGrid.superclass.constructor.call(this,container,config);this.getGridEl().addClass("xedit-grid");if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel();}
-this.activeEditor=null;this.addEvents({"beforeedit":true,"afteredit":true,"validateedit":true});this.on("bodyscroll",this.stopEditing,this);this.on(this.clicksToEdit==1?"cellclick":"celldblclick",this.onCellDblClick,this);};Ext.extend(Ext.grid.EditorGrid,Ext.grid.Grid,{isEditor:true,clicksToEdit:2,trackMouseOver:false,onCellDblClick:function(g,row,col){this.startEditing(row,col);},onEditComplete:function(ed,value,startValue){this.editing=false;this.activeEditor=null;ed.un("specialkey",this.selModel.onEditorKey,this.selModel);if(String(value)!=String(startValue)){var r=ed.record;var field=this.colModel.getDataIndex(ed.col);var e={grid:this,record:r,field:field,originalValue:startValue,value:value,row:ed.row,column:ed.col,cancel:false};if(this.fireEvent("validateedit",e)!==false&&!e.cancel){r.set(field,e.value);delete e.cancel;this.fireEvent("afteredit",e);}}
-this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.dataSource.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed.rendered){ed.render(ed.parentEl||document.body);}
-(function(){ed.row=row;ed.col=col;ed.record=r;ed.on("complete",this.onEditComplete,this,{single:true});ed.on("specialkey",this.selModel.onEditorKey,this.selModel);this.activeEditor=ed;var v=r.data[field];ed.startEdit(this.view.getCell(row,col),v);}).defer(50,this);}}},stopEditing:function(){if(this.activeEditor){this.activeEditor.completeEdit();}
-this.activeEditor=null;}});
-
-Ext.grid.GridEditor=function(field,config){Ext.grid.GridEditor.superclass.constructor.call(this,field,config);field.monitorTab=false;};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:"frame"});
-
-Ext.grid.PropertyRecord=Ext.data.Record.create([{name:'name',type:'string'},'value']);Ext.grid.PropertyStore=function(grid,source){this.grid=grid;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on('update',this.onUpdate,this);if(source){this.setSource(source);}
-Ext.grid.PropertyStore.superclass.constructor.call(this);};Ext.extend(Ext.grid.PropertyStore,Ext.util.Observable,{setSource:function(o){this.source=o;this.store.removeAll();var data=[];for(var k in o){if(this.isEditableValue(o[k])){data.push(new Ext.grid.PropertyRecord({name:k,value:o[k]},k));}}
-this.store.loadRecords({records:data},{},true);},onUpdate:function(ds,record,type){if(type==Ext.data.Record.EDIT){var v=record.data['value'];var oldValue=record.modified['value'];if(this.grid.fireEvent('beforepropertychange',this.source,record.id,v,oldValue)!==false){this.source[record.id]=v;record.commit();this.grid.fireEvent('propertychange',this.source,record.id,v,oldValue);}else{record.reject();}}},getProperty:function(row){return this.store.getAt(row);},isEditableValue:function(val){if(val&&val instanceof Date){return true;}else if(typeof val=='object'||typeof val=='function'){return false;}
-return true;},setValue:function(prop,value){this.source[prop]=value;this.store.getById(prop).set('value',value);},getSource:function(){return this.source;}});Ext.grid.PropertyColumnModel=function(grid,store){this.grid=grid;var g=Ext.grid;g.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,sortable:true,dataIndex:'name',id:'name'},{header:this.valueText,resizable:false,dataIndex:'value',id:'value'}]);this.store=store;this.bselect=Ext.DomHelper.append(document.body,{tag:'select',style:'display:none',cls:'x-grid-editor',children:[{tag:'option',value:'true',html:'true'},{tag:'option',value:'false',html:'false'}]});Ext.id(this.bselect);var f=Ext.form;this.editors={'date':new g.GridEditor(new f.DateField({selectOnFocus:true})),'string':new g.GridEditor(new f.TextField({selectOnFocus:true})),'number':new g.GridEditor(new f.NumberField({selectOnFocus:true,style:'text-align:left;'})),'boolean':new g.GridEditor(new f.Field({el:this.bselect,selectOnFocus:true}))};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this);};Ext.extend(Ext.grid.PropertyColumnModel,Ext.grid.ColumnModel,{nameText:'Name',valueText:'Value',dateFormat:'m/j/Y',renderDate:function(dateVal){return dateVal.dateFormat(this.dateFormat);},renderBool:function(bVal){return bVal?'true':'false';},isCellEditable:function(colIndex,rowIndex){return colIndex==1;},getRenderer:function(col){return col==1?this.renderCellDelegate:this.renderPropDelegate;},renderProp:function(v){return this.getPropertyName(v);},renderCell:function(val){var rv=val;if(val instanceof Date){rv=this.renderDate(val);}else if(typeof val=='boolean'){rv=this.renderBool(val);}
-return Ext.util.Format.htmlEncode(rv);},getPropertyName:function(name){var pn=this.grid.propertyNames;return pn&&pn[name]?pn[name]:name;},getCellEditor:function(colIndex,rowIndex){var p=this.store.getProperty(rowIndex);var n=p.data['name'],val=p.data['value'];if(this.grid.customEditors[n]){return this.grid.customEditors[n];}
-if(val instanceof Date){return this.editors['date'];}else if(typeof val=='number'){return this.editors['number'];}else if(typeof val=='boolean'){return this.editors['boolean'];}else{return this.editors['string'];}}});Ext.grid.PropertyGrid=function(container,config){config=config||{};var store=new Ext.grid.PropertyStore(this);this.store=store;var cm=new Ext.grid.PropertyColumnModel(this,store);store.store.sort('name','ASC');Ext.grid.PropertyGrid.superclass.constructor.call(this,container,Ext.apply({ds:store.store,cm:cm,enableColLock:false,enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1},config));this.getGridEl().addClass('x-props-grid');this.lastEditRow=null;this.on('columnresize',this.onColumnResize,this);this.addEvents({beforepropertychange:true,propertychange:true});this.customEditors=this.customEditors||{};};Ext.extend(Ext.grid.PropertyGrid,Ext.grid.EditorGrid,{render:function(){Ext.grid.PropertyGrid.superclass.render.call(this);this.autoSize.defer(100,this);},autoSize:function(){Ext.grid.PropertyGrid.superclass.autoSize.call(this);if(this.view){this.view.fitColumns();}},onColumnResize:function(){this.colModel.setColumnWidth(1,this.container.getWidth(true)-this.colModel.getColumnWidth(0));this.autoSize();},setSource:function(source){this.store.setSource(source);},getSource:function(){return this.store.getSource();}});
-
-Ext.LoadMask=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(this.store){this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.onLoad,this);this.removeMask=false;}else{var um=this.el.getUpdateManager();um.showLoadIndicator=false;um.on('beforeupdate',this.onBeforeLoad,this);um.on('update',this.onLoad,this);um.on('failure',this.onLoad,this);this.removeMask=true;}};Ext.LoadMask.prototype={msg:'Loading...',msgCls:'x-mask-loading',disabled:false,disable:function(){this.disabled=true;},enable:function(){this.disabled=false;},onLoad:function(){this.el.unmask(this.removeMask);},onBeforeLoad:function(){if(!this.disabled){this.el.mask(this.msg,this.msgCls);}},destroy:function(){if(this.store){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.onLoad,this);}else{var um=this.el.getUpdateManager();um.un('beforeupdate',this.onBeforeLoad,this);um.un('update',this.onLoad,this);um.un('failure',this.onLoad,this);}}};
-
-Ext.debug={init:function(){var CP=Ext.ContentPanel;var bd=Ext.get(document.body);var dlg=new Ext.LayoutDialog('x-debug-browser',{autoCreate:true,width:800,height:450,title:'Ext Debug Console &amp; Inspector',proxyDrag:true,shadow:true,center:{alwaysShowTabs:true},constraintoviewport:false});dlg.el.swallowEvent('click');var mainLayout=dlg.getLayout();mainLayout.beginUpdate();var clayout=mainLayout.add('center',new Ext.debug.InnerLayout('x-debug-console',400,{title:'Debug Console'}));var ilayout=mainLayout.add('center',new Ext.debug.InnerLayout('x-debug-inspector',250,{title:'DOM Inspector'}));var scriptPanel=clayout.add('east',new CP({autoCreate:{tag:'div',children:[{tag:'div'},{tag:'textarea'}]},fitContainer:true,fitToFrame:true,title:'Script Console',autoScroll:Ext.isGecko,setSize:function(w,h){Ext.ContentPanel.prototype.setSize.call(this,w,h);if(Ext.isGecko&&Ext.isStrict){var s=this.adjustForComponents(w,h);this.resizeEl.setSize(s.width-2,s.height-2);}}}));var sel=scriptPanel.el;var script=sel.child('textarea');scriptPanel.resizeEl=script;var sctb=scriptPanel.toolbar=new Ext.Toolbar(sel.child('div'));sctb.add({text:'Run',handler:function(){var s=script.dom.value;if(trap.checked){try{var rt=eval(s);Ext.debug.dump(rt===undefined?'(no return)':rt);}catch(e){Ext.debug.log(e.message||e.descript);}}else{var rt=eval(s);Ext.debug.dump(rt===undefined?'(no return)':rt);}}},{text:'Clear',handler:function(){script.dom.value='';script.dom.focus();}});var trap=Ext.DomHelper.append(sctb.el,{tag:'input',type:'checkbox',checked:'checked'});trap.checked=true;sctb.add('-',trap,'Trap Errors');var stylesGrid=new Ext.grid.PropertyGrid(bd.createChild(),{nameText:'Style',enableHdMenu:false,enableColumnResize:false});var stylePanel=ilayout.add('east',new Ext.GridPanel(stylesGrid,{title:'(No element selected)'}));stylesGrid.render();stylesGrid.getView().mainHd.setDisplayed(false);clayout.tbar.add({text:'Clear',handler:function(){Ext.debug.console.jsonData=[];Ext.debug.console.refresh();}});var treeEl=ilayout.main.getEl();var tb=ilayout.tbar;var inspectIgnore,inspecting;function inspectListener(e,t){if(!inspectIgnore.contains(e.getPoint())){findNode(t);}}
-function stopInspecting(e,t){if(!inspectIgnore.contains(e.getPoint())){inspect.toggle(false);if(findNode(t)!==false){e.stopEvent();}}}
-function stopInspectingEsc(e,t){if(e.getKey()==e.ESC){inspect.toggle(false);}}
-var inspect=tb.addButton({text:'Inspect',enableToggle:true,pressed:false,toggleHandler:function(n,pressed){var d=Ext.get(document);if(pressed){d.on('mouseover',inspectListener,window,{buffer:50});d.on('mousedown',stopInspecting);d.on('keydown',stopInspectingEsc);inspectIgnore=dlg.el.getRegion();inspecting=true;}else{d.un('mouseover',inspectListener);d.un('mousedown',stopInspecting);d.on('keydown',stopInspectingEsc);inspecting=false;var n=tree.getSelectionModel().getSelectedNode();if(n&&n.htmlNode){onNodeSelect(tree,n,false);}}}});tb.addSeparator();var frameEl=tb.addButton({text:'Highlight Selection',enableToggle:true,pressed:false,toggleHandler:function(n,pressed){var n=tree.getSelectionModel().getSelectedNode();if(n&&n.htmlNode){n[pressed?'frame':'unframe']();}}});tb.addSeparator();var reload=tb.addButton({text:'Refresh Children',disabled:true,handler:function(){var n=tree.getSelectionModel().getSelectedNode();if(n&&n.reload){n.reload();}}});tb.add('-',{text:'Collapse All',handler:function(){tree.root.collapse(true);}});mainLayout.endUpdate();mainLayout.getRegion('center').showPanel(0);stylesGrid.on('propertychange',function(s,name,value){var node=stylesGrid.treeNode;if(styles){node.htmlNode.style[name]=value;}else{node.htmlNode[name]=value;}
-node.refresh(true);});var stb=new Ext.Toolbar(stylesGrid.view.getHeaderPanel(true));var swap=stb.addButton({text:'DOM Attributes',menu:{items:[new Ext.menu.CheckItem({id:'dom',text:'DOM Attributes',checked:true,group:'xdb-styles'}),new Ext.menu.CheckItem({id:'styles',text:'CSS Properties',group:'xdb-styles'})]}});swap.menu.on('click',function(){styles=swap.menu.items.get('styles').checked;showAll[styles?'show':'hide']();swap.setText(styles?'CSS Properties':'DOM Attributes');var n=tree.getSelectionModel().getSelectedNode();if(n){onNodeSelect(tree,n);}});var addStyle=stb.addButton({text:'Add',disabled:true,handler:function(){Ext.MessageBox.prompt('Add Property','Property Name:',function(btn,v){var store=stylesGrid.store.store;if(btn=='ok'&&v&&!store.getById(v)){var r=new Ext.grid.PropertyRecord({name:v,value:''},v);store.add(r);stylesGrid.startEditing(store.getCount()-1,1);}});}});var showAll=stb.addButton({text:'Computed Styles',hidden:true,pressed:false,enableToggle:true,toggleHandler:function(){var n=tree.getSelectionModel().getSelectedNode();if(n){onNodeSelect(tree,n);}}});var styles=false,hnode;var nonSpace=/^\s*$/;var html=Ext.util.Format.htmlEncode;var ellipsis=Ext.util.Format.ellipsis;var styleRe=/\s?([a-z\-]*)\:([^;]*)(?:[;\s\n\r]*)/gi;function findNode(n){if(!n||n.nodeType!=1||n==document.body||n==document){return false;}
-var pn=[n],p=n;while((p=p.parentNode)&&p.nodeType==1&&p.tagName.toUpperCase()!='HTML'){pn.unshift(p);}
-var cn=hnode;for(var i=0,len=pn.length;i<len;i++){cn.expand();cn=cn.findChild('htmlNode',pn[i]);if(!cn){return false;}}
-cn.select();var a=cn.ui.anchor;treeEl.dom.scrollTop=Math.max(0,a.offsetTop-10);cn.highlight();return true;}
-function nodeTitle(n){var s=n.tagName;if(n.id){s+='#'+n.id;}else if(n.className){s+='.'+n.className;}
-return s;}
-function onNodeSelect(t,n,last){if(last&&last.unframe){last.unframe();}
-var props={};if(n&&n.htmlNode){if(frameEl.pressed){n.frame();}
-if(inspecting){return;}
-addStyle.enable();reload.setDisabled(n.leaf);var dom=n.htmlNode;stylePanel.setTitle(nodeTitle(dom));if(styles&&!showAll.pressed){var s=dom.style?dom.style.cssText:'';if(s){var m;while((m=styleRe.exec(s))!=null){props[m[1].toLowerCase()]=m[2];}}}else if(styles){var cl=Ext.debug.cssList;var s=dom.style,fly=Ext.fly(dom);if(s){for(var i=0,len=cl.length;i<len;i++){var st=cl[i];var v=s[st]||fly.getStyle(st);if(v!=undefined&&v!==null&&v!==''){props[st]=v;}}}}else{for(var a in dom){var v=dom[a];if((isNaN(a+10))&&v!=undefined&&v!==null&&v!==''&&!(Ext.isGecko&&a[0]==a[0].toUpperCase())){props[a]=v;}}}}else{if(inspecting){return;}
-addStyle.disable();reload.disabled();}
-stylesGrid.setSource(props);stylesGrid.treeNode=n;stylesGrid.view.fitColumns();}
-var filterIds='^(?:';var eds=stylesGrid.colModel.editors;for(var edType in eds){filterIds+=eds[edType].id+'|';}
-Ext.each([dlg.shim?dlg.shim.id:'noshim',dlg.proxyDrag.id],function(id){filterIds+=id+'|';});filterIds+=dlg.el.id;filterIds+=')$';var filterRe=new RegExp(filterIds);var loader=new Ext.tree.TreeLoader();loader.load=function(n,cb){var isBody=n.htmlNode==bd.dom;var cn=n.htmlNode.childNodes;for(var i=0,c;c=cn[i];i++){if(isBody&&filterRe.test(c.id)){continue;}
-if(c.nodeType==1){n.appendChild(new Ext.debug.HtmlNode(c));}else if(c.nodeType==3&&!nonSpace.test(c.nodeValue)){n.appendChild(new Ext.tree.TreeNode({text:'<em>'+ellipsis(html(String(c.nodeValue)),35)+'</em>',cls:'x-tree-noicon'}));}}
-cb();};var tree=new Ext.tree.TreePanel(treeEl,{enableDD:false,loader:loader,lines:false,rootVisible:false,animate:false,hlColor:'ffff9c'});tree.getSelectionModel().on('selectionchange',onNodeSelect,null,{buffer:250});var root=tree.setRootNode(new Ext.tree.TreeNode('Ext'));hnode=root.appendChild(new Ext.debug.HtmlNode(document.getElementsByTagName('html')[0]));tree.render();Ext.debug.console=new Ext.JsonView(clayout.main.getEl(),'<pre><xmp>> {msg}</xmp></pre>');Ext.debug.console.jsonData=[];Ext.debug.dialog=dlg;},show:function(){var d=Ext.debug;if(!d.dialog){d.init();}
-if(!d.dialog.isVisible()){d.dialog.show();}},hide:function(){if(Ext.debug.dialog){Ext.debug.dialog.hide();}},log:function(arg1,arg2,etc){Ext.debug.show();var m="";for(var i=0,len=arguments.length;i<len;i++){m+=(i==0?"":", ")+arguments[i];}
-var cn=Ext.debug.console;cn.jsonData.unshift({msg:m});cn.refresh();},logf:function(format,arg1,arg2,etc){Ext.debug.log(String.format.apply(String,arguments));},dump:function(o){if(typeof o=='string'||typeof o=='number'||typeof o=='undefined'||o instanceof Date){Ext.debug.log(o);}else if(!o){Ext.debug.log("null");}else if(typeof o!="object"){Ext.debug.log('Unknown return type');}else if(o instanceof Array){Ext.debug.log('['+o.join(',')+']');}else{var b=["{\n"];for(var key in o){var to=typeof o[key];if(to!="function"&&to!="object"){b.push(String.format("  {0}: {1},\n",key,o[key]));}}
-var s=b.join("");if(s.length>3){s=s.substr(0,s.length-2);}
-Ext.debug.log(s+"\n}");}},_timers:{},time:function(name){name=name||"def";Ext._timers[name]=new Date().getTime();},timeEnd:function(name,printResults){var t=new Date().getTime();name=name||"def";var v=String.format("{0} ms",t-Ext._timers[name]);Ext._timers[name]=new Date().getTime();if(printResults!==false){Ext.debug.log('Timer '+(name=="def"?v:name+": "+v));}
-return v;}};Ext.debug.HtmlNode=function(){var html=Ext.util.Format.htmlEncode;var ellipsis=Ext.util.Format.ellipsis;var nonSpace=/^\s*$/;var attrs=[{n:'id',v:'id'},{n:'className',v:'class'},{n:'name',v:'name'},{n:'type',v:'type'},{n:'src',v:'src'},{n:'href',v:'href'}];function hasChild(n){for(var i=0,c;c=n.childNodes[i];i++){if(c.nodeType==1){return true;}}
-return false;}
-function renderNode(n,leaf){var tag=n.tagName.toLowerCase();var s='&lt;'+tag;for(var i=0,len=attrs.length;i<len;i++){var a=attrs[i];var v=n[a.n];if(v&&!nonSpace.test(v)){s+=' '+a.v+'=&quot;<i>'+html(v)+'</i>&quot;';}}
-var style=n.style?n.style.cssText:'';if(style){s+=' style=&quot;<i>'+html(style.toLowerCase())+'</i>&quot;';}
-if(leaf&&n.childNodes.length>0){s+='&gt;<em>'+ellipsis(html(String(n.innerHTML)),35)+'</em>&lt;/'+tag+'&gt;';}else if(leaf){s+=' /&gt;';}else{s+='&gt;';}
-return s;}
-var HtmlNode=function(n){var leaf=!hasChild(n);this.htmlNode=n;this.tagName=n.tagName.toLowerCase();var attr={text:renderNode(n,leaf),leaf:leaf,cls:'x-tree-noicon'};HtmlNode.superclass.constructor.call(this,attr);this.attributes.htmlNode=n;if(!leaf){this.on('expand',this.onExpand,this);this.on('collapse',this.onCollapse,this);}};Ext.extend(HtmlNode,Ext.tree.AsyncTreeNode,{cls:'x-tree-noicon',preventHScroll:true,refresh:function(highlight){var leaf=!hasChild(this.htmlNode);this.setText(renderNode(this.htmlNode,leaf));if(highlight){Ext.fly(this.ui.textNode).highlight();}},onExpand:function(){if(!this.closeNode&&this.parentNode){this.closeNode=this.parentNode.insertBefore(new Ext.tree.TreeNode({text:'&lt;/'+this.tagName+'&gt;',cls:'x-tree-noicon'}),this.nextSibling);}else if(this.closeNode){this.closeNode.ui.show();}},onCollapse:function(){if(this.closeNode){this.closeNode.ui.hide();}},render:function(bulkRender){HtmlNode.superclass.render.call(this,bulkRender);},highlightNode:function(){},highlight:function(){},frame:function(){this.htmlNode.style.border='1px solid #0000ff';},unframe:function(){this.htmlNode.style.border='';}});return HtmlNode;}();Ext.debug.InnerLayout=function(id,w,cfg){var el=Ext.DomHelper.append(document.body,{id:id});var layout=new Ext.BorderLayout(el,{north:{initialSize:28},center:{titlebar:false},east:{split:true,initialSize:w,titlebar:true}});Ext.debug.InnerLayout.superclass.constructor.call(this,layout,cfg);layout.beginUpdate();var tbPanel=layout.add('north',new Ext.ContentPanel({autoCreate:true,fitToFrame:true}));this.main=layout.add('center',new Ext.ContentPanel({autoCreate:true,fitToFrame:true,autoScroll:true}));this.tbar=new Ext.Toolbar(tbPanel.el);var mtbEl=tbPanel.resizeEl=tbPanel.el.child('div.x-toolbar');mtbEl.setStyle('border-bottom','0 none');layout.endUpdate(true);};Ext.extend(Ext.debug.InnerLayout,Ext.NestedLayoutPanel,{add:function(){return this.layout.add.apply(this.layout,arguments);}});Ext.debug.cssList=['background-color','border','border-color','border-spacing','border-style','border-top','border-right','border-bottom','border-left','border-top-color','border-right-color','border-bottom-color','border-left-color','border-top-width','border-right-width','border-bottom-width','border-left-width','border-width','bottom','color','font-size','font-size-adjust','font-stretch','font-style','height','left','letter-spacing','line-height','margin','margin-top','margin-right','margin-bottom','margin-left','marker-offset','max-height','max-width','min-height','min-width','orphans','outline','outline-color','outline-style','outline-width','overflow','padding','padding-top','padding-right','padding-bottom','padding-left','quotes','right','size','text-indent','top','width','word-spacing','z-index','opacity','outline-offset'];if(typeof console=='undefined'){console=Ext.debug;}
-Ext.EventManager.on(window,'load',function(){Ext.get(document).on('keydown',function(e){if(e.ctrlKey&&e.shiftKey&&e.getKey()==e.HOME){Ext.debug.show();}});});Ext.print=Ext.log=Ext.debug.log;Ext.printf=Ext.logf=Ext.debug.logf;Ext.dump=Ext.debug.dump;Ext.timer=Ext.debug.time;Ext.timerEnd=Ext.debug.timeEnd;
diff --git a/lib/web/extjs/ext-core-debug.js b/lib/web/extjs/ext-core-debug.js
deleted file mode 100644
index 7461104e325cbe2c5cf3e5f6c91ea7bda20c0140..0000000000000000000000000000000000000000
--- a/lib/web/extjs/ext-core-debug.js
+++ /dev/null
@@ -1,5185 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.DomHelper = function(){
-    var tempTableEl = null;
-    var emptyTags = /^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;
-           
-    // build as innerHTML where available
-    
-    var createHtml = function(o){
-        if(typeof o == 'string'){
-            return o;
-        }
-        var b = "";
-        if(!o.tag){
-            o.tag = "div";
-        }
-        b += "<" + o.tag;
-        for(var attr in o){
-            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || typeof o[attr] == "function") continue;
-            if(attr == "style"){
-                var s = o["style"];
-                if(typeof s == "function"){
-                    s = s.call();
-                }
-                if(typeof s == "string"){
-                    b += ' style="' + s + '"';
-                }else if(typeof s == "object"){
-                    b += ' style="';
-                    for(var key in s){
-                        if(typeof s[key] != "function"){
-                            b += key + ":" + s[key] + ";";
-                        }
-                    }
-                    b += '"';
-                }
-            }else{
-                if(attr == "cls"){
-                    b += ' class="' + o["cls"] + '"';
-                }else if(attr == "htmlFor"){
-                    b += ' for="' + o["htmlFor"] + '"';
-                }else{
-                    b += " " + attr + '="' + o[attr] + '"';
-                }
-            }
-        }
-        if(emptyTags.test(o.tag)){
-            b += "/>";
-        }else{
-            b += ">";
-            var cn = o.children || o.cn;
-            if(cn){
-                if(cn instanceof Array){
-                    for(var i = 0, len = cn.length; i < len; i++) {
-                        b += createHtml(cn[i], b);
-                    }
-                }else{
-                    b += createHtml(cn, b);
-                }
-            }
-            if(o.html){
-                b += o.html;
-            }
-            b += "</" + o.tag + ">";
-        }
-        return b;
-    };
-    
-    // build as dom
-    
-    var createDom = function(o, parentNode){
-        var el = document.createElement(o.tag);
-        var useSet = el.setAttribute ? true : false; // In IE some elements don't have setAttribute
-        for(var attr in o){
-            if(attr == "tag" || attr == "children" || attr == "cn" || attr == "html" || attr == "style" || typeof o[attr] == "function") continue;
-            if(attr=="cls"){
-                el.className = o["cls"];
-            }else{
-                if(useSet) el.setAttribute(attr, o[attr]);
-                else el[attr] = o[attr];
-            }
-        }
-        Ext.DomHelper.applyStyles(el, o.style);
-        var cn = o.children || o.cn;
-        if(cn){
-            if(cn instanceof Array){
-                for(var i = 0, len = cn.length; i < len; i++) {
-                    createDom(cn[i], el);
-                }
-            }else{
-                createDom(cn, el);
-            }
-        }
-        if(o.html){
-            el.innerHTML = o.html;
-        }
-        if(parentNode){
-           parentNode.appendChild(el);
-        }
-        return el;
-    };
-
-    var ieTable = function(depth, s, h, e){
-        tempTableEl.innerHTML = [s, h, e].join('');
-        var i = -1, el = tempTableEl;
-        while(++i < depth){
-            el = el.firstChild;
-        }
-        return el;
-    };
-
-    // kill repeat to save bytes
-    var ts = '<table>',
-        te = '</table>',
-        tbs = ts+'<tbody>',
-        tbe = '</tbody>'+te,
-        trs = tbs + '<tr>',
-        tre = '</tr>'+tbe;
-
-    
-    var insertIntoTable = function(tag, where, el, html){
-        if(!tempTableEl){
-            tempTableEl = document.createElement('div');
-        }
-        var node;
-        var before = null;
-        if(tag == 'td'){
-            if(where == 'afterbegin' || where == 'beforeend'){ // INTO a TD
-                return;
-            }
-            if(where == 'beforebegin'){
-                before = el;
-                el = el.parentNode;
-            } else{
-                before = el.nextSibling;
-                el = el.parentNode;
-            }
-            node = ieTable(4, trs, html, tre);
-        }
-        else if(tag == 'tr'){
-            if(where == 'beforebegin'){
-                before = el;
-                el = el.parentNode;
-                node = ieTable(3, tbs, html, tbe);
-            } else if(where == 'afterend'){
-                before = el.nextSibling;
-                el = el.parentNode;
-                node = ieTable(3, tbs, html, tbe);
-            } else{ // INTO a TR
-                if(where == 'afterbegin'){
-                    before = el.firstChild;
-                }
-                node = ieTable(4, trs, html, tre);
-            }
-        } else if(tag == 'tbody'){
-            if(where == 'beforebegin'){
-                before = el;
-                el = el.parentNode;
-                node = ieTable(2, ts, html, te);
-            } else if(where == 'afterend'){
-                before = el.nextSibling;
-                el = el.parentNode;
-                node = ieTable(2, ts, html, te);
-            } else{
-                if(where == 'afterbegin'){
-                    before = el.firstChild;
-                }
-                node = ieTable(3, tbs, html, tbe);
-            }
-        } else{ // TABLE
-            if(where == 'beforebegin' || where == 'afterend'){ // OUTSIDE the table
-                return;
-            }
-            if(where == 'afterbegin'){
-                before = el.firstChild;
-            }
-            node = ieTable(2, ts, html, te);
-        }
-        el.insertBefore(node, before);
-        return node;
-    };
-    
-    return {
-    
-    useDom : false,
-
-    
-    markup : function(o){
-        return createHtml(o);
-    },
-
-    
-    applyStyles : function(el, styles){
-        if(styles){
-           el = Ext.fly(el);
-           if(typeof styles == "string"){
-               var re = /\s?([a-z\-]*)\:\s?([^;]*);?/gi;
-               var matches;
-               while ((matches = re.exec(styles)) != null){
-                   el.setStyle(matches[1], matches[2]);
-               }
-           }else if (typeof styles == "object"){
-               for (var style in styles){
-                  el.setStyle(style, styles[style]);
-               }
-           }else if (typeof styles == "function"){
-                Ext.DomHelper.applyStyles(el, styles.call());
-           }
-        }
-    }, 
-    
-    
-    insertHtml : function(where, el, html){
-        where = where.toLowerCase();
-        if(el.insertAdjacentHTML){
-            var tag = el.tagName.toLowerCase();
-            if(tag == "table" || tag == "tbody" || tag == "tr" || tag == 'td'){
-                var rs;
-                if(rs = insertIntoTable(tag, where, el, html)){
-                    return rs;
-                }
-            }
-            switch(where){
-                case "beforebegin":
-                    el.insertAdjacentHTML(where, html);
-                    return el.previousSibling;
-                case "afterbegin":
-                    el.insertAdjacentHTML(where, html);
-                    return el.firstChild;
-                case "beforeend":
-                    el.insertAdjacentHTML(where, html);
-                    return el.lastChild;
-                case "afterend":
-                    el.insertAdjacentHTML(where, html);
-                    return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-        }
-        var range = el.ownerDocument.createRange();
-        var frag;
-        switch(where){
-             case "beforebegin":
-                range.setStartBefore(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el);
-                return el.previousSibling;
-             case "afterbegin":
-                if(el.firstChild){
-                    range.setStartBefore(el.firstChild);
-                    frag = range.createContextualFragment(html);
-                    el.insertBefore(frag, el.firstChild);
-                    return el.firstChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.firstChild;
-                }
-            case "beforeend":
-                if(el.lastChild){
-                    range.setStartAfter(el.lastChild);
-                    frag = range.createContextualFragment(html);
-                    el.appendChild(frag);
-                    return el.lastChild;
-                }else{
-                    el.innerHTML = html;
-                    return el.lastChild;
-                }
-            case "afterend":
-                range.setStartAfter(el);
-                frag = range.createContextualFragment(html);
-                el.parentNode.insertBefore(frag, el.nextSibling);
-                return el.nextSibling;
-            }
-            throw 'Illegal insertion point -> "' + where + '"';
-    },
-    
-    
-    insertBefore : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "beforeBegin");
-    },
-    
-    
-    insertAfter : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterEnd", "nextSibling");
-    },
-
-    
-    insertFirst : function(el, o, returnElement){
-        return this.doInsert(el, o, returnElement, "afterBegin");
-    },
-
-    // private
-    doInsert : function(el, o, returnElement, pos, sibling){
-        el = Ext.getDom(el);
-        var newNode;
-        if(this.useDom){
-            newNode = createDom(o, null);
-            el.parentNode.insertBefore(newNode, sibling ? el[sibling] : el);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml(pos, el, html);
-        }
-        return returnElement ? Ext.get(newNode, true) : newNode;
-    },
-
-    
-    append : function(el, o, returnElement){
-        el = Ext.getDom(el);
-        var newNode;
-        if(this.useDom){
-            newNode = createDom(o, null);
-            el.appendChild(newNode);
-        }else{
-            var html = createHtml(o);
-            newNode = this.insertHtml("beforeEnd", el, html);
-        }
-        return returnElement ? Ext.get(newNode, true) : newNode;
-    },
-    
-    
-    overwrite : function(el, o, returnElement){
-        el = Ext.getDom(el);
-        el.innerHTML = createHtml(o);
-        return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
-    },
-    
-    
-    createTemplate : function(o){
-        var html = createHtml(o);
-        return new Ext.Template(html);
-    }
-    };
-}();
-
-
-Ext.Template = function(html){
-    if(html instanceof Array){
-        html = html.join("");
-    }else if(arguments.length > 1){
-        html = Array.prototype.join.call(arguments, "");
-    }
-    
-    this.html = html;
-    
-};
-Ext.Template.prototype = {
-    
-    applyTemplate : function(values){
-        if(this.compiled){
-            return this.compiled(values);
-        }
-        var useF = this.disableFormats !== true;
-        var fm = Ext.util.Format, tpl = this;
-        var fn = function(m, name, format, args){
-            if(format && useF){
-                if(format.substr(0, 5) == "this."){
-                    return tpl.call(format.substr(5), values[name], values);
-                }else{
-                    if(args){
-                        // quoted values are required for strings in compiled templates, 
-                        // but for non compiled we need to strip them
-                        // quoted reversed for jsmin
-                        var re = /^\s*['"](.*)["']\s*$/;
-                        args = args.split(',');
-                        for(var i = 0, len = args.length; i < len; i++){
-                            args[i] = args[i].replace(re, "$1");
-                        }
-                        args = [values[name]].concat(args);
-                    }else{
-                        args = [values[name]];
-                    }
-                    return fm[format].apply(fm, args);
-                }
-            }else{
-                return values[name] !== undefined ? values[name] : "";
-            }
-        };
-        return this.html.replace(this.re, fn);
-    },
-    
-    
-    set : function(html, compile){
-        this.html = html;
-        this.compiled = null;
-        if(compile){
-            this.compile();
-        }
-        return this;
-    },
-    
-    
-    disableFormats : false,
-    
-    
-    re : /\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,
-    
-    
-    compile : function(){
-        var fm = Ext.util.Format;
-        var useF = this.disableFormats !== true;
-        var sep = Ext.isGecko ? "+" : ",";
-        var fn = function(m, name, format, args){
-            if(format && useF){
-                args = args ? ',' + args : "";
-                if(format.substr(0, 5) != "this."){
-                    format = "fm." + format + '(';
-                }else{
-                    format = 'this.call("'+ format.substr(5) + '", ';
-                    args = ", values";
-                }
-            }else{
-                args= ''; format = "(values['" + name + "'] == undefined ? '' : ";
-            }
-            return "'"+ sep + format + "values['" + name + "']" + args + ")"+sep+"'";
-        };
-        var body;
-        // branched to use + in gecko and [].join() in others
-        if(Ext.isGecko){
-            body = "this.compiled = function(values){ return '" +
-                   this.html.replace(/(\r\n|\n)/g, '\\n').replace(/'/g, "\\'").replace(this.re, fn) +
-                    "';};";
-        }else{
-            body = ["this.compiled = function(values){ return ['"];
-            body.push(this.html.replace(/(\r\n|\n)/g, '\\n').replace("'", "\\'").replace(this.re, fn));
-            body.push("'].join('');};");
-            body = body.join('');
-        }
-        eval(body);
-        return this;
-    },
-    
-    // private function used to call members
-    call : function(fnName, value, allValues){
-        return this[fnName](value, allValues);
-    },
-    
-    
-    insertFirst: function(el, values, returnElement){
-        return this.doInsert('afterBegin', el, values, returnElement);
-    },
-
-    
-    insertBefore: function(el, values, returnElement){
-        return this.doInsert('beforeBegin', el, values, returnElement);
-    },
-
-    
-    insertAfter : function(el, values, returnElement){
-        return this.doInsert('afterEnd', el, values, returnElement);
-    },
-    
-    
-    append : function(el, values, returnElement){
-        return this.doInsert('beforeEnd', el, values, returnElement);
-    },
-
-    doInsert : function(where, el, values, returnEl){
-        el = Ext.getDom(el);
-        var newNode = Ext.DomHelper.insertHtml(where, el, this.applyTemplate(values));
-        return returnEl ? Ext.get(newNode, true) : newNode;
-    },
-
-    
-    overwrite : function(el, values, returnElement){
-        el = Ext.getDom(el);
-        el.innerHTML = this.applyTemplate(values);
-        return returnElement ? Ext.get(el.firstChild, true) : el.firstChild;
-    }
-};
-
-Ext.Template.prototype.apply = Ext.Template.prototype.applyTemplate;
-
-// backwards compat
-Ext.DomHelper.Template = Ext.Template;
-
-
-Ext.Template.from = function(el){
-    el = Ext.getDom(el);
-    return new Ext.Template(el.value || el.innerHTML);  
-};
-
-
-Ext.MasterTemplate = function(){
-    Ext.MasterTemplate.superclass.constructor.apply(this, arguments);
-    this.originalHtml = this.html;
-    var st = {};
-    var m, re = this.subTemplateRe;
-    re.lastIndex = 0;
-    var subIndex = 0;
-    while(m = re.exec(this.html)){
-        var name = m[1], content = m[2];
-        st[subIndex] = {
-            name: name,
-            index: subIndex,
-            buffer: [],
-            tpl : new Ext.Template(content)
-        };
-        if(name){
-            st[name] = st[subIndex];
-        }
-        st[subIndex].tpl.compile();
-        st[subIndex].tpl.call = this.call.createDelegate(this);
-        subIndex++;
-    }
-    this.subCount = subIndex;
-    this.subs = st;
-};
-Ext.extend(Ext.MasterTemplate, Ext.Template, {
-    
-    subTemplateRe : /<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,
-    
-    
-     add : function(name, values){
-        if(arguments.length == 1){
-            values = arguments[0];
-            name = 0;
-        }
-        var s = this.subs[name];
-        s.buffer[s.buffer.length] = s.tpl.apply(values);
-        return this;
-    },
-    
-    
-    fill : function(name, values, reset){
-        var a = arguments;
-        if(a.length == 1 || (a.length == 2 && typeof a[1] == "boolean")){
-            values = a[0];
-            name = 0;
-            reset = a[1];
-        }
-        if(reset){
-            this.reset();
-        }
-        for(var i = 0, len = values.length; i < len; i++){
-            this.add(name, values[i]);
-        }
-        return this;
-    },
-    
-    
-     reset : function(){
-        var s = this.subs;
-        for(var i = 0; i < this.subCount; i++){
-            s[i].buffer = [];
-        }
-        return this;
-    },
-    
-    applyTemplate : function(values){
-        var s = this.subs;
-        var replaceIndex = -1;
-        this.html = this.originalHtml.replace(this.subTemplateRe, function(m, name){
-            return s[++replaceIndex].buffer.join("");
-        });
-        return Ext.MasterTemplate.superclass.applyTemplate.call(this, values);
-    },
-    
-    apply : function(){
-        return this.applyTemplate.apply(this, arguments);
-    },
-    
-    compile : function(){return this;}
-});
-
-
-Ext.MasterTemplate.prototype.addAll = Ext.MasterTemplate.prototype.fill;
- 
-Ext.MasterTemplate.from = function(el){
-    el = Ext.getDom(el);
-    return new Ext.MasterTemplate(el.value || el.innerHTML);  
-};
-
-
-Ext.DomQuery = function(){
-    var cache = {}, simpleCache = {}, valueCache = {};
-    var nonSpace = /\S/;
-    var trimRe = /^\s+|\s+$/g;
-    var tplRe = /\{(\d+)\}/g;
-    var modeRe = /^(\s?[\/>]\s?|\s|$)/;
-    var tagTokenRe = /^(#)?([\w-\*]+)/;
-    
-    function child(p, index){
-        var i = 0;
-        var n = p.firstChild;
-        while(n){
-            if(n.nodeType == 1){
-               if(++i == index){
-                   return n;
-               }
-            }
-            n = n.nextSibling;
-        }
-        return null;
-    };
-    
-    function next(n){
-        while((n = n.nextSibling) && n.nodeType != 1);
-        return n;
-    };
-    
-    function prev(n){
-        while((n = n.previousSibling) && n.nodeType != 1);
-        return n;
-    };
-    
-    function clean(d){
-        var n = d.firstChild, ni = -1;
- 	    while(n){
- 	        var nx = n.nextSibling;
- 	        if(n.nodeType == 3 && !nonSpace.test(n.nodeValue)){
- 	            d.removeChild(n);
- 	        }else{
- 	            n.nodeIndex = ++ni;
- 	        }
- 	        n = nx;
- 	    }
- 	    return this;
- 	};
-
-    function byClassName(c, a, v, re, cn){
-        if(!v){
-            return c;
-        }
-        var r = [];
-        for(var i = 0, ci; ci = c[i]; i++){
-            cn = ci.className;
-            if(cn && (' '+cn+' ').indexOf(v) != -1){
-                r[r.length] = ci;
-            }
-        }
-        return r;
-    };
-
-    function attrValue(n, attr){
-        if(!n.tagName && typeof n.length != "undefined"){
-            n = n[0];
-        }
-        if(!n){
-            return null;
-        }
-        if(attr == "for"){
-            return n.htmlFor;
-        }
-        if(attr == "class" || attr == "className"){
-            return n.className;
-        }
-        return n.getAttribute(attr) || n[attr];
-          
-    };
-    
-    function getNodes(ns, mode, tagName){
-        var result = [], cs;
-        if(!ns){
-            return result;
-        }
-        mode = mode ? mode.replace(trimRe, "") : "";
-        tagName = tagName || "*";
-        if(typeof ns.getElementsByTagName != "undefined"){
-            ns = [ns];   
-        }
-        if(mode != "/" && mode != ">"){
-            for(var i = 0, ni; ni = ns[i]; i++){
-                cs = ni.getElementsByTagName(tagName);
-                for(var j = 0, ci; ci = cs[j]; j++){
-                    result[result.length] = ci;
-                }
-            }
-        }else{
-            for(var i = 0, ni; ni = ns[i]; i++){
-                var cn = ni.getElementsByTagName(tagName);
-                for(var j = 0, cj; cj = cn[j]; j++){
-                    if(cj.parentNode == ni){
-                        result[result.length] = cj;
-                    }
-                }
-            }
-        }
-        return result;
-    };
-    
-    function concat(a, b){
-        if(b.slice){
-            return a.concat(b);
-        }
-        for(var i = 0, l = b.length; i < l; i++){
-            a[a.length] = b[i];
-        }
-        return a;
-    }
-    
-    function byTag(cs, tagName){
-        if(cs.tagName || cs == document){
-            cs = [cs];
-        }
-        if(!tagName){
-            return cs;
-        }
-        var r = []; tagName = tagName.toLowerCase();
-        for(var i = 0, ci; ci = cs[i]; i++){
-            if(ci.nodeType == 1 && ci.tagName.toLowerCase()==tagName){
-                r[r.length] = ci;
-            }
-        }
-        return r; 
-    };
-    
-    function byId(cs, attr, id){
-        if(cs.tagName || cs == document){
-            cs = [cs];
-        }
-        if(!id){
-            return cs;
-        }
-        var r = [];
-        for(var i = 0,ci; ci = cs[i]; i++){
-            if(ci && ci.id == id){
-                r[r.length] = ci;
-                return r;
-            }
-        }
-        return r; 
-    };
-    
-    function byAttribute(cs, attr, value, op, custom){
-        var r = [], st = custom=="{";
-        var f = Ext.DomQuery.operators[op];
-        for(var i = 0; ci = cs[i]; i++){
-            var a;
-            if(st){
-                a = Ext.DomQuery.getStyle(ci, attr);
-            }
-            else if(attr == "class" || attr == "className"){
-                a = ci.className;
-            }else if(attr == "for"){
-                a = ci.htmlFor;
-            }else if(attr == "href"){
-                a = ci.getAttribute("href", 2);
-            }else{
-                a = ci.getAttribute(attr);
-            }
-            if((f && f(a, value)) || (!f && a)){
-                r[r.length] = ci;
-            }
-        }
-        return r;
-    };
-    
-    function byPseudo(cs, name, value){
-        return Ext.DomQuery.pseudos[name](cs, value);
-    };
-    
-    // This is for IE MSXML which does not support expandos.
-    // IE runs the same speed using setAttribute, however FF slows way down
-    // and Safari completely fails so they need to continue to use expandos.
-    var isIE = window.ActiveXObject ? true : false;
-
-    var key = 30803;
-
-    function nodupIEXml(cs){
-        var d = ++key;
-        cs[0].setAttribute("_nodup", d);
-        var r = [cs[0]];
-        for(var i = 1, len = cs.length; i < len; i++){
-            var c = cs[i];
-            if(!c.getAttribute("_nodup") != d){
-                c.setAttribute("_nodup", d);
-                r[r.length] = c;
-            }
-        }
-        for(var i = 0, len = cs.length; i < len; i++){
-            cs[i].removeAttribute("_nodup");
-        }
-        return r;
-    }
-
-    function nodup(cs){
-        if(!cs){
-            return [];
-        }
-        var len = cs.length, c, i, r = cs, cj;
-        if(!len || typeof cs.nodeType != "undefined" || len == 1){
-            return cs;
-        }
-        if(isIE && typeof cs[0].selectSingleNode != "undefined"){
-            return nodupIEXml(cs);
-        }
-        var d = ++key;
-        cs[0]._nodup = d;
-        for(i = 1; c = cs[i]; i++){
-            if(c._nodup != d){
-                c._nodup = d;
-            }else{
-                r = [];
-                for(var j = 0; j < i; j++){
-                    r[r.length] = cs[j];
-                }
-                for(j = i+1; cj = cs[j]; j++){
-                    if(cj._nodup != d){
-                        cj._nodup = d;
-                        r[r.length] = cj;
-                    }
-                }
-                return r;
-            }
-        }
-        return r;
-    }
-
-    function quickDiffIEXml(c1, c2){
-        var d = ++key;
-        for(var i = 0, len = c1.length; i < len; i++){
-            c1[i].setAttribute("_qdiff", d);
-        }
-        var r = [];
-        for(var i = 0, len = c2.length; i < len; i++){
-            if(c2[i].getAttribute("_qdiff") != d){
-                r[r.length] = c2[i];
-            }
-        }
-        for(var i = 0, len = c1.length; i < len; i++){
-           c1[i].removeAttribute("_qdiff");
-        }
-        return r;
-    }
-
-    function quickDiff(c1, c2){
-        var len1 = c1.length;
-        if(!len1){
-            return c2;
-        }
-        if(isIE && c1[0].selectSingleNode){
-            return quickDiffIEXml(c1, c2);
-        }
-        var d = ++key;
-        for(var i = 0; i < len1; i++){
-            c1[i]._qdiff = d;
-        }
-        var r = [];
-        for(var i = 0, len = c2.length; i < len; i++){
-            if(c2[i]._qdiff != d){
-                r[r.length] = c2[i];
-            }
-        }
-        return r;
-    }
-    
-    function quickId(ns, mode, root, id){
-        if(ns == root){
-           var d = root.ownerDocument || root;
-           return d.getElementById(id);
-        }
-        ns = getNodes(ns, mode, "*");
-        return byId(ns, null, id);
-    }
-    
-    return {
-        getStyle : function(el, name){
-            return Ext.fly(el).getStyle(name);
-        },
-        
-        compile : function(path, type){
-            type = type || "select";
-            
-            var fn = ["var f = function(root){\n var mode; var n = root || document;\n"];
-            var q = path, mode, lq;
-            var tk = Ext.DomQuery.matchers;
-            var tklen = tk.length;
-            var mm;
-
-            // accept leading mode switch
-            var lmode = q.match(modeRe);
-            if(lmode && lmode[1]){
-                fn[fn.length] = 'mode="'+lmode[1]+'";';
-                q = q.replace(lmode[1], "");
-            }
-            // strip leading slashes
-            while(path.substr(0, 1)=="/"){
-                path = path.substr(1);
-            }
-                        
-            while(q && lq != q){
-                lq = q;
-                var tm = q.match(tagTokenRe);
-                if(type == "select"){
-                    if(tm){
-                        if(tm[1] == "#"){
-                            fn[fn.length] = 'n = quickId(n, mode, root, "'+tm[2]+'");';
-                        }else{
-                            fn[fn.length] = 'n = getNodes(n, mode, "'+tm[2]+'");';
-                        }
-                        q = q.replace(tm[0], "");
-                    }else if(q.substr(0, 1) != '@'){
-                        fn[fn.length] = 'n = getNodes(n, mode, "*");';
-                    }
-                }else{
-                    if(tm){
-                        if(tm[1] == "#"){
-                            fn[fn.length] = 'n = byId(n, null, "'+tm[2]+'");';
-                        }else{
-                            fn[fn.length] = 'n = byTag(n, "'+tm[2]+'");';
-                        }
-                        q = q.replace(tm[0], "");
-                    }
-                }
-                while(!(mm = q.match(modeRe))){
-                    var matched = false;
-                    for(var j = 0; j < tklen; j++){
-                        var t = tk[j];
-                        var m = q.match(t.re);
-                        if(m){
-                            fn[fn.length] = t.select.replace(tplRe, function(x, i){
-                                                    return m[i];
-                                                });
-                            q = q.replace(m[0], "");
-                            matched = true;
-                            break;
-                        }
-                    }
-                    // prevent infinite loop on bad selector
-                    if(!matched){
-                        throw 'Error parsing selector, parsing failed at "' + q + '"';
-                    }
-                }
-                if(mm[1]){
-                    fn[fn.length] = 'mode="'+mm[1]+'";';
-                    q = q.replace(mm[1], "");
-                }
-            }
-            fn[fn.length] = "return nodup(n);\n}";
-            eval(fn.join(""));
-            return f;
-        },
-        
-        
-        select : function(path, root, type){
-            if(!root || root == document){
-                root = document;
-            }
-            if(typeof root == "string"){
-                root = document.getElementById(root);
-            }
-            var paths = path.split(",");
-            var results = [];
-            for(var i = 0, len = paths.length; i < len; i++){
-                var p = paths[i].replace(trimRe, "");
-                if(!cache[p]){
-                    cache[p] = Ext.DomQuery.compile(p);
-                    if(!cache[p]){
-                        throw p + " is not a valid selector";
-                    }
-                }
-                var result = cache[p](root);
-                if(result && result != document){
-                    results = results.concat(result);
-                }
-            }
-            return results;
-        },
-        
-        
-        selectNode : function(path, root){
-            return Ext.DomQuery.select(path, root)[0];
-        },
-        
-        
-        selectValue : function(path, root, defaultValue){
-            path = path.replace(trimRe, "");
-            if(!valueCache[path]){
-                valueCache[path] = Ext.DomQuery.compile(path, "select");
-            }
-            var n = valueCache[path](root);
-            n = n[0] ? n[0] : n;
-            var v = (n && n.firstChild ? n.firstChild.nodeValue : null);
-            return (v === null ? defaultValue : v);
-        },
-        
-        
-        selectNumber : function(path, root, defaultValue){
-            var v = Ext.DomQuery.selectValue(path, root, defaultValue || 0);
-            return parseFloat(v);
-        },
-        
-        
-        is : function(el, ss){
-            if(typeof el == "string"){
-                el = document.getElementById(el);
-            }
-            var isArray = (el instanceof Array);
-            var result = Ext.DomQuery.filter(isArray ? el : [el], ss);
-            return isArray ? (result.length == el.length) : (result.length > 0);
-        },
-        
-        
-        filter : function(els, ss, nonMatches){
-            ss = ss.replace(trimRe, "");
-            if(!simpleCache[ss]){
-                simpleCache[ss] = Ext.DomQuery.compile(ss, "simple");
-            }
-            var result = simpleCache[ss](els);
-            return nonMatches ? quickDiff(result, els) : result;
-        },
-        
-        
-        matchers : [{
-                re: /^\.([\w-]+)/,
-                select: 'n = byClassName(n, null, " {1} ");'
-            }, {
-                re: /^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,
-                select: 'n = byPseudo(n, "{1}", "{2}");'
-            },{
-                re: /^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,
-                select: 'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'
-            }, {
-                re: /^#([\w-]+)/,
-                select: 'n = byId(n, null, "{1}");'
-            },{
-                re: /^@([\w-]+)/,
-                select: 'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'
-            }
-        ],
-        
-        
-        operators : {
-            "=" : function(a, v){
-                return a == v;
-            },
-            "!=" : function(a, v){
-                return a != v;
-            },
-            "^=" : function(a, v){
-                return a && a.substr(0, v.length) == v;
-            },
-            "$=" : function(a, v){
-                return a && a.substr(a.length-v.length) == v;
-            },
-            "*=" : function(a, v){
-                return a && a.indexOf(v) !== -1;
-            },
-            "%=" : function(a, v){
-                return (a % v) == 0;
-            }
-        },
-        
-        
-        pseudos : {
-            "first-child" : function(c){
-                var r = [], n;
-                for(var i = 0, ci; ci = n = c[i]; i++){
-                    while((n = n.previousSibling) && n.nodeType != 1);
-                    if(!n){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "last-child" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = n = c[i]; i++){
-                    while((n = n.nextSibling) && n.nodeType != 1);
-                    if(!n){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "nth-child" : function(c, a){
-                var r = [];
-                if(a != "odd" && a != "even"){
-                    for(var i = 0, ci; ci = c[i]; i++){
-                        var m = child(ci.parentNode, a);
-                        if(m == ci){
-                            r[r.length] = m;
-                        }
-                    }
-                    return r;
-                }
-                var p;
-                // first let's clean up the parent nodes
-                for(var i = 0, l = c.length; i < l; i++){
-                    var cp = c[i].parentNode;
-                    if(cp != p){
-                        clean(cp);
-                        p = cp;
-                    }
-                }
-                // then lets see if we match
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var m = false;
-                    if(a == "odd"){
-                        m = ((ci.nodeIndex+1) % 2 == 1);
-                    }else if(a == "even"){
-                        m = ((ci.nodeIndex+1) % 2 == 0);
-                    }
-                    if(m){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "only-child" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(!prev(ci) && !next(ci)){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "empty" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var cns = ci.childNodes, j = 0, cn, empty = true;
-                    while(cn = cns[j]){
-                        ++j;
-                        if(cn.nodeType == 1 || cn.nodeType == 3){
-                            empty = false;
-                            break;
-                        }
-                    }
-                    if(empty){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "contains" : function(c, v){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(ci.innerHTML.indexOf(v) !== -1){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "nodeValue" : function(c, v){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(ci.firstChild && ci.firstChild.nodeValue == v){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-
-            "checked" : function(c){
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(ci.checked == true){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "not" : function(c, ss){
-                return Ext.DomQuery.filter(c, ss, true);
-            },
-            
-            "odd" : function(c){
-                return this["nth-child"](c, "odd");
-            },
-            
-            "even" : function(c){
-                return this["nth-child"](c, "even");
-            },
-            
-            "nth" : function(c, a){
-                return c[a-1] || [];
-            },
-            
-            "first" : function(c){
-                return c[0] || [];
-            },
-            
-            "last" : function(c){
-                return c[c.length-1] || [];
-            },
-            
-            "has" : function(c, ss){
-                var s = Ext.DomQuery.select;
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    if(s(ss, ci).length > 0){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "next" : function(c, ss){
-                var is = Ext.DomQuery.is;
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var n = next(ci);
-                    if(n && is(n, ss)){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            },
-            
-            "prev" : function(c, ss){
-                var is = Ext.DomQuery.is;
-                var r = [];
-                for(var i = 0, ci; ci = c[i]; i++){
-                    var n = prev(ci);
-                    if(n && is(n, ss)){
-                        r[r.length] = ci;
-                    }
-                }
-                return r;
-            }
-        }
-    };
-}();
-
-
-Ext.query = Ext.DomQuery.select;
-
-
-Ext.util.Observable = function(){
-    if(this.listeners){
-        this.on(this.listeners);
-        delete this.listeners;
-    }
-};
-Ext.util.Observable.prototype = {
-    
-    fireEvent : function(){
-        var ce = this.events[arguments[0].toLowerCase()];
-        if(typeof ce == "object"){
-            return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1));
-        }else{
-            return true;
-        }
-    },
-
-    // private
-    filterOptRe : /^(?:scope|delay|buffer|single)$/,
-
-    
-    addListener : function(eventName, fn, scope, o){
-        if(typeof eventName == "object"){
-            o = eventName;
-            for(var e in o){
-                if(this.filterOptRe.test(e)){
-                    continue;
-                }
-                if(typeof o[e] == "function"){
-                    // shared options
-                    this.addListener(e, o[e], o.scope,  o);
-                }else{
-                    // individual options
-                    this.addListener(e, o[e].fn, o[e].scope, o[e]);
-                }
-            }
-            return;
-        }
-        o = (!o || typeof o == "boolean") ? {} : o;
-        eventName = eventName.toLowerCase();
-        var ce = this.events[eventName] || true;
-        if(typeof ce == "boolean"){
-            ce = new Ext.util.Event(this, eventName);
-            this.events[eventName] = ce;
-        }
-        ce.addListener(fn, scope, o);
-    },
-
-    
-    removeListener : function(eventName, fn, scope){
-        var ce = this.events[eventName.toLowerCase()];
-        if(typeof ce == "object"){
-            ce.removeListener(fn, scope);
-        }
-    },
-
-    
-    purgeListeners : function(){
-        for(var evt in this.events){
-            if(typeof this.events[evt] == "object"){
-                 this.events[evt].clearListeners();
-            }
-        }
-    },
-
-    relayEvents : function(o, events){
-        var createHandler = function(ename){
-            return function(){
-                return this.fireEvent.apply(this, Ext.combine(ename, Array.prototype.slice.call(arguments, 0)));
-            };
-        };
-        for(var i = 0, len = events.length; i < len; i++){
-            var ename = events[i];
-            if(!this.events[ename]){ this.events[ename] = true; };
-            o.on(ename, createHandler(ename), this);
-        }
-    },
-
-    
-    addEvents : function(o){
-        if(!this.events){
-            this.events = {};
-        }
-        Ext.applyIf(this.events, o);
-    },
-
-    
-    hasListener : function(eventName){
-        var e = this.events[eventName];
-        return typeof e == "object" && e.listeners.length > 0;
-    }
-};
-
-Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener;
-
-Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener;
-
-
-Ext.util.Observable.capture = function(o, fn, scope){
-    o.fireEvent = o.fireEvent.createInterceptor(fn, scope);
-};
-
-
-Ext.util.Observable.releaseCapture = function(o){
-    o.fireEvent = Ext.util.Observable.prototype.fireEvent;
-};
-
-(function(){
-
-    var createBuffered = function(h, o, scope){
-        var task = new Ext.util.DelayedTask();
-        return function(){
-            task.delay(o.buffer, h, scope, Array.prototype.slice.call(arguments, 0));
-        };
-    };
-
-    var createSingle = function(h, e, fn, scope){
-        return function(){
-            e.removeListener(fn, scope);
-            return h.apply(scope, arguments);
-        };
-    };
-
-    var createDelayed = function(h, o, scope){
-        return function(){
-            var args = Array.prototype.slice.call(arguments, 0);
-            setTimeout(function(){
-                h.apply(scope, args);
-            }, o.delay || 10);
-        };
-    };
-
-    Ext.util.Event = function(obj, name){
-        this.name = name;
-        this.obj = obj;
-        this.listeners = [];
-    };
-
-    Ext.util.Event.prototype = {
-        addListener : function(fn, scope, options){
-            var o = options || {};
-            scope = scope || this.obj;
-            if(!this.isListening(fn, scope)){
-                var l = {fn: fn, scope: scope, options: o};
-                var h = fn;
-                if(o.delay){
-                    h = createDelayed(h, o, scope);
-                }
-                if(o.single){
-                    h = createSingle(h, this, fn, scope);
-                }
-                if(o.buffer){
-                    h = createBuffered(h, o, scope);
-                }
-                l.fireFn = h;
-                if(!this.firing){ // if we are currently firing this event, don't disturb the listener loop
-                    this.listeners.push(l);
-                }else{
-                    this.listeners = this.listeners.slice(0);
-                    this.listeners.push(l);
-                }
-            }
-        },
-
-        findListener : function(fn, scope){
-            scope = scope || this.obj;
-            var ls = this.listeners;
-            for(var i = 0, len = ls.length; i < len; i++){
-                var l = ls[i];
-                if(l.fn == fn && l.scope == scope){
-                    return i;
-                }
-            }
-            return -1;
-        },
-
-        isListening : function(fn, scope){
-            return this.findListener(fn, scope) != -1;
-        },
-
-        removeListener : function(fn, scope){
-            var index;
-            if((index = this.findListener(fn, scope)) != -1){
-                if(!this.firing){
-                    this.listeners.splice(index, 1);
-                }else{
-                    this.listeners = this.listeners.slice(0);
-                    this.listeners.splice(index, 1);
-                }
-                return true;
-            }
-            return false;
-        },
-
-        clearListeners : function(){
-            this.listeners = [];
-        },
-
-        fire : function(){
-            var ls = this.listeners, scope, len = ls.length;
-            if(len > 0){
-                this.firing = true;
-                var args = Array.prototype.slice.call(arguments, 0);
-                for(var i = 0; i < len; i++){
-                    var l = ls[i];
-                    if(l.fireFn.apply(l.scope, arguments) === false){
-                        this.firing = false;
-                        return false;
-                    }
-                }
-                this.firing = false;
-            }
-            return true;
-        }
-    };
-})();
-
-Ext.EventManager = function(){
-    var docReadyEvent, docReadyProcId, docReadyState = false;
-    var resizeEvent, resizeTask, textEvent, textSize;
-    var E = Ext.lib.Event;
-    var D = Ext.lib.Dom;
-
-
-    var fireDocReady = function(){
-        if(!docReadyState){
-            docReadyState = true;
-            Ext.isReady = true;
-            if(docReadyProcId){
-                clearInterval(docReadyProcId);
-            }
-            if(Ext.isGecko || Ext.isOpera) {
-                document.removeEventListener("DOMContentLoaded", fireDocReady, false);
-            }
-            if(docReadyEvent){
-                docReadyEvent.fire();
-                docReadyEvent.clearListeners();
-            }
-        }
-    };
-    
-    var initDocReady = function(){
-        docReadyEvent = new Ext.util.Event();
-        if(Ext.isGecko || Ext.isOpera) {
-            document.addEventListener("DOMContentLoaded", fireDocReady, false);
-        }else if(Ext.isIE){
-            // inspired by  http://www.thefutureoftheweb.com/blog/2006/6/adddomloadevent
-            document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");
-            var defer = document.getElementById("ie-deferred-loader");
-            defer.onreadystatechange = function(){
-                if(this.readyState == "complete"){
-                    fireDocReady();
-                    defer.onreadystatechange = null;
-                    defer.parentNode.removeChild(defer);
-                }
-            };
-        }else if(Ext.isSafari){ 
-            docReadyProcId = setInterval(function(){
-                var rs = document.readyState;
-                if(rs == "complete") {
-                    fireDocReady();     
-                 }
-            }, 10);
-        }
-        // no matter what, make sure it fires on load
-        E.on(window, "load", fireDocReady);
-    };
-
-    var createBuffered = function(h, o){
-        var task = new Ext.util.DelayedTask(h);
-        return function(e){
-            // create new event object impl so new events don't wipe out properties
-            e = new Ext.EventObjectImpl(e);
-            task.delay(o.buffer, h, null, [e]);
-        };
-    };
-
-    var createSingle = function(h, el, ename, fn){
-        return function(e){
-            Ext.EventManager.removeListener(el, ename, fn);
-            h(e);
-        };
-    };
-
-    var createDelayed = function(h, o){
-        return function(e){
-            // create new event object impl so new events don't wipe out properties
-            e = new Ext.EventObjectImpl(e);
-            setTimeout(function(){
-                h(e);
-            }, o.delay || 10);
-        };
-    };
-
-    var listen = function(element, ename, opt, fn, scope){
-        var o = (!opt || typeof opt == "boolean") ? {} : opt;
-        fn = fn || o.fn; scope = scope || o.scope;
-        var el = Ext.getDom(element);
-        if(!el){
-            throw "Error listening for \"" + ename + '\". Element "' + element + '" doesn\'t exist.';
-        }
-        var h = function(e){
-            e = Ext.EventObject.setEvent(e);
-            var t;
-            if(o.delegate){
-                t = e.getTarget(o.delegate, el);
-                if(!t){
-                    return;
-                }
-            }else{
-                t = e.target;
-            }
-            if(o.stopEvent === true){
-                e.stopEvent();
-            }
-            if(o.preventDefault === true){
-               e.preventDefault();
-            }
-            if(o.stopPropagation === true){
-                e.stopPropagation();
-            }
-
-            if(o.normalized === false){
-                e = e.browserEvent;
-            }
-
-            fn.call(scope || el, e, t, o);
-        };
-        if(o.delay){
-            h = createDelayed(h, o);
-        }
-        if(o.single){
-            h = createSingle(h, el, ename, fn);
-        }
-        if(o.buffer){
-            h = createBuffered(h, o);
-        }
-        fn._handlers = fn._handlers || [];
-        fn._handlers.push([Ext.id(el), ename, h]);
-
-        E.on(el, ename, h);
-        if(ename == "mousewheel" && el.addEventListener){ // workaround for jQuery
-            el.addEventListener("DOMMouseScroll", h, false);
-            E.on(window, 'unload', function(){
-                el.removeEventListener("DOMMouseScroll", h, false);
-            });
-        }
-        if(ename == "mousedown" && el == document){ // fix stopped mousedowns on the document
-            Ext.EventManager.stoppedMouseDownEvent.addListener(h);
-        }
-        return h;
-    };
-
-    var stopListening = function(el, ename, fn){
-        var id = Ext.id(el), hds = fn._handlers, hd = fn;
-        if(hds){
-            for(var i = 0, len = hds.length; i < len; i++){
-                var h = hds[i];
-                if(h[0] == id && h[1] == ename){
-                    hd = h[2];
-                    hds.splice(i, 1);
-                    break;
-                }
-            }
-        }
-        E.un(el, ename, hd);
-        el = Ext.getDom(el);
-        if(ename == "mousewheel" && el.addEventListener){
-            el.removeEventListener("DOMMouseScroll", hd, false);
-        }
-        if(ename == "mousedown" && el == document){ // fix stopped mousedowns on the document
-            Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);
-        }
-    };
-
-    var propRe = /^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized)$/;
-    var pub = {
-        
-        
-        wrap : function(fn, scope, override){
-            return function(e){
-                Ext.EventObject.setEvent(e);
-                fn.call(override ? scope || window : window, Ext.EventObject, scope);
-            };
-        },
-        
-        
-        addListener : function(element, eventName, fn, scope, options){
-            if(typeof eventName == "object"){
-                var o = eventName;
-                for(var e in o){
-                    if(propRe.test(e)){
-                        continue;
-                    }
-                    if(typeof o[e] == "function"){
-                        // shared options
-                        listen(element, e, o, o[e], o.scope);
-                    }else{
-                        // individual options
-                        listen(element, e, o[e]);
-                    }
-                }
-                return;
-            }
-            return listen(element, eventName, options, fn, scope);
-        },
-        
-        
-        removeListener : function(element, eventName, fn){
-            return stopListening(element, eventName, fn);
-        },
-        
-        
-        onDocumentReady : function(fn, scope, options){
-            if(docReadyState){ // if it already fired
-                fn.call(scope || window, scope);
-                return;
-            }
-            if(!docReadyEvent){
-                initDocReady();
-            }
-            docReadyEvent.addListener(fn, scope, options);
-        },
-        
-        
-        onWindowResize : function(fn, scope, options){
-            if(!resizeEvent){
-                resizeEvent = new Ext.util.Event();
-                resizeTask = new Ext.util.DelayedTask(function(){
-                    resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                });
-                E.on(window, "resize", function(){
-                    if(Ext.isIE){
-                        resizeTask.delay(50);
-                    }else{
-                        resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-                    }
-                });
-            }
-            resizeEvent.addListener(fn, scope, options);
-        },
-
-        
-        onTextResize : function(fn, scope, options){
-            if(!textEvent){
-                textEvent = new Ext.util.Event();
-                var textEl = new Ext.Element(document.createElement('div'));
-                textEl.dom.className = 'x-text-resize';
-                textEl.dom.innerHTML = 'X';
-                textEl.appendTo(document.body);
-                textSize = textEl.dom.offsetHeight;
-                setInterval(function(){
-                    if(textEl.dom.offsetHeight != textSize){
-                        textEvent.fire(textSize, textSize = textEl.dom.offsetHeight);
-                    }
-                }, this.textResizeInterval);
-            }
-            textEvent.addListener(fn, scope, options);
-        },
-
-        
-        removeResizeListener : function(fn, scope){
-            if(resizeEvent){
-                resizeEvent.removeListener(fn, scope);
-            }
-        },
-        
-        fireResize : function(){
-            if(resizeEvent){
-                resizeEvent.fire(D.getViewWidth(), D.getViewHeight());
-            }   
-        },
-        
-        ieDeferSrc : false,
-        textResizeInterval : 50
-    };
-    
-    pub.on = pub.addListener;
-    pub.un = pub.removeListener;
-
-    pub.stoppedMouseDownEvent = new Ext.util.Event();
-    return pub;
-}();
-
-Ext.onReady = Ext.EventManager.onDocumentReady;
-
-Ext.onReady(function(){
-    var bd = Ext.get(document.body);
-    if(!bd){ return; }
-    var cls = Ext.isIE ? "ext-ie"
-            : Ext.isGecko ? "ext-gecko"
-            : Ext.isOpera ? "ext-opera"
-            : Ext.isSafari ? "ext-safari" : "";
-    if(Ext.isBorderBox){
-        cls += ' ext-border-box';
-    }
-    if(Ext.isStrict){
-        cls += ' ext-strict';
-    }
-    bd.addClass(cls);
-});
-
-Ext.EventObject = function(){
-    
-    var E = Ext.lib.Event;
-    
-    // safari keypress events for special keys return bad keycodes
-    var safariKeys = {
-        63234 : 37, // left
-        63235 : 39, // right
-        63232 : 38, // up
-        63233 : 40, // down
-        63276 : 33, // page up
-        63277 : 34, // page down
-        63272 : 46, // delete
-        63273 : 36, // home
-        63275 : 35  // end
-    };
-
-    // normalize button clicks
-    var btnMap = Ext.isIE ? {1:0,4:1,2:2} :
-                (Ext.isSafari ? {1:0,2:1,3:2} : {0:0,1:1,2:2});
-
-    Ext.EventObjectImpl = function(e){
-        if(e){
-            this.setEvent(e.browserEvent || e);
-        }
-    };
-    Ext.EventObjectImpl.prototype = {
-        
-        browserEvent : null,
-        
-        button : -1,
-        
-        shiftKey : false,
-        
-        ctrlKey : false,
-        
-        altKey : false,
-
-        
-        BACKSPACE : 8,
-        
-        TAB : 9,
-        
-        RETURN : 13,
-        
-        ENTER : 13,
-        
-        SHIFT : 16,
-        
-        CONTROL : 17,
-        
-        ESC : 27,
-        
-        SPACE : 32,
-        
-        PAGEUP : 33,
-        
-        PAGEDOWN : 34,
-        
-        END : 35,
-        
-        HOME : 36,
-        
-        LEFT : 37,
-        
-        UP : 38,
-        
-        RIGHT : 39,
-        
-        DOWN : 40,
-        
-        DELETE : 46,
-        
-        F5 : 116,
-
-           
-        setEvent : function(e){
-            if(e == this || (e && e.browserEvent)){ // already wrapped
-                return e;
-            }
-            this.browserEvent = e;
-            if(e){
-                // normalize buttons
-                this.button = e.button ? btnMap[e.button] : (e.which ? e.which-1 : -1);
-                if(e.type == 'click' && this.button == -1){
-                    this.button = 0;
-                }
-                this.shiftKey = e.shiftKey;
-                // mac metaKey behaves like ctrlKey
-                this.ctrlKey = e.ctrlKey || e.metaKey;
-                this.altKey = e.altKey;
-                // in getKey these will be normalized for the mac
-                this.keyCode = e.keyCode;
-                this.charCode = e.charCode;
-                // cache the target for the delayed and or buffered events
-                this.target = E.getTarget(e);
-                // same for XY
-                this.xy = E.getXY(e);
-            }else{
-                this.button = -1;
-                this.shiftKey = false;
-                this.ctrlKey = false;
-                this.altKey = false;
-                this.keyCode = 0;
-                this.charCode =0;
-                this.target = null;
-                this.xy = [0, 0];
-            }
-            return this;
-        },
-
-        
-        stopEvent : function(){
-            if(this.browserEvent){
-                if(this.browserEvent.type == 'mousedown'){
-                    Ext.EventManager.stoppedMouseDownEvent.fire(this);
-                }
-                E.stopEvent(this.browserEvent);
-            }
-        },
-
-        
-        preventDefault : function(){
-            if(this.browserEvent){
-                E.preventDefault(this.browserEvent);
-            }
-        },
-
-        
-        isNavKeyPress : function(){
-            var k = this.keyCode;
-            k = Ext.isSafari ? (safariKeys[k] || k) : k;
-            return (k >= 33 && k <= 40) || k == this.RETURN || k == this.TAB || k == this.ESC;
-        },
-
-        isSpecialKey : function(){
-            var k = this.keyCode;
-            return k == 9 || k == 13  || k == 40 || k == 27 ||
-            (k == 16) || (k == 17) ||
-            (k >= 18 && k <= 20) ||
-            (k >= 33 && k <= 35) ||
-            (k >= 36 && k <= 39) ||
-            (k >= 44 && k <= 45);
-        },
-        
-        stopPropagation : function(){
-            if(this.browserEvent){
-                if(this.browserEvent.type == 'mousedown'){
-                    Ext.EventManager.stoppedMouseDownEvent.fire(this);
-                }
-                E.stopPropagation(this.browserEvent);
-            }
-        },
-
-        
-        getCharCode : function(){
-            return this.charCode || this.keyCode;
-        },
-
-        
-        getKey : function(){
-            var k = this.keyCode || this.charCode;
-            return Ext.isSafari ? (safariKeys[k] || k) : k;
-        },
-
-        
-        getPageX : function(){
-            return this.xy[0];
-        },
-
-        
-        getPageY : function(){
-            return this.xy[1];
-        },
-
-        
-        getTime : function(){
-            if(this.browserEvent){
-                return E.getTime(this.browserEvent);
-            }
-            return null;
-        },
-
-        
-        getXY : function(){
-            return this.xy;
-        },
-
-        
-        getTarget : function(selector, maxDepth, returnEl){
-            return selector ? Ext.fly(this.target).findParent(selector, maxDepth, returnEl) : this.target;
-        },
-        
-        getRelatedTarget : function(){
-            if(this.browserEvent){
-                return E.getRelatedTarget(this.browserEvent);
-            }
-            return null;
-        },
-
-        
-        getWheelDelta : function(){
-            var e = this.browserEvent;
-            var delta = 0;
-            if(e.wheelDelta){ 
-                delta = e.wheelDelta/120;
-                
-                if(window.opera) delta = -delta;
-            }else if(e.detail){ 
-                delta = -e.detail/3;
-            }
-            return delta;
-        },
-
-        
-        hasModifier : function(){
-            return ((this.ctrlKey || this.altKey) || this.shiftKey) ? true : false;
-        },
-
-        
-        within : function(el, related){
-            var t = this[related ? "getRelatedTarget" : "getTarget"]();
-            return t && Ext.fly(el).contains(t);
-        },
-
-        getPoint : function(){
-            return new Ext.lib.Point(this.xy[0], this.xy[1]);
-        }
-    };
-
-    return new Ext.EventObjectImpl();
-}();
-            
-    
-
-(function(){
-var D = Ext.lib.Dom;
-var E = Ext.lib.Event;
-var A = Ext.lib.Anim;
-    
-// local style camelizing for speed
-var propCache = {};
-var camelRe = /(-[a-z])/gi;
-var camelFn = function(m, a){ return a.charAt(1).toUpperCase(); };
-var view = document.defaultView;
-
-Ext.Element = function(element, forceNew){
-    var dom = typeof element == "string" ?
-            document.getElementById(element) : element;
-    if(!dom){ // invalid id/element
-        return null;
-    }
-    if(!forceNew && Ext.Element.cache[dom.id]){ // element object already exists
-        return Ext.Element.cache[dom.id];
-    }
-    
-    this.dom = dom;
-    
-    
-    this.id = dom.id || Ext.id(dom);
-};
-
-var El = Ext.Element;
-
-El.prototype = {
-    
-    originalDisplay : "",
-    
-    visibilityMode : 1,
-    
-    defaultUnit : "px",
-    
-    setVisibilityMode : function(visMode){
-        this.visibilityMode = visMode;
-        return this;
-    },
-    
-    enableDisplayMode : function(display){
-        this.setVisibilityMode(El.DISPLAY);
-        if(typeof display != "undefined") this.originalDisplay = display;
-        return this;
-    },
-    
-    
-    findParent : function(simpleSelector, maxDepth, returnEl){
-        var p = this.dom, b = document.body, depth = 0, dq = Ext.DomQuery, stopEl;
-        maxDepth = maxDepth || 50;
-        if(typeof maxDepth != "number"){
-            stopEl = Ext.getDom(maxDepth);
-            maxDepth = 10;
-        }
-        while(p && p.nodeType == 1 && depth < maxDepth && p != b && p != stopEl){
-            if(dq.is(p, simpleSelector)){
-                return returnEl ? Ext.get(p) : p;
-            }
-            depth++;
-            p = p.parentNode;
-        }
-        return null;
-    },
-
-
-    
-    findParentNode : function(simpleSelector, maxDepth, returnEl){
-        var p = Ext.fly(this.dom.parentNode, '_internal');
-        return p ? p.findParent(simpleSelector, maxDepth, returnEl) : null;
-    },
-
-    
-    up : function(simpleSelector, maxDepth){
-        return this.findParentNode(simpleSelector, maxDepth, true);
-    },
-
-
-
-    
-    is : function(simpleSelector){
-        return Ext.DomQuery.is(this.dom, simpleSelector);    
-    },
-    
-    
-    animate : function(args, duration, onComplete, easing, animType){
-        this.anim(args, {duration: duration, callback: onComplete, easing: easing}, animType);
-        return this;
-    },
-    
-    
-    anim : function(args, opt, animType, defaultDur, defaultEase, cb){
-        animType = animType || 'run';
-        opt = opt || {};
-        var anim = Ext.lib.Anim[animType](
-            this.dom, args,
-            (opt.duration || defaultDur) || .35,
-            (opt.easing || defaultEase) || 'easeOut',
-            function(){
-                Ext.callback(cb, this);
-                Ext.callback(opt.callback, opt.scope || this, [this, opt]);
-            },
-            this
-        );
-        opt.anim = anim;
-        return anim;
-    },
-    
-    // private legacy anim prep
-    preanim : function(a, i){
-        return !a[i] ? false : (typeof a[i] == "object" ? a[i]: {duration: a[i+1], callback: a[i+2], easing: a[i+3]});
-    },
-    
-    
-    clean : function(forceReclean){
-        if(this.isCleaned && forceReclean !== true){
-            return this;
-        }
-        var ns = /\S/;
-        var d = this.dom, n = d.firstChild, ni = -1;
- 	    while(n){
- 	        var nx = n.nextSibling;
- 	        if(n.nodeType == 3 && !ns.test(n.nodeValue)){
- 	            d.removeChild(n);
- 	        }else{
- 	            n.nodeIndex = ++ni;
- 	        }
- 	        n = nx;
- 	    }
- 	    this.isCleaned = true;
- 	    return this;
- 	},    
-
-    // private
-    calcOffsetsTo : function(el){
-        el = Ext.get(el);
-        var d = el.dom;
-        var restorePos = false;
-        if(el.getStyle('position') == 'static'){
-            el.position('relative');
-            restorePos = true;
-        }
-        var x = 0, y =0;
-        var op = this.dom;
-        while(op && op != d && op.tagName != 'HTML'){
-            x+= op.offsetLeft;
-            y+= op.offsetTop;
-            op = op.offsetParent;
-        }
-        if(restorePos){
-            el.position('static');
-        }
-        return [x, y];
-    },
-
-    
-    scrollIntoView : function(container, hscroll){
-        var c = Ext.getDom(container) || document.body;
-        var el = this.dom;
-
-        var o = this.calcOffsetsTo(c),
-            l = o[0],
-            t = o[1],
-            b = t+el.offsetHeight,
-            r = l+el.offsetWidth;
-        
-        var ch = c.clientHeight;
-        var ct = parseInt(c.scrollTop, 10);
-        var cl = parseInt(c.scrollLeft, 10);
-        var cb = ct + ch;
-        var cr = cl + c.clientWidth;
-
-        if(t < ct){
-        	c.scrollTop = t;
-        }else if(b > cb){
-            c.scrollTop = b-ch;
-        }
-
-        if(hscroll !== false){
-            if(l < cl){
-                c.scrollLeft = l;
-            }else if(r > cr){
-                c.scrollLeft = r-c.clientWidth;
-            }
-        }
-        return this;
-    },
-
-    // private
-    scrollChildIntoView : function(child, hscroll){
-        Ext.fly(child, '_scrollChildIntoView').scrollIntoView(this, hscroll);
-    },
-
-    
-    autoHeight : function(animate, duration, onComplete, easing){
-        var oldHeight = this.getHeight();
-        this.clip();
-        this.setHeight(1); // force clipping
-        setTimeout(function(){
-            var height = parseInt(this.dom.scrollHeight, 10); // parseInt for Safari
-            if(!animate){
-                this.setHeight(height);
-                this.unclip();
-                if(typeof onComplete == "function"){
-                    onComplete();
-                }
-            }else{
-                this.setHeight(oldHeight); // restore original height
-                this.setHeight(height, animate, duration, function(){
-                    this.unclip();
-                    if(typeof onComplete == "function") onComplete();
-                }.createDelegate(this), easing);
-            }
-        }.createDelegate(this), 0);
-        return this;
-    },
-    
-    
-    contains : function(el){
-        if(!el){return false;}
-        return D.isAncestor(this.dom, el.dom ? el.dom : el);
-    },
-    
-    
-    isVisible : function(deep) {
-        var vis = !(this.getStyle("visibility") == "hidden" || this.getStyle("display") == "none");
-        if(deep !== true || !vis){
-            return vis;
-        }
-        var p = this.dom.parentNode;
-        while(p && p.tagName.toLowerCase() != "body"){
-            if(!Ext.fly(p, '_isVisible').isVisible()){
-                return false;
-            }
-            p = p.parentNode;
-        }
-        return true;
-    },
-    
-    
-    select : function(selector, unique){
-        return El.select(selector, unique, this.dom);
-    },
-    
-    
-    query : function(selector, unique){
-        return Ext.DomQuery.select(selector, this.dom);
-    },
-    
-    
-    child : function(selector, returnDom){
-        var n = Ext.DomQuery.selectNode(selector, this.dom);
-        return returnDom ? n : Ext.get(n);
-    },
-
-    
-    down : function(selector, returnDom){
-        var n = Ext.DomQuery.selectNode(" > " + selector, this.dom);
-        return returnDom ? n : Ext.get(n);
-    },
-
-    
-    initDD : function(group, config, overrides){
-        var dd = new Ext.dd.DD(Ext.id(this.dom), group, config);
-        return Ext.apply(dd, overrides);
-    },
-   
-    
-    initDDProxy : function(group, config, overrides){
-        var dd = new Ext.dd.DDProxy(Ext.id(this.dom), group, config);
-        return Ext.apply(dd, overrides);
-    },
-   
-    
-    initDDTarget : function(group, config, overrides){
-        var dd = new Ext.dd.DDTarget(Ext.id(this.dom), group, config);
-        return Ext.apply(dd, overrides);
-    },
-   
-    
-     setVisible : function(visible, animate){
-        if(!animate || !A){
-            if(this.visibilityMode == El.DISPLAY){
-                this.setDisplayed(visible);
-            }else{
-                this.fixDisplay();
-                this.dom.style.visibility = visible ? "visible" : "hidden";
-            }
-        }else{
-            // closure for composites
-            var dom = this.dom;
-            var visMode = this.visibilityMode;
-            if(visible){
-                this.setOpacity(.01);
-                this.setVisible(true);
-            }
-            this.anim({opacity: { to: (visible?1:0) }},
-                  this.preanim(arguments, 1),
-                  null, .35, 'easeIn', function(){
-                     if(!visible){
-                         if(visMode == El.DISPLAY){
-                             dom.style.display = "none";
-                         }else{
-                             dom.style.visibility = "hidden";
-                         }
-                         Ext.get(dom).setOpacity(1);
-                     }
-                 });
-        }
-        return this;
-    },
-
-    
-    isDisplayed : function() {
-        return this.getStyle("display") != "none";
-    },
-    
-    
-    toggle : function(animate){
-        this.setVisible(!this.isVisible(), this.preanim(arguments, 0));
-        return this;
-    },
-    
-    
-    setDisplayed : function(value) {
-        if(typeof value == "boolean"){
-           value = value ? this.originalDisplay : "none";
-        }
-        this.setStyle("display", value);
-        return this;
-    },
-    
-    
-    focus : function() {
-        try{
-            this.dom.focus();
-        }catch(e){}
-        return this;
-    },
-    
-    
-    blur : function() {
-        try{
-            this.dom.blur();
-        }catch(e){}
-        return this;
-    },
-    
-    
-    addClass : function(className){
-        if(className instanceof Array){
-            for(var i = 0, len = className.length; i < len; i++) {
-            	this.addClass(className[i]);
-            }
-        }else{
-            if(className && !this.hasClass(className)){
-                this.dom.className = this.dom.className + " " + className;
-            }
-        }
-        return this;
-    },
-    
-    
-    radioClass : function(className){
-        var siblings = this.dom.parentNode.childNodes;
-        for(var i = 0; i < siblings.length; i++) {
-        	var s = siblings[i];
-        	if(s.nodeType == 1){
-        	    Ext.get(s).removeClass(className);
-        	}
-        }
-        this.addClass(className);
-        return this;
-    },
-    
-    
-    removeClass : function(className){
-        if(!className || !this.dom.className){
-            return this;
-        }
-        if(className instanceof Array){
-            for(var i = 0, len = className.length; i < len; i++) {
-            	this.removeClass(className[i]);
-            }
-        }else{
-            if(this.hasClass(className)){
-                var re = this.classReCache[className];
-                if (!re) {
-                   re = new RegExp('(?:^|\\s+)' + className + '(?:\\s+|$)', "g");
-                   this.classReCache[className] = re;
-                }
-                this.dom.className =
-                    this.dom.className.replace(re, " ");
-            }
-        }
-        return this;
-    },
-
-    // private
-    classReCache: {},
-
-    
-    toggleClass : function(className){
-        if(this.hasClass(className)){
-            this.removeClass(className);
-        }else{
-            this.addClass(className);
-        }
-        return this;
-    },
-    
-    
-    hasClass : function(className){
-        return className && (' '+this.dom.className+' ').indexOf(' '+className+' ') != -1;
-    },
-    
-    
-    replaceClass : function(oldClassName, newClassName){
-        this.removeClass(oldClassName);
-        this.addClass(newClassName);
-        return this;
-    },
-
-    
-    getStyles : function(){
-        var a = arguments, len = a.length, r = {};
-        for(var i = 0; i < len; i++){
-            r[a[i]] = this.getStyle(a[i]);
-        }
-        return r;
-    },
-
-    
-    getStyle : function(){
-        return view && view.getComputedStyle ?
-            function(prop){
-                var el = this.dom, v, cs, camel;
-                if(prop == 'float'){
-                    prop = "cssFloat";
-                }
-                if(v = el.style[prop]){
-                    return v;
-                }
-                if(cs = view.getComputedStyle(el, "")){
-                    if(!(camel = propCache[prop])){
-                        camel = propCache[prop] = prop.replace(camelRe, camelFn);
-                    }
-                    return cs[camel];
-                }
-                return null;
-            } : 
-            function(prop){
-                var el = this.dom, v, cs, camel;
-                if(prop == 'opacity'){
-                    if(typeof el.filter == 'string'){
-                        var fv = parseFloat(el.filter.match(/alpha\(opacity=(.*)\)/i)[1]);
-                        if(!isNaN(fv)){
-                            return fv ? fv / 100 : 0;
-                        }
-                    }
-                    return 1;
-                }else if(prop == 'float'){
-                    prop = "styleFloat";
-                }
-                if(!(camel = propCache[prop])){
-                    camel = propCache[prop] = prop.replace(camelRe, camelFn);
-                }
-                if(v = el.style[camel]){
-                    return v;
-                }
-                if(cs = el.currentStyle){
-                    return cs[camel];
-                }
-                return null;
-            };
-    }(),
-    
-    
-    setStyle : function(prop, value){
-        if(typeof prop == "string"){
-            var camel;
-            if(!(camel = propCache[prop])){
-                camel = propCache[prop] = prop.replace(camelRe, camelFn);
-            }
-            if(camel == 'opacity') {
-                this.setOpacity(value);
-            }else{
-                this.dom.style[camel] = value;
-            }
-        }else{
-            for(var style in prop){
-                if(typeof prop[style] != "function"){
-                   this.setStyle(style, prop[style]);
-                }
-            }
-        }
-        return this;
-    },
-    
-    
-    applyStyles : function(style){
-        Ext.DomHelper.applyStyles(this.dom, style);
-        return this;
-    },
-    
-    
-    getX : function(){
-        return D.getX(this.dom);
-    },
-    
-    
-    getY : function(){
-        return D.getY(this.dom);
-    },
-    
-    
-    getXY : function(){
-        return D.getXY(this.dom);
-    },
-    
-    
-    setX : function(x, animate){
-        if(!animate || !A){
-            D.setX(this.dom, x);
-        }else{
-            this.setXY([x, this.getY()], this.preanim(arguments, 1));
-        }
-        return this;
-    },
-    
-    
-    setY : function(y, animate){
-        if(!animate || !A){
-            D.setY(this.dom, y);
-        }else{
-            this.setXY([this.getX(), y], this.preanim(arguments, 1));
-        }
-        return this;
-    },
-    
-    
-    setLeft : function(left){
-        this.setStyle("left", this.addUnits(left));
-        return this;
-    },
-    
-    
-    setTop : function(top){
-        this.setStyle("top", this.addUnits(top));
-        return this;
-    },
-    
-    
-    setRight : function(right){
-        this.setStyle("right", this.addUnits(right));
-        return this;
-    },
-    
-    
-    setBottom : function(bottom){
-        this.setStyle("bottom", this.addUnits(bottom));
-        return this;
-    },
-    
-    
-    setXY : function(pos, animate){
-        if(!animate || !A){
-            D.setXY(this.dom, pos);
-        }else{
-            this.anim({points: {to: pos}}, this.preanim(arguments, 1), 'motion');
-        }
-        return this;
-    },
-    
-    
-    setLocation : function(x, y, animate){
-        this.setXY([x, y], this.preanim(arguments, 2));
-        return this;
-    },
-    
-    
-    moveTo : function(x, y, animate){
-        this.setXY([x, y], this.preanim(arguments, 2));
-        return this;
-    },
-    
-    
-    getRegion : function(){
-        return D.getRegion(this.dom);
-    },
-    
-    
-    getHeight : function(contentHeight){
-        var h = this.dom.offsetHeight || 0;
-        return contentHeight !== true ? h : h-this.getBorderWidth("tb")-this.getPadding("tb");
-    },
-
-    
-    getWidth : function(contentWidth){
-        var w = this.dom.offsetWidth || 0;
-        return contentWidth !== true ? w : w-this.getBorderWidth("lr")-this.getPadding("lr");
-    },
-
-    
-    getComputedHeight : function(){
-        var h = Math.max(this.dom.offsetHeight, this.dom.clientHeight);
-        if(!h){
-            h = parseInt(this.getStyle('height'), 10) || 0;
-            if(!this.isBorderBox()){
-                h += this.getFrameWidth('tb');
-            }
-        }
-        return h;
-    },
-
-    
-    getComputedWidth : function(){
-        var w = Math.max(this.dom.offsetWidth, this.dom.clientWidth);
-        if(!w){
-            w = parseInt(this.getStyle('width'), 10) || 0;
-            if(!this.isBorderBox()){
-                w += this.getFrameWidth('lr');
-            }
-        }
-        return w;
-    },
-
-    
-    getSize : function(contentSize){
-        return {width: this.getWidth(contentSize), height: this.getHeight(contentSize)};
-    },
-
-    
-    getViewSize : function(){
-        var d = this.dom, doc = document, aw = 0, ah = 0;
-        if(d == doc || d == doc.body){
-            return {width : D.getViewWidth(), height: D.getViewHeight()};
-        }else{
-            return {
-                width : d.clientWidth,
-                height: d.clientHeight
-            };
-        }
-    },
-
-    
-    getValue : function(asNumber){
-        return asNumber ? parseInt(this.dom.value, 10) : this.dom.value;
-    },
-    
-    // private
-    adjustWidth : function(width){
-        if(typeof width == "number"){
-            if(this.autoBoxAdjust && !this.isBorderBox()){
-               width -= (this.getBorderWidth("lr") + this.getPadding("lr"));
-            }
-            if(width < 0){
-                width = 0;
-            }
-        }
-        return width;
-    },
-    
-    // private
-    adjustHeight : function(height){
-        if(typeof height == "number"){
-           if(this.autoBoxAdjust && !this.isBorderBox()){
-               height -= (this.getBorderWidth("tb") + this.getPadding("tb"));
-           }
-           if(height < 0){
-               height = 0;
-           }
-        }
-        return height;
-    },
-    
-    
-    setWidth : function(width, animate){
-        width = this.adjustWidth(width);
-        if(!animate || !A){
-            this.dom.style.width = this.addUnits(width); 
-        }else{
-            this.anim({width: {to: width}}, this.preanim(arguments, 1));
-        }
-        return this;
-    },
-    
-    
-     setHeight : function(height, animate){
-        height = this.adjustHeight(height);
-        if(!animate || !A){
-            this.dom.style.height = this.addUnits(height);
-        }else{
-            this.anim({height: {to: height}}, this.preanim(arguments, 1));
-        }
-        return this;
-    },
-    
-    
-     setSize : function(width, height, animate){
-        if(typeof width == "object"){ // in case of object from getSize()
-            height = width.height; width = width.width;
-        }
-        width = this.adjustWidth(width); height = this.adjustHeight(height);
-        if(!animate || !A){
-            this.dom.style.width = this.addUnits(width);
-            this.dom.style.height = this.addUnits(height);
-        }else{
-            this.anim({width: {to: width}, height: {to: height}}, this.preanim(arguments, 2));
-        }
-        return this;
-    },
-
-    
-    setBounds : function(x, y, width, height, animate){
-        if(!animate || !A){
-            this.setSize(width, height);
-            this.setLocation(x, y);
-        }else{
-            width = this.adjustWidth(width); height = this.adjustHeight(height);
-            this.anim({points: {to: [x, y]}, width: {to: width}, height: {to: height}}, 
-                          this.preanim(arguments, 4), 'motion');
-        }
-        return this;
-    },
-    
-    
-    setRegion : function(region, animate){
-        this.setBounds(region.left, region.top, region.right-region.left, region.bottom-region.top, this.preanim(arguments, 1));
-        return this;
-    },
-
-    
-    addListener : function(eventName, fn, scope, options){
-        Ext.EventManager.on(this.dom,  eventName, fn, scope || this, options);
-    },
-
-    
-    removeListener : function(eventName, fn){
-        Ext.EventManager.removeListener(this.dom,  eventName, fn);
-        return this;
-    },
-    
-    
-    removeAllListeners : function(){
-        E.purgeElement(this.dom);
-        return this;
-    },
-    
-    relayEvent : function(eventName, observable){
-        this.on(eventName, function(e){
-            observable.fireEvent(eventName, e);
-        });  
-    },
-    
-    
-     setOpacity : function(opacity, animate){
-        if(!animate || !A){
-            var s = this.dom.style;
-            if(Ext.isIE){
-                s.zoom = 1;
-                s.filter = (s.filter || '').replace(/alpha\([^\)]*\)/gi,"") +
-                           (opacity == 1 ? "" : "alpha(opacity=" + opacity * 100 + ")");
-            }else{
-                s.opacity = opacity;
-            }
-        }else{
-            this.anim({opacity: {to: opacity}}, this.preanim(arguments, 1), null, .35, 'easeIn');
-        }
-        return this;
-    },
-    
-    
-    getLeft : function(local){
-        if(!local){
-            return this.getX();
-        }else{
-            return parseInt(this.getStyle("left"), 10) || 0;
-        }
-    },
-    
-    
-    getRight : function(local){
-        if(!local){
-            return this.getX() + this.getWidth();
-        }else{
-            return (this.getLeft(true) + this.getWidth()) || 0;
-        }
-    },
-    
-    
-    getTop : function(local) {
-        if(!local){
-            return this.getY();
-        }else{
-            return parseInt(this.getStyle("top"), 10) || 0;
-        }
-    },
-    
-    
-    getBottom : function(local){
-        if(!local){
-            return this.getY() + this.getHeight();
-        }else{
-            return (this.getTop(true) + this.getHeight()) || 0;
-        }
-    },
-
-    
-    position : function(pos, zIndex, x, y){
-        if(!pos){
-           if(this.getStyle('position') == 'static'){
-               this.setStyle('position', 'relative');
-           }
-        }else{
-            this.setStyle("position", pos);
-        }
-        if(zIndex){
-            this.setStyle("z-index", zIndex);
-        }
-        if(x !== undefined && y !== undefined){
-            this.setXY([x, y]);
-        }else if(x !== undefined){
-            this.setX(x);
-        }else if(y !== undefined){
-            this.setY(y);
-        }
-    },
-    
-    
-    clearPositioning : function(value){
-        value = value ||'';
-        this.setStyle({
-            "left": value,
-            "right": value,
-            "top": value,
-            "bottom": value,
-            "z-index": "",
-            "position" : "static"
-        });
-        return this;
-    },
-    
-    
-    getPositioning : function(){
-        var l = this.getStyle("left");
-        var t = this.getStyle("top");
-        return {
-            "position" : this.getStyle("position"),
-            "left" : l,
-            "right" : l ? "" : this.getStyle("right"),
-            "top" : t,
-            "bottom" : t ? "" : this.getStyle("bottom"),
-            "z-index" : this.getStyle("z-index")
-        };
-    },
-
-    
-    getBorderWidth : function(side){
-        return this.addStyles(side, El.borders);
-    },
-    
-    
-    getPadding : function(side){
-        return this.addStyles(side, El.paddings);
-    },
-    
-    
-    setPositioning : function(pc){
-        this.applyStyles(pc);
-        if(pc.right == "auto"){
-            this.dom.style.right = "";
-        }
-        if(pc.bottom == "auto"){
-            this.dom.style.bottom = "";
-        }
-        return this;
-    },
-
-    // private
-    fixDisplay : function(){
-        if(this.getStyle("display") == "none"){
-            this.setStyle("visibility", "hidden");
-            this.setStyle("display", this.originalDisplay); // first try reverting to default
-            if(this.getStyle("display") == "none"){ // if that fails, default to block
-                this.setStyle("display", "block");
-            }
-        }
-    },
-
-    
-     setLeftTop : function(left, top){
-        this.dom.style.left = this.addUnits(left);
-        this.dom.style.top = this.addUnits(top);
-        return this;
-    },
-    
-    
-     move : function(direction, distance, animate){
-        var xy = this.getXY();
-        direction = direction.toLowerCase();
-        switch(direction){
-            case "l":
-            case "left":
-                this.moveTo(xy[0]-distance, xy[1], this.preanim(arguments, 2));
-                break;
-           case "r":
-           case "right":
-                this.moveTo(xy[0]+distance, xy[1], this.preanim(arguments, 2));
-                break;
-           case "t":
-           case "top":
-           case "up":
-                this.moveTo(xy[0], xy[1]-distance, this.preanim(arguments, 2));
-                break;
-           case "b":
-           case "bottom":
-           case "down":
-                this.moveTo(xy[0], xy[1]+distance, this.preanim(arguments, 2));
-                break;
-        }
-        return this;
-    },
-    
-    
-    clip : function(){
-        if(!this.isClipped){
-           this.isClipped = true;
-           this.originalClip = {
-               "o": this.getStyle("overflow"),
-               "x": this.getStyle("overflow-x"),
-               "y": this.getStyle("overflow-y")
-           };
-           this.setStyle("overflow", "hidden");
-           this.setStyle("overflow-x", "hidden");
-           this.setStyle("overflow-y", "hidden");
-        }
-        return this;
-    },
-    
-    
-    unclip : function(){
-        if(this.isClipped){
-            this.isClipped = false;
-            var o = this.originalClip;
-            if(o.o){this.setStyle("overflow", o.o);}
-            if(o.x){this.setStyle("overflow-x", o.x);}
-            if(o.y){this.setStyle("overflow-y", o.y);}
-        }
-        return this;
-    },
-
-
-    
-    getAnchorXY : function(anchor, local, s){
-        //Passing a different size is useful for pre-calculating anchors,
-        //especially for anchored animations that change the el size.
-
-        var w, h, vp = false;
-        if(!s){
-            var d = this.dom;
-            if(d == document.body || d == document){
-                vp = true;
-                w = D.getViewWidth(); h = D.getViewHeight();
-            }else{
-                w = this.getWidth(); h = this.getHeight();
-            }
-        }else{
-            w = s.width;  h = s.height;
-        }
-        var x = 0, y = 0, r = Math.round;
-        switch((anchor || "tl").toLowerCase()){
-            case "c":
-                x = r(w*.5);
-                y = r(h*.5);
-            break;
-            case "t":
-                x = r(w*.5);
-                y = 0;
-            break;
-            case "l":
-                x = 0;
-                y = r(h*.5);
-            break;
-            case "r":
-                x = w;
-                y = r(h*.5);
-            break;
-            case "b":
-                x = r(w*.5);
-                y = h;
-            break;
-            case "tl":
-                x = 0;
-                y = 0;
-            break;
-            case "bl":
-                x = 0;
-                y = h;
-            break;
-            case "br":
-                x = w;
-                y = h;
-            break;
-            case "tr":
-                x = w;
-                y = 0;
-            break;
-        }
-        if(local === true){
-            return [x, y];
-        }
-        if(vp){
-            var sc = this.getScroll();
-            return [x + sc.left, y + sc.top];
-        }
-        //Add the element's offset xy
-        var o = this.getXY();
-        return [x+o[0], y+o[1]];
-    },
-
-    
-    getAlignToXY : function(el, p, o){
-        el = Ext.get(el);
-        var d = this.dom;
-        if(!el.dom){
-            throw "Element.alignTo with an element that doesn't exist";
-        }
-        var c = false; //constrain to viewport
-        var p1 = "", p2 = "";
-        o = o || [0,0];
-
-        if(!p){
-            p = "tl-bl";
-        }else if(p == "?"){
-            p = "tl-bl?";
-        }else if(p.indexOf("-") == -1){
-            p = "tl-" + p;
-        }
-        p = p.toLowerCase();
-        var m = p.match(/^([a-z]+)-([a-z]+)(\?)?$/);
-        if(!m){
-           throw "Element.alignTo with an invalid alignment " + p;
-        }
-        p1 = m[1]; p2 = m[2]; c = !!m[3];
-
-        //Subtract the aligned el's internal xy from the target's offset xy
-        //plus custom offset to get the aligned el's new offset xy
-        var a1 = this.getAnchorXY(p1, true);
-        var a2 = el.getAnchorXY(p2, false);
-        var x = a2[0] - a1[0] + o[0];
-        var y = a2[1] - a1[1] + o[1];
-        if(c){
-            //constrain the aligned el to viewport if necessary
-            var w = this.getWidth(), h = this.getHeight(), r = el.getRegion();
-            // 5px of margin for ie
-            var dw = D.getViewWidth()-5, dh = D.getViewHeight()-5;
-
-            //If we are at a viewport boundary and the aligned el is anchored on a target border that is
-            //perpendicular to the vp border, allow the aligned el to slide on that border,
-            //otherwise swap the aligned el to the opposite border of the target.
-            var p1y = p1.charAt(0), p1x = p1.charAt(p1.length-1);
-           var p2y = p2.charAt(0), p2x = p2.charAt(p2.length-1);
-           var swapY = ((p1y=="t" && p2y=="b") || (p1y=="b" && p2y=="t"));
-           var swapX = ((p1x=="r" && p2x=="l") || (p1x=="l" && p2x=="r"));
-
-           var doc = document;
-           var scrollX = (doc.documentElement.scrollLeft || doc.body.scrollLeft || 0)+5;
-           var scrollY = (doc.documentElement.scrollTop || doc.body.scrollTop || 0)+5;
-
-           if((x+w) > dw + scrollX){
-                x = swapX ? r.left-w : dw+scrollX-w;
-            }
-           if(x < scrollX){
-               x = swapX ? r.right : scrollX;
-           }
-           if((y+h) > dh + scrollY){
-                y = swapY ? r.top-h : dh+scrollY-h;
-            }
-           if (y < scrollY){
-               y = swapY ? r.bottom : scrollY;
-           }
-        }
-        return [x,y];
-    },
-
-    // private
-    getConstrainToXY : function(){
-        var os = {top:0, left:0, bottom:0, right: 0};
-
-        return function(el, local, offsets){
-            el = Ext.get(el);
-            offsets = offsets ? Ext.applyIf(offsets, os) : os;
-
-            var vw, vh, vx = 0, vy = 0;
-            if(el.dom == document.body || el.dom == document){
-                vw = Ext.lib.Dom.getViewWidth();
-                vh = Ext.lib.Dom.getViewHeight();
-            }else{
-                vw = el.dom.clientWidth;
-                vh = el.dom.clientHeight;
-                if(!local){
-                    var vxy = el.getXY();
-                    vx = vxy[0];
-                    vy = vxy[1];
-                }
-            }
-
-            var s = el.getScroll();
-
-            vx += offsets.left + s.left;
-            vy += offsets.top + s.top;
-
-            vw -= offsets.right;
-            vh -= offsets.bottom;
-
-            var vr = vx+vw;
-            var vb = vy+vh;
-
-            var xy = !local ? this.getXY() : [this.getLeft(true), this.getTop(true)];
-            var x = xy[0], y = xy[1];
-            var w = this.dom.offsetWidth, h = this.dom.offsetHeight;
-
-            // only move it if it needs it
-            var moved = false;
-
-            // first validate right/bottom
-            if((x + w) > vr){
-                x = vr - w;
-                moved = true;
-            }
-            if((y + h) > vb){
-                y = vb - h;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < vx){
-                x = vx;
-                moved = true;
-            }
-            if(y < vy){
-                y = vy;
-                moved = true;
-            }
-            return moved ? [x, y] : false;
-        };
-    }(),
-
-    
-    alignTo : function(element, position, offsets, animate){
-        var xy = this.getAlignToXY(element, position, offsets);
-        this.setXY(xy, this.preanim(arguments, 3));
-        return this;
-    },
-
-    
-    anchorTo : function(el, alignment, offsets, animate, monitorScroll, callback){
-        var action = function(){
-            this.alignTo(el, alignment, offsets, animate);
-            Ext.callback(callback, this);
-        };
-        Ext.EventManager.onWindowResize(action, this);
-        var tm = typeof monitorScroll;
-        if(tm != 'undefined'){
-            Ext.EventManager.on(window, 'scroll', action, this,
-                {buffer: tm == 'number' ? monitorScroll : 50});
-        }
-        action.call(this); // align immediately
-        return this;
-    },
-    
-    clearOpacity : function(){
-        if (window.ActiveXObject) {
-            if(typeof this.dom.style.filter == 'string' && (/alpha/i).test(this.dom.style.filter)){
-                this.dom.style.filter = "";
-            }
-        } else {
-            this.dom.style.opacity = "";
-            this.dom.style["-moz-opacity"] = "";
-            this.dom.style["-khtml-opacity"] = "";
-        }
-        return this;
-    },
-    
-    
-    hide : function(animate){
-        this.setVisible(false, this.preanim(arguments, 0));
-        return this;
-    },
-    
-    
-    show : function(animate){
-        this.setVisible(true, this.preanim(arguments, 0));
-        return this;
-    },
-    
-    
-    addUnits : function(size){
-        return Ext.Element.addUnits(size, this.defaultUnit);
-    },
-    
-    
-    beginMeasure : function(){
-        var el = this.dom;
-        if(el.offsetWidth || el.offsetHeight){
-            return this; // offsets work already
-        }
-        var changed = [];
-        var p = this.dom, b = document.body; // start with this element
-        while((!el.offsetWidth && !el.offsetHeight) && p && p.tagName && p != b){
-            var pe = Ext.get(p);
-            if(pe.getStyle('display') == 'none'){
-                changed.push({el: p, visibility: pe.getStyle("visibility")});
-                p.style.visibility = "hidden";
-                p.style.display = "block";
-            }
-            p = p.parentNode;
-        }
-        this._measureChanged = changed;
-        return this;
-               
-    },
-    
-    
-    endMeasure : function(){
-        var changed = this._measureChanged;
-        if(changed){
-            for(var i = 0, len = changed.length; i < len; i++) {
-            	var r = changed[i];
-            	r.el.style.visibility = r.visibility;
-                r.el.style.display = "none";
-            }
-            this._measureChanged = null;
-        }
-        return this;
-    },
-    
-    
-    update : function(html, loadScripts, callback){
-        if(typeof html == "undefined"){
-            html = "";
-        }
-        if(loadScripts !== true){
-            this.dom.innerHTML = html;
-            if(typeof callback == "function"){
-                callback();
-            }
-            return this;
-        }
-        var id = Ext.id();
-        var dom = this.dom;
-        
-        html += '<span id="' + id + '"></span>';
-        
-        E.onAvailable(id, function(){
-            var hd = document.getElementsByTagName("head")[0];
-            var re = /(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;
-            var srcRe = /\ssrc=([\'\"])(.*?)\1/i;
-            var typeRe = /\stype=([\'\"])(.*?)\1/i;
-            
-            var match;
-            while(match = re.exec(html)){
-                var attrs = match[1];
-                var srcMatch = attrs ? attrs.match(srcRe) : false;
-                if(srcMatch && srcMatch[2]){
-                   var s = document.createElement("script");
-                   s.src = srcMatch[2];
-                   var typeMatch = attrs.match(typeRe);
-                   if(typeMatch && typeMatch[2]){
-                       s.type = typeMatch[2];
-                   }
-                   hd.appendChild(s);
-                }else if(match[2] && match[2].length > 0){
-                   eval(match[2]);
-                }
-            }
-            var el = document.getElementById(id);
-            if(el){el.parentNode.removeChild(el);}
-            if(typeof callback == "function"){
-                callback();
-            }
-        });
-        dom.innerHTML = html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig, "");
-        return this;
-    },
-    
-    
-    load : function(){
-        var um = this.getUpdateManager();
-        um.update.apply(um, arguments);
-        return this;
-    },
-    
-    
-    getUpdateManager : function(){
-        if(!this.updateManager){
-            this.updateManager = new Ext.UpdateManager(this);
-        }
-        return this.updateManager;
-    },
-    
-    
-    unselectable : function(){
-        this.dom.unselectable = "on";
-        this.swallowEvent("selectstart", true);
-        this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");
-        this.addClass("x-unselectable");
-        return this;
-    },
-    
-    
-    getCenterXY : function(){
-        return this.getAlignToXY(document, 'c-c');
-    },
-
-    
-    center : function(centerIn){
-        this.alignTo(centerIn || document, 'c-c');
-        return this;
-    },
-
-    
-    isBorderBox : function(){
-        return noBoxAdjust[this.dom.tagName.toLowerCase()] || Ext.isBorderBox;
-    },
-    
-    
-    getBox : function(contentBox, local){
-        var xy;
-        if(!local){
-            xy = this.getXY();
-        }else{
-            var left = parseInt(this.getStyle("left"), 10) || 0;
-            var top = parseInt(this.getStyle("top"), 10) || 0;
-            xy = [left, top];
-        }
-        var el = this.dom, w = el.offsetWidth, h = el.offsetHeight, bx;
-        if(!contentBox){
-            bx = {x: xy[0], y: xy[1], 0: xy[0], 1: xy[1], width: w, height: h};
-        }else{
-            var l = this.getBorderWidth("l")+this.getPadding("l");
-            var r = this.getBorderWidth("r")+this.getPadding("r");
-            var t = this.getBorderWidth("t")+this.getPadding("t");
-            var b = this.getBorderWidth("b")+this.getPadding("b");
-            bx = {x: xy[0]+l, y: xy[1]+t, 0: xy[0]+l, 1: xy[1]+t, width: w-(l+r), height: h-(t+b)};
-        }
-        bx.right = bx.x + bx.width;
-        bx.bottom = bx.y + bx.height;
-        return bx;
-    },
-
-    
-    getFrameWidth : function(sides, onlyContentBox){
-        return onlyContentBox && Ext.isBorderBox ? 0 : (this.getPadding(sides) + this.getBorderWidth(sides));
-    },
-
-    
-    setBox : function(box, adjust, animate){
-        var w = box.width, h = box.height;
-        if((adjust && !this.autoBoxAdjust) && !this.isBorderBox()){
-           w -= (this.getBorderWidth("lr") + this.getPadding("lr"));
-           h -= (this.getBorderWidth("tb") + this.getPadding("tb"));
-        }
-        this.setBounds(box.x, box.y, w, h, this.preanim(arguments, 2));
-        return this;
-    },
-    
-    
-     repaint : function(){
-        var dom = this.dom;
-        this.addClass("x-repaint");
-        setTimeout(function(){
-            Ext.get(dom).removeClass("x-repaint");
-        }, 1);
-        return this;
-    },
-    
-    
-    getMargins : function(side){
-        if(!side){
-            return {
-                top: parseInt(this.getStyle("margin-top"), 10) || 0,
-                left: parseInt(this.getStyle("margin-left"), 10) || 0,
-                bottom: parseInt(this.getStyle("margin-bottom"), 10) || 0,
-                right: parseInt(this.getStyle("margin-right"), 10) || 0
-            };
-        }else{
-            return this.addStyles(side, El.margins);
-         }
-    },
-
-    // private
-    addStyles : function(sides, styles){
-        var val = 0;
-        for(var i = 0, len = sides.length; i < len; i++){
-             var w = parseInt(this.getStyle(styles[sides.charAt(i)]), 10);
-             if(!isNaN(w)) val += w;
-        }
-        return val;
-    },
-    
-    
-    createProxy : function(config, renderTo, matchBox){
-        if(renderTo){
-            renderTo = Ext.getDom(renderTo);
-        }else{
-            renderTo = document.body;
-        }
-        config = typeof config == "object" ?
-            config : {tag : "div", cls: config};
-        var proxy = Ext.DomHelper.append(renderTo, config, true);
-        if(matchBox){
-           proxy.setBox(this.getBox());
-        }
-        return proxy;
-    },
-    
-    
-    mask : function(msg, msgCls){
-        if(this.getStyle("position") == "static"){
-            this.setStyle("position", "relative");
-        }
-        if(!this._mask){
-            this._mask = Ext.DomHelper.append(this.dom, {tag:"div", cls:"ext-el-mask"}, true);
-        }
-        this.addClass("x-masked");
-        this._mask.setDisplayed(true);
-        if(typeof msg == 'string'){
-            if(!this._maskMsg){
-                this._maskMsg = Ext.DomHelper.append(this.dom, {tag:"div", cls:"ext-el-mask-msg", cn:{tag:'div'}}, true);
-            }
-            var mm = this._maskMsg;
-            mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";
-            mm.dom.firstChild.innerHTML = msg;
-            mm.setDisplayed(true);
-            mm.center(this);
-        }
-        return this._mask;
-    },
-    
-    
-    unmask : function(removeEl){
-        if(this._mask){
-            if(removeEl === true){
-                this._mask.remove();
-                delete this._mask;
-                if(this._maskMsg){
-                    this._maskMsg.remove();
-                    delete this._maskMsg;
-                }
-            }else{
-                this._mask.setDisplayed(false);
-                if(this._maskMsg){
-                    this._maskMsg.setDisplayed(false);
-                }
-            }
-        }
-        this.removeClass("x-masked");
-    },
-
-    
-    isMasked : function(){
-        return this._mask && this._mask.isVisible();
-    },
-
-    
-    createShim : function(){
-        var el = document.createElement('iframe');
-        el.frameBorder = 'no';
-        el.className = 'ext-shim';
-        if(Ext.isIE && Ext.isSecure){
-            el.src = Ext.SSL_SECURE_URL;
-        }
-        var shim = Ext.get(this.dom.parentNode.insertBefore(el, this.dom));
-        shim.autoBoxAdjust = false;
-        return shim;
-    },
-
-    
-    remove : function(){
-        if(this.dom.parentNode){
-            this.dom.parentNode.removeChild(this.dom);
-        }
-        delete El.cache[this.dom.id];
-    },
-
-    
-    addClassOnOver : function(className, preventFlicker){
-        this.on("mouseover", function(){
-            Ext.fly(this, '_internal').addClass(className);
-        }, this.dom);
-        var removeFn = function(e){
-            if(preventFlicker !== true || !e.within(this, true)){
-                Ext.fly(this, '_internal').removeClass(className);
-            }
-        };
-        this.on("mouseout", removeFn, this.dom);
-        return this;
-    },
-
-    
-    addClassOnFocus : function(className){
-        this.on("focus", function(){
-            Ext.fly(this, '_internal').addClass(className);
-        }, this.dom);
-        this.on("blur", function(){
-            Ext.fly(this, '_internal').removeClass(className);
-        }, this.dom);
-        return this;
-    },
-    
-    addClassOnClick : function(className){
-        var dom = this.dom;
-        this.on("mousedown", function(){
-            Ext.fly(dom, '_internal').addClass(className);
-            var d = Ext.get(document);
-            var fn = function(){
-                Ext.fly(dom, '_internal').removeClass(className);
-                d.removeListener("mouseup", fn);
-            };
-            d.on("mouseup", fn);
-        });
-        return this;
-    },
-
-    
-    swallowEvent : function(eventName, preventDefault){
-        var fn = function(e){
-            e.stopPropagation();
-            if(preventDefault){
-                e.preventDefault();
-            }
-        };
-        if(eventName instanceof Array){
-            for(var i = 0, len = eventName.length; i < len; i++){
-                 this.on(eventName[i], fn);
-            }
-            return this;
-        }
-        this.on(eventName, fn);
-        return this;
-    },
-
-    
-    fitToParent : function(monitorResize, targetParent){
-        var p = Ext.get(targetParent || this.dom.parentNode);
-        this.setSize(p.getComputedWidth()-p.getFrameWidth('lr'), p.getComputedHeight()-p.getFrameWidth('tb'));
-        if(monitorResize === true){
-            Ext.EventManager.onWindowResize(this.fitToParent.createDelegate(this, []));
-        }
-        return this;
-    },
-    
-    
-    getNextSibling : function(){
-        var n = this.dom.nextSibling;
-        while(n && n.nodeType != 1){
-            n = n.nextSibling;
-        }
-        return n;
-    },
-    
-    
-    getPrevSibling : function(){
-        var n = this.dom.previousSibling;
-        while(n && n.nodeType != 1){
-            n = n.previousSibling;
-        }
-        return n;
-    },
-    
-    
-    
-    appendChild: function(el){
-        el = Ext.get(el);
-        el.appendTo(this);
-        return this;
-    },
-    
-    
-    createChild: function(config, insertBefore, returnDom){
-        config = config || {tag:'div'};
-        if(insertBefore){
-            return Ext.DomHelper.insertBefore(insertBefore, config, returnDom !== true);
-        }
-        return Ext.DomHelper[!this.dom.firstChild ? 'overwrite' : 'append'](this.dom, config,  returnDom !== true);
-    },
-    
-    
-    appendTo: function(el){
-        el = Ext.getDom(el);
-        el.appendChild(this.dom);
-        return this;
-    },
-    
-    
-    insertBefore: function(el){
-        el = Ext.getDom(el);
-        el.parentNode.insertBefore(this.dom, el);
-        return this;
-    },
-    
-    
-    insertAfter: function(el){
-        el = Ext.getDom(el);
-        el.parentNode.insertBefore(this.dom, el.nextSibling);
-        return this;
-    },
-
-    
-    insertFirst: function(el, returnDom){
-        el = el || {};
-        if(typeof el == 'object' && !el.nodeType){ // dh config
-            return this.createChild(el, this.dom.firstChild, returnDom);
-        }else{
-            el = Ext.getDom(el);
-            this.dom.insertBefore(el, this.dom.firstChild);
-            return !returnDom ? Ext.get(el) : el;
-        }
-    },
-
-    
-    insertSibling: function(el, where, returnDom){
-        where = where ? where.toLowerCase() : 'before';
-        el = el || {};
-        var rt, refNode = where == 'before' ? this.dom : this.dom.nextSibling;
-
-        if(typeof el == 'object' && !el.nodeType){ // dh config
-            if(where == 'after' && !this.dom.nextSibling){
-                rt = Ext.DomHelper.append(this.dom.parentNode, el, !returnDom);
-            }else{
-                rt = Ext.DomHelper[where == 'after' ? 'insertAfter' : 'insertBefore'](this.dom, el, !returnDom);
-            }
-
-        }else{
-            rt = this.dom.parentNode.insertBefore(Ext.getDom(el),
-                        where == 'before' ? this.dom : this.dom.nextSibling);
-            if(!returnDom){
-                rt = Ext.get(rt);
-            }
-        }
-        return rt;
-    },
-
-    
-    wrap: function(config, returnDom){
-        if(!config){
-            config = {tag: "div"};
-        }
-        var newEl = Ext.DomHelper.insertBefore(this.dom, config, !returnDom);
-        newEl.dom ? newEl.dom.appendChild(this.dom) : newEl.appendChild(this.dom);
-        return newEl;
-    },
-    
-    
-    replace: function(el){
-        el = Ext.get(el);
-        this.insertBefore(el);
-        el.remove();
-        return this;
-    },
-    
-    
-    insertHtml : function(where, html, returnEl){
-        var el = Ext.DomHelper.insertHtml(where, this.dom, html);
-        return returnEl ? Ext.get(el) : el;
-    },
-    
-    
-    set : function(o, useSet){
-        var el = this.dom;
-        useSet = typeof useSet == 'undefined' ? (el.setAttribute ? true : false) : useSet;
-        for(var attr in o){
-            if(attr == "style" || typeof o[attr] == "function") continue;
-            if(attr=="cls"){
-                el.className = o["cls"];
-            }else{
-                if(useSet) el.setAttribute(attr, o[attr]);
-                else el[attr] = o[attr];
-            }
-        }
-        Ext.DomHelper.applyStyles(el, o.style);
-        return this;
-    },
-    
-    
-    addKeyListener : function(key, fn, scope){
-        var config;
-        if(typeof key != "object" || key instanceof Array){
-            config = {
-                key: key,
-                fn: fn,
-                scope: scope 
-            };
-        }else{
-            config = {
-                key : key.key,
-                shift : key.shift,
-                ctrl : key.ctrl,
-                alt : key.alt,
-                fn: fn,
-                scope: scope
-            };
-        }
-        return new Ext.KeyMap(this, config);
-    },
-    
-    
-    addKeyMap : function(config){
-        return new Ext.KeyMap(this, config);
-    },
-    
-    
-     isScrollable : function(){
-        var dom = this.dom;
-        return dom.scrollHeight > dom.clientHeight || dom.scrollWidth > dom.clientWidth;
-    },
-    
-    
-     
-    scrollTo : function(side, value, animate){
-        var prop = side.toLowerCase() == "left" ? "scrollLeft" : "scrollTop";
-        if(!animate || !A){
-            this.dom[prop] = value;
-        }else{
-            var to = prop == "scrollLeft" ? [value, this.dom.scrollTop] : [this.dom.scrollLeft, value];
-            this.anim({scroll: {"to": to}}, this.preanim(arguments, 2), 'scroll');
-        }
-        return this;
-    },
-    
-    
-     scroll : function(direction, distance, animate){
-         if(!this.isScrollable()){
-             return;
-         }
-         var el = this.dom;
-         var l = el.scrollLeft, t = el.scrollTop;
-         var w = el.scrollWidth, h = el.scrollHeight;
-         var cw = el.clientWidth, ch = el.clientHeight;
-         direction = direction.toLowerCase();
-         var scrolled = false;
-         var a = this.preanim(arguments, 2);
-         switch(direction){
-             case "l":
-             case "left":
-                 if(w - l > cw){
-                     var v = Math.min(l + distance, w-cw);
-                     this.scrollTo("left", v, a);
-                     scrolled = true;
-                 }
-                 break;
-            case "r":
-            case "right":
-                 if(l > 0){
-                     var v = Math.max(l - distance, 0);
-                     this.scrollTo("left", v, a);
-                     scrolled = true;
-                 }
-                 break;
-            case "t":
-            case "top":
-            case "up":
-                 if(t > 0){
-                     var v = Math.max(t - distance, 0);
-                     this.scrollTo("top", v, a);
-                     scrolled = true;
-                 }
-                 break;
-            case "b":
-            case "bottom":
-            case "down":
-                 if(h - t > ch){
-                     var v = Math.min(t + distance, h-ch);
-                     this.scrollTo("top", v, a);
-                     scrolled = true;
-                 }
-                 break;
-         }
-         return scrolled;
-    },
-
-    
-    translatePoints : function(x, y){
-        if(typeof x == 'object' || x instanceof Array){
-            y = x[1]; x = x[0];
-        }
-        var p = this.getStyle('position');
-        var o = this.getXY();
-
-        var l = parseInt(this.getStyle('left'), 10);
-        var t = parseInt(this.getStyle('top'), 10);
-
-        if(isNaN(l)){
-            l = (p == "relative") ? 0 : this.dom.offsetLeft;
-        }
-        if(isNaN(t)){
-            t = (p == "relative") ? 0 : this.dom.offsetTop;
-        }
-
-        return {left: (x - o[0] + l), top: (y - o[1] + t)};
-    },
-
-    
-    getScroll : function(){
-        var d = this.dom, doc = document;
-        if(d == doc || d == doc.body){
-            var l = window.pageXOffset || doc.documentElement.scrollLeft || doc.body.scrollLeft || 0;
-            var t = window.pageYOffset || doc.documentElement.scrollTop || doc.body.scrollTop || 0;
-            return {left: l, top: t};
-        }else{
-            return {left: d.scrollLeft, top: d.scrollTop};
-        }
-    },
-
-    
-    getColor : function(attr, defaultValue, prefix){
-        var v = this.getStyle(attr);
-        if(!v || v == "transparent" || v == "inherit") {
-            return defaultValue;
-        }
-        var color = typeof prefix == "undefined" ? "#" : prefix;
-        if(v.substr(0, 4) == "rgb("){
-            var rvs = v.slice(4, v.length -1).split(",");
-            for(var i = 0; i < 3; i++){
-                var h = parseInt(rvs[i]).toString(16);
-                if(h < 16){
-                    h = "0" + h;
-                }
-                color += h;
-            }
-        } else {  
-            if(v.substr(0, 1) == "#"){
-                if(v.length == 4) {
-                    for(var i = 1; i < 4; i++){
-                        var c = v.charAt(i);
-                        color +=  c + c;
-                    }
-                }else if(v.length == 7){
-                    color += v.substr(1);
-                }
-            }
-        }
-        return(color.length > 5 ? color.toLowerCase() : defaultValue);  
-    },
-
-    
-    boxWrap : function(cls){
-        cls = cls || 'x-box';
-        var el = Ext.get(this.insertHtml('beforeBegin', String.format('<div class="{0}">'+El.boxMarkup+'</div>', cls)));
-        el.child('.'+cls+'-mc').dom.appendChild(this.dom);
-        return el;
-    },
-
-    
-    getAttributeNS : Ext.isIE ? function(ns, name){
-        var d = this.dom;
-        var type = typeof d[ns+":"+name];
-        if(type != 'undefined' && type != 'unknown'){
-            return d[ns+":"+name];
-        }
-        return d[name];
-    } : function(ns, name){
-        var d = this.dom;
-        return d.getAttributeNS(ns, name) || d.getAttribute(ns+":"+name) || d.getAttribute(name) || d[name];
-    }
-};
-
-var ep = El.prototype;
-
-
-ep.on = ep.addListener;
-    // backwards compat
-ep.mon = ep.addListener;
-
-
-ep.un = ep.removeListener;
-
-
-ep.autoBoxAdjust = true;
-
-ep.autoDisplayMode = true;
-
-// private
-El.unitPattern = /\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;
-
-// private
-El.addUnits = function(v, defaultUnit){
-    if(v === "" || v == "auto"){
-        return v;
-    }
-    if(v === undefined){
-        return '';
-    }
-    if(typeof v == "number" || !El.unitPattern.test(v)){
-        return v + (defaultUnit || 'px');
-    }
-    return v;
-};
-
-// special markup used throughout Ext when box wrapping elements
-El.boxMarkup = '<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';
-
-El.VISIBILITY = 1;
-
-El.DISPLAY = 2;
-
-El.borders = {l: "border-left-width", r: "border-right-width", t: "border-top-width", b: "border-bottom-width"};
-El.paddings = {l: "padding-left", r: "padding-right", t: "padding-top", b: "padding-bottom"};
-El.margins = {l: "margin-left", r: "margin-right", t: "margin-top", b: "margin-bottom"};
-
-
-
-
-El.cache = {};
-
-var docEl;
-
-
-El.get = function(el){
-    var ex, elm, id;
-    if(!el){ return null; }
-    if(typeof el == "string"){ // element id
-        if(!(elm = document.getElementById(el))){
-            return null;
-        }
-        if(ex = El.cache[el]){
-            ex.dom = elm;
-        }else{
-            ex = El.cache[el] = new El(elm);
-        }
-        return ex;
-    }else if(el.tagName){ // dom element
-        if(!(id = el.id)){
-            id = Ext.id(el);
-        }
-        if(ex = El.cache[id]){
-            ex.dom = el;
-        }else{
-            ex = El.cache[id] = new El(el);
-        }
-        return ex;
-    }else if(el instanceof El){
-        if(el != docEl){
-            el.dom = document.getElementById(el.id) || el.dom; // refresh dom element in case no longer valid,
-                                                          // catch case where it hasn't been appended
-            El.cache[el.id] = el; // in case it was created directly with Element(), let's cache it
-        }
-        return el;
-    }else if(el.isComposite){
-        return el;
-    }else if(el instanceof Array){
-        return El.select(el);
-    }else if(el == document){
-        // create a bogus element object representing the document object
-        if(!docEl){
-            var f = function(){};
-            f.prototype = El.prototype;
-            docEl = new f();
-            docEl.dom = document;
-        }
-        return docEl;
-    }
-    return null;
-};
-
-El.uncache = function(el){
-    for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-        if(a[i]){
-            delete El.cache[a[i].id || a[i]];
-        }
-    }
-};
-
-
-// Garbage collection - uncache elements/purge listeners on orphaned elements
-// so we don't hold a reference and cause the browser to retain them
-El.garbageCollect = function(){
-    if(!Ext.enableGarbageCollector){
-        clearInterval(El.collectorThread);
-        return;
-    }
-    for(var eid in El.cache){
-        var el = El.cache[eid], d = el.dom;
-        // -------------------------------------------------------
-        // Determining what is garbage:
-        // -------------------------------------------------------
-        // !d
-        // dom node is null, definitely garbage
-        // -------------------------------------------------------
-        // !d.parentNode
-        // no parentNode == direct orphan, definitely garbage
-        // -------------------------------------------------------
-        // !d.offsetParent && !document.getElementById(eid)
-        // display none elements have no offsetParent so we will
-        // also try to look it up by it's id. However, check
-        // offsetParent first so we don't do unneeded lookups.
-        // This enables collection of elements that are not orphans
-        // directly, but somewhere up the line they have an orphan
-        // parent.
-        // -------------------------------------------------------
-        if(!d || !d.parentNode || (!d.offsetParent && !document.getElementById(eid))){
-            delete El.cache[eid];
-            if(Ext.enableListenerCollection){
-                Ext.lib.Dom.purgeElement(d);
-            }
-        }
-    }
-}
-El.collectorThreadId = setInterval(El.garbageCollect, 30000);
-
-
-// dom is optional
-El.Flyweight = function(dom){
-    this.dom = dom;
-};
-El.Flyweight.prototype = El.prototype;
-
-El._flyweights = {};
-
-El.fly = function(el, named){
-    named = named || '_global';
-    el = Ext.getDom(el);
-    if(!el){
-        return null;
-    }
-    if(!El._flyweights[named]){
-        El._flyweights[named] = new El.Flyweight();
-    }
-    El._flyweights[named].dom = el;
-    return El._flyweights[named];
-};
-
-
-Ext.get = El.get;
-
-Ext.fly = El.fly;
-
-// speedy lookup for elements never to box adjust
-var noBoxAdjust = Ext.isStrict ? {
-    select:1
-} : {
-    input:1, select:1, textarea:1
-};
-if(Ext.isIE || Ext.isGecko){
-    noBoxAdjust['button'] = 1;
-}
-
-
-Ext.EventManager.on(window, 'unload', function(){
-    delete El.cache;
-    delete El._flyweights;
-});
-})();
-
-
-
-//Notifies Element that fx methods are available
-Ext.enableFx = true;
-
-
-Ext.Fx = {
-	
-    slideIn : function(anchor, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-
-            anchor = anchor || "t";
-
-            // fix display to visibility
-            this.fixDisplay();
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var b = this.getBox();
-            // fixed size for slide
-            this.setSize(b);
-
-            // wrap if needed
-            var wrap = this.fxWrap(r.pos, o, "hidden");
-
-            var st = this.dom.style;
-            st.visibility = "visible";
-            st.position = "absolute";
-
-            // clear out temp styles after slide and unwrap
-            var after = function(){
-                el.fxUnwrap(wrap, r.pos, o);
-                st.width = r.width;
-                st.height = r.height;
-                el.afterFx(o);
-            };
-            // time to calc the positions
-            var a, pt = {to: [b.x, b.y]}, bw = {to: b.width}, bh = {to: b.height};
-
-            switch(anchor.toLowerCase()){
-                case "t":
-                    wrap.setSize(b.width, 0);
-                    st.left = st.bottom = "0";
-                    a = {height: bh};
-                break;
-                case "l":
-                    wrap.setSize(0, b.height);
-                    st.right = st.top = "0";
-                    a = {width: bw};
-                break;
-                case "r":
-                    wrap.setSize(0, b.height);
-                    wrap.setX(b.right);
-                    st.left = st.top = "0";
-                    a = {width: bw, points: pt};
-                break;
-                case "b":
-                    wrap.setSize(b.width, 0);
-                    wrap.setY(b.bottom);
-                    st.left = st.top = "0";
-                    a = {height: bh, points: pt};
-                break;
-                case "tl":
-                    wrap.setSize(0, 0);
-                    st.right = st.bottom = "0";
-                    a = {width: bw, height: bh};
-                break;
-                case "bl":
-                    wrap.setSize(0, 0);
-                    wrap.setY(b.y+b.height);
-                    st.right = st.top = "0";
-                    a = {width: bw, height: bh, points: pt};
-                break;
-                case "br":
-                    wrap.setSize(0, 0);
-                    wrap.setXY([b.right, b.bottom]);
-                    st.left = st.top = "0";
-                    a = {width: bw, height: bh, points: pt};
-                break;
-                case "tr":
-                    wrap.setSize(0, 0);
-                    wrap.setX(b.x+b.width);
-                    st.left = st.bottom = "0";
-                    a = {width: bw, height: bh, points: pt};
-                break;
-            }
-            this.dom.style.visibility = "visible";
-            wrap.show();
-
-            arguments.callee.anim = wrap.fxanim(a,
-                o,
-                'motion',
-                .5,
-                'easeOut', after);
-        });
-        return this;
-    },
-    
-	
-    slideOut : function(anchor, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-
-            anchor = anchor || "t";
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            
-            var b = this.getBox();
-            // fixed size for slide
-            this.setSize(b);
-
-            // wrap if needed
-            var wrap = this.fxWrap(r.pos, o, "visible");
-
-            var st = this.dom.style;
-            st.visibility = "visible";
-            st.position = "absolute";
-
-            wrap.setSize(b);
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.fxUnwrap(wrap, r.pos, o);
-
-                st.width = r.width;
-                st.height = r.height;
-
-                el.afterFx(o);
-            };
-
-            var a, zero = {to: 0};
-            switch(anchor.toLowerCase()){
-                case "t":
-                    st.left = st.bottom = "0";
-                    a = {height: zero};
-                break;
-                case "l":
-                    st.right = st.top = "0";
-                    a = {width: zero};
-                break;
-                case "r":
-                    st.left = st.top = "0";
-                    a = {width: zero, points: {to:[b.right, b.y]}};
-                break;
-                case "b":
-                    st.left = st.top = "0";
-                    a = {height: zero, points: {to:[b.x, b.bottom]}};
-                break;
-                case "tl":
-                    st.right = st.bottom = "0";
-                    a = {width: zero, height: zero};
-                break;
-                case "bl":
-                    st.right = st.top = "0";
-                    a = {width: zero, height: zero, points: {to:[b.x, b.bottom]}};
-                break;
-                case "br":
-                    st.left = st.top = "0";
-                    a = {width: zero, height: zero, points: {to:[b.x+b.width, b.bottom]}};
-                break;
-                case "tr":
-                    st.left = st.bottom = "0";
-                    a = {width: zero, height: zero, points: {to:[b.right, b.y]}};
-                break;
-            }
-
-            arguments.callee.anim = wrap.fxanim(a,
-                o,
-                'motion',
-                .5,
-                "easeOut", after);
-        });
-        return this;
-    },
-
-	
-    puff : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            this.clearOpacity();
-            this.show();
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var st = this.dom.style;
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.clearOpacity();
-
-                el.setPositioning(r.pos);
-                st.width = r.width;
-                st.height = r.height;
-                st.fontSize = '';
-                el.afterFx(o);
-            };
-
-            var width = this.getWidth();
-            var height = this.getHeight();
-
-            arguments.callee.anim = this.fxanim({
-                    width : {to: this.adjustWidth(width * 2)},
-                    height : {to: this.adjustHeight(height * 2)},
-                    points : {by: [-(width * .5), -(height * .5)]},
-                    opacity : {to: 0},
-                    fontSize: {to:200, unit: "%"}
-                },
-                o,
-                'motion',
-                .5,
-                "easeOut", after);
-        });
-        return this;
-    },
-
-	
-    switchOff : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            this.clearOpacity();
-            this.clip();
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var st = this.dom.style;
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.clearOpacity();
-                el.setPositioning(r.pos);
-                st.width = r.width;
-                st.height = r.height;
-
-                el.afterFx(o);
-            };
-
-            this.fxanim({opacity:{to:0.3}}, null, null, .1, null, function(){
-                this.clearOpacity();
-                (function(){
-                    this.fxanim({
-                        height:{to:1},
-                        points:{by:[0, this.getHeight() * .5]}
-                    }, o, 'motion', 0.3, 'easeIn', after);
-                }).defer(100, this);
-            });
-        });
-        return this;
-    },
-
-    	
-    highlight : function(color, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            color = color || "ffff9c";
-            attr = o.attr || "backgroundColor";
-
-            this.clearOpacity();
-            this.show();
-
-            var origColor = this.getColor(attr);
-            var restoreColor = this.dom.style[attr];
-            endColor = (o.endColor || origColor) || "ffffff";
-
-            var after = function(){
-                el.dom.style[attr] = restoreColor;
-                el.afterFx(o);
-            };
-
-            var a = {};
-            a[attr] = {from: color, to: endColor};
-            arguments.callee.anim = this.fxanim(a,
-                o,
-                'color',
-                1,
-                'easeIn', after);
-        });
-        return this;
-    },
-
-   
-    frame : function(color, count, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            color = color || "#C3DAF9";
-            if(color.length == 6){
-                color = "#" + color;
-            }
-            count = count || 1;
-            duration = o.duration || 1;
-            this.show();
-
-            var b = this.getBox();
-            var animFn = function(){
-                var proxy = this.createProxy({
-                     tag:"div",
-                     style:{
-                        visbility:"hidden",
-                        position:"absolute",
-                        "z-index":"35000", // yee haw
-                        border:"0px solid " + color
-                     }
-                  });
-                var scale = Ext.isBorderBox ? 2 : 1;
-                proxy.animate({
-                    top:{from:b.y, to:b.y - 20},
-                    left:{from:b.x, to:b.x - 20},
-                    borderWidth:{from:0, to:10},
-                    opacity:{from:1, to:0},
-                    height:{from:b.height, to:(b.height + (20*scale))},
-                    width:{from:b.width, to:(b.width + (20*scale))}
-                }, duration, function(){
-                    proxy.remove();
-                });
-                if(--count > 0){
-                     animFn.defer((duration/2)*1000, this);
-                }else{
-                    el.afterFx(o);
-                }
-            };
-            animFn.call(this);
-        });
-        return this;
-    },
-
-   
-    pause : function(seconds){
-        var el = this.getFxEl();
-        var o = {};
-
-        el.queueFx(o, function(){
-            setTimeout(function(){
-                el.afterFx(o);
-            }, seconds * 1000);
-        });
-        return this;
-    },
-
-   
-    fadeIn : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-        el.queueFx(o, function(){
-            this.setOpacity(0);
-            this.fixDisplay();
-            this.dom.style.visibility = 'visible';
-            var to = o.endOpacity || 1;
-            arguments.callee.anim = this.fxanim({opacity:{to:to}},
-                o, null, .5, "easeOut", function(){
-                if(to == 1){
-                    this.clearOpacity();
-                }
-                el.afterFx(o);
-            });
-        });
-        return this;
-    },
-
-   
-    fadeOut : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-        el.queueFx(o, function(){
-            arguments.callee.anim = this.fxanim({opacity:{to:o.endOpacity || 0}},
-                o, null, .5, "easeOut", function(){
-                if(this.visibilityMode == Ext.Element.DISPLAY || o.useDisplay){
-                     this.dom.style.display = "none";
-                }else{
-                     this.dom.style.visibility = "hidden";
-                }
-                this.clearOpacity();
-                el.afterFx(o);
-            });
-        });
-        return this;
-    },
-
-   
-    scale : function(w, h, o){
-        this.shift(Ext.apply({}, o, {
-            width: w,
-            height: h
-        }));
-        return this;
-    },
-
-   
-    shift : function(o){
-        var el = this.getFxEl();
-        o = o || {};
-        el.queueFx(o, function(){
-            var a = {}, w = o.width, h = o.height, x = o.x, y = o.y,  op = o.opacity;
-            if(w !== undefined){
-                a.width = {to: this.adjustWidth(w)};
-            }
-            if(h !== undefined){
-                a.height = {to: this.adjustHeight(h)};
-            }
-            if(x !== undefined || y !== undefined){
-                a.points = {to: [
-                    x !== undefined ? x : this.getX(),
-                    y !== undefined ? y : this.getY()
-                ]};
-            }
-            if(op !== undefined){
-                a.opacity = {to: op};
-            }
-            if(o.xy !== undefined){
-                a.points = {to: o.xy};
-            }
-            arguments.callee.anim = this.fxanim(a,
-                o, 'motion', .35, "easeOut", function(){
-                el.afterFx(o);
-            });
-        });
-        return this;
-    },
-
-	
-    ghost : function(anchor, o){
-        var el = this.getFxEl();
-        o = o || {};
-
-        el.queueFx(o, function(){
-            anchor = anchor || "b";
-
-            // restore values after effect
-            var r = this.getFxRestore();
-            var w = this.getWidth(),
-                h = this.getHeight();
-
-            var st = this.dom.style;
-
-            var after = function(){
-                if(o.useDisplay){
-                    el.setDisplayed(false);
-                }else{
-                    el.hide();
-                }
-
-                el.clearOpacity();
-                el.setPositioning(r.pos);
-                st.width = r.width;
-                st.height = r.height;
-
-                el.afterFx(o);
-            };
-
-            var a = {opacity: {to: 0}, points: {}}, pt = a.points;
-            switch(anchor.toLowerCase()){
-                case "t":
-                    pt.by = [0, -h];
-                break;
-                case "l":
-                    pt.by = [-w, 0];
-                break;
-                case "r":
-                    pt.by = [w, 0];
-                break;
-                case "b":
-                    pt.by = [0, h];
-                break;
-                case "tl":
-                    pt.by = [-w, -h];
-                break;
-                case "bl":
-                    pt.by = [-w, h];
-                break;
-                case "br":
-                    pt.by = [w, h];
-                break;
-                case "tr":
-                    pt.by = [w, -h];
-                break;
-            }
-
-            arguments.callee.anim = this.fxanim(a,
-                o,
-                'motion',
-                .5,
-                "easeOut", after);
-        });
-        return this;
-    },
-
-	
-    syncFx : function(){
-        this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
-            block : false,
-            concurrent : true,
-            stopFx : false
-        });
-        return this;
-    },
-
-	
-    sequenceFx : function(){
-        this.fxDefaults = Ext.apply(this.fxDefaults || {}, {
-            block : false,
-            concurrent : false,
-            stopFx : false
-        });
-        return this;
-    },
-
-	
-    nextFx : function(){
-        var ef = this.fxQueue[0];
-        if(ef){
-            ef.call(this);
-        }
-    },
-
-	
-    hasActiveFx : function(){
-        return this.fxQueue && this.fxQueue[0];
-    },
-
-	
-    stopFx : function(){
-        if(this.hasActiveFx()){
-            var cur = this.fxQueue[0];
-            if(cur && cur.anim && cur.anim.isAnimated()){
-                this.fxQueue = [cur]; // clear out others
-                cur.anim.stop(true);
-            }
-        }
-        return this;
-    },
-
-	
-    beforeFx : function(o){
-        if(this.hasActiveFx() && !o.concurrent){
-           if(o.stopFx){
-               this.stopFx();
-               return true;
-           }
-           return false;
-        }
-        return true;
-    },
-
-	
-    hasFxBlock : function(){
-        var q = this.fxQueue;
-        return q && q[0] && q[0].block;
-    },
-
-	
-    queueFx : function(o, fn){
-        if(!this.fxQueue){
-            this.fxQueue = [];
-        }
-        if(!this.hasFxBlock()){
-            Ext.applyIf(o, this.fxDefaults);
-            if(!o.concurrent){
-                var run = this.beforeFx(o);
-                fn.block = o.block;
-                this.fxQueue.push(fn);
-                if(run){
-                    this.nextFx();
-                }
-            }else{
-                fn.call(this);
-            }
-        }
-        return this;
-    },
-
-	
-    fxWrap : function(pos, o, vis){
-        var wrap;
-        if(!o.wrap || !(wrap = Ext.get(o.wrap))){
-            var wrapXY;
-            if(o.fixPosition){
-                wrapXY = this.getXY();
-            }
-            var div = document.createElement("div");
-            div.style.visibility = vis;
-            wrap = Ext.get(this.dom.parentNode.insertBefore(div, this.dom));
-            wrap.setPositioning(pos);
-            if(wrap.getStyle("position") == "static"){
-                wrap.position("relative");
-            }
-            this.clearPositioning('auto');
-            wrap.clip();
-            wrap.dom.appendChild(this.dom);
-            if(wrapXY){
-                wrap.setXY(wrapXY);
-            }
-        }
-        return wrap;
-    },
-
-	
-    fxUnwrap : function(wrap, pos, o){
-        this.clearPositioning();
-        this.setPositioning(pos);
-        if(!o.wrap){
-            wrap.dom.parentNode.insertBefore(this.dom, wrap.dom);
-            wrap.remove();
-        }
-    },
-
-	
-    getFxRestore : function(){
-        var st = this.dom.style;
-        return {pos: this.getPositioning(), width: st.width, height : st.height};
-    },
-
-	
-    afterFx : function(o){
-        if(o.afterStyle){
-            this.applyStyles(o.afterStyle);
-        }
-        if(o.afterCls){
-            this.addClass(o.afterCls);
-        }
-        if(o.remove === true){
-            this.remove();
-        }
-        Ext.callback(o.callback, o.scope, [this]);
-        if(!o.concurrent){
-            this.fxQueue.shift();
-            this.nextFx();
-        }
-    },
-
-	
-    getFxEl : function(){ // support for composite element fx
-        return Ext.get(this.dom);
-    },
-
-	
-    fxanim : function(args, opt, animType, defaultDur, defaultEase, cb){
-        animType = animType || 'run';
-        opt = opt || {};
-        var anim = Ext.lib.Anim[animType](
-            this.dom, args,
-            (opt.duration || defaultDur) || .35,
-            (opt.easing || defaultEase) || 'easeOut',
-            function(){
-                Ext.callback(cb, this);
-            },
-            this
-        );
-        opt.anim = anim;
-        return anim;
-    }
-};
-
-// backwords compat
-Ext.Fx.resize = Ext.Fx.scale;
-
-//When included, Ext.Fx is automatically applied to Element so that all basic
-//effects are available directly via the Element API
-Ext.apply(Ext.Element.prototype, Ext.Fx);
-
-
-Ext.CompositeElement = function(els){
-    this.elements = [];
-    this.addElements(els);
-};
-Ext.CompositeElement.prototype = {
-    isComposite: true,
-    addElements : function(els){
-        if(!els) return this;
-        if(typeof els == "string"){
-            els = Ext.Element.selectorFunction(els);
-        }
-        var yels = this.elements;
-        var index = yels.length-1;
-        for(var i = 0, len = els.length; i < len; i++) {
-        	yels[++index] = Ext.get(els[i], true);
-        }
-        return this;
-    },
-    invoke : function(fn, args){
-        var els = this.elements;
-        for(var i = 0, len = els.length; i < len; i++) {
-        	Ext.Element.prototype[fn].apply(els[i], args);
-        }
-        return this;
-    },
-    
-    add : function(els){
-        if(typeof els == "string"){
-            this.addElements(Ext.Element.selectorFunction(els));
-        }else if(els.length !== undefined){
-            this.addElements(els);
-        }else{
-            this.addElements([els]);
-        }
-        return this;
-    },
-    
-    each : function(fn, scope){
-        var els = this.elements;
-        for(var i = 0, len = els.length; i < len; i++){
-            if(fn.call(scope || els[i], els[i], this, i) === false) {
-                break;
-            }
-        }
-        return this;
-    },
-
-    
-    item : function(index){
-        return this.elements[index];
-    }
-};
-(function(){
-Ext.CompositeElement.createCall = function(proto, fnName){
-    if(!proto[fnName]){
-        proto[fnName] = function(){
-            return this.invoke(fnName, arguments);
-        };
-    }
-};
-for(var fnName in Ext.Element.prototype){
-    if(typeof Ext.Element.prototype[fnName] == "function"){
-        Ext.CompositeElement.createCall(Ext.CompositeElement.prototype, fnName);
-    }
-};
-})();
-
-
-Ext.CompositeElementLite = function(els){
-    Ext.CompositeElementLite.superclass.constructor.call(this, els);
-    var flyEl = function(){};
-    flyEl.prototype = Ext.Element.prototype;
-    this.el = new Ext.Element.Flyweight();
-};
-Ext.extend(Ext.CompositeElementLite, Ext.CompositeElement, {
-    addElements : function(els){
-        if(els){
-            if(els instanceof Array){
-                this.elements = this.elements.concat(els);
-            }else{
-                var yels = this.elements;
-                var index = yels.length-1;
-                for(var i = 0, len = els.length; i < len; i++) {
-                    yels[++index] = els[i];
-                }
-            }
-        }
-        return this;
-    },
-    invoke : function(fn, args){
-        var els = this.elements;
-        var el = this.el;
-        for(var i = 0, len = els.length; i < len; i++) {
-            el.dom = els[i];
-        	Ext.Element.prototype[fn].apply(el, args);
-        }
-        return this;
-    },
-    
-    item : function(index){
-        this.el.dom = this.elements[index];
-        return this.el;
-    },
-
-    // fixes scope with flyweight
-    addListener : function(eventName, handler, scope, opt){
-        var els = this.elements;
-        for(var i = 0, len = els.length; i < len; i++) {
-            Ext.EventManager.on(els[i], eventName, handler, scope || els[i], opt);
-        }
-        return this;
-    },
-
-    
-    each : function(fn, scope){
-        var els = this.elements;
-        var el = this.el;
-        for(var i = 0, len = els.length; i < len; i++){
-            el.dom = els[i];
-        	if(fn.call(scope || el, el, this, i) === false){
-                break;
-            }
-        }
-        return this;
-    }
-});
-Ext.CompositeElementLite.prototype.on = Ext.CompositeElementLite.prototype.addListener;
-if(Ext.DomQuery){
-    Ext.Element.selectorFunction = Ext.DomQuery.select;
-}
-
-Ext.Element.select = function(selector, unique, root){
-    var els;
-    if(typeof selector == "string"){
-        els = Ext.Element.selectorFunction(selector, root);
-    }else if(selector.length !== undefined){
-        els = selector;
-    }else{
-        throw "Invalid selector";
-    }
-    if(unique === true){
-        return new Ext.CompositeElement(els);
-    }else{
-        return new Ext.CompositeElementLite(els);
-    }
-};
-
-Ext.select = Ext.Element.select;
-
-Ext.UpdateManager = function(el, forceNew){
-    el = Ext.get(el);
-    if(!forceNew && el.updateManager){
-        return el.updateManager;
-    }
-    
-    this.el = el;
-    
-    this.defaultUrl = null;
-    
-    this.addEvents({
-        
-        "beforeupdate": true,
-        
-        "update": true,
-        
-        "failure": true
-    });
-    var d = Ext.UpdateManager.defaults;
-    
-    this.sslBlankUrl = d.sslBlankUrl;
-    
-    this.disableCaching = d.disableCaching;
-    
-    this.indicatorText = d.indicatorText;
-    
-    this.showLoadIndicator = d.showLoadIndicator;
-    
-    this.timeout = d.timeout;
-    
-    
-    this.loadScripts = d.loadScripts;
-    
-    
-    this.transaction = null;
-    
-    
-    this.autoRefreshProcId = null;
-    
-    this.refreshDelegate = this.refresh.createDelegate(this);
-    
-    this.updateDelegate = this.update.createDelegate(this);
-    
-    this.formUpdateDelegate = this.formUpdate.createDelegate(this);
-    
-    this.successDelegate = this.processSuccess.createDelegate(this);
-    
-    this.failureDelegate = this.processFailure.createDelegate(this);
-     
-     
-    this.renderer = new Ext.UpdateManager.BasicRenderer();
-
-    Ext.UpdateManager.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.UpdateManager, Ext.util.Observable, {
-    
-    getEl : function(){
-        return this.el;
-    },
-    
-    update : function(url, params, callback, discardUrl){
-        if(this.fireEvent("beforeupdate", this.el, url, params) !== false){
-            var method = this.method;
-            if(typeof url == "object"){ // must be config object
-                var cfg = url;
-                url = cfg.url;
-                params = params || cfg.params;
-                callback = callback || cfg.callback;
-                discardUrl = discardUrl || cfg.discardUrl;
-                if(callback && cfg.scope){
-                    callback = callback.createDelegate(cfg.scope);
-                }
-                if(typeof cfg.method != "undefined"){method = cfg.method;};
-                if(typeof cfg.nocache != "undefined"){this.disableCaching = cfg.nocache;};
-                if(typeof cfg.text != "undefined"){this.indicatorText = '<div class="loading-indicator">'+cfg.text+"</div>";};
-                if(typeof cfg.scripts != "undefined"){this.loadScripts = cfg.scripts;};
-                if(typeof cfg.timeout != "undefined"){this.timeout = cfg.timeout;};
-            }
-            this.showLoading();
-            if(!discardUrl){
-                this.defaultUrl = url;
-            }
-            if(typeof url == "function"){
-                url = url.call(this);
-            }
-            if(typeof params == "function"){
-                params = params();
-            }
-            if(params && typeof params != "string"){ // must be object
-                var buf = [];
-                for(var key in params){
-                    if(typeof params[key] != "function"){
-                        buf.push(encodeURIComponent(key), "=", encodeURIComponent(params[key]), "&");
-                    }
-                }
-                delete buf[buf.length-1];
-                params = buf.join("");
-            }
-            var cb = {
-                success: this.successDelegate,
-                failure: this.failureDelegate,
-                timeout: (this.timeout*1000),
-                argument: {"url": url, "form": null, "callback": callback, "params": params}
-            };
-            method = method || (params ? "POST" : "GET");
-            if(method == "GET"){
-                url = this.prepareUrl(url);
-            }
-            this.transaction = Ext.lib.Ajax.request(method, url, cb, params);
-        }
-    },
-    
-    
-    formUpdate : function(form, url, reset, callback){
-        if(this.fireEvent("beforeupdate", this.el, form, url) !== false){
-            formEl = Ext.getDom(form);
-            if(typeof url == "function"){
-                url = url.call(this);
-            }
-            if(typeof params == "function"){
-                params = params();
-            }
-            url = url || formEl.action;
-            var cb = {
-                success: this.successDelegate,
-                failure: this.failureDelegate,
-                timeout: (this.timeout*1000),
-                argument: {"url": url, "form": formEl, "callback": callback, "reset": reset}
-            };
-            var isUpload = false;
-            var enctype = formEl.getAttribute("enctype");
-            if(enctype && enctype.toLowerCase() == "multipart/form-data"){
-                isUpload = true;
-                cb.upload = this.successDelegate;
-            }
-            this.transaction = Ext.lib.Ajax.formRequest(formEl, url, cb, null, isUpload, this.sslBlankUrl);
-            this.showLoading.defer(1, this);
-        }
-    },
-    
-    
-    refresh : function(callback){
-        if(this.defaultUrl == null){
-            return;
-        }
-        this.update(this.defaultUrl, null, callback, true);
-    },
-    
-    
-    startAutoRefresh : function(interval, url, params, callback, refreshNow){
-        if(refreshNow){
-            this.update(url || this.defaultUrl, params, callback, true);
-        }
-        if(this.autoRefreshProcId){
-            clearInterval(this.autoRefreshProcId);
-        }
-        this.autoRefreshProcId = setInterval(this.update.createDelegate(this, [url || this.defaultUrl, params, callback, true]), interval*1000);
-    },
-    
-    
-     stopAutoRefresh : function(){
-        if(this.autoRefreshProcId){
-            clearInterval(this.autoRefreshProcId);
-            delete this.autoRefreshProcId;
-        }
-    },
-
-    isAutoRefreshing : function(){
-       return this.autoRefreshProcId ? true : false;  
-    },
-    
-    showLoading : function(){
-        if(this.showLoadIndicator){
-            this.el.update(this.indicatorText);
-        }
-    },
-    
-    
-    prepareUrl : function(url){
-        if(this.disableCaching){
-            var append = "_dc=" + (new Date().getTime());
-            if(url.indexOf("?") !== -1){
-                url += "&" + append;
-            }else{
-                url += "?" + append;
-            }
-        }
-        return url;
-    },
-    
-    
-    processSuccess : function(response){
-        this.transaction = null;
-        if(response.argument.form && response.argument.reset){
-            try{ // put in try/catch since some older FF releases had problems with this
-                response.argument.form.reset();
-            }catch(e){}
-        }
-        if(this.loadScripts){
-            this.renderer.render(this.el, response, this, 
-                this.updateComplete.createDelegate(this, [response]));
-        }else{
-            this.renderer.render(this.el, response, this);
-            this.updateComplete(response);
-        }
-    },
-    
-    updateComplete : function(response){
-        this.fireEvent("update", this.el, response);
-        if(typeof response.argument.callback == "function"){
-            response.argument.callback(this.el, true, response);
-        }
-    },
-    
-    
-    processFailure : function(response){
-        this.transaction = null;
-        this.fireEvent("failure", this.el, response);
-        if(typeof response.argument.callback == "function"){
-            response.argument.callback(this.el, false, response);
-        }
-    },
-    
-    
-    setRenderer : function(renderer){
-        this.renderer = renderer;
-    },
-    
-    getRenderer : function(){
-       return this.renderer;  
-    },
-    
-    
-    setDefaultUrl : function(defaultUrl){
-        this.defaultUrl = defaultUrl;
-    },
-    
-    
-    abort : function(){
-        if(this.transaction){
-            Ext.lib.Ajax.abort(this.transaction);
-        }
-    },
-    
-    
-    isUpdating : function(){
-        if(this.transaction){
-            return Ext.lib.Ajax.isCallInProgress(this.transaction);
-        }
-        return false;
-    }
-});
-
-
-   Ext.UpdateManager.defaults = {
-       
-         timeout : 30,
-         
-         
-        loadScripts : false,
-         
-        
-        sslBlankUrl : (Ext.SSL_SECURE_URL || "javascript:false"),
-        
-        disableCaching : false,
-        
-        showLoadIndicator : true,
-        
-        indicatorText : '<div class="loading-indicator">Loading...</div>'
-   };
-
-
-Ext.UpdateManager.updateElement = function(el, url, params, options){
-    var um = Ext.get(el, true).getUpdateManager();
-    Ext.apply(um, options);
-    um.update(url, params, options ? options.callback : null);
-};
-// alias for backwards compat
-Ext.UpdateManager.update = Ext.UpdateManager.updateElement;
- 
-Ext.UpdateManager.BasicRenderer = function(){};
-
-Ext.UpdateManager.BasicRenderer.prototype = {
-    
-     render : function(el, response, updateManager, callback){
-        el.update(response.responseText, updateManager.loadScripts, callback);
-    }
-};
-
-
-Ext.util.DelayedTask = function(fn, scope, args){
-    var id = null, d, t;
-
-    var call = function(){
-        var now = new Date().getTime();
-        if(now - t >= d){
-            clearInterval(id);
-            id = null;
-            fn.apply(scope, args || []);
-        }
-    };
-    
-    this.delay = function(delay, newFn, newScope, newArgs){
-        if(id && delay != d){
-            this.cancel();
-        }
-        d = delay;
-        t = new Date().getTime();
-        fn = newFn || fn;
-        scope = newScope || scope;
-        args = newArgs || args;
-        if(!id){
-            id = setInterval(call, d);
-        }
-    };
-
-    
-    this.cancel = function(){
-        if(id){
-            clearInterval(id);
-            id = null;
-        }
-    };
-};
diff --git a/lib/web/extjs/ext-core.js b/lib/web/extjs/ext-core.js
deleted file mode 100644
index ba25b3c037f5c8259d234118a5c78887b11d1133..0000000000000000000000000000000000000000
--- a/lib/web/extjs/ext-core.js
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.DomHelper=function(){var tempTableEl=null;var emptyTags=/^(?:br|frame|hr|img|input|link|meta|range|spacer|wbr|area|param|col)$/i;var createHtml=function(o){if(typeof o=='string'){return o;}
-var b="";if(!o.tag){o.tag="div";}
-b+="<"+o.tag;for(var attr in o){if(attr=="tag"||attr=="children"||attr=="cn"||attr=="html"||typeof o[attr]=="function")continue;if(attr=="style"){var s=o["style"];if(typeof s=="function"){s=s.call();}
-if(typeof s=="string"){b+=' style="'+s+'"';}else if(typeof s=="object"){b+=' style="';for(var key in s){if(typeof s[key]!="function"){b+=key+":"+s[key]+";";}}
-b+='"';}}else{if(attr=="cls"){b+=' class="'+o["cls"]+'"';}else if(attr=="htmlFor"){b+=' for="'+o["htmlFor"]+'"';}else{b+=" "+attr+'="'+o[attr]+'"';}}}
-if(emptyTags.test(o.tag)){b+="/>";}else{b+=">";var cn=o.children||o.cn;if(cn){if(cn instanceof Array){for(var i=0,len=cn.length;i<len;i++){b+=createHtml(cn[i],b);}}else{b+=createHtml(cn,b);}}
-if(o.html){b+=o.html;}
-b+="</"+o.tag+">";}
-return b;};var createDom=function(o,parentNode){var el=document.createElement(o.tag);var useSet=el.setAttribute?true:false;for(var attr in o){if(attr=="tag"||attr=="children"||attr=="cn"||attr=="html"||attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"){el.className=o["cls"];}else{if(useSet)el.setAttribute(attr,o[attr]);else el[attr]=o[attr];}}
-Ext.DomHelper.applyStyles(el,o.style);var cn=o.children||o.cn;if(cn){if(cn instanceof Array){for(var i=0,len=cn.length;i<len;i++){createDom(cn[i],el);}}else{createDom(cn,el);}}
-if(o.html){el.innerHTML=o.html;}
-if(parentNode){parentNode.appendChild(el);}
-return el;};var ieTable=function(depth,s,h,e){tempTableEl.innerHTML=[s,h,e].join('');var i=-1,el=tempTableEl;while(++i<depth){el=el.firstChild;}
-return el;};var ts='<table>',te='</table>',tbs=ts+'<tbody>',tbe='</tbody>'+te,trs=tbs+'<tr>',tre='</tr>'+tbe;var insertIntoTable=function(tag,where,el,html){if(!tempTableEl){tempTableEl=document.createElement('div');}
-var node;var before=null;if(tag=='td'){if(where=='afterbegin'||where=='beforeend'){return;}
-if(where=='beforebegin'){before=el;el=el.parentNode;}else{before=el.nextSibling;el=el.parentNode;}
-node=ieTable(4,trs,html,tre);}
-else if(tag=='tr'){if(where=='beforebegin'){before=el;el=el.parentNode;node=ieTable(3,tbs,html,tbe);}else if(where=='afterend'){before=el.nextSibling;el=el.parentNode;node=ieTable(3,tbs,html,tbe);}else{if(where=='afterbegin'){before=el.firstChild;}
-node=ieTable(4,trs,html,tre);}}else if(tag=='tbody'){if(where=='beforebegin'){before=el;el=el.parentNode;node=ieTable(2,ts,html,te);}else if(where=='afterend'){before=el.nextSibling;el=el.parentNode;node=ieTable(2,ts,html,te);}else{if(where=='afterbegin'){before=el.firstChild;}
-node=ieTable(3,tbs,html,tbe);}}else{if(where=='beforebegin'||where=='afterend'){return;}
-if(where=='afterbegin'){before=el.firstChild;}
-node=ieTable(2,ts,html,te);}
-el.insertBefore(node,before);return node;};return{useDom:false,markup:function(o){return createHtml(o);},applyStyles:function(el,styles){if(styles){el=Ext.fly(el);if(typeof styles=="string"){var re=/\s?([a-z\-]*)\:\s?([^;]*);?/gi;var matches;while((matches=re.exec(styles))!=null){el.setStyle(matches[1],matches[2]);}}else if(typeof styles=="object"){for(var style in styles){el.setStyle(style,styles[style]);}}else if(typeof styles=="function"){Ext.DomHelper.applyStyles(el,styles.call());}}},insertHtml:function(where,el,html){where=where.toLowerCase();if(el.insertAdjacentHTML){var tag=el.tagName.toLowerCase();if(tag=="table"||tag=="tbody"||tag=="tr"||tag=='td'){var rs;if(rs=insertIntoTable(tag,where,el,html)){return rs;}}
-switch(where){case"beforebegin":el.insertAdjacentHTML(where,html);return el.previousSibling;case"afterbegin":el.insertAdjacentHTML(where,html);return el.firstChild;case"beforeend":el.insertAdjacentHTML(where,html);return el.lastChild;case"afterend":el.insertAdjacentHTML(where,html);return el.nextSibling;}
-throw'Illegal insertion point -> "'+where+'"';}
-var range=el.ownerDocument.createRange();var frag;switch(where){case"beforebegin":range.setStartBefore(el);frag=range.createContextualFragment(html);el.parentNode.insertBefore(frag,el);return el.previousSibling;case"afterbegin":if(el.firstChild){range.setStartBefore(el.firstChild);frag=range.createContextualFragment(html);el.insertBefore(frag,el.firstChild);return el.firstChild;}else{el.innerHTML=html;return el.firstChild;}
-case"beforeend":if(el.lastChild){range.setStartAfter(el.lastChild);frag=range.createContextualFragment(html);el.appendChild(frag);return el.lastChild;}else{el.innerHTML=html;return el.lastChild;}
-case"afterend":range.setStartAfter(el);frag=range.createContextualFragment(html);el.parentNode.insertBefore(frag,el.nextSibling);return el.nextSibling;}
-throw'Illegal insertion point -> "'+where+'"';},insertBefore:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"beforeBegin");},insertAfter:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"afterEnd","nextSibling");},insertFirst:function(el,o,returnElement){return this.doInsert(el,o,returnElement,"afterBegin");},doInsert:function(el,o,returnElement,pos,sibling){el=Ext.getDom(el);var newNode;if(this.useDom){newNode=createDom(o,null);el.parentNode.insertBefore(newNode,sibling?el[sibling]:el);}else{var html=createHtml(o);newNode=this.insertHtml(pos,el,html);}
-return returnElement?Ext.get(newNode,true):newNode;},append:function(el,o,returnElement){el=Ext.getDom(el);var newNode;if(this.useDom){newNode=createDom(o,null);el.appendChild(newNode);}else{var html=createHtml(o);newNode=this.insertHtml("beforeEnd",el,html);}
-return returnElement?Ext.get(newNode,true):newNode;},overwrite:function(el,o,returnElement){el=Ext.getDom(el);el.innerHTML=createHtml(o);return returnElement?Ext.get(el.firstChild,true):el.firstChild;},createTemplate:function(o){var html=createHtml(o);return new Ext.Template(html);}};}();
-
-Ext.Template=function(html){if(html instanceof Array){html=html.join("");}else if(arguments.length>1){html=Array.prototype.join.call(arguments,"");}
-this.html=html;};Ext.Template.prototype={applyTemplate:function(values){if(this.compiled){return this.compiled(values);}
-var useF=this.disableFormats!==true;var fm=Ext.util.Format,tpl=this;var fn=function(m,name,format,args){if(format&&useF){if(format.substr(0,5)=="this."){return tpl.call(format.substr(5),values[name],values);}else{if(args){var re=/^\s*['"](.*)["']\s*$/;args=args.split(',');for(var i=0,len=args.length;i<len;i++){args[i]=args[i].replace(re,"$1");}
-args=[values[name]].concat(args);}else{args=[values[name]];}
-return fm[format].apply(fm,args);}}else{return values[name]!==undefined?values[name]:"";}};return this.html.replace(this.re,fn);},set:function(html,compile){this.html=html;this.compiled=null;if(compile){this.compile();}
-return this;},disableFormats:false,re:/\{([\w-]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?\}/g,compile:function(){var fm=Ext.util.Format;var useF=this.disableFormats!==true;var sep=Ext.isGecko?"+":",";var fn=function(m,name,format,args){if(format&&useF){args=args?','+args:"";if(format.substr(0,5)!="this."){format="fm."+format+'(';}else{format='this.call("'+format.substr(5)+'", ';args=", values";}}else{args='';format="(values['"+name+"'] == undefined ? '' : ";}
-return"'"+sep+format+"values['"+name+"']"+args+")"+sep+"'";};var body;if(Ext.isGecko){body="this.compiled = function(values){ return '"+
-this.html.replace(/(\r\n|\n)/g,'\\n').replace(/'/g,"\\'").replace(this.re,fn)+"';};";}else{body=["this.compiled = function(values){ return ['"];body.push(this.html.replace(/(\r\n|\n)/g,'\\n').replace("'","\\'").replace(this.re,fn));body.push("'].join('');};");body=body.join('');}
-eval(body);return this;},call:function(fnName,value,allValues){return this[fnName](value,allValues);},insertFirst:function(el,values,returnElement){return this.doInsert('afterBegin',el,values,returnElement);},insertBefore:function(el,values,returnElement){return this.doInsert('beforeBegin',el,values,returnElement);},insertAfter:function(el,values,returnElement){return this.doInsert('afterEnd',el,values,returnElement);},append:function(el,values,returnElement){return this.doInsert('beforeEnd',el,values,returnElement);},doInsert:function(where,el,values,returnEl){el=Ext.getDom(el);var newNode=Ext.DomHelper.insertHtml(where,el,this.applyTemplate(values));return returnEl?Ext.get(newNode,true):newNode;},overwrite:function(el,values,returnElement){el=Ext.getDom(el);el.innerHTML=this.applyTemplate(values);return returnElement?Ext.get(el.firstChild,true):el.firstChild;}};Ext.Template.prototype.apply=Ext.Template.prototype.applyTemplate;Ext.DomHelper.Template=Ext.Template;Ext.Template.from=function(el){el=Ext.getDom(el);return new Ext.Template(el.value||el.innerHTML);};Ext.MasterTemplate=function(){Ext.MasterTemplate.superclass.constructor.apply(this,arguments);this.originalHtml=this.html;var st={};var m,re=this.subTemplateRe;re.lastIndex=0;var subIndex=0;while(m=re.exec(this.html)){var name=m[1],content=m[2];st[subIndex]={name:name,index:subIndex,buffer:[],tpl:new Ext.Template(content)};if(name){st[name]=st[subIndex];}
-st[subIndex].tpl.compile();st[subIndex].tpl.call=this.call.createDelegate(this);subIndex++;}
-this.subCount=subIndex;this.subs=st;};Ext.extend(Ext.MasterTemplate,Ext.Template,{subTemplateRe:/<tpl(?:\sname="([\w-]+)")?>((?:.|\n)*?)<\/tpl>/gi,add:function(name,values){if(arguments.length==1){values=arguments[0];name=0;}
-var s=this.subs[name];s.buffer[s.buffer.length]=s.tpl.apply(values);return this;},fill:function(name,values,reset){var a=arguments;if(a.length==1||(a.length==2&&typeof a[1]=="boolean")){values=a[0];name=0;reset=a[1];}
-if(reset){this.reset();}
-for(var i=0,len=values.length;i<len;i++){this.add(name,values[i]);}
-return this;},reset:function(){var s=this.subs;for(var i=0;i<this.subCount;i++){s[i].buffer=[];}
-return this;},applyTemplate:function(values){var s=this.subs;var replaceIndex=-1;this.html=this.originalHtml.replace(this.subTemplateRe,function(m,name){return s[++replaceIndex].buffer.join("");});return Ext.MasterTemplate.superclass.applyTemplate.call(this,values);},apply:function(){return this.applyTemplate.apply(this,arguments);},compile:function(){return this;}});Ext.MasterTemplate.prototype.addAll=Ext.MasterTemplate.prototype.fill;Ext.MasterTemplate.from=function(el){el=Ext.getDom(el);return new Ext.MasterTemplate(el.value||el.innerHTML);};
-
-Ext.DomQuery=function(){var cache={},simpleCache={},valueCache={};var nonSpace=/\S/;var trimRe=/^\s+|\s+$/g;var tplRe=/\{(\d+)\}/g;var modeRe=/^(\s?[\/>]\s?|\s|$)/;var tagTokenRe=/^(#)?([\w-\*]+)/;function child(p,index){var i=0;var n=p.firstChild;while(n){if(n.nodeType==1){if(++i==index){return n;}}
-n=n.nextSibling;}
-return null;};function next(n){while((n=n.nextSibling)&&n.nodeType!=1);return n;};function prev(n){while((n=n.previousSibling)&&n.nodeType!=1);return n;};function clean(d){var n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!nonSpace.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}
-n=nx;}
-return this;};function byClassName(c,a,v,re,cn){if(!v){return c;}
-var r=[];for(var i=0,ci;ci=c[i];i++){cn=ci.className;if(cn&&(' '+cn+' ').indexOf(v)!=-1){r[r.length]=ci;}}
-return r;};function attrValue(n,attr){if(!n.tagName&&typeof n.length!="undefined"){n=n[0];}
-if(!n){return null;}
-if(attr=="for"){return n.htmlFor;}
-if(attr=="class"||attr=="className"){return n.className;}
-return n.getAttribute(attr)||n[attr];};function getNodes(ns,mode,tagName){var result=[],cs;if(!ns){return result;}
-mode=mode?mode.replace(trimRe,""):"";tagName=tagName||"*";if(typeof ns.getElementsByTagName!="undefined"){ns=[ns];}
-if(mode!="/"&&mode!=">"){for(var i=0,ni;ni=ns[i];i++){cs=ni.getElementsByTagName(tagName);for(var j=0,ci;ci=cs[j];j++){result[result.length]=ci;}}}else{for(var i=0,ni;ni=ns[i];i++){var cn=ni.getElementsByTagName(tagName);for(var j=0,cj;cj=cn[j];j++){if(cj.parentNode==ni){result[result.length]=cj;}}}}
-return result;};function concat(a,b){if(b.slice){return a.concat(b);}
-for(var i=0,l=b.length;i<l;i++){a[a.length]=b[i];}
-return a;}
-function byTag(cs,tagName){if(cs.tagName||cs==document){cs=[cs];}
-if(!tagName){return cs;}
-var r=[];tagName=tagName.toLowerCase();for(var i=0,ci;ci=cs[i];i++){if(ci.nodeType==1&&ci.tagName.toLowerCase()==tagName){r[r.length]=ci;}}
-return r;};function byId(cs,attr,id){if(cs.tagName||cs==document){cs=[cs];}
-if(!id){return cs;}
-var r=[];for(var i=0,ci;ci=cs[i];i++){if(ci&&ci.id==id){r[r.length]=ci;return r;}}
-return r;};function byAttribute(cs,attr,value,op,custom){var r=[],st=custom=="{";var f=Ext.DomQuery.operators[op];for(var i=0;ci=cs[i];i++){var a;if(st){a=Ext.DomQuery.getStyle(ci,attr);}
-else if(attr=="class"||attr=="className"){a=ci.className;}else if(attr=="for"){a=ci.htmlFor;}else if(attr=="href"){a=ci.getAttribute("href",2);}else{a=ci.getAttribute(attr);}
-if((f&&f(a,value))||(!f&&a)){r[r.length]=ci;}}
-return r;};function byPseudo(cs,name,value){return Ext.DomQuery.pseudos[name](cs,value);};var isIE=window.ActiveXObject?true:false;var key=30803;function nodupIEXml(cs){var d=++key;cs[0].setAttribute("_nodup",d);var r=[cs[0]];for(var i=1,len=cs.length;i<len;i++){var c=cs[i];if(!c.getAttribute("_nodup")!=d){c.setAttribute("_nodup",d);r[r.length]=c;}}
-for(var i=0,len=cs.length;i<len;i++){cs[i].removeAttribute("_nodup");}
-return r;}
-function nodup(cs){if(!cs){return[];}
-var len=cs.length,c,i,r=cs,cj;if(!len||typeof cs.nodeType!="undefined"||len==1){return cs;}
-if(isIE&&typeof cs[0].selectSingleNode!="undefined"){return nodupIEXml(cs);}
-var d=++key;cs[0]._nodup=d;for(i=1;c=cs[i];i++){if(c._nodup!=d){c._nodup=d;}else{r=[];for(var j=0;j<i;j++){r[r.length]=cs[j];}
-for(j=i+1;cj=cs[j];j++){if(cj._nodup!=d){cj._nodup=d;r[r.length]=cj;}}
-return r;}}
-return r;}
-function quickDiffIEXml(c1,c2){var d=++key;for(var i=0,len=c1.length;i<len;i++){c1[i].setAttribute("_qdiff",d);}
-var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i].getAttribute("_qdiff")!=d){r[r.length]=c2[i];}}
-for(var i=0,len=c1.length;i<len;i++){c1[i].removeAttribute("_qdiff");}
-return r;}
-function quickDiff(c1,c2){var len1=c1.length;if(!len1){return c2;}
-if(isIE&&c1[0].selectSingleNode){return quickDiffIEXml(c1,c2);}
-var d=++key;for(var i=0;i<len1;i++){c1[i]._qdiff=d;}
-var r=[];for(var i=0,len=c2.length;i<len;i++){if(c2[i]._qdiff!=d){r[r.length]=c2[i];}}
-return r;}
-function quickId(ns,mode,root,id){if(ns==root){var d=root.ownerDocument||root;return d.getElementById(id);}
-ns=getNodes(ns,mode,"*");return byId(ns,null,id);}
-return{getStyle:function(el,name){return Ext.fly(el).getStyle(name);},compile:function(path,type){type=type||"select";var fn=["var f = function(root){\n var mode; var n = root || document;\n"];var q=path,mode,lq;var tk=Ext.DomQuery.matchers;var tklen=tk.length;var mm;var lmode=q.match(modeRe);if(lmode&&lmode[1]){fn[fn.length]='mode="'+lmode[1]+'";';q=q.replace(lmode[1],"");}
-while(path.substr(0,1)=="/"){path=path.substr(1);}
-while(q&&lq!=q){lq=q;var tm=q.match(tagTokenRe);if(type=="select"){if(tm){if(tm[1]=="#"){fn[fn.length]='n = quickId(n, mode, root, "'+tm[2]+'");';}else{fn[fn.length]='n = getNodes(n, mode, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}else if(q.substr(0,1)!='@'){fn[fn.length]='n = getNodes(n, mode, "*");';}}else{if(tm){if(tm[1]=="#"){fn[fn.length]='n = byId(n, null, "'+tm[2]+'");';}else{fn[fn.length]='n = byTag(n, "'+tm[2]+'");';}
-q=q.replace(tm[0],"");}}
-while(!(mm=q.match(modeRe))){var matched=false;for(var j=0;j<tklen;j++){var t=tk[j];var m=q.match(t.re);if(m){fn[fn.length]=t.select.replace(tplRe,function(x,i){return m[i];});q=q.replace(m[0],"");matched=true;break;}}
-if(!matched){throw'Error parsing selector, parsing failed at "'+q+'"';}}
-if(mm[1]){fn[fn.length]='mode="'+mm[1]+'";';q=q.replace(mm[1],"");}}
-fn[fn.length]="return nodup(n);\n}";eval(fn.join(""));return f;},select:function(path,root,type){if(!root||root==document){root=document;}
-if(typeof root=="string"){root=document.getElementById(root);}
-var paths=path.split(",");var results=[];for(var i=0,len=paths.length;i<len;i++){var p=paths[i].replace(trimRe,"");if(!cache[p]){cache[p]=Ext.DomQuery.compile(p);if(!cache[p]){throw p+" is not a valid selector";}}
-var result=cache[p](root);if(result&&result!=document){results=results.concat(result);}}
-return results;},selectNode:function(path,root){return Ext.DomQuery.select(path,root)[0];},selectValue:function(path,root,defaultValue){path=path.replace(trimRe,"");if(!valueCache[path]){valueCache[path]=Ext.DomQuery.compile(path,"select");}
-var n=valueCache[path](root);n=n[0]?n[0]:n;var v=(n&&n.firstChild?n.firstChild.nodeValue:null);return(v===null?defaultValue:v);},selectNumber:function(path,root,defaultValue){var v=Ext.DomQuery.selectValue(path,root,defaultValue||0);return parseFloat(v);},is:function(el,ss){if(typeof el=="string"){el=document.getElementById(el);}
-var isArray=(el instanceof Array);var result=Ext.DomQuery.filter(isArray?el:[el],ss);return isArray?(result.length==el.length):(result.length>0);},filter:function(els,ss,nonMatches){ss=ss.replace(trimRe,"");if(!simpleCache[ss]){simpleCache[ss]=Ext.DomQuery.compile(ss,"simple");}
-var result=simpleCache[ss](els);return nonMatches?quickDiff(result,els):result;},matchers:[{re:/^\.([\w-]+)/,select:'n = byClassName(n, null, " {1} ");'},{re:/^\:([\w-]+)(?:\(((?:[^\s>\/]*|.*?))\))?/,select:'n = byPseudo(n, "{1}", "{2}");'},{re:/^(?:([\[\{])(?:@)?([\w-]+)\s?(?:(=|.=)\s?['"]?(.*?)["']?)?[\]\}])/,select:'n = byAttribute(n, "{2}", "{4}", "{3}", "{1}");'},{re:/^#([\w-]+)/,select:'n = byId(n, null, "{1}");'},{re:/^@([\w-]+)/,select:'return {firstChild:{nodeValue:attrValue(n, "{1}")}};'}],operators:{"=":function(a,v){return a==v;},"!=":function(a,v){return a!=v;},"^=":function(a,v){return a&&a.substr(0,v.length)==v;},"$=":function(a,v){return a&&a.substr(a.length-v.length)==v;},"*=":function(a,v){return a&&a.indexOf(v)!==-1;},"%=":function(a,v){return(a%v)==0;}},pseudos:{"first-child":function(c){var r=[],n;for(var i=0,ci;ci=n=c[i];i++){while((n=n.previousSibling)&&n.nodeType!=1);if(!n){r[r.length]=ci;}}
-return r;},"last-child":function(c){var r=[];for(var i=0,ci;ci=n=c[i];i++){while((n=n.nextSibling)&&n.nodeType!=1);if(!n){r[r.length]=ci;}}
-return r;},"nth-child":function(c,a){var r=[];if(a!="odd"&&a!="even"){for(var i=0,ci;ci=c[i];i++){var m=child(ci.parentNode,a);if(m==ci){r[r.length]=m;}}
-return r;}
-var p;for(var i=0,l=c.length;i<l;i++){var cp=c[i].parentNode;if(cp!=p){clean(cp);p=cp;}}
-for(var i=0,ci;ci=c[i];i++){var m=false;if(a=="odd"){m=((ci.nodeIndex+1)%2==1);}else if(a=="even"){m=((ci.nodeIndex+1)%2==0);}
-if(m){r[r.length]=ci;}}
-return r;},"only-child":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(!prev(ci)&&!next(ci)){r[r.length]=ci;}}
-return r;},"empty":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){var cns=ci.childNodes,j=0,cn,empty=true;while(cn=cns[j]){++j;if(cn.nodeType==1||cn.nodeType==3){empty=false;break;}}
-if(empty){r[r.length]=ci;}}
-return r;},"contains":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.innerHTML.indexOf(v)!==-1){r[r.length]=ci;}}
-return r;},"nodeValue":function(c,v){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.firstChild&&ci.firstChild.nodeValue==v){r[r.length]=ci;}}
-return r;},"checked":function(c){var r=[];for(var i=0,ci;ci=c[i];i++){if(ci.checked==true){r[r.length]=ci;}}
-return r;},"not":function(c,ss){return Ext.DomQuery.filter(c,ss,true);},"odd":function(c){return this["nth-child"](c,"odd");},"even":function(c){return this["nth-child"](c,"even");},"nth":function(c,a){return c[a-1]||[];},"first":function(c){return c[0]||[];},"last":function(c){return c[c.length-1]||[];},"has":function(c,ss){var s=Ext.DomQuery.select;var r=[];for(var i=0,ci;ci=c[i];i++){if(s(ss,ci).length>0){r[r.length]=ci;}}
-return r;},"next":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=next(ci);if(n&&is(n,ss)){r[r.length]=ci;}}
-return r;},"prev":function(c,ss){var is=Ext.DomQuery.is;var r=[];for(var i=0,ci;ci=c[i];i++){var n=prev(ci);if(n&&is(n,ss)){r[r.length]=ci;}}
-return r;}}};}();Ext.query=Ext.DomQuery.select;
-
-Ext.util.Observable=function(){if(this.listeners){this.on(this.listeners);delete this.listeners;}};Ext.util.Observable.prototype={fireEvent:function(){var ce=this.events[arguments[0].toLowerCase()];if(typeof ce=="object"){return ce.fire.apply(ce,Array.prototype.slice.call(arguments,1));}else{return true;}},filterOptRe:/^(?:scope|delay|buffer|single)$/,addListener:function(eventName,fn,scope,o){if(typeof eventName=="object"){o=eventName;for(var e in o){if(this.filterOptRe.test(e)){continue;}
-if(typeof o[e]=="function"){this.addListener(e,o[e],o.scope,o);}else{this.addListener(e,o[e].fn,o[e].scope,o[e]);}}
-return;}
-o=(!o||typeof o=="boolean")?{}:o;eventName=eventName.toLowerCase();var ce=this.events[eventName]||true;if(typeof ce=="boolean"){ce=new Ext.util.Event(this,eventName);this.events[eventName]=ce;}
-ce.addListener(fn,scope,o);},removeListener:function(eventName,fn,scope){var ce=this.events[eventName.toLowerCase()];if(typeof ce=="object"){ce.removeListener(fn,scope);}},purgeListeners:function(){for(var evt in this.events){if(typeof this.events[evt]=="object"){this.events[evt].clearListeners();}}},relayEvents:function(o,events){var createHandler=function(ename){return function(){return this.fireEvent.apply(this,Ext.combine(ename,Array.prototype.slice.call(arguments,0)));};};for(var i=0,len=events.length;i<len;i++){var ename=events[i];if(!this.events[ename]){this.events[ename]=true;};o.on(ename,createHandler(ename),this);}},addEvents:function(o){if(!this.events){this.events={};}
-Ext.applyIf(this.events,o);},hasListener:function(eventName){var e=this.events[eventName];return typeof e=="object"&&e.listeners.length>0;}};Ext.util.Observable.prototype.on=Ext.util.Observable.prototype.addListener;Ext.util.Observable.prototype.un=Ext.util.Observable.prototype.removeListener;Ext.util.Observable.capture=function(o,fn,scope){o.fireEvent=o.fireEvent.createInterceptor(fn,scope);};Ext.util.Observable.releaseCapture=function(o){o.fireEvent=Ext.util.Observable.prototype.fireEvent;};(function(){var createBuffered=function(h,o,scope){var task=new Ext.util.DelayedTask();return function(){task.delay(o.buffer,h,scope,Array.prototype.slice.call(arguments,0));};};var createSingle=function(h,e,fn,scope){return function(){e.removeListener(fn,scope);return h.apply(scope,arguments);};};var createDelayed=function(h,o,scope){return function(){var args=Array.prototype.slice.call(arguments,0);setTimeout(function(){h.apply(scope,args);},o.delay||10);};};Ext.util.Event=function(obj,name){this.name=name;this.obj=obj;this.listeners=[];};Ext.util.Event.prototype={addListener:function(fn,scope,options){var o=options||{};scope=scope||this.obj;if(!this.isListening(fn,scope)){var l={fn:fn,scope:scope,options:o};var h=fn;if(o.delay){h=createDelayed(h,o,scope);}
-if(o.single){h=createSingle(h,this,fn,scope);}
-if(o.buffer){h=createBuffered(h,o,scope);}
-l.fireFn=h;if(!this.firing){this.listeners.push(l);}else{this.listeners=this.listeners.slice(0);this.listeners.push(l);}}},findListener:function(fn,scope){scope=scope||this.obj;var ls=this.listeners;for(var i=0,len=ls.length;i<len;i++){var l=ls[i];if(l.fn==fn&&l.scope==scope){return i;}}
-return-1;},isListening:function(fn,scope){return this.findListener(fn,scope)!=-1;},removeListener:function(fn,scope){var index;if((index=this.findListener(fn,scope))!=-1){if(!this.firing){this.listeners.splice(index,1);}else{this.listeners=this.listeners.slice(0);this.listeners.splice(index,1);}
-return true;}
-return false;},clearListeners:function(){this.listeners=[];},fire:function(){var ls=this.listeners,scope,len=ls.length;if(len>0){this.firing=true;var args=Array.prototype.slice.call(arguments,0);for(var i=0;i<len;i++){var l=ls[i];if(l.fireFn.apply(l.scope,arguments)===false){this.firing=false;return false;}}
-this.firing=false;}
-return true;}};})();
-
-Ext.EventManager=function(){var docReadyEvent,docReadyProcId,docReadyState=false;var resizeEvent,resizeTask,textEvent,textSize;var E=Ext.lib.Event;var D=Ext.lib.Dom;var fireDocReady=function(){if(!docReadyState){docReadyState=true;Ext.isReady=true;if(docReadyProcId){clearInterval(docReadyProcId);}
-if(Ext.isGecko||Ext.isOpera){document.removeEventListener("DOMContentLoaded",fireDocReady,false);}
-if(docReadyEvent){docReadyEvent.fire();docReadyEvent.clearListeners();}}};var initDocReady=function(){docReadyEvent=new Ext.util.Event();if(Ext.isGecko||Ext.isOpera){document.addEventListener("DOMContentLoaded",fireDocReady,false);}else if(Ext.isIE){document.write("<s"+'cript id="ie-deferred-loader" defer="defer" src="/'+'/:"></s'+"cript>");var defer=document.getElementById("ie-deferred-loader");defer.onreadystatechange=function(){if(this.readyState=="complete"){fireDocReady();defer.onreadystatechange=null;defer.parentNode.removeChild(defer);}};}else if(Ext.isSafari){docReadyProcId=setInterval(function(){var rs=document.readyState;if(rs=="complete"){fireDocReady();}},10);}
-E.on(window,"load",fireDocReady);};var createBuffered=function(h,o){var task=new Ext.util.DelayedTask(h);return function(e){e=new Ext.EventObjectImpl(e);task.delay(o.buffer,h,null,[e]);};};var createSingle=function(h,el,ename,fn){return function(e){Ext.EventManager.removeListener(el,ename,fn);h(e);};};var createDelayed=function(h,o){return function(e){e=new Ext.EventObjectImpl(e);setTimeout(function(){h(e);},o.delay||10);};};var listen=function(element,ename,opt,fn,scope){var o=(!opt||typeof opt=="boolean")?{}:opt;fn=fn||o.fn;scope=scope||o.scope;var el=Ext.getDom(element);if(!el){throw"Error listening for \""+ename+'\". Element "'+element+'" doesn\'t exist.';}
-var h=function(e){e=Ext.EventObject.setEvent(e);var t;if(o.delegate){t=e.getTarget(o.delegate,el);if(!t){return;}}else{t=e.target;}
-if(o.stopEvent===true){e.stopEvent();}
-if(o.preventDefault===true){e.preventDefault();}
-if(o.stopPropagation===true){e.stopPropagation();}
-if(o.normalized===false){e=e.browserEvent;}
-fn.call(scope||el,e,t,o);};if(o.delay){h=createDelayed(h,o);}
-if(o.single){h=createSingle(h,el,ename,fn);}
-if(o.buffer){h=createBuffered(h,o);}
-fn._handlers=fn._handlers||[];fn._handlers.push([Ext.id(el),ename,h]);E.on(el,ename,h);if(ename=="mousewheel"&&el.addEventListener){el.addEventListener("DOMMouseScroll",h,false);E.on(window,'unload',function(){el.removeEventListener("DOMMouseScroll",h,false);});}
-if(ename=="mousedown"&&el==document){Ext.EventManager.stoppedMouseDownEvent.addListener(h);}
-return h;};var stopListening=function(el,ename,fn){var id=Ext.id(el),hds=fn._handlers,hd=fn;if(hds){for(var i=0,len=hds.length;i<len;i++){var h=hds[i];if(h[0]==id&&h[1]==ename){hd=h[2];hds.splice(i,1);break;}}}
-E.un(el,ename,hd);el=Ext.getDom(el);if(ename=="mousewheel"&&el.addEventListener){el.removeEventListener("DOMMouseScroll",hd,false);}
-if(ename=="mousedown"&&el==document){Ext.EventManager.stoppedMouseDownEvent.removeListener(hd);}};var propRe=/^(?:scope|delay|buffer|single|stopEvent|preventDefault|stopPropagation|normalized)$/;var pub={wrap:function(fn,scope,override){return function(e){Ext.EventObject.setEvent(e);fn.call(override?scope||window:window,Ext.EventObject,scope);};},addListener:function(element,eventName,fn,scope,options){if(typeof eventName=="object"){var o=eventName;for(var e in o){if(propRe.test(e)){continue;}
-if(typeof o[e]=="function"){listen(element,e,o,o[e],o.scope);}else{listen(element,e,o[e]);}}
-return;}
-return listen(element,eventName,options,fn,scope);},removeListener:function(element,eventName,fn){return stopListening(element,eventName,fn);},onDocumentReady:function(fn,scope,options){if(docReadyState){fn.call(scope||window,scope);return;}
-if(!docReadyEvent){initDocReady();}
-docReadyEvent.addListener(fn,scope,options);},onWindowResize:function(fn,scope,options){if(!resizeEvent){resizeEvent=new Ext.util.Event();resizeTask=new Ext.util.DelayedTask(function(){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());});E.on(window,"resize",function(){if(Ext.isIE){resizeTask.delay(50);}else{resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}});}
-resizeEvent.addListener(fn,scope,options);},onTextResize:function(fn,scope,options){if(!textEvent){textEvent=new Ext.util.Event();var textEl=new Ext.Element(document.createElement('div'));textEl.dom.className='x-text-resize';textEl.dom.innerHTML='X';textEl.appendTo(document.body);textSize=textEl.dom.offsetHeight;setInterval(function(){if(textEl.dom.offsetHeight!=textSize){textEvent.fire(textSize,textSize=textEl.dom.offsetHeight);}},this.textResizeInterval);}
-textEvent.addListener(fn,scope,options);},removeResizeListener:function(fn,scope){if(resizeEvent){resizeEvent.removeListener(fn,scope);}},fireResize:function(){if(resizeEvent){resizeEvent.fire(D.getViewWidth(),D.getViewHeight());}},ieDeferSrc:false,textResizeInterval:50};pub.on=pub.addListener;pub.un=pub.removeListener;pub.stoppedMouseDownEvent=new Ext.util.Event();return pub;}();Ext.onReady=Ext.EventManager.onDocumentReady;Ext.onReady(function(){var bd=Ext.get(document.body);if(!bd){return;}
-var cls=Ext.isIE?"ext-ie":Ext.isGecko?"ext-gecko":Ext.isOpera?"ext-opera":Ext.isSafari?"ext-safari":"";if(Ext.isBorderBox){cls+=' ext-border-box';}
-if(Ext.isStrict){cls+=' ext-strict';}
-bd.addClass(cls);});Ext.EventObject=function(){var E=Ext.lib.Event;var safariKeys={63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};var btnMap=Ext.isIE?{1:0,4:1,2:2}:(Ext.isSafari?{1:0,2:1,3:2}:{0:0,1:1,2:2});Ext.EventObjectImpl=function(e){if(e){this.setEvent(e.browserEvent||e);}};Ext.EventObjectImpl.prototype={browserEvent:null,button:-1,shiftKey:false,ctrlKey:false,altKey:false,BACKSPACE:8,TAB:9,RETURN:13,ENTER:13,SHIFT:16,CONTROL:17,ESC:27,SPACE:32,PAGEUP:33,PAGEDOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46,F5:116,setEvent:function(e){if(e==this||(e&&e.browserEvent)){return e;}
-this.browserEvent=e;if(e){this.button=e.button?btnMap[e.button]:(e.which?e.which-1:-1);if(e.type=='click'&&this.button==-1){this.button=0;}
-this.shiftKey=e.shiftKey;this.ctrlKey=e.ctrlKey||e.metaKey;this.altKey=e.altKey;this.keyCode=e.keyCode;this.charCode=e.charCode;this.target=E.getTarget(e);this.xy=E.getXY(e);}else{this.button=-1;this.shiftKey=false;this.ctrlKey=false;this.altKey=false;this.keyCode=0;this.charCode=0;this.target=null;this.xy=[0,0];}
-return this;},stopEvent:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Ext.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopEvent(this.browserEvent);}},preventDefault:function(){if(this.browserEvent){E.preventDefault(this.browserEvent);}},isNavKeyPress:function(){var k=this.keyCode;k=Ext.isSafari?(safariKeys[k]||k):k;return(k>=33&&k<=40)||k==this.RETURN||k==this.TAB||k==this.ESC;},isSpecialKey:function(){var k=this.keyCode;return k==9||k==13||k==40||k==27||(k==16)||(k==17)||(k>=18&&k<=20)||(k>=33&&k<=35)||(k>=36&&k<=39)||(k>=44&&k<=45);},stopPropagation:function(){if(this.browserEvent){if(this.browserEvent.type=='mousedown'){Ext.EventManager.stoppedMouseDownEvent.fire(this);}
-E.stopPropagation(this.browserEvent);}},getCharCode:function(){return this.charCode||this.keyCode;},getKey:function(){var k=this.keyCode||this.charCode;return Ext.isSafari?(safariKeys[k]||k):k;},getPageX:function(){return this.xy[0];},getPageY:function(){return this.xy[1];},getTime:function(){if(this.browserEvent){return E.getTime(this.browserEvent);}
-return null;},getXY:function(){return this.xy;},getTarget:function(selector,maxDepth,returnEl){return selector?Ext.fly(this.target).findParent(selector,maxDepth,returnEl):this.target;},getRelatedTarget:function(){if(this.browserEvent){return E.getRelatedTarget(this.browserEvent);}
-return null;},getWheelDelta:function(){var e=this.browserEvent;var delta=0;if(e.wheelDelta){delta=e.wheelDelta/120;if(window.opera)delta=-delta;}else if(e.detail){delta=-e.detail/3;}
-return delta;},hasModifier:function(){return((this.ctrlKey||this.altKey)||this.shiftKey)?true:false;},within:function(el,related){var t=this[related?"getRelatedTarget":"getTarget"]();return t&&Ext.fly(el).contains(t);},getPoint:function(){return new Ext.lib.Point(this.xy[0],this.xy[1]);}};return new Ext.EventObjectImpl();}();
-
-(function(){var D=Ext.lib.Dom;var E=Ext.lib.Event;var A=Ext.lib.Anim;var propCache={};var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase();};var view=document.defaultView;Ext.Element=function(element,forceNew){var dom=typeof element=="string"?document.getElementById(element):element;if(!dom){return null;}
-if(!forceNew&&Ext.Element.cache[dom.id]){return Ext.Element.cache[dom.id];}
-this.dom=dom;this.id=dom.id||Ext.id(dom);};var El=Ext.Element;El.prototype={originalDisplay:"",visibilityMode:1,defaultUnit:"px",setVisibilityMode:function(visMode){this.visibilityMode=visMode;return this;},enableDisplayMode:function(display){this.setVisibilityMode(El.DISPLAY);if(typeof display!="undefined")this.originalDisplay=display;return this;},findParent:function(simpleSelector,maxDepth,returnEl){var p=this.dom,b=document.body,depth=0,dq=Ext.DomQuery,stopEl;maxDepth=maxDepth||50;if(typeof maxDepth!="number"){stopEl=Ext.getDom(maxDepth);maxDepth=10;}
-while(p&&p.nodeType==1&&depth<maxDepth&&p!=b&&p!=stopEl){if(dq.is(p,simpleSelector)){return returnEl?Ext.get(p):p;}
-depth++;p=p.parentNode;}
-return null;},findParentNode:function(simpleSelector,maxDepth,returnEl){var p=Ext.fly(this.dom.parentNode,'_internal');return p?p.findParent(simpleSelector,maxDepth,returnEl):null;},up:function(simpleSelector,maxDepth){return this.findParentNode(simpleSelector,maxDepth,true);},is:function(simpleSelector){return Ext.DomQuery.is(this.dom,simpleSelector);},animate:function(args,duration,onComplete,easing,animType){this.anim(args,{duration:duration,callback:onComplete,easing:easing},animType);return this;},anim:function(args,opt,animType,defaultDur,defaultEase,cb){animType=animType||'run';opt=opt||{};var anim=Ext.lib.Anim[animType](this.dom,args,(opt.duration||defaultDur)||.35,(opt.easing||defaultEase)||'easeOut',function(){Ext.callback(cb,this);Ext.callback(opt.callback,opt.scope||this,[this,opt]);},this);opt.anim=anim;return anim;},preanim:function(a,i){return!a[i]?false:(typeof a[i]=="object"?a[i]:{duration:a[i+1],callback:a[i+2],easing:a[i+3]});},clean:function(forceReclean){if(this.isCleaned&&forceReclean!==true){return this;}
-var ns=/\S/;var d=this.dom,n=d.firstChild,ni=-1;while(n){var nx=n.nextSibling;if(n.nodeType==3&&!ns.test(n.nodeValue)){d.removeChild(n);}else{n.nodeIndex=++ni;}
-n=nx;}
-this.isCleaned=true;return this;},calcOffsetsTo:function(el){el=Ext.get(el);var d=el.dom;var restorePos=false;if(el.getStyle('position')=='static'){el.position('relative');restorePos=true;}
-var x=0,y=0;var op=this.dom;while(op&&op!=d&&op.tagName!='HTML'){x+=op.offsetLeft;y+=op.offsetTop;op=op.offsetParent;}
-if(restorePos){el.position('static');}
-return[x,y];},scrollIntoView:function(container,hscroll){var c=Ext.getDom(container)||document.body;var el=this.dom;var o=this.calcOffsetsTo(c),l=o[0],t=o[1],b=t+el.offsetHeight,r=l+el.offsetWidth;var ch=c.clientHeight;var ct=parseInt(c.scrollTop,10);var cl=parseInt(c.scrollLeft,10);var cb=ct+ch;var cr=cl+c.clientWidth;if(t<ct){c.scrollTop=t;}else if(b>cb){c.scrollTop=b-ch;}
-if(hscroll!==false){if(l<cl){c.scrollLeft=l;}else if(r>cr){c.scrollLeft=r-c.clientWidth;}}
-return this;},scrollChildIntoView:function(child,hscroll){Ext.fly(child,'_scrollChildIntoView').scrollIntoView(this,hscroll);},autoHeight:function(animate,duration,onComplete,easing){var oldHeight=this.getHeight();this.clip();this.setHeight(1);setTimeout(function(){var height=parseInt(this.dom.scrollHeight,10);if(!animate){this.setHeight(height);this.unclip();if(typeof onComplete=="function"){onComplete();}}else{this.setHeight(oldHeight);this.setHeight(height,animate,duration,function(){this.unclip();if(typeof onComplete=="function")onComplete();}.createDelegate(this),easing);}}.createDelegate(this),0);return this;},contains:function(el){if(!el){return false;}
-return D.isAncestor(this.dom,el.dom?el.dom:el);},isVisible:function(deep){var vis=!(this.getStyle("visibility")=="hidden"||this.getStyle("display")=="none");if(deep!==true||!vis){return vis;}
-var p=this.dom.parentNode;while(p&&p.tagName.toLowerCase()!="body"){if(!Ext.fly(p,'_isVisible').isVisible()){return false;}
-p=p.parentNode;}
-return true;},select:function(selector,unique){return El.select(selector,unique,this.dom);},query:function(selector,unique){return Ext.DomQuery.select(selector,this.dom);},child:function(selector,returnDom){var n=Ext.DomQuery.selectNode(selector,this.dom);return returnDom?n:Ext.get(n);},down:function(selector,returnDom){var n=Ext.DomQuery.selectNode(" > "+selector,this.dom);return returnDom?n:Ext.get(n);},initDD:function(group,config,overrides){var dd=new Ext.dd.DD(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDProxy:function(group,config,overrides){var dd=new Ext.dd.DDProxy(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},initDDTarget:function(group,config,overrides){var dd=new Ext.dd.DDTarget(Ext.id(this.dom),group,config);return Ext.apply(dd,overrides);},setVisible:function(visible,animate){if(!animate||!A){if(this.visibilityMode==El.DISPLAY){this.setDisplayed(visible);}else{this.fixDisplay();this.dom.style.visibility=visible?"visible":"hidden";}}else{var dom=this.dom;var visMode=this.visibilityMode;if(visible){this.setOpacity(.01);this.setVisible(true);}
-this.anim({opacity:{to:(visible?1:0)}},this.preanim(arguments,1),null,.35,'easeIn',function(){if(!visible){if(visMode==El.DISPLAY){dom.style.display="none";}else{dom.style.visibility="hidden";}
-Ext.get(dom).setOpacity(1);}});}
-return this;},isDisplayed:function(){return this.getStyle("display")!="none";},toggle:function(animate){this.setVisible(!this.isVisible(),this.preanim(arguments,0));return this;},setDisplayed:function(value){if(typeof value=="boolean"){value=value?this.originalDisplay:"none";}
-this.setStyle("display",value);return this;},focus:function(){try{this.dom.focus();}catch(e){}
-return this;},blur:function(){try{this.dom.blur();}catch(e){}
-return this;},addClass:function(className){if(className instanceof Array){for(var i=0,len=className.length;i<len;i++){this.addClass(className[i]);}}else{if(className&&!this.hasClass(className)){this.dom.className=this.dom.className+" "+className;}}
-return this;},radioClass:function(className){var siblings=this.dom.parentNode.childNodes;for(var i=0;i<siblings.length;i++){var s=siblings[i];if(s.nodeType==1){Ext.get(s).removeClass(className);}}
-this.addClass(className);return this;},removeClass:function(className){if(!className||!this.dom.className){return this;}
-if(className instanceof Array){for(var i=0,len=className.length;i<len;i++){this.removeClass(className[i]);}}else{if(this.hasClass(className)){var re=this.classReCache[className];if(!re){re=new RegExp('(?:^|\\s+)'+className+'(?:\\s+|$)',"g");this.classReCache[className]=re;}
-this.dom.className=this.dom.className.replace(re," ");}}
-return this;},classReCache:{},toggleClass:function(className){if(this.hasClass(className)){this.removeClass(className);}else{this.addClass(className);}
-return this;},hasClass:function(className){return className&&(' '+this.dom.className+' ').indexOf(' '+className+' ')!=-1;},replaceClass:function(oldClassName,newClassName){this.removeClass(oldClassName);this.addClass(newClassName);return this;},getStyles:function(){var a=arguments,len=a.length,r={};for(var i=0;i<len;i++){r[a[i]]=this.getStyle(a[i]);}
-return r;},getStyle:function(){return view&&view.getComputedStyle?function(prop){var el=this.dom,v,cs,camel;if(prop=='float'){prop="cssFloat";}
-if(v=el.style[prop]){return v;}
-if(cs=view.getComputedStyle(el,"")){if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn);}
-return cs[camel];}
-return null;}:function(prop){var el=this.dom,v,cs,camel;if(prop=='opacity'){if(typeof el.filter=='string'){var fv=parseFloat(el.filter.match(/alpha\(opacity=(.*)\)/i)[1]);if(!isNaN(fv)){return fv?fv/100:0;}}
-return 1;}else if(prop=='float'){prop="styleFloat";}
-if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn);}
-if(v=el.style[camel]){return v;}
-if(cs=el.currentStyle){return cs[camel];}
-return null;};}(),setStyle:function(prop,value){if(typeof prop=="string"){var camel;if(!(camel=propCache[prop])){camel=propCache[prop]=prop.replace(camelRe,camelFn);}
-if(camel=='opacity'){this.setOpacity(value);}else{this.dom.style[camel]=value;}}else{for(var style in prop){if(typeof prop[style]!="function"){this.setStyle(style,prop[style]);}}}
-return this;},applyStyles:function(style){Ext.DomHelper.applyStyles(this.dom,style);return this;},getX:function(){return D.getX(this.dom);},getY:function(){return D.getY(this.dom);},getXY:function(){return D.getXY(this.dom);},setX:function(x,animate){if(!animate||!A){D.setX(this.dom,x);}else{this.setXY([x,this.getY()],this.preanim(arguments,1));}
-return this;},setY:function(y,animate){if(!animate||!A){D.setY(this.dom,y);}else{this.setXY([this.getX(),y],this.preanim(arguments,1));}
-return this;},setLeft:function(left){this.setStyle("left",this.addUnits(left));return this;},setTop:function(top){this.setStyle("top",this.addUnits(top));return this;},setRight:function(right){this.setStyle("right",this.addUnits(right));return this;},setBottom:function(bottom){this.setStyle("bottom",this.addUnits(bottom));return this;},setXY:function(pos,animate){if(!animate||!A){D.setXY(this.dom,pos);}else{this.anim({points:{to:pos}},this.preanim(arguments,1),'motion');}
-return this;},setLocation:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},moveTo:function(x,y,animate){this.setXY([x,y],this.preanim(arguments,2));return this;},getRegion:function(){return D.getRegion(this.dom);},getHeight:function(contentHeight){var h=this.dom.offsetHeight||0;return contentHeight!==true?h:h-this.getBorderWidth("tb")-this.getPadding("tb");},getWidth:function(contentWidth){var w=this.dom.offsetWidth||0;return contentWidth!==true?w:w-this.getBorderWidth("lr")-this.getPadding("lr");},getComputedHeight:function(){var h=Math.max(this.dom.offsetHeight,this.dom.clientHeight);if(!h){h=parseInt(this.getStyle('height'),10)||0;if(!this.isBorderBox()){h+=this.getFrameWidth('tb');}}
-return h;},getComputedWidth:function(){var w=Math.max(this.dom.offsetWidth,this.dom.clientWidth);if(!w){w=parseInt(this.getStyle('width'),10)||0;if(!this.isBorderBox()){w+=this.getFrameWidth('lr');}}
-return w;},getSize:function(contentSize){return{width:this.getWidth(contentSize),height:this.getHeight(contentSize)};},getViewSize:function(){var d=this.dom,doc=document,aw=0,ah=0;if(d==doc||d==doc.body){return{width:D.getViewWidth(),height:D.getViewHeight()};}else{return{width:d.clientWidth,height:d.clientHeight};}},getValue:function(asNumber){return asNumber?parseInt(this.dom.value,10):this.dom.value;},adjustWidth:function(width){if(typeof width=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){width-=(this.getBorderWidth("lr")+this.getPadding("lr"));}
-if(width<0){width=0;}}
-return width;},adjustHeight:function(height){if(typeof height=="number"){if(this.autoBoxAdjust&&!this.isBorderBox()){height-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
-if(height<0){height=0;}}
-return height;},setWidth:function(width,animate){width=this.adjustWidth(width);if(!animate||!A){this.dom.style.width=this.addUnits(width);}else{this.anim({width:{to:width}},this.preanim(arguments,1));}
-return this;},setHeight:function(height,animate){height=this.adjustHeight(height);if(!animate||!A){this.dom.style.height=this.addUnits(height);}else{this.anim({height:{to:height}},this.preanim(arguments,1));}
-return this;},setSize:function(width,height,animate){if(typeof width=="object"){height=width.height;width=width.width;}
-width=this.adjustWidth(width);height=this.adjustHeight(height);if(!animate||!A){this.dom.style.width=this.addUnits(width);this.dom.style.height=this.addUnits(height);}else{this.anim({width:{to:width},height:{to:height}},this.preanim(arguments,2));}
-return this;},setBounds:function(x,y,width,height,animate){if(!animate||!A){this.setSize(width,height);this.setLocation(x,y);}else{width=this.adjustWidth(width);height=this.adjustHeight(height);this.anim({points:{to:[x,y]},width:{to:width},height:{to:height}},this.preanim(arguments,4),'motion');}
-return this;},setRegion:function(region,animate){this.setBounds(region.left,region.top,region.right-region.left,region.bottom-region.top,this.preanim(arguments,1));return this;},addListener:function(eventName,fn,scope,options){Ext.EventManager.on(this.dom,eventName,fn,scope||this,options);},removeListener:function(eventName,fn){Ext.EventManager.removeListener(this.dom,eventName,fn);return this;},removeAllListeners:function(){E.purgeElement(this.dom);return this;},relayEvent:function(eventName,observable){this.on(eventName,function(e){observable.fireEvent(eventName,e);});},setOpacity:function(opacity,animate){if(!animate||!A){var s=this.dom.style;if(Ext.isIE){s.zoom=1;s.filter=(s.filter||'').replace(/alpha\([^\)]*\)/gi,"")+
-(opacity==1?"":"alpha(opacity="+opacity*100+")");}else{s.opacity=opacity;}}else{this.anim({opacity:{to:opacity}},this.preanim(arguments,1),null,.35,'easeIn');}
-return this;},getLeft:function(local){if(!local){return this.getX();}else{return parseInt(this.getStyle("left"),10)||0;}},getRight:function(local){if(!local){return this.getX()+this.getWidth();}else{return(this.getLeft(true)+this.getWidth())||0;}},getTop:function(local){if(!local){return this.getY();}else{return parseInt(this.getStyle("top"),10)||0;}},getBottom:function(local){if(!local){return this.getY()+this.getHeight();}else{return(this.getTop(true)+this.getHeight())||0;}},position:function(pos,zIndex,x,y){if(!pos){if(this.getStyle('position')=='static'){this.setStyle('position','relative');}}else{this.setStyle("position",pos);}
-if(zIndex){this.setStyle("z-index",zIndex);}
-if(x!==undefined&&y!==undefined){this.setXY([x,y]);}else if(x!==undefined){this.setX(x);}else if(y!==undefined){this.setY(y);}},clearPositioning:function(value){value=value||'';this.setStyle({"left":value,"right":value,"top":value,"bottom":value,"z-index":"","position":"static"});return this;},getPositioning:function(){var l=this.getStyle("left");var t=this.getStyle("top");return{"position":this.getStyle("position"),"left":l,"right":l?"":this.getStyle("right"),"top":t,"bottom":t?"":this.getStyle("bottom"),"z-index":this.getStyle("z-index")};},getBorderWidth:function(side){return this.addStyles(side,El.borders);},getPadding:function(side){return this.addStyles(side,El.paddings);},setPositioning:function(pc){this.applyStyles(pc);if(pc.right=="auto"){this.dom.style.right="";}
-if(pc.bottom=="auto"){this.dom.style.bottom="";}
-return this;},fixDisplay:function(){if(this.getStyle("display")=="none"){this.setStyle("visibility","hidden");this.setStyle("display",this.originalDisplay);if(this.getStyle("display")=="none"){this.setStyle("display","block");}}},setLeftTop:function(left,top){this.dom.style.left=this.addUnits(left);this.dom.style.top=this.addUnits(top);return this;},move:function(direction,distance,animate){var xy=this.getXY();direction=direction.toLowerCase();switch(direction){case"l":case"left":this.moveTo(xy[0]-distance,xy[1],this.preanim(arguments,2));break;case"r":case"right":this.moveTo(xy[0]+distance,xy[1],this.preanim(arguments,2));break;case"t":case"top":case"up":this.moveTo(xy[0],xy[1]-distance,this.preanim(arguments,2));break;case"b":case"bottom":case"down":this.moveTo(xy[0],xy[1]+distance,this.preanim(arguments,2));break;}
-return this;},clip:function(){if(!this.isClipped){this.isClipped=true;this.originalClip={"o":this.getStyle("overflow"),"x":this.getStyle("overflow-x"),"y":this.getStyle("overflow-y")};this.setStyle("overflow","hidden");this.setStyle("overflow-x","hidden");this.setStyle("overflow-y","hidden");}
-return this;},unclip:function(){if(this.isClipped){this.isClipped=false;var o=this.originalClip;if(o.o){this.setStyle("overflow",o.o);}
-if(o.x){this.setStyle("overflow-x",o.x);}
-if(o.y){this.setStyle("overflow-y",o.y);}}
-return this;},getAnchorXY:function(anchor,local,s){var w,h,vp=false;if(!s){var d=this.dom;if(d==document.body||d==document){vp=true;w=D.getViewWidth();h=D.getViewHeight();}else{w=this.getWidth();h=this.getHeight();}}else{w=s.width;h=s.height;}
-var x=0,y=0,r=Math.round;switch((anchor||"tl").toLowerCase()){case"c":x=r(w*.5);y=r(h*.5);break;case"t":x=r(w*.5);y=0;break;case"l":x=0;y=r(h*.5);break;case"r":x=w;y=r(h*.5);break;case"b":x=r(w*.5);y=h;break;case"tl":x=0;y=0;break;case"bl":x=0;y=h;break;case"br":x=w;y=h;break;case"tr":x=w;y=0;break;}
-if(local===true){return[x,y];}
-if(vp){var sc=this.getScroll();return[x+sc.left,y+sc.top];}
-var o=this.getXY();return[x+o[0],y+o[1]];},getAlignToXY:function(el,p,o){el=Ext.get(el);var d=this.dom;if(!el.dom){throw"Element.alignTo with an element that doesn't exist";}
-var c=false;var p1="",p2="";o=o||[0,0];if(!p){p="tl-bl";}else if(p=="?"){p="tl-bl?";}else if(p.indexOf("-")==-1){p="tl-"+p;}
-p=p.toLowerCase();var m=p.match(/^([a-z]+)-([a-z]+)(\?)?$/);if(!m){throw"Element.alignTo with an invalid alignment "+p;}
-p1=m[1];p2=m[2];c=!!m[3];var a1=this.getAnchorXY(p1,true);var a2=el.getAnchorXY(p2,false);var x=a2[0]-a1[0]+o[0];var y=a2[1]-a1[1]+o[1];if(c){var w=this.getWidth(),h=this.getHeight(),r=el.getRegion();var dw=D.getViewWidth()-5,dh=D.getViewHeight()-5;var p1y=p1.charAt(0),p1x=p1.charAt(p1.length-1);var p2y=p2.charAt(0),p2x=p2.charAt(p2.length-1);var swapY=((p1y=="t"&&p2y=="b")||(p1y=="b"&&p2y=="t"));var swapX=((p1x=="r"&&p2x=="l")||(p1x=="l"&&p2x=="r"));var doc=document;var scrollX=(doc.documentElement.scrollLeft||doc.body.scrollLeft||0)+5;var scrollY=(doc.documentElement.scrollTop||doc.body.scrollTop||0)+5;if((x+w)>dw+scrollX){x=swapX?r.left-w:dw+scrollX-w;}
-if(x<scrollX){x=swapX?r.right:scrollX;}
-if((y+h)>dh+scrollY){y=swapY?r.top-h:dh+scrollY-h;}
-if(y<scrollY){y=swapY?r.bottom:scrollY;}}
-return[x,y];},getConstrainToXY:function(){var os={top:0,left:0,bottom:0,right:0};return function(el,local,offsets){el=Ext.get(el);offsets=offsets?Ext.applyIf(offsets,os):os;var vw,vh,vx=0,vy=0;if(el.dom==document.body||el.dom==document){vw=Ext.lib.Dom.getViewWidth();vh=Ext.lib.Dom.getViewHeight();}else{vw=el.dom.clientWidth;vh=el.dom.clientHeight;if(!local){var vxy=el.getXY();vx=vxy[0];vy=vxy[1];}}
-var s=el.getScroll();vx+=offsets.left+s.left;vy+=offsets.top+s.top;vw-=offsets.right;vh-=offsets.bottom;var vr=vx+vw;var vb=vy+vh;var xy=!local?this.getXY():[this.getLeft(true),this.getTop(true)];var x=xy[0],y=xy[1];var w=this.dom.offsetWidth,h=this.dom.offsetHeight;var moved=false;if((x+w)>vr){x=vr-w;moved=true;}
-if((y+h)>vb){y=vb-h;moved=true;}
-if(x<vx){x=vx;moved=true;}
-if(y<vy){y=vy;moved=true;}
-return moved?[x,y]:false;};}(),alignTo:function(element,position,offsets,animate){var xy=this.getAlignToXY(element,position,offsets);this.setXY(xy,this.preanim(arguments,3));return this;},anchorTo:function(el,alignment,offsets,animate,monitorScroll,callback){var action=function(){this.alignTo(el,alignment,offsets,animate);Ext.callback(callback,this);};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',action,this,{buffer:tm=='number'?monitorScroll:50});}
-action.call(this);return this;},clearOpacity:function(){if(window.ActiveXObject){if(typeof this.dom.style.filter=='string'&&(/alpha/i).test(this.dom.style.filter)){this.dom.style.filter="";}}else{this.dom.style.opacity="";this.dom.style["-moz-opacity"]="";this.dom.style["-khtml-opacity"]="";}
-return this;},hide:function(animate){this.setVisible(false,this.preanim(arguments,0));return this;},show:function(animate){this.setVisible(true,this.preanim(arguments,0));return this;},addUnits:function(size){return Ext.Element.addUnits(size,this.defaultUnit);},beginMeasure:function(){var el=this.dom;if(el.offsetWidth||el.offsetHeight){return this;}
-var changed=[];var p=this.dom,b=document.body;while((!el.offsetWidth&&!el.offsetHeight)&&p&&p.tagName&&p!=b){var pe=Ext.get(p);if(pe.getStyle('display')=='none'){changed.push({el:p,visibility:pe.getStyle("visibility")});p.style.visibility="hidden";p.style.display="block";}
-p=p.parentNode;}
-this._measureChanged=changed;return this;},endMeasure:function(){var changed=this._measureChanged;if(changed){for(var i=0,len=changed.length;i<len;i++){var r=changed[i];r.el.style.visibility=r.visibility;r.el.style.display="none";}
-this._measureChanged=null;}
-return this;},update:function(html,loadScripts,callback){if(typeof html=="undefined"){html="";}
-if(loadScripts!==true){this.dom.innerHTML=html;if(typeof callback=="function"){callback();}
-return this;}
-var id=Ext.id();var dom=this.dom;html+='<span id="'+id+'"></span>';E.onAvailable(id,function(){var hd=document.getElementsByTagName("head")[0];var re=/(?:<script([^>]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig;var srcRe=/\ssrc=([\'\"])(.*?)\1/i;var typeRe=/\stype=([\'\"])(.*?)\1/i;var match;while(match=re.exec(html)){var attrs=match[1];var srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){var s=document.createElement("script");s.src=srcMatch[2];var typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2];}
-hd.appendChild(s);}else if(match[2]&&match[2].length>0){eval(match[2]);}}
-var el=document.getElementById(id);if(el){el.parentNode.removeChild(el);}
-if(typeof callback=="function"){callback();}});dom.innerHTML=html.replace(/(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)/ig,"");return this;},load:function(){var um=this.getUpdateManager();um.update.apply(um,arguments);return this;},getUpdateManager:function(){if(!this.updateManager){this.updateManager=new Ext.UpdateManager(this);}
-return this.updateManager;},unselectable:function(){this.dom.unselectable="on";this.swallowEvent("selectstart",true);this.applyStyles("-moz-user-select:none;-khtml-user-select:none;");this.addClass("x-unselectable");return this;},getCenterXY:function(){return this.getAlignToXY(document,'c-c');},center:function(centerIn){this.alignTo(centerIn||document,'c-c');return this;},isBorderBox:function(){return noBoxAdjust[this.dom.tagName.toLowerCase()]||Ext.isBorderBox;},getBox:function(contentBox,local){var xy;if(!local){xy=this.getXY();}else{var left=parseInt(this.getStyle("left"),10)||0;var top=parseInt(this.getStyle("top"),10)||0;xy=[left,top];}
-var el=this.dom,w=el.offsetWidth,h=el.offsetHeight,bx;if(!contentBox){bx={x:xy[0],y:xy[1],0:xy[0],1:xy[1],width:w,height:h};}else{var l=this.getBorderWidth("l")+this.getPadding("l");var r=this.getBorderWidth("r")+this.getPadding("r");var t=this.getBorderWidth("t")+this.getPadding("t");var b=this.getBorderWidth("b")+this.getPadding("b");bx={x:xy[0]+l,y:xy[1]+t,0:xy[0]+l,1:xy[1]+t,width:w-(l+r),height:h-(t+b)};}
-bx.right=bx.x+bx.width;bx.bottom=bx.y+bx.height;return bx;},getFrameWidth:function(sides,onlyContentBox){return onlyContentBox&&Ext.isBorderBox?0:(this.getPadding(sides)+this.getBorderWidth(sides));},setBox:function(box,adjust,animate){var w=box.width,h=box.height;if((adjust&&!this.autoBoxAdjust)&&!this.isBorderBox()){w-=(this.getBorderWidth("lr")+this.getPadding("lr"));h-=(this.getBorderWidth("tb")+this.getPadding("tb"));}
-this.setBounds(box.x,box.y,w,h,this.preanim(arguments,2));return this;},repaint:function(){var dom=this.dom;this.addClass("x-repaint");setTimeout(function(){Ext.get(dom).removeClass("x-repaint");},1);return this;},getMargins:function(side){if(!side){return{top:parseInt(this.getStyle("margin-top"),10)||0,left:parseInt(this.getStyle("margin-left"),10)||0,bottom:parseInt(this.getStyle("margin-bottom"),10)||0,right:parseInt(this.getStyle("margin-right"),10)||0};}else{return this.addStyles(side,El.margins);}},addStyles:function(sides,styles){var val=0;for(var i=0,len=sides.length;i<len;i++){var w=parseInt(this.getStyle(styles[sides.charAt(i)]),10);if(!isNaN(w))val+=w;}
-return val;},createProxy:function(config,renderTo,matchBox){if(renderTo){renderTo=Ext.getDom(renderTo);}else{renderTo=document.body;}
-config=typeof config=="object"?config:{tag:"div",cls:config};var proxy=Ext.DomHelper.append(renderTo,config,true);if(matchBox){proxy.setBox(this.getBox());}
-return proxy;},mask:function(msg,msgCls){if(this.getStyle("position")=="static"){this.setStyle("position","relative");}
-if(!this._mask){this._mask=Ext.DomHelper.append(this.dom,{tag:"div",cls:"ext-el-mask"},true);}
-this.addClass("x-masked");this._mask.setDisplayed(true);if(typeof msg=='string'){if(!this._maskMsg){this._maskMsg=Ext.DomHelper.append(this.dom,{tag:"div",cls:"ext-el-mask-msg",cn:{tag:'div'}},true);}
-var mm=this._maskMsg;mm.dom.className=msgCls?"ext-el-mask-msg "+msgCls:"ext-el-mask-msg";mm.dom.firstChild.innerHTML=msg;mm.setDisplayed(true);mm.center(this);}
-return this._mask;},unmask:function(removeEl){if(this._mask){if(removeEl===true){this._mask.remove();delete this._mask;if(this._maskMsg){this._maskMsg.remove();delete this._maskMsg;}}else{this._mask.setDisplayed(false);if(this._maskMsg){this._maskMsg.setDisplayed(false);}}}
-this.removeClass("x-masked");},isMasked:function(){return this._mask&&this._mask.isVisible();},createShim:function(){var el=document.createElement('iframe');el.frameBorder='no';el.className='ext-shim';if(Ext.isIE&&Ext.isSecure){el.src=Ext.SSL_SECURE_URL;}
-var shim=Ext.get(this.dom.parentNode.insertBefore(el,this.dom));shim.autoBoxAdjust=false;return shim;},remove:function(){if(this.dom.parentNode){this.dom.parentNode.removeChild(this.dom);}
-delete El.cache[this.dom.id];},addClassOnOver:function(className,preventFlicker){this.on("mouseover",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);var removeFn=function(e){if(preventFlicker!==true||!e.within(this,true)){Ext.fly(this,'_internal').removeClass(className);}};this.on("mouseout",removeFn,this.dom);return this;},addClassOnFocus:function(className){this.on("focus",function(){Ext.fly(this,'_internal').addClass(className);},this.dom);this.on("blur",function(){Ext.fly(this,'_internal').removeClass(className);},this.dom);return this;},addClassOnClick:function(className){var dom=this.dom;this.on("mousedown",function(){Ext.fly(dom,'_internal').addClass(className);var d=Ext.get(document);var fn=function(){Ext.fly(dom,'_internal').removeClass(className);d.removeListener("mouseup",fn);};d.on("mouseup",fn);});return this;},swallowEvent:function(eventName,preventDefault){var fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault();}};if(eventName instanceof Array){for(var i=0,len=eventName.length;i<len;i++){this.on(eventName[i],fn);}
-return this;}
-this.on(eventName,fn);return this;},fitToParent:function(monitorResize,targetParent){var p=Ext.get(targetParent||this.dom.parentNode);this.setSize(p.getComputedWidth()-p.getFrameWidth('lr'),p.getComputedHeight()-p.getFrameWidth('tb'));if(monitorResize===true){Ext.EventManager.onWindowResize(this.fitToParent.createDelegate(this,[]));}
-return this;},getNextSibling:function(){var n=this.dom.nextSibling;while(n&&n.nodeType!=1){n=n.nextSibling;}
-return n;},getPrevSibling:function(){var n=this.dom.previousSibling;while(n&&n.nodeType!=1){n=n.previousSibling;}
-return n;},appendChild:function(el){el=Ext.get(el);el.appendTo(this);return this;},createChild:function(config,insertBefore,returnDom){config=config||{tag:'div'};if(insertBefore){return Ext.DomHelper.insertBefore(insertBefore,config,returnDom!==true);}
-return Ext.DomHelper[!this.dom.firstChild?'overwrite':'append'](this.dom,config,returnDom!==true);},appendTo:function(el){el=Ext.getDom(el);el.appendChild(this.dom);return this;},insertBefore:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el);return this;},insertAfter:function(el){el=Ext.getDom(el);el.parentNode.insertBefore(this.dom,el.nextSibling);return this;},insertFirst:function(el,returnDom){el=el||{};if(typeof el=='object'&&!el.nodeType){return this.createChild(el,this.dom.firstChild,returnDom);}else{el=Ext.getDom(el);this.dom.insertBefore(el,this.dom.firstChild);return!returnDom?Ext.get(el):el;}},insertSibling:function(el,where,returnDom){where=where?where.toLowerCase():'before';el=el||{};var rt,refNode=where=='before'?this.dom:this.dom.nextSibling;if(typeof el=='object'&&!el.nodeType){if(where=='after'&&!this.dom.nextSibling){rt=Ext.DomHelper.append(this.dom.parentNode,el,!returnDom);}else{rt=Ext.DomHelper[where=='after'?'insertAfter':'insertBefore'](this.dom,el,!returnDom);}}else{rt=this.dom.parentNode.insertBefore(Ext.getDom(el),where=='before'?this.dom:this.dom.nextSibling);if(!returnDom){rt=Ext.get(rt);}}
-return rt;},wrap:function(config,returnDom){if(!config){config={tag:"div"};}
-var newEl=Ext.DomHelper.insertBefore(this.dom,config,!returnDom);newEl.dom?newEl.dom.appendChild(this.dom):newEl.appendChild(this.dom);return newEl;},replace:function(el){el=Ext.get(el);this.insertBefore(el);el.remove();return this;},insertHtml:function(where,html,returnEl){var el=Ext.DomHelper.insertHtml(where,this.dom,html);return returnEl?Ext.get(el):el;},set:function(o,useSet){var el=this.dom;useSet=typeof useSet=='undefined'?(el.setAttribute?true:false):useSet;for(var attr in o){if(attr=="style"||typeof o[attr]=="function")continue;if(attr=="cls"){el.className=o["cls"];}else{if(useSet)el.setAttribute(attr,o[attr]);else el[attr]=o[attr];}}
-Ext.DomHelper.applyStyles(el,o.style);return this;},addKeyListener:function(key,fn,scope){var config;if(typeof key!="object"||key instanceof Array){config={key:key,fn:fn,scope:scope};}else{config={key:key.key,shift:key.shift,ctrl:key.ctrl,alt:key.alt,fn:fn,scope:scope};}
-return new Ext.KeyMap(this,config);},addKeyMap:function(config){return new Ext.KeyMap(this,config);},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth;},scrollTo:function(side,value,animate){var prop=side.toLowerCase()=="left"?"scrollLeft":"scrollTop";if(!animate||!A){this.dom[prop]=value;}else{var to=prop=="scrollLeft"?[value,this.dom.scrollTop]:[this.dom.scrollLeft,value];this.anim({scroll:{"to":to}},this.preanim(arguments,2),'scroll');}
-return this;},scroll:function(direction,distance,animate){if(!this.isScrollable()){return;}
-var el=this.dom;var l=el.scrollLeft,t=el.scrollTop;var w=el.scrollWidth,h=el.scrollHeight;var cw=el.clientWidth,ch=el.clientHeight;direction=direction.toLowerCase();var scrolled=false;var a=this.preanim(arguments,2);switch(direction){case"l":case"left":if(w-l>cw){var v=Math.min(l+distance,w-cw);this.scrollTo("left",v,a);scrolled=true;}
-break;case"r":case"right":if(l>0){var v=Math.max(l-distance,0);this.scrollTo("left",v,a);scrolled=true;}
-break;case"t":case"top":case"up":if(t>0){var v=Math.max(t-distance,0);this.scrollTo("top",v,a);scrolled=true;}
-break;case"b":case"bottom":case"down":if(h-t>ch){var v=Math.min(t+distance,h-ch);this.scrollTo("top",v,a);scrolled=true;}
-break;}
-return scrolled;},translatePoints:function(x,y){if(typeof x=='object'||x instanceof Array){y=x[1];x=x[0];}
-var p=this.getStyle('position');var o=this.getXY();var l=parseInt(this.getStyle('left'),10);var t=parseInt(this.getStyle('top'),10);if(isNaN(l)){l=(p=="relative")?0:this.dom.offsetLeft;}
-if(isNaN(t)){t=(p=="relative")?0:this.dom.offsetTop;}
-return{left:(x-o[0]+l),top:(y-o[1]+t)};},getScroll:function(){var d=this.dom,doc=document;if(d==doc||d==doc.body){var l=window.pageXOffset||doc.documentElement.scrollLeft||doc.body.scrollLeft||0;var t=window.pageYOffset||doc.documentElement.scrollTop||doc.body.scrollTop||0;return{left:l,top:t};}else{return{left:d.scrollLeft,top:d.scrollTop};}},getColor:function(attr,defaultValue,prefix){var v=this.getStyle(attr);if(!v||v=="transparent"||v=="inherit"){return defaultValue;}
-var color=typeof prefix=="undefined"?"#":prefix;if(v.substr(0,4)=="rgb("){var rvs=v.slice(4,v.length-1).split(",");for(var i=0;i<3;i++){var h=parseInt(rvs[i]).toString(16);if(h<16){h="0"+h;}
-color+=h;}}else{if(v.substr(0,1)=="#"){if(v.length==4){for(var i=1;i<4;i++){var c=v.charAt(i);color+=c+c;}}else if(v.length==7){color+=v.substr(1);}}}
-return(color.length>5?color.toLowerCase():defaultValue);},boxWrap:function(cls){cls=cls||'x-box';var el=Ext.get(this.insertHtml('beforeBegin',String.format('<div class="{0}">'+El.boxMarkup+'</div>',cls)));el.child('.'+cls+'-mc').dom.appendChild(this.dom);return el;},getAttributeNS:Ext.isIE?function(ns,name){var d=this.dom;var type=typeof d[ns+":"+name];if(type!='undefined'&&type!='unknown'){return d[ns+":"+name];}
-return d[name];}:function(ns,name){var d=this.dom;return d.getAttributeNS(ns,name)||d.getAttribute(ns+":"+name)||d.getAttribute(name)||d[name];}};var ep=El.prototype;ep.on=ep.addListener;ep.mon=ep.addListener;ep.un=ep.removeListener;ep.autoBoxAdjust=true;ep.autoDisplayMode=true;El.unitPattern=/\d+(px|em|%|en|ex|pt|in|cm|mm|pc)$/i;El.addUnits=function(v,defaultUnit){if(v===""||v=="auto"){return v;}
-if(v===undefined){return'';}
-if(typeof v=="number"||!El.unitPattern.test(v)){return v+(defaultUnit||'px');}
-return v;};El.boxMarkup='<div class="{0}-tl"><div class="{0}-tr"><div class="{0}-tc"></div></div></div><div class="{0}-ml"><div class="{0}-mr"><div class="{0}-mc"></div></div></div><div class="{0}-bl"><div class="{0}-br"><div class="{0}-bc"></div></div></div>';El.VISIBILITY=1;El.DISPLAY=2;El.borders={l:"border-left-width",r:"border-right-width",t:"border-top-width",b:"border-bottom-width"};El.paddings={l:"padding-left",r:"padding-right",t:"padding-top",b:"padding-bottom"};El.margins={l:"margin-left",r:"margin-right",t:"margin-top",b:"margin-bottom"};El.cache={};var docEl;El.get=function(el){var ex,elm,id;if(!el){return null;}
-if(typeof el=="string"){if(!(elm=document.getElementById(el))){return null;}
-if(ex=El.cache[el]){ex.dom=elm;}else{ex=El.cache[el]=new El(elm);}
-return ex;}else if(el.tagName){if(!(id=el.id)){id=Ext.id(el);}
-if(ex=El.cache[id]){ex.dom=el;}else{ex=El.cache[id]=new El(el);}
-return ex;}else if(el instanceof El){if(el!=docEl){el.dom=document.getElementById(el.id)||el.dom;El.cache[el.id]=el;}
-return el;}else if(el.isComposite){return el;}else if(el instanceof Array){return El.select(el);}else if(el==document){if(!docEl){var f=function(){};f.prototype=El.prototype;docEl=new f();docEl.dom=document;}
-return docEl;}
-return null;};El.uncache=function(el){for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i]){delete El.cache[a[i].id||a[i]];}}};El.garbageCollect=function(){if(!Ext.enableGarbageCollector){clearInterval(El.collectorThread);return;}
-for(var eid in El.cache){var el=El.cache[eid],d=el.dom;if(!d||!d.parentNode||(!d.offsetParent&&!document.getElementById(eid))){delete El.cache[eid];if(Ext.enableListenerCollection){Ext.lib.Dom.purgeElement(d);}}}}
-El.collectorThreadId=setInterval(El.garbageCollect,30000);El.Flyweight=function(dom){this.dom=dom;};El.Flyweight.prototype=El.prototype;El._flyweights={};El.fly=function(el,named){named=named||'_global';el=Ext.getDom(el);if(!el){return null;}
-if(!El._flyweights[named]){El._flyweights[named]=new El.Flyweight();}
-El._flyweights[named].dom=el;return El._flyweights[named];};Ext.get=El.get;Ext.fly=El.fly;var noBoxAdjust=Ext.isStrict?{select:1}:{input:1,select:1,textarea:1};if(Ext.isIE||Ext.isGecko){noBoxAdjust['button']=1;}
-Ext.EventManager.on(window,'unload',function(){delete El.cache;delete El._flyweights;});})();
-
-Ext.enableFx=true;Ext.Fx={slideIn:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"t";this.fixDisplay();var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var wrap=this.fxWrap(r.pos,o,"hidden");var st=this.dom.style;st.visibility="visible";st.position="absolute";var after=function(){el.fxUnwrap(wrap,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,pt={to:[b.x,b.y]},bw={to:b.width},bh={to:b.height};switch(anchor.toLowerCase()){case"t":wrap.setSize(b.width,0);st.left=st.bottom="0";a={height:bh};break;case"l":wrap.setSize(0,b.height);st.right=st.top="0";a={width:bw};break;case"r":wrap.setSize(0,b.height);wrap.setX(b.right);st.left=st.top="0";a={width:bw,points:pt};break;case"b":wrap.setSize(b.width,0);wrap.setY(b.bottom);st.left=st.top="0";a={height:bh,points:pt};break;case"tl":wrap.setSize(0,0);st.right=st.bottom="0";a={width:bw,height:bh};break;case"bl":wrap.setSize(0,0);wrap.setY(b.y+b.height);st.right=st.top="0";a={width:bw,height:bh,points:pt};break;case"br":wrap.setSize(0,0);wrap.setXY([b.right,b.bottom]);st.left=st.top="0";a={width:bw,height:bh,points:pt};break;case"tr":wrap.setSize(0,0);wrap.setX(b.x+b.width);st.left=st.bottom="0";a={width:bw,height:bh,points:pt};break;}
-this.dom.style.visibility="visible";wrap.show();arguments.callee.anim=wrap.fxanim(a,o,'motion',.5,'easeOut',after);});return this;},slideOut:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"t";var r=this.getFxRestore();var b=this.getBox();this.setSize(b);var wrap=this.fxWrap(r.pos,o,"visible");var st=this.dom.style;st.visibility="visible";st.position="absolute";wrap.setSize(b);var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.fxUnwrap(wrap,r.pos,o);st.width=r.width;st.height=r.height;el.afterFx(o);};var a,zero={to:0};switch(anchor.toLowerCase()){case"t":st.left=st.bottom="0";a={height:zero};break;case"l":st.right=st.top="0";a={width:zero};break;case"r":st.left=st.top="0";a={width:zero,points:{to:[b.right,b.y]}};break;case"b":st.left=st.top="0";a={height:zero,points:{to:[b.x,b.bottom]}};break;case"tl":st.right=st.bottom="0";a={width:zero,height:zero};break;case"bl":st.right=st.top="0";a={width:zero,height:zero,points:{to:[b.x,b.bottom]}};break;case"br":st.left=st.top="0";a={width:zero,height:zero,points:{to:[b.x+b.width,b.bottom]}};break;case"tr":st.left=st.bottom="0";a={width:zero,height:zero,points:{to:[b.right,b.y]}};break;}
-arguments.callee.anim=wrap.fxanim(a,o,'motion',.5,"easeOut",after);});return this;},puff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.show();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;st.fontSize='';el.afterFx(o);};var width=this.getWidth();var height=this.getHeight();arguments.callee.anim=this.fxanim({width:{to:this.adjustWidth(width*2)},height:{to:this.adjustHeight(height*2)},points:{by:[-(width*.5),-(height*.5)]},opacity:{to:0},fontSize:{to:200,unit:"%"}},o,'motion',.5,"easeOut",after);});return this;},switchOff:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.clearOpacity();this.clip();var r=this.getFxRestore();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};this.fxanim({opacity:{to:0.3}},null,null,.1,null,function(){this.clearOpacity();(function(){this.fxanim({height:{to:1},points:{by:[0,this.getHeight()*.5]}},o,'motion',0.3,'easeIn',after);}).defer(100,this);});});return this;},highlight:function(color,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"ffff9c";attr=o.attr||"backgroundColor";this.clearOpacity();this.show();var origColor=this.getColor(attr);var restoreColor=this.dom.style[attr];endColor=(o.endColor||origColor)||"ffffff";var after=function(){el.dom.style[attr]=restoreColor;el.afterFx(o);};var a={};a[attr]={from:color,to:endColor};arguments.callee.anim=this.fxanim(a,o,'color',1,'easeIn',after);});return this;},frame:function(color,count,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){color=color||"#C3DAF9";if(color.length==6){color="#"+color;}
-count=count||1;duration=o.duration||1;this.show();var b=this.getBox();var animFn=function(){var proxy=this.createProxy({tag:"div",style:{visbility:"hidden",position:"absolute","z-index":"35000",border:"0px solid "+color}});var scale=Ext.isBorderBox?2:1;proxy.animate({top:{from:b.y,to:b.y-20},left:{from:b.x,to:b.x-20},borderWidth:{from:0,to:10},opacity:{from:1,to:0},height:{from:b.height,to:(b.height+(20*scale))},width:{from:b.width,to:(b.width+(20*scale))}},duration,function(){proxy.remove();});if(--count>0){animFn.defer((duration/2)*1000,this);}else{el.afterFx(o);}};animFn.call(this);});return this;},pause:function(seconds){var el=this.getFxEl();var o={};el.queueFx(o,function(){setTimeout(function(){el.afterFx(o);},seconds*1000);});return this;},fadeIn:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){this.setOpacity(0);this.fixDisplay();this.dom.style.visibility='visible';var to=o.endOpacity||1;arguments.callee.anim=this.fxanim({opacity:{to:to}},o,null,.5,"easeOut",function(){if(to==1){this.clearOpacity();}
-el.afterFx(o);});});return this;},fadeOut:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){arguments.callee.anim=this.fxanim({opacity:{to:o.endOpacity||0}},o,null,.5,"easeOut",function(){if(this.visibilityMode==Ext.Element.DISPLAY||o.useDisplay){this.dom.style.display="none";}else{this.dom.style.visibility="hidden";}
-this.clearOpacity();el.afterFx(o);});});return this;},scale:function(w,h,o){this.shift(Ext.apply({},o,{width:w,height:h}));return this;},shift:function(o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){var a={},w=o.width,h=o.height,x=o.x,y=o.y,op=o.opacity;if(w!==undefined){a.width={to:this.adjustWidth(w)};}
-if(h!==undefined){a.height={to:this.adjustHeight(h)};}
-if(x!==undefined||y!==undefined){a.points={to:[x!==undefined?x:this.getX(),y!==undefined?y:this.getY()]};}
-if(op!==undefined){a.opacity={to:op};}
-if(o.xy!==undefined){a.points={to:o.xy};}
-arguments.callee.anim=this.fxanim(a,o,'motion',.35,"easeOut",function(){el.afterFx(o);});});return this;},ghost:function(anchor,o){var el=this.getFxEl();o=o||{};el.queueFx(o,function(){anchor=anchor||"b";var r=this.getFxRestore();var w=this.getWidth(),h=this.getHeight();var st=this.dom.style;var after=function(){if(o.useDisplay){el.setDisplayed(false);}else{el.hide();}
-el.clearOpacity();el.setPositioning(r.pos);st.width=r.width;st.height=r.height;el.afterFx(o);};var a={opacity:{to:0},points:{}},pt=a.points;switch(anchor.toLowerCase()){case"t":pt.by=[0,-h];break;case"l":pt.by=[-w,0];break;case"r":pt.by=[w,0];break;case"b":pt.by=[0,h];break;case"tl":pt.by=[-w,-h];break;case"bl":pt.by=[-w,h];break;case"br":pt.by=[w,h];break;case"tr":pt.by=[w,-h];break;}
-arguments.callee.anim=this.fxanim(a,o,'motion',.5,"easeOut",after);});return this;},syncFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:true,stopFx:false});return this;},sequenceFx:function(){this.fxDefaults=Ext.apply(this.fxDefaults||{},{block:false,concurrent:false,stopFx:false});return this;},nextFx:function(){var ef=this.fxQueue[0];if(ef){ef.call(this);}},hasActiveFx:function(){return this.fxQueue&&this.fxQueue[0];},stopFx:function(){if(this.hasActiveFx()){var cur=this.fxQueue[0];if(cur&&cur.anim&&cur.anim.isAnimated()){this.fxQueue=[cur];cur.anim.stop(true);}}
-return this;},beforeFx:function(o){if(this.hasActiveFx()&&!o.concurrent){if(o.stopFx){this.stopFx();return true;}
-return false;}
-return true;},hasFxBlock:function(){var q=this.fxQueue;return q&&q[0]&&q[0].block;},queueFx:function(o,fn){if(!this.fxQueue){this.fxQueue=[];}
-if(!this.hasFxBlock()){Ext.applyIf(o,this.fxDefaults);if(!o.concurrent){var run=this.beforeFx(o);fn.block=o.block;this.fxQueue.push(fn);if(run){this.nextFx();}}else{fn.call(this);}}
-return this;},fxWrap:function(pos,o,vis){var wrap;if(!o.wrap||!(wrap=Ext.get(o.wrap))){var wrapXY;if(o.fixPosition){wrapXY=this.getXY();}
-var div=document.createElement("div");div.style.visibility=vis;wrap=Ext.get(this.dom.parentNode.insertBefore(div,this.dom));wrap.setPositioning(pos);if(wrap.getStyle("position")=="static"){wrap.position("relative");}
-this.clearPositioning('auto');wrap.clip();wrap.dom.appendChild(this.dom);if(wrapXY){wrap.setXY(wrapXY);}}
-return wrap;},fxUnwrap:function(wrap,pos,o){this.clearPositioning();this.setPositioning(pos);if(!o.wrap){wrap.dom.parentNode.insertBefore(this.dom,wrap.dom);wrap.remove();}},getFxRestore:function(){var st=this.dom.style;return{pos:this.getPositioning(),width:st.width,height:st.height};},afterFx:function(o){if(o.afterStyle){this.applyStyles(o.afterStyle);}
-if(o.afterCls){this.addClass(o.afterCls);}
-if(o.remove===true){this.remove();}
-Ext.callback(o.callback,o.scope,[this]);if(!o.concurrent){this.fxQueue.shift();this.nextFx();}},getFxEl:function(){return Ext.get(this.dom);},fxanim:function(args,opt,animType,defaultDur,defaultEase,cb){animType=animType||'run';opt=opt||{};var anim=Ext.lib.Anim[animType](this.dom,args,(opt.duration||defaultDur)||.35,(opt.easing||defaultEase)||'easeOut',function(){Ext.callback(cb,this);},this);opt.anim=anim;return anim;}};Ext.Fx.resize=Ext.Fx.scale;Ext.apply(Ext.Element.prototype,Ext.Fx);
-
-Ext.CompositeElement=function(els){this.elements=[];this.addElements(els);};Ext.CompositeElement.prototype={isComposite:true,addElements:function(els){if(!els)return this;if(typeof els=="string"){els=Ext.Element.selectorFunction(els);}
-var yels=this.elements;var index=yels.length-1;for(var i=0,len=els.length;i<len;i++){yels[++index]=Ext.get(els[i],true);}
-return this;},invoke:function(fn,args){var els=this.elements;for(var i=0,len=els.length;i<len;i++){Ext.Element.prototype[fn].apply(els[i],args);}
-return this;},add:function(els){if(typeof els=="string"){this.addElements(Ext.Element.selectorFunction(els));}else if(els.length!==undefined){this.addElements(els);}else{this.addElements([els]);}
-return this;},each:function(fn,scope){var els=this.elements;for(var i=0,len=els.length;i<len;i++){if(fn.call(scope||els[i],els[i],this,i)===false){break;}}
-return this;},item:function(index){return this.elements[index];}};(function(){Ext.CompositeElement.createCall=function(proto,fnName){if(!proto[fnName]){proto[fnName]=function(){return this.invoke(fnName,arguments);};}};for(var fnName in Ext.Element.prototype){if(typeof Ext.Element.prototype[fnName]=="function"){Ext.CompositeElement.createCall(Ext.CompositeElement.prototype,fnName);}};})();Ext.CompositeElementLite=function(els){Ext.CompositeElementLite.superclass.constructor.call(this,els);var flyEl=function(){};flyEl.prototype=Ext.Element.prototype;this.el=new Ext.Element.Flyweight();};Ext.extend(Ext.CompositeElementLite,Ext.CompositeElement,{addElements:function(els){if(els){if(els instanceof Array){this.elements=this.elements.concat(els);}else{var yels=this.elements;var index=yels.length-1;for(var i=0,len=els.length;i<len;i++){yels[++index]=els[i];}}}
-return this;},invoke:function(fn,args){var els=this.elements;var el=this.el;for(var i=0,len=els.length;i<len;i++){el.dom=els[i];Ext.Element.prototype[fn].apply(el,args);}
-return this;},item:function(index){this.el.dom=this.elements[index];return this.el;},addListener:function(eventName,handler,scope,opt){var els=this.elements;for(var i=0,len=els.length;i<len;i++){Ext.EventManager.on(els[i],eventName,handler,scope||els[i],opt);}
-return this;},each:function(fn,scope){var els=this.elements;var el=this.el;for(var i=0,len=els.length;i<len;i++){el.dom=els[i];if(fn.call(scope||el,el,this,i)===false){break;}}
-return this;}});Ext.CompositeElementLite.prototype.on=Ext.CompositeElementLite.prototype.addListener;if(Ext.DomQuery){Ext.Element.selectorFunction=Ext.DomQuery.select;}
-Ext.Element.select=function(selector,unique,root){var els;if(typeof selector=="string"){els=Ext.Element.selectorFunction(selector,root);}else if(selector.length!==undefined){els=selector;}else{throw"Invalid selector";}
-if(unique===true){return new Ext.CompositeElement(els);}else{return new Ext.CompositeElementLite(els);}};Ext.select=Ext.Element.select;
-
-Ext.UpdateManager=function(el,forceNew){el=Ext.get(el);if(!forceNew&&el.updateManager){return el.updateManager;}
-this.el=el;this.defaultUrl=null;this.addEvents({"beforeupdate":true,"update":true,"failure":true});var d=Ext.UpdateManager.defaults;this.sslBlankUrl=d.sslBlankUrl;this.disableCaching=d.disableCaching;this.indicatorText=d.indicatorText;this.showLoadIndicator=d.showLoadIndicator;this.timeout=d.timeout;this.loadScripts=d.loadScripts;this.transaction=null;this.autoRefreshProcId=null;this.refreshDelegate=this.refresh.createDelegate(this);this.updateDelegate=this.update.createDelegate(this);this.formUpdateDelegate=this.formUpdate.createDelegate(this);this.successDelegate=this.processSuccess.createDelegate(this);this.failureDelegate=this.processFailure.createDelegate(this);this.renderer=new Ext.UpdateManager.BasicRenderer();Ext.UpdateManager.superclass.constructor.call(this);};Ext.extend(Ext.UpdateManager,Ext.util.Observable,{getEl:function(){return this.el;},update:function(url,params,callback,discardUrl){if(this.fireEvent("beforeupdate",this.el,url,params)!==false){var method=this.method;if(typeof url=="object"){var cfg=url;url=cfg.url;params=params||cfg.params;callback=callback||cfg.callback;discardUrl=discardUrl||cfg.discardUrl;if(callback&&cfg.scope){callback=callback.createDelegate(cfg.scope);}
-if(typeof cfg.method!="undefined"){method=cfg.method;};if(typeof cfg.nocache!="undefined"){this.disableCaching=cfg.nocache;};if(typeof cfg.text!="undefined"){this.indicatorText='<div class="loading-indicator">'+cfg.text+"</div>";};if(typeof cfg.scripts!="undefined"){this.loadScripts=cfg.scripts;};if(typeof cfg.timeout!="undefined"){this.timeout=cfg.timeout;};}
-this.showLoading();if(!discardUrl){this.defaultUrl=url;}
-if(typeof url=="function"){url=url.call(this);}
-if(typeof params=="function"){params=params();}
-if(params&&typeof params!="string"){var buf=[];for(var key in params){if(typeof params[key]!="function"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(params[key]),"&");}}
-delete buf[buf.length-1];params=buf.join("");}
-var cb={success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":url,"form":null,"callback":callback,"params":params}};method=method||(params?"POST":"GET");if(method=="GET"){url=this.prepareUrl(url);}
-this.transaction=Ext.lib.Ajax.request(method,url,cb,params);}},formUpdate:function(form,url,reset,callback){if(this.fireEvent("beforeupdate",this.el,form,url)!==false){formEl=Ext.getDom(form);if(typeof url=="function"){url=url.call(this);}
-if(typeof params=="function"){params=params();}
-url=url||formEl.action;var cb={success:this.successDelegate,failure:this.failureDelegate,timeout:(this.timeout*1000),argument:{"url":url,"form":formEl,"callback":callback,"reset":reset}};var isUpload=false;var enctype=formEl.getAttribute("enctype");if(enctype&&enctype.toLowerCase()=="multipart/form-data"){isUpload=true;cb.upload=this.successDelegate;}
-this.transaction=Ext.lib.Ajax.formRequest(formEl,url,cb,null,isUpload,this.sslBlankUrl);this.showLoading.defer(1,this);}},refresh:function(callback){if(this.defaultUrl==null){return;}
-this.update(this.defaultUrl,null,callback,true);},startAutoRefresh:function(interval,url,params,callback,refreshNow){if(refreshNow){this.update(url||this.defaultUrl,params,callback,true);}
-if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);}
-this.autoRefreshProcId=setInterval(this.update.createDelegate(this,[url||this.defaultUrl,params,callback,true]),interval*1000);},stopAutoRefresh:function(){if(this.autoRefreshProcId){clearInterval(this.autoRefreshProcId);delete this.autoRefreshProcId;}},isAutoRefreshing:function(){return this.autoRefreshProcId?true:false;},showLoading:function(){if(this.showLoadIndicator){this.el.update(this.indicatorText);}},prepareUrl:function(url){if(this.disableCaching){var append="_dc="+(new Date().getTime());if(url.indexOf("?")!==-1){url+="&"+append;}else{url+="?"+append;}}
-return url;},processSuccess:function(response){this.transaction=null;if(response.argument.form&&response.argument.reset){try{response.argument.form.reset();}catch(e){}}
-if(this.loadScripts){this.renderer.render(this.el,response,this,this.updateComplete.createDelegate(this,[response]));}else{this.renderer.render(this.el,response,this);this.updateComplete(response);}},updateComplete:function(response){this.fireEvent("update",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback(this.el,true,response);}},processFailure:function(response){this.transaction=null;this.fireEvent("failure",this.el,response);if(typeof response.argument.callback=="function"){response.argument.callback(this.el,false,response);}},setRenderer:function(renderer){this.renderer=renderer;},getRenderer:function(){return this.renderer;},setDefaultUrl:function(defaultUrl){this.defaultUrl=defaultUrl;},abort:function(){if(this.transaction){Ext.lib.Ajax.abort(this.transaction);}},isUpdating:function(){if(this.transaction){return Ext.lib.Ajax.isCallInProgress(this.transaction);}
-return false;}});Ext.UpdateManager.defaults={timeout:30,loadScripts:false,sslBlankUrl:(Ext.SSL_SECURE_URL||"javascript:false"),disableCaching:false,showLoadIndicator:true,indicatorText:'<div class="loading-indicator">Loading...</div>'};Ext.UpdateManager.updateElement=function(el,url,params,options){var um=Ext.get(el,true).getUpdateManager();Ext.apply(um,options);um.update(url,params,options?options.callback:null);};Ext.UpdateManager.update=Ext.UpdateManager.updateElement;Ext.UpdateManager.BasicRenderer=function(){};Ext.UpdateManager.BasicRenderer.prototype={render:function(el,response,updateManager,callback){el.update(response.responseText,updateManager.loadScripts,callback);}};
-
-Ext.util.DelayedTask=function(fn,scope,args){var id=null,d,t;var call=function(){var now=new Date().getTime();if(now-t>=d){clearInterval(id);id=null;fn.apply(scope,args||[]);}};this.delay=function(delay,newFn,newScope,newArgs){if(id&&delay!=d){this.cancel();}
-d=delay;t=new Date().getTime();fn=newFn||fn;scope=newScope||scope;args=newArgs||args;if(!id){id=setInterval(call,d);}};this.cancel=function(){if(id){clearInterval(id);id=null;}};};
diff --git a/lib/web/extjs/package/button/button-debug.js b/lib/web/extjs/package/button/button-debug.js
deleted file mode 100644
index d745316f7e0dcb0f7d23b1af665f2a9b086f4c0f..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/button/button-debug.js
+++ /dev/null
@@ -1,391 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.Button = function(renderTo, config){
-    Ext.apply(this, config);
-    this.addEvents({
-        
-	    "click" : true,
-        
-	    "toggle" : true,
-        
-        'mouseover' : true,
-        
-        'mouseout': true
-    });
-    if(this.menu){
-        this.menu = Ext.menu.MenuMgr.get(this.menu);
-    }
-    if(renderTo){
-        this.render(renderTo);
-    }
-    Ext.Button.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.Button, Ext.util.Observable, {
-    
-    hidden : false,
-    
-    disabled : false,
-    
-    pressed : false,
-
-    
-    tabIndex : undefined,
-
-    
-    enableToggle: false,
-    
-    menu : undefined,
-    
-    menuAlign : "tl-bl?",
-
-    
-    iconCls : undefined,
-    
-    type : 'button',
-
-    // private
-    menuClassTarget: 'tr',
-
-    clickEvent : 'click',
-    handleMouseEvents : true,
-
-    
-    tooltipType : 'qtip',
-
-    
-    
-    
-
-    // private
-    render : function(renderTo){
-        var btn;
-        if(this.hideParent){
-            this.parentEl = Ext.get(renderTo);
-        }
-        if(!this.dhconfig){
-            if(!this.template){
-                if(!Ext.Button.buttonTemplate){
-                    // hideous table template
-                    Ext.Button.buttonTemplate = new Ext.Template(
-                        '<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>',
-                        '<td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i>&#160;</i></td>',
-                        "</tr></tbody></table>");
-                }
-                this.template = Ext.Button.buttonTemplate;
-            }
-            btn = this.template.append(renderTo, [this.text || '&#160;', this.type], true);
-            var btnEl = btn.child("button:first");
-            btnEl.on('focus', this.onFocus, this);
-            btnEl.on('blur', this.onBlur, this);
-            if(this.cls){
-                btn.addClass(this.cls);
-            }
-            if(this.icon){
-                btnEl.setStyle('background-image', 'url(' +this.icon +')');
-            }
-            if(this.iconCls){
-                btnEl.addClass(this.iconCls);
-                if(!this.cls){
-                    btn.addClass(this.text ? 'x-btn-text-icon' : 'x-btn-icon');
-                }
-            }
-            if(this.tabIndex !== undefined){
-                btnEl.dom.tabIndex = this.tabIndex;
-            }
-            if(this.tooltip){
-                if(typeof this.tooltip == 'object'){
-                    Ext.QuickTips.tips(Ext.apply({
-                          target: btnEl.id
-                    }, this.tooltip));
-                } else {
-                    btnEl.dom[this.tooltipType] = this.tooltip;
-                }
-            }
-        }else{
-            btn = Ext.DomHelper.append(Ext.get(renderTo).dom, this.dhconfig, true);
-        }
-        this.el = btn;
-        if(this.id){
-            this.el.dom.id = this.el.id = this.id;
-        }
-        if(this.menu){
-            this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");
-            this.menu.on("show", this.onMenuShow, this);
-            this.menu.on("hide", this.onMenuHide, this);
-        }
-        btn.addClass("x-btn");
-        if(Ext.isIE && !Ext.isIE7){
-            this.autoWidth.defer(1, this);
-        }else{
-            this.autoWidth();
-        }
-        if(this.handleMouseEvents){
-            btn.on("mouseover", this.onMouseOver, this);
-            btn.on("mouseout", this.onMouseOut, this);
-            btn.on("mousedown", this.onMouseDown, this);
-        }
-        btn.on(this.clickEvent, this.onClick, this);
-        //btn.on("mouseup", this.onMouseUp, this);
-        if(this.hidden){
-            this.hide();
-        }
-        if(this.disabled){
-            this.disable();
-        }
-        Ext.ButtonToggleMgr.register(this);
-        if(this.pressed){
-            this.el.addClass("x-btn-pressed");
-        }
-        if(this.repeat){
-            var repeater = new Ext.util.ClickRepeater(btn,
-                typeof this.repeat == "object" ? this.repeat : {}
-            );
-            repeater.on("click", this.onClick,  this);
-        }
-    },
-    
-    getEl : function(){
-        return this.el;  
-    },
-    
-    
-    destroy : function(){
-        Ext.ButtonToggleMgr.unregister(this);
-        this.el.removeAllListeners();
-        this.purgeListeners();
-        this.el.remove();
-    },
-
-    // private
-    autoWidth : function(){
-        if(this.el){
-            this.el.setWidth("auto");
-            if(Ext.isIE7 && Ext.isStrict){
-                var ib = this.el.child('button');
-                if(ib && ib.getWidth() > 20){
-                    ib.clip();
-                    ib.setWidth(Ext.util.TextMetrics.measure(ib, this.text).width+ib.getFrameWidth('lr'));
-                }
-            }
-            if(this.minWidth){
-                if(this.hidden){
-                    this.el.beginMeasure();
-                }
-                if(this.el.getWidth() < this.minWidth){
-                    this.el.setWidth(this.minWidth);
-                }
-                if(this.hidden){
-                    this.el.endMeasure();
-                }
-            }
-        }
-    },
-
-    
-    setHandler : function(handler, scope){
-        this.handler = handler;
-        this.scope = scope;  
-    },
-    
-    
-    setText : function(text){
-        this.text = text;
-        if(this.el){
-            this.el.child("td.x-btn-center button.x-btn-text").update(text);
-        }
-        this.autoWidth();
-    },
-    
-    
-    getText : function(){
-        return this.text;  
-    },
-    
-    
-    show: function(){
-        this.hidden = false;
-        if(this.el){
-            this[this.hideParent? 'parentEl' : 'el'].setStyle("display", "");
-        }
-    },
-    
-    
-    hide: function(){
-        this.hidden = true;
-        if(this.el){
-            this[this.hideParent? 'parentEl' : 'el'].setStyle("display", "none");
-        }
-    },
-    
-    
-    setVisible: function(visible){
-        if(visible) {
-            this.show();
-        }else{
-            this.hide();
-        }
-    },
-    
-    
-    toggle : function(state){
-        state = state === undefined ? !this.pressed : state;
-        if(state != this.pressed){
-            if(state){
-                this.el.addClass("x-btn-pressed");
-                this.pressed = true;
-                this.fireEvent("toggle", this, true);
-            }else{
-                this.el.removeClass("x-btn-pressed");
-                this.pressed = false;
-                this.fireEvent("toggle", this, false);
-            }
-            if(this.toggleHandler){
-                this.toggleHandler.call(this.scope || this, this, state);
-            }
-        }
-    },
-    
-    
-    focus : function(){
-        this.el.child('button:first').focus();
-    },
-    
-    
-    disable : function(){
-        if(this.el){
-            this.el.addClass("x-btn-disabled");
-        }
-        this.disabled = true;
-    },
-    
-    
-    enable : function(){
-        if(this.el){
-            this.el.removeClass("x-btn-disabled");
-        }
-        this.disabled = false;
-    },
-
-    
-    setDisabled : function(v){
-        this[v !== true ? "enable" : "disable"]();
-    },
-
-    // private
-    onClick : function(e){
-        if(e){
-            e.preventDefault();
-        }
-        if(e.button != 0){
-            return;
-        }
-        if(!this.disabled){
-            if(this.enableToggle){
-                this.toggle();
-            }
-            if(this.menu && !this.menu.isVisible()){
-                this.menu.show(this.el, this.menuAlign);
-            }
-            this.fireEvent("click", this, e);
-            if(this.handler){
-                this.el.removeClass("x-btn-over");
-                this.handler.call(this.scope || this, this, e);
-            }
-        }
-    },
-    // private
-    onMouseOver : function(e){
-        if(!this.disabled){
-            this.el.addClass("x-btn-over");
-            this.fireEvent('mouseover', this, e);
-        }
-    },
-    // private
-    onMouseOut : function(e){
-        if(!e.within(this.el,  true)){
-            this.el.removeClass("x-btn-over");
-            this.fireEvent('mouseout', this, e);
-        }
-    },
-    // private
-    onFocus : function(e){
-        if(!this.disabled){
-            this.el.addClass("x-btn-focus");
-        }
-    },
-    // private
-    onBlur : function(e){
-        this.el.removeClass("x-btn-focus");
-    },
-    // private
-    onMouseDown : function(e){
-        if(!this.disabled && e.button == 0){
-            this.el.addClass("x-btn-click");
-            Ext.get(document).on('mouseup', this.onMouseUp, this);
-        }
-    },
-    // private
-    onMouseUp : function(e){
-        if(e.button == 0){
-            this.el.removeClass("x-btn-click");
-            Ext.get(document).un('mouseup', this.onMouseUp, this);
-        }
-    },
-    // private
-    onMenuShow : function(e){
-        this.el.addClass("x-btn-menu-active");
-    },
-    // private
-    onMenuHide : function(e){
-        this.el.removeClass("x-btn-menu-active");
-    }   
-});
-
-// Private utility class used by Button
-Ext.ButtonToggleMgr = function(){
-   var groups = {};
-   
-   function toggleGroup(btn, state){
-       if(state){
-           var g = groups[btn.toggleGroup];
-           for(var i = 0, l = g.length; i < l; i++){
-               if(g[i] != btn){
-                   g[i].toggle(false);
-               }
-           }
-       }
-   }
-   
-   return {
-       register : function(btn){
-           if(!btn.toggleGroup){
-               return;
-           }
-           var g = groups[btn.toggleGroup];
-           if(!g){
-               g = groups[btn.toggleGroup] = [];
-           }
-           g.push(btn);
-           btn.on("toggle", toggleGroup);
-       },
-       
-       unregister : function(btn){
-           if(!btn.toggleGroup){
-               return;
-           }
-           var g = groups[btn.toggleGroup];
-           if(g){
-               g.remove(btn);
-               btn.un("toggle", toggleGroup);
-           }
-       }
-   };
-}();
diff --git a/lib/web/extjs/package/button/button.js b/lib/web/extjs/package/button/button.js
deleted file mode 100644
index 54ad6dca924403a53ab5a4eb558dcaf015f5b694..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/button/button.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.Button=function(renderTo,config){Ext.apply(this,config);this.addEvents({"click":true,"toggle":true,'mouseover':true,'mouseout':true});if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);}
-if(renderTo){this.render(renderTo);}
-Ext.Button.superclass.constructor.call(this);};Ext.extend(Ext.Button,Ext.util.Observable,{hidden:false,disabled:false,pressed:false,tabIndex:undefined,enableToggle:false,menu:undefined,menuAlign:"tl-bl?",iconCls:undefined,type:'button',menuClassTarget:'tr',clickEvent:'click',handleMouseEvents:true,tooltipType:'qtip',render:function(renderTo){var btn;if(this.hideParent){this.parentEl=Ext.get(renderTo);}
-if(!this.dhconfig){if(!this.template){if(!Ext.Button.buttonTemplate){Ext.Button.buttonTemplate=new Ext.Template('<table border="0" cellpadding="0" cellspacing="0" class="x-btn-wrap"><tbody><tr>','<td class="x-btn-left"><i>&#160;</i></td><td class="x-btn-center"><em unselectable="on"><button class="x-btn-text" type="{1}">{0}</button></em></td><td class="x-btn-right"><i>&#160;</i></td>',"</tr></tbody></table>");}
-this.template=Ext.Button.buttonTemplate;}
-btn=this.template.append(renderTo,[this.text||'&#160;',this.type],true);var btnEl=btn.child("button:first");btnEl.on('focus',this.onFocus,this);btnEl.on('blur',this.onBlur,this);if(this.cls){btn.addClass(this.cls);}
-if(this.icon){btnEl.setStyle('background-image','url('+this.icon+')');}
-if(this.iconCls){btnEl.addClass(this.iconCls);if(!this.cls){btn.addClass(this.text?'x-btn-text-icon':'x-btn-icon');}}
-if(this.tabIndex!==undefined){btnEl.dom.tabIndex=this.tabIndex;}
-if(this.tooltip){if(typeof this.tooltip=='object'){Ext.QuickTips.tips(Ext.apply({target:btnEl.id},this.tooltip));}else{btnEl.dom[this.tooltipType]=this.tooltip;}}}else{btn=Ext.DomHelper.append(Ext.get(renderTo).dom,this.dhconfig,true);}
-this.el=btn;if(this.id){this.el.dom.id=this.el.id=this.id;}
-if(this.menu){this.el.child(this.menuClassTarget).addClass("x-btn-with-menu");this.menu.on("show",this.onMenuShow,this);this.menu.on("hide",this.onMenuHide,this);}
-btn.addClass("x-btn");if(Ext.isIE&&!Ext.isIE7){this.autoWidth.defer(1,this);}else{this.autoWidth();}
-if(this.handleMouseEvents){btn.on("mouseover",this.onMouseOver,this);btn.on("mouseout",this.onMouseOut,this);btn.on("mousedown",this.onMouseDown,this);}
-btn.on(this.clickEvent,this.onClick,this);if(this.hidden){this.hide();}
-if(this.disabled){this.disable();}
-Ext.ButtonToggleMgr.register(this);if(this.pressed){this.el.addClass("x-btn-pressed");}
-if(this.repeat){var repeater=new Ext.util.ClickRepeater(btn,typeof this.repeat=="object"?this.repeat:{});repeater.on("click",this.onClick,this);}},getEl:function(){return this.el;},destroy:function(){Ext.ButtonToggleMgr.unregister(this);this.el.removeAllListeners();this.purgeListeners();this.el.remove();},autoWidth:function(){if(this.el){this.el.setWidth("auto");if(Ext.isIE7&&Ext.isStrict){var ib=this.el.child('button');if(ib&&ib.getWidth()>20){ib.clip();ib.setWidth(Ext.util.TextMetrics.measure(ib,this.text).width+ib.getFrameWidth('lr'));}}
-if(this.minWidth){if(this.hidden){this.el.beginMeasure();}
-if(this.el.getWidth()<this.minWidth){this.el.setWidth(this.minWidth);}
-if(this.hidden){this.el.endMeasure();}}}},setHandler:function(handler,scope){this.handler=handler;this.scope=scope;},setText:function(text){this.text=text;if(this.el){this.el.child("td.x-btn-center button.x-btn-text").update(text);}
-this.autoWidth();},getText:function(){return this.text;},show:function(){this.hidden=false;if(this.el){this[this.hideParent?'parentEl':'el'].setStyle("display","");}},hide:function(){this.hidden=true;if(this.el){this[this.hideParent?'parentEl':'el'].setStyle("display","none");}},setVisible:function(visible){if(visible){this.show();}else{this.hide();}},toggle:function(state){state=state===undefined?!this.pressed:state;if(state!=this.pressed){if(state){this.el.addClass("x-btn-pressed");this.pressed=true;this.fireEvent("toggle",this,true);}else{this.el.removeClass("x-btn-pressed");this.pressed=false;this.fireEvent("toggle",this,false);}
-if(this.toggleHandler){this.toggleHandler.call(this.scope||this,this,state);}}},focus:function(){this.el.child('button:first').focus();},disable:function(){if(this.el){this.el.addClass("x-btn-disabled");}
-this.disabled=true;},enable:function(){if(this.el){this.el.removeClass("x-btn-disabled");}
-this.disabled=false;},setDisabled:function(v){this[v!==true?"enable":"disable"]();},onClick:function(e){if(e){e.preventDefault();}
-if(e.button!=0){return;}
-if(!this.disabled){if(this.enableToggle){this.toggle();}
-if(this.menu&&!this.menu.isVisible()){this.menu.show(this.el,this.menuAlign);}
-this.fireEvent("click",this,e);if(this.handler){this.el.removeClass("x-btn-over");this.handler.call(this.scope||this,this,e);}}},onMouseOver:function(e){if(!this.disabled){this.el.addClass("x-btn-over");this.fireEvent('mouseover',this,e);}},onMouseOut:function(e){if(!e.within(this.el,true)){this.el.removeClass("x-btn-over");this.fireEvent('mouseout',this,e);}},onFocus:function(e){if(!this.disabled){this.el.addClass("x-btn-focus");}},onBlur:function(e){this.el.removeClass("x-btn-focus");},onMouseDown:function(e){if(!this.disabled&&e.button==0){this.el.addClass("x-btn-click");Ext.get(document).on('mouseup',this.onMouseUp,this);}},onMouseUp:function(e){if(e.button==0){this.el.removeClass("x-btn-click");Ext.get(document).un('mouseup',this.onMouseUp,this);}},onMenuShow:function(e){this.el.addClass("x-btn-menu-active");},onMenuHide:function(e){this.el.removeClass("x-btn-menu-active");}});Ext.ButtonToggleMgr=function(){var groups={};function toggleGroup(btn,state){if(state){var g=groups[btn.toggleGroup];for(var i=0,l=g.length;i<l;i++){if(g[i]!=btn){g[i].toggle(false);}}}}
-return{register:function(btn){if(!btn.toggleGroup){return;}
-var g=groups[btn.toggleGroup];if(!g){g=groups[btn.toggleGroup]=[];}
-g.push(btn);btn.on("toggle",toggleGroup);},unregister:function(btn){if(!btn.toggleGroup){return;}
-var g=groups[btn.toggleGroup];if(g){g.remove(btn);btn.un("toggle",toggleGroup);}}};}();
diff --git a/lib/web/extjs/package/color-palette.js b/lib/web/extjs/package/color-palette.js
deleted file mode 100644
index 3d5d12d77ef0fe2285032b0da1a0aea582313a22..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/color-palette.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.ColorPalette=function(config){Ext.ColorPalette.superclass.constructor.call(this,config);this.addEvents({select:true});if(this.handler){this.on("select",this.handler,this.scope,true);}};Ext.extend(Ext.ColorPalette,Ext.Component,{itemCls:"x-color-palette",value:null,clickEvent:'click',ctype:"Ext.ColorPalette",allowReselect:false,colors:["000000","993300","333300","003300","003366","000080","333399","333333","800000","FF6600","808000","008000","008080","0000FF","666699","808080","FF0000","FF9900","99CC00","339966","33CCCC","3366FF","800080","969696","FF00FF","FFCC00","FFFF00","00FF00","00FFFF","00CCFF","993366","C0C0C0","FF99CC","FFCC99","FFFF99","CCFFCC","CCFFFF","99CCFF","CC99FF","FFFFFF"],onRender:function(container,position){var t=new Ext.MasterTemplate('<tpl><a href="#" class="color-{0}" hidefocus="on"><em><span style="background:#{0}" unselectable="on">&#160;</span></em></a></tpl>');var c=this.colors;for(var i=0,len=c.length;i<len;i++){t.add([c[i]]);}
-var el=document.createElement("div");el.className=this.itemCls;t.overwrite(el);container.dom.insertBefore(el,position);this.el=Ext.get(el);this.el.on(this.clickEvent,this.handleClick,this,{delegate:"a"});if(this.clickEvent!='click'){this.el.on('click',Ext.emptyFn,this,{delegate:"a",preventDefault:true});}},afterRender:function(){Ext.ColorPalette.superclass.afterRender.call(this);if(this.value){var s=this.value;this.value=null;this.select(s);}},handleClick:function(e,t){e.preventDefault();if(!this.disabled){var c=t.className.match(/(?:^|\s)color-(.{6})(?:\s|$)/)[1];this.select(c.toUpperCase());}},select:function(color){color=color.replace("#","");if(color!=this.value||this.allowReselect){var el=this.el;if(this.value){el.child("a.color-"+this.value).removeClass("x-color-palette-sel");}
-el.child("a.color-"+color).addClass("x-color-palette-sel");this.value=color;this.fireEvent("select",this,color);}}});
diff --git a/lib/web/extjs/package/data/data.js b/lib/web/extjs/package/data/data.js
deleted file mode 100644
index 1490fab25ea57ff7bbc3a2c7c6356f29d355047a..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/data/data.js
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.data.SortTypes={none:function(s){return s;},stripTagsRE:/<\/?[^>]+>/gi,asText:function(s){return String(s).replace(this.stripTagsRE,"");},asUCText:function(s){return String(s).toUpperCase().replace(this.stripTagsRE,"");},asUCString:function(s){return String(s).toUpperCase();},asDate:function(s){if(!s){return 0;}
-if(s instanceof Date){return s.getTime();}
-return Date.parse(String(s));},asFloat:function(s){var val=parseFloat(String(s).replace(/,/g,""));if(isNaN(val))val=0;return val;},asInt:function(s){var val=parseInt(String(s).replace(/,/g,""));if(isNaN(val))val=0;return val;}};
-
-Ext.data.Record=function(data,id){this.id=(id||id===0)?id:++Ext.data.Record.AUTO_ID;this.data=data;};Ext.data.Record.create=function(o){var f=function(){f.superclass.constructor.apply(this,arguments);};Ext.extend(f,Ext.data.Record);var p=f.prototype;p.fields=new Ext.util.MixedCollection(false,function(field){return field.name;});for(var i=0,len=o.length;i<len;i++){p.fields.add(new Ext.data.Field(o[i]));}
-f.getField=function(name){return p.fields.get(name);};return f;};Ext.data.Record.AUTO_ID=1000;Ext.data.Record.EDIT='edit';Ext.data.Record.REJECT='reject';Ext.data.Record.COMMIT='commit';Ext.data.Record.prototype={dirty:false,editing:false,error:null,modified:null,join:function(store){this.store=store;},set:function(name,value){if(this.data[name]==value){return;}
-this.dirty=true;if(!this.modified){this.modified={};}
-if(typeof this.modified[name]=='undefined'){this.modified[name]=this.data[name];}
-this.data[name]=value;if(!this.editing){this.store.afterEdit(this);}},get:function(name){return this.data[name];},beginEdit:function(){this.editing=true;this.modified={};},cancelEdit:function(){this.editing=false;delete this.modified;},endEdit:function(){this.editing=false;if(this.dirty&&this.store){this.store.afterEdit(this);}},reject:function(){var m=this.modified;for(var n in m){if(typeof m[n]!="function"){this.data[n]=m[n];}}
-this.dirty=false;delete this.modified;this.editing=false;if(this.store){this.store.afterReject(this);}},commit:function(){this.dirty=false;delete this.modified;this.editing=false;if(this.store){this.store.afterCommit(this);}},hasError:function(){return this.error!=null;},clearError:function(){this.error=null;}};
-
-Ext.data.Store=function(config){this.data=new Ext.util.MixedCollection(false);this.data.getKey=function(o){return o.id;};this.baseParams={};this.paramNames={"start":"start","limit":"limit","sort":"sort","dir":"dir"};if(config&&config.data){this.inlineData=config.data;delete config.data;}
-Ext.apply(this,config);if(this.reader){if(!this.recordType){this.recordType=this.reader.recordType;}
-if(this.reader.onMetaChange){this.reader.onMetaChange=this.onMetaChange.createDelegate(this);}}
-if(this.recordType){this.fields=this.recordType.prototype.fields;}
-this.modified=[];this.addEvents({datachanged:true,metachange:true,add:true,remove:true,update:true,clear:true,beforeload:true,load:true,loadexception:true});if(this.proxy){this.relayEvents(this.proxy,["loadexception"]);}
-this.sortToggle={};Ext.data.Store.superclass.constructor.call(this);if(this.inlineData){this.loadData(this.inlineData);delete this.inlineData;}};Ext.extend(Ext.data.Store,Ext.util.Observable,{remoteSort:false,lastOptions:null,add:function(records){records=[].concat(records);for(var i=0,len=records.length;i<len;i++){records[i].join(this);}
-var index=this.data.length;this.data.addAll(records);this.fireEvent("add",this,records,index);},remove:function(record){var index=this.data.indexOf(record);this.data.removeAt(index);this.fireEvent("remove",this,record,index);},removeAll:function(){this.data.clear();this.fireEvent("clear",this);},insert:function(index,records){records=[].concat(records);for(var i=0,len=records.length;i<len;i++){this.data.insert(index,records[i]);records[i].join(this);}
-this.fireEvent("add",this,records,index);},indexOf:function(record){return this.data.indexOf(record);},indexOfId:function(id){return this.data.indexOfKey(id);},getById:function(id){return this.data.key(id);},getAt:function(index){return this.data.itemAt(index);},getRange:function(start,end){return this.data.getRange(start,end);},storeOptions:function(o){o=Ext.apply({},o);delete o.callback;delete o.scope;this.lastOptions=o;},load:function(options){options=options||{};if(this.fireEvent("beforeload",this,options)!==false){this.storeOptions(options);var p=Ext.apply(options.params||{},this.baseParams);if(this.sortInfo&&this.remoteSort){var pn=this.paramNames;p[pn["sort"]]=this.sortInfo.field;p[pn["dir"]]=this.sortInfo.direction;}
-this.proxy.load(p,this.reader,this.loadRecords,this,options);}},reload:function(options){this.load(Ext.applyIf(options||{},this.lastOptions));},loadRecords:function(o,options,success){if(!o||success===false){if(success!==false){this.fireEvent("load",this,[],options);}
-if(options.callback){options.callback.call(options.scope||this,[],options,false);}
-return;}
-var r=o.records,t=o.totalRecords||r.length;for(var i=0,len=r.length;i<len;i++){r[i].join(this);}
-if(!options||options.add!==true){this.data.clear();this.data.addAll(r);this.totalLength=t;this.applySort();this.fireEvent("datachanged",this);}else{this.totalLength=Math.max(t,this.data.length+r.length);this.data.addAll(r);}
-this.fireEvent("load",this,r,options);if(options.callback){options.callback.call(options.scope||this,r,options,true);}},loadData:function(o,append){var r=this.reader.readRecords(o);this.loadRecords(r,{add:append},true);},getCount:function(){return this.data.length||0;},getTotalCount:function(){return this.totalLength||0;},getSortState:function(){return this.sortInfo;},applySort:function(){if(this.sortInfo&&!this.remoteSort){var s=this.sortInfo,f=s.field;var st=this.fields.get(f).sortType;var fn=function(r1,r2){var v1=st(r1.data[f]),v2=st(r2.data[f]);return v1>v2?1:(v1<v2?-1:0);};this.data.sort(s.direction,fn);if(this.snapshot&&this.snapshot!=this.data){this.snapshot.sort(s.direction,fn);}}},setDefaultSort:function(field,dir){this.sortInfo={field:field,direction:dir?dir.toUpperCase():"ASC"};},sort:function(fieldName,dir){var f=this.fields.get(fieldName);if(!dir){if(this.sortInfo&&this.sortInfo.field==f.name){dir=(this.sortToggle[f.name]||"ASC").toggle("ASC","DESC");}else{dir=f.sortDir;}}
-this.sortToggle[f.name]=dir;this.sortInfo={field:f.name,direction:dir};if(!this.remoteSort){this.applySort();this.fireEvent("datachanged",this);}else{this.load(this.lastOptions);}},each:function(fn,scope){this.data.each(fn,scope);},getModifiedRecords:function(){return this.modified;},filter:function(property,value){if(!value.exec){value=String(value);if(value.length==0){return this.clearFilter();}
-value=new RegExp("^"+Ext.escapeRe(value),"i");}
-this.filterBy(function(r){return value.test(r.data[property]);});},filterBy:function(fn,scope){var data=this.snapshot||this.data;this.snapshot=data;this.data=data.filterBy(fn,scope);this.fireEvent("datachanged",this);},clearFilter:function(suppressEvent){if(this.snapshot&&this.snapshot!=this.data){this.data=this.snapshot;delete this.snapshot;if(suppressEvent!==true){this.fireEvent("datachanged",this);}}},afterEdit:function(record){if(this.modified.indexOf(record)==-1){this.modified.push(record);}
-this.fireEvent("update",this,record,Ext.data.Record.EDIT);},afterReject:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.REJECT);},afterCommit:function(record){this.modified.remove(record);this.fireEvent("update",this,record,Ext.data.Record.COMMIT);},commitChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].commit();}},rejectChanges:function(){var m=this.modified.slice(0);this.modified=[];for(var i=0,len=m.length;i<len;i++){m[i].reject();}},onMetaChange:function(meta,rtype,o){this.recordType=rtype;this.fields=rtype.prototype.fields;delete this.snapshot;this.sortInfo=meta.sortInfo;this.modified=[];this.fireEvent('metachange',this,this.reader.meta);}});
-
-Ext.data.SimpleStore=function(config){Ext.data.SimpleStore.superclass.constructor.call(this,{reader:new Ext.data.ArrayReader({id:config.id},Ext.data.Record.create(config.fields)),proxy:new Ext.data.MemoryProxy(config.data)});this.load();};Ext.extend(Ext.data.SimpleStore,Ext.data.Store);
-
-Ext.data.Connection=function(config){Ext.apply(this,config);this.addEvents({"beforerequest":true,"requestcomplete":true,"requestexception":true});Ext.data.Connection.superclass.constructor.call(this);};Ext.extend(Ext.data.Connection,Ext.util.Observable,{timeout:30000,request:function(options){if(this.fireEvent("beforerequest",this,options)!==false){var p=options.params;if(typeof p=="object"){p=Ext.urlEncode(Ext.apply(options.params,this.extraParams));}
-var cb={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{options:options},timeout:this.timeout};var method=options.method||this.method||(p?"POST":"GET");var url=options.url||this.url;if(this.autoAbort!==false){this.abort();}
-if(method=='GET'&&p){url+=(url.indexOf('?')!=-1?'&':'?')+p;p='';}
-this.transId=Ext.lib.Ajax.request(method,url,cb,p);}else{if(typeof options.callback=="function"){options.callback.call(options.scope||window,options,null,null);}}},isLoading:function(){return this.transId?true:false;},abort:function(){if(this.isLoading()){Ext.lib.Ajax.abort(this.transId);}},handleResponse:function(response){this.transId=false;var options=response.argument.options;this.fireEvent("requestcomplete",this,response,options);if(typeof options.callback=="function"){options.callback.call(options.scope||window,options,true,response);}},handleFailure:function(response,e){this.transId=false;var options=response.argument.options;this.fireEvent("requestexception",this,response,options,e);if(typeof options.callback=="function"){options.callback.call(options.scope||window,options,false,response);}}});
-
-Ext.data.Field=function(config){if(typeof config=="string"){config={name:config};}
-Ext.apply(this,config);if(!this.type){this.type="auto";}
-var st=Ext.data.SortTypes;if(typeof this.sortType=="string"){this.sortType=st[this.sortType];}
-if(!this.sortType){switch(this.type){case"string":this.sortType=st.asUCString;break;case"date":this.sortType=st.asDate;break;default:this.sortType=st.none;}}
-var stripRe=/[\$,%]/g;if(!this.convert){var cv,dateFormat=this.dateFormat;switch(this.type){case"":case"auto":case undefined:cv=function(v){return v;};break;case"string":cv=function(v){return String(v);};break;case"int":cv=function(v){return v!==undefined&&v!==null&&v!==''?parseInt(String(v).replace(stripRe,""),10):'';};break;case"float":cv=function(v){return v!==undefined&&v!==null&&v!==''?parseFloat(String(v).replace(stripRe,""),10):'';};break;case"bool":case"boolean":cv=function(v){return v===true||v==="true"||v==1;};break;case"date":cv=function(v){if(!v){return'';}
-if(v instanceof Date){return v;}
-if(dateFormat){if(dateFormat=="timestamp"){return new Date(v*1000);}
-return Date.parseDate(v,dateFormat);}
-var parsed=Date.parse(v);return parsed?new Date(parsed):null;};break;}
-this.convert=cv;}};Ext.data.Field.prototype={dateFormat:null,defaultValue:"",mapping:null,sortType:null,sortDir:"ASC"};
-
-Ext.data.DataReader=function(meta,recordType){this.meta=meta;this.recordType=recordType instanceof Array?Ext.data.Record.create(recordType):recordType;};Ext.data.DataReader.prototype={};
-
-Ext.data.DataProxy=function(){this.addEvents({beforeload:true,load:true,loadexception:true});Ext.data.DataProxy.superclass.constructor.call(this);};Ext.extend(Ext.data.DataProxy,Ext.util.Observable);
-
-Ext.data.MemoryProxy=function(data){Ext.data.MemoryProxy.superclass.constructor.call(this);this.data=data;};Ext.extend(Ext.data.MemoryProxy,Ext.data.DataProxy,{load:function(params,reader,callback,scope,arg){params=params||{};var result;try{result=reader.readRecords(this.data);}catch(e){this.fireEvent("loadexception",this,arg,null,e);callback.call(scope,null,arg,false);return;}
-callback.call(scope,result,arg,true);},update:function(params,records){}});
-
-Ext.data.HttpProxy=function(conn){Ext.data.HttpProxy.superclass.constructor.call(this);this.conn=conn.events?conn:new Ext.data.Connection(conn);};Ext.extend(Ext.data.HttpProxy,Ext.data.DataProxy,{getConnection:function(){return this.conn;},load:function(params,reader,callback,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){this.conn.request({params:params||{},request:{callback:callback,scope:scope,arg:arg},reader:reader,callback:this.loadResponse,scope:this});}else{callback.call(scope||this,null,arg,false);}},loadResponse:function(o,success,response){if(!success){this.fireEvent("loadexception",this,o,response);o.request.callback.call(o.request.scope,null,o.request.arg,false);return;}
-var result;try{result=o.reader.read(response);}catch(e){this.fireEvent("loadexception",this,o,response,e);o.request.callback.call(o.request.scope,null,o.request.arg,false);return;}
-this.fireEvent("load",this,o,o.request.arg);o.request.callback.call(o.request.scope,result,o.request.arg,true);},update:function(dataSet){},updateResponse:function(dataSet){}});
-
-Ext.data.ScriptTagProxy=function(config){Ext.data.ScriptTagProxy.superclass.constructor.call(this);Ext.apply(this,config);this.head=document.getElementsByTagName("head")[0];};Ext.data.ScriptTagProxy.TRANS_ID=1000;Ext.extend(Ext.data.ScriptTagProxy,Ext.data.DataProxy,{timeout:30000,callbackParam:"callback",nocache:true,load:function(params,reader,callback,scope,arg){if(this.fireEvent("beforeload",this,params)!==false){var p=Ext.urlEncode(Ext.apply(params,this.extraParams));var url=this.url;url+=(url.indexOf("?")!=-1?"&":"?")+p;if(this.nocache){url+="&_dc="+(new Date().getTime());}
-var transId=++Ext.data.ScriptTagProxy.TRANS_ID;var trans={id:transId,cb:"stcCallback"+transId,scriptId:"stcScript"+transId,params:params,arg:arg,url:url,callback:callback,scope:scope,reader:reader};var conn=this;window[trans.cb]=function(o){conn.handleResponse(o,trans);};url+=String.format("&{0}={1}",this.callbackParam,trans.cb);if(this.autoAbort!==false){this.abort();}
-trans.timeoutId=this.handleFailure.defer(this.timeout,this,[trans]);var script=document.createElement("script");script.setAttribute("src",url);script.setAttribute("type","text/javascript");script.setAttribute("id",trans.scriptId);this.head.appendChild(script);this.trans=trans;}else{callback.call(scope||this,null,arg,false);}},isLoading:function(){return this.trans?true:false;},abort:function(){if(this.isLoading()){this.destroyTrans(this.trans);}},destroyTrans:function(trans,isLoaded){this.head.removeChild(document.getElementById(trans.scriptId));clearTimeout(trans.timeoutId);if(isLoaded){window[trans.cb]=undefined;try{delete window[trans.cb];}catch(e){}}else{window[trans.cb]=function(){window[trans.cb]=undefined;try{delete window[trans.cb];}catch(e){}};}},handleResponse:function(o,trans){this.trans=false;this.destroyTrans(trans,true);var result;try{result=trans.reader.readRecords(o);}catch(e){this.fireEvent("loadexception",this,o,trans.arg,e);trans.callback.call(trans.scope||window,null,trans.arg,false);return;}
-this.fireEvent("load",this,o,trans.arg);trans.callback.call(trans.scope||window,result,trans.arg,true);},handleFailure:function(trans){this.trans=false;this.destroyTrans(trans,false);this.fireEvent("loadexception",this,null,trans.arg);trans.callback.call(trans.scope||window,null,trans.arg,false);}});
-
-Ext.data.JsonReader=function(meta,recordType){Ext.data.JsonReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(Ext.data.JsonReader,Ext.data.DataReader,{read:function(response){var json=response.responseText;var o=eval("("+json+")");if(!o){throw{message:"JsonReader.read: Json object not found"};}
-if(o.metaData){delete this.ef;this.meta=o.metaData;this.recordType=Ext.data.Record.create(o.metaData.fields);this.onMetaChange(this.meta,this.recordType,o);}
-return this.readRecords(o);},onMetaChange:function(meta,recordType,o){},simpleAccess:function(obj,subsc){return obj[subsc];},getJsonAccessor:function(){var re=/[\[\.]/;return function(expr){try{return(re.test(expr))?new Function("obj","return obj."+expr):function(obj){return obj[expr];};}catch(e){}
-return Ext.emptyFn;};}(),readRecords:function(o){this.jsonData=o;var s=this.meta,Record=this.recordType,f=Record.prototype.fields,fi=f.items,fl=f.length;if(!this.ef){if(s.totalProperty){this.getTotal=this.getJsonAccessor(s.totalProperty);}
-if(s.successProperty){this.getSuccess=this.getJsonAccessor(s.successProperty);}
-this.getRoot=s.root?this.getJsonAccessor(s.root):function(p){return p;};if(s.id){var g=this.getJsonAccessor(s.id);this.getId=function(rec){var r=g(rec);return(r===undefined||r==="")?null:r;};}else{this.getId=function(){return null;};}
-this.ef=[];for(var i=0;i<fl;i++){f=fi[i];var map=(f.mapping!==undefined&&f.mapping!==null)?f.mapping:f.name;this.ef[i]=this.getJsonAccessor(map);}}
-var root=this.getRoot(o),c=root.length,totalRecords=c,success=true;if(s.totalProperty){var v=parseInt(this.getTotal(o),10);if(!isNaN(v)){totalRecords=v;}}
-if(s.successProperty){var v=this.getSuccess(o);if(v===false||v==='false'){success=false;}}
-var records=[];for(var i=0;i<c;i++){var n=root[i];var values={};var id=this.getId(n);for(var j=0;j<fl;j++){f=fi[j];var v=this.ef[j](n);values[f.name]=f.convert((v!==undefined)?v:f.defaultValue);}
-var record=new Record(values,id);record.json=n;records[i]=record;}
-return{success:success,records:records,totalRecords:totalRecords};}});
-
-Ext.data.XmlReader=function(meta,recordType){Ext.data.XmlReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(Ext.data.XmlReader,Ext.data.DataReader,{read:function(response){var doc=response.responseXML;if(!doc){throw{message:"XmlReader.read: XML Document not available"};}
-return this.readRecords(doc);},readRecords:function(doc){this.xmlData=doc;var root=doc.documentElement||doc;var q=Ext.DomQuery;var recordType=this.recordType,fields=recordType.prototype.fields;var sid=this.meta.id;var totalRecords=0,success=true;if(this.meta.totalRecords){totalRecords=q.selectNumber(this.meta.totalRecords,root,0);}
-if(this.meta.success){var sv=q.selectValue(this.meta.success,root,true);success=sv!==false&&sv!=='false';}
-var records=[];var ns=q.select(this.meta.record,root);for(var i=0,len=ns.length;i<len;i++){var n=ns[i];var values={};var id=sid?q.selectValue(sid,n):undefined;for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var v=q.selectValue(f.mapping||f.name,n,f.defaultValue);v=f.convert(v);values[f.name]=v;}
-var record=new recordType(values,id);record.node=n;records[records.length]=record;}
-return{success:success,records:records,totalRecords:totalRecords||records.length};}});
-
-Ext.data.ArrayReader=function(meta,recordType){Ext.data.ArrayReader.superclass.constructor.call(this,meta,recordType);};Ext.extend(Ext.data.ArrayReader,Ext.data.JsonReader,{readRecords:function(o){var sid=this.meta?this.meta.id:null;var recordType=this.recordType,fields=recordType.prototype.fields;var records=[];var root=o;for(var i=0;i<root.length;i++){var n=root[i];var values={};var id=((sid||sid===0)&&n[sid]!==undefined&&n[sid]!==""?n[sid]:null);for(var j=0,jlen=fields.length;j<jlen;j++){var f=fields.items[j];var k=f.mapping!==undefined&&f.mapping!==null?f.mapping:j;var v=n[k]!==undefined?n[k]:f.defaultValue;v=f.convert(v);values[f.name]=v;}
-var record=new recordType(values,id);record.json=n;records[records.length]=record;}
-return{records:records,totalRecords:records.length};}});
diff --git a/lib/web/extjs/package/date.js b/lib/web/extjs/package/date.js
deleted file mode 100644
index 59be9bad8b9290f8cb338cb3ce757db61d384260..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/date.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Date.parseFunctions={count:0};Date.parseRegexes=[];Date.formatFunctions={count:0};Date.prototype.dateFormat=function(format){if(Date.formatFunctions[format]==null){Date.createNewFormat(format);}
-var func=Date.formatFunctions[format];return this[func]();};Date.prototype.format=Date.prototype.dateFormat;Date.createNewFormat=function(format){var funcName="format"+Date.formatFunctions.count++;Date.formatFunctions[format]=funcName;var code="Date.prototype."+funcName+" = function(){return ";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
-else if(special){special=false;code+="'"+String.escape(ch)+"' + ";}
-else{code+=Date.getFormatCode(ch);}}
-eval(code.substring(0,code.length-3)+";}");};Date.getFormatCode=function(character){switch(character){case"d":return"String.leftPad(this.getDate(), 2, '0') + ";case"D":return"Date.dayNames[this.getDay()].substring(0, 3) + ";case"j":return"this.getDate() + ";case"l":return"Date.dayNames[this.getDay()] + ";case"S":return"this.getSuffix() + ";case"w":return"this.getDay() + ";case"z":return"this.getDayOfYear() + ";case"W":return"this.getWeekOfYear() + ";case"F":return"Date.monthNames[this.getMonth()] + ";case"m":return"String.leftPad(this.getMonth() + 1, 2, '0') + ";case"M":return"Date.monthNames[this.getMonth()].substring(0, 3) + ";case"n":return"(this.getMonth() + 1) + ";case"t":return"this.getDaysInMonth() + ";case"L":return"(this.isLeapYear() ? 1 : 0) + ";case"Y":return"this.getFullYear() + ";case"y":return"('' + this.getFullYear()).substring(2, 4) + ";case"a":return"(this.getHours() < 12 ? 'am' : 'pm') + ";case"A":return"(this.getHours() < 12 ? 'AM' : 'PM') + ";case"g":return"((this.getHours() %12) ? this.getHours() % 12 : 12) + ";case"G":return"this.getHours() + ";case"h":return"String.leftPad((this.getHours() %12) ? this.getHours() % 12 : 12, 2, '0') + ";case"H":return"String.leftPad(this.getHours(), 2, '0') + ";case"i":return"String.leftPad(this.getMinutes(), 2, '0') + ";case"s":return"String.leftPad(this.getSeconds(), 2, '0') + ";case"O":return"this.getGMTOffset() + ";case"T":return"this.getTimezone() + ";case"Z":return"(this.getTimezoneOffset() * -60) + ";default:return"'"+String.escape(character)+"' + ";}};Date.parseDate=function(input,format){if(Date.parseFunctions[format]==null){Date.createParser(format);}
-var func=Date.parseFunctions[format];return Date[func](input);};Date.createParser=function(format){var funcName="parse"+Date.parseFunctions.count++;var regexNum=Date.parseRegexes.length;var currentGroup=1;Date.parseFunctions[format]=funcName;var code="Date."+funcName+" = function(input){\n"
-+"var y = -1, m = -1, d = -1, h = -1, i = -1, s = -1;\n"
-+"var d = new Date();\n"
-+"y = d.getFullYear();\n"
-+"m = d.getMonth();\n"
-+"d = d.getDate();\n"
-+"var results = input.match(Date.parseRegexes["+regexNum+"]);\n"
-+"if (results && results.length > 0) {";var regex="";var special=false;var ch='';for(var i=0;i<format.length;++i){ch=format.charAt(i);if(!special&&ch=="\\"){special=true;}
-else if(special){special=false;regex+=String.escape(ch);}
-else{var obj=Date.formatCodeToRegex(ch,currentGroup);currentGroup+=obj.g;regex+=obj.s;if(obj.g&&obj.c){code+=obj.c;}}}
-code+="if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0 && s >= 0)\n"
-+"{return new Date(y, m, d, h, i, s);}\n"
-+"else if (y > 0 && m >= 0 && d > 0 && h >= 0 && i >= 0)\n"
-+"{return new Date(y, m, d, h, i);}\n"
-+"else if (y > 0 && m >= 0 && d > 0 && h >= 0)\n"
-+"{return new Date(y, m, d, h);}\n"
-+"else if (y > 0 && m >= 0 && d > 0)\n"
-+"{return new Date(y, m, d);}\n"
-+"else if (y > 0 && m >= 0)\n"
-+"{return new Date(y, m);}\n"
-+"else if (y > 0)\n"
-+"{return new Date(y);}\n"
-+"}return null;}";Date.parseRegexes[regexNum]=new RegExp("^"+regex+"$");eval(code);};Date.formatCodeToRegex=function(character,currentGroup){switch(character){case"D":return{g:0,c:null,s:"(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)"};case"j":case"d":return{g:1,c:"d = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{1,2})"};case"l":return{g:0,c:null,s:"(?:"+Date.dayNames.join("|")+")"};case"S":return{g:0,c:null,s:"(?:st|nd|rd|th)"};case"w":return{g:0,c:null,s:"\\d"};case"z":return{g:0,c:null,s:"(?:\\d{1,3})"};case"W":return{g:0,c:null,s:"(?:\\d{2})"};case"F":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+currentGroup+"].substring(0, 3)], 10);\n",s:"("+Date.monthNames.join("|")+")"};case"M":return{g:1,c:"m = parseInt(Date.monthNumbers[results["+currentGroup+"]], 10);\n",s:"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)"};case"n":case"m":return{g:1,c:"m = parseInt(results["+currentGroup+"], 10) - 1;\n",s:"(\\d{1,2})"};case"t":return{g:0,c:null,s:"\\d{1,2}"};case"L":return{g:0,c:null,s:"(?:1|0)"};case"Y":return{g:1,c:"y = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{4})"};case"y":return{g:1,c:"var ty = parseInt(results["+currentGroup+"], 10);\n"
-+"y = ty > Date.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"};case"a":return{g:1,c:"if (results["+currentGroup+"] == 'am') {\n"
-+"if (h == 12) { h = 0; }\n"
-+"} else { if (h < 12) { h += 12; }}",s:"(am|pm)"};case"A":return{g:1,c:"if (results["+currentGroup+"] == 'AM') {\n"
-+"if (h == 12) { h = 0; }\n"
-+"} else { if (h < 12) { h += 12; }}",s:"(AM|PM)"};case"g":case"G":case"h":case"H":return{g:1,c:"h = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{1,2})"};case"i":return{g:1,c:"i = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{2})"};case"s":return{g:1,c:"s = parseInt(results["+currentGroup+"], 10);\n",s:"(\\d{2})"};case"O":return{g:0,c:null,s:"[+-]\\d{4}"};case"T":return{g:0,c:null,s:"[A-Z]{3}"};case"Z":return{g:0,c:null,s:"[+-]\\d{1,5}"};default:return{g:0,c:null,s:String.escape(character)};}};Date.prototype.getTimezone=function(){return this.toString().replace(/^.*? ([A-Z]{3}) [0-9]{4}.*$/,"$1").replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/,"$1$2$3");};Date.prototype.getGMTOffset=function(){return(this.getTimezoneOffset()>0?"-":"+")
-+String.leftPad(Math.floor(this.getTimezoneOffset()/60),2,"0")
-+String.leftPad(this.getTimezoneOffset()%60,2,"0");};Date.prototype.getDayOfYear=function(){var num=0;Date.daysInMonth[1]=this.isLeapYear()?29:28;for(var i=0;i<this.getMonth();++i){num+=Date.daysInMonth[i];}
-return num+this.getDate()-1;};Date.prototype.getWeekOfYear=function(){var now=this.getDayOfYear()+(4-this.getDay());var jan1=new Date(this.getFullYear(),0,1);var then=(7-jan1.getDay()+4);return String.leftPad(((now-then)/7)+1,2,"0");};Date.prototype.isLeapYear=function(){var year=this.getFullYear();return((year&3)==0&&(year%100||(year%400==0&&year)));};Date.prototype.getFirstDayOfMonth=function(){var day=(this.getDay()-(this.getDate()-1))%7;return(day<0)?(day+7):day;};Date.prototype.getLastDayOfMonth=function(){var day=(this.getDay()+(Date.daysInMonth[this.getMonth()]-this.getDate()))%7;return(day<0)?(day+7):day;};Date.prototype.getFirstDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),1);};Date.prototype.getLastDateOfMonth=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDaysInMonth());};Date.prototype.getDaysInMonth=function(){Date.daysInMonth[1]=this.isLeapYear()?29:28;return Date.daysInMonth[this.getMonth()];};Date.prototype.getSuffix=function(){switch(this.getDate()){case 1:case 21:case 31:return"st";case 2:case 22:return"nd";case 3:case 23:return"rd";default:return"th";}};Date.daysInMonth=[31,28,31,30,31,30,31,31,30,31,30,31];Date.monthNames=["January","February","March","April","May","June","July","August","September","October","November","December"];Date.dayNames=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];Date.y2kYear=50;Date.monthNumbers={Jan:0,Feb:1,Mar:2,Apr:3,May:4,Jun:5,Jul:6,Aug:7,Sep:8,Oct:9,Nov:10,Dec:11};Date.prototype.clone=function(){return new Date(this.getTime());};Date.prototype.clearTime=function(clone){if(clone){return this.clone().clearTime();}
-this.setHours(0);this.setMinutes(0);this.setSeconds(0);this.setMilliseconds(0);return this;};if(Ext.isSafari){Date.brokenSetMonth=Date.prototype.setMonth;Date.prototype.setMonth=function(num){if(num<=-1){var n=Math.ceil(-num);var back_year=Math.ceil(n/12);var month=(n%12)?12-n%12:0;this.setFullYear(this.getFullYear()-back_year);return Date.brokenSetMonth.call(this,month);}else{return Date.brokenSetMonth.apply(this,arguments);}};}
-Date.MILLI="ms";Date.SECOND="s";Date.MINUTE="mi";Date.HOUR="h";Date.DAY="d";Date.MONTH="mo";Date.YEAR="y";Date.prototype.add=function(interval,value){var d=this.clone();if(!interval||value===0)return d;switch(interval.toLowerCase()){case Date.MILLI:d.setMilliseconds(this.getMilliseconds()+value);break;case Date.SECOND:d.setSeconds(this.getSeconds()+value);break;case Date.MINUTE:d.setMinutes(this.getMinutes()+value);break;case Date.HOUR:d.setHours(this.getHours()+value);break;case Date.DAY:d.setDate(this.getDate()+value);break;case Date.MONTH:var day=this.getDate();if(day>28){day=Math.min(day,this.getFirstDateOfMonth().add('mo',value).getLastDateOfMonth().getDate());}
-d.setDate(day);d.setMonth(this.getMonth()+value);break;case Date.YEAR:d.setFullYear(this.getFullYear()+value);break;}
-return d;};
diff --git a/lib/web/extjs/package/datepicker/datepicker.js b/lib/web/extjs/package/datepicker/datepicker.js
deleted file mode 100644
index b0508b5ad0d27eef68225af6c3d60559efe2bf90..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/datepicker/datepicker.js
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.DatePicker=function(config){Ext.DatePicker.superclass.constructor.call(this,config);this.value=config&&config.value?config.value.clearTime():new Date().clearTime();this.addEvents({select:true});if(this.handler){this.on("select",this.handler,this.scope||this);}
-if(!this.disabledDatesRE&&this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
-this.disabledDatesRE=new RegExp(re+")");}};Ext.extend(Ext.DatePicker,Ext.Component,{todayText:"Today",okText:"&#160;OK&#160;",cancelText:"Cancel",todayTip:"{0} (Spacebar)",minDate:null,maxDate:null,minText:"This date is before the minimum date",maxText:"This date is after the maximum date",format:"m/d/y",disabledDays:null,disabledDaysText:"",disabledDatesRE:null,disabledDatesText:"",constrainToViewport:true,monthNames:Date.monthNames,dayNames:Date.dayNames,nextText:'Next Month (Control+Right)',prevText:'Previous Month (Control+Left)',monthYearText:'Choose a month (Control+Up/Down to move years)',startDay:0,setValue:function(value){var old=this.value;this.value=value.clearTime(true);if(this.el){this.update(this.value);}},getValue:function(){return this.value;},focus:function(){if(this.el){this.update(this.activeDate);}},onRender:function(container,position){var m=['<table cellspacing="0">','<tr><td class="x-date-left"><a href="#" title="',this.prevText,'">&#160;</a></td><td class="x-date-middle" align="center"></td><td class="x-date-right"><a href="#" title="',this.nextText,'">&#160;</a></td></tr>','<tr><td colspan="3"><table class="x-date-inner" cellspacing="0"><thead><tr>'];var dn=this.dayNames;for(var i=0;i<7;i++){var d=this.startDay+i;if(d>6){d=d-7;}
-m.push("<th><span>",dn[d].substr(0,1),"</span></th>");}
-m[m.length]="</tr></thead><tbody><tr>";for(var i=0;i<42;i++){if(i%7==0&&i!=0){m[m.length]="</tr><tr>";}
-m[m.length]='<td><a href="#" hidefocus="on" class="x-date-date" tabIndex="1"><em><span></span></em></a></td>';}
-m[m.length]='</tr></tbody></table></td></tr><tr><td colspan="3" class="x-date-bottom" align="center"></td></tr></table><div class="x-date-mp"></div>';var el=document.createElement("div");el.className="x-date-picker";el.innerHTML=m.join("");container.dom.insertBefore(el,position);this.el=Ext.get(el);this.eventEl=Ext.get(el.firstChild);new Ext.util.ClickRepeater(this.el.child("td.x-date-left a"),{handler:this.showPrevMonth,scope:this,preventDefault:true,stopDefault:true});new Ext.util.ClickRepeater(this.el.child("td.x-date-right a"),{handler:this.showNextMonth,scope:this,preventDefault:true,stopDefault:true});this.eventEl.on("mousewheel",this.handleMouseWheel,this);this.monthPicker=this.el.down('div.x-date-mp');this.monthPicker.enableDisplayMode('block');var kn=new Ext.KeyNav(this.eventEl,{"left":function(e){e.ctrlKey?this.showPrevMonth():this.update(this.activeDate.add("d",-1));},"right":function(e){e.ctrlKey?this.showNextMonth():this.update(this.activeDate.add("d",1));},"up":function(e){e.ctrlKey?this.showNextYear():this.update(this.activeDate.add("d",-7));},"down":function(e){e.ctrlKey?this.showPrevYear():this.update(this.activeDate.add("d",7));},"pageUp":function(e){this.showNextMonth();},"pageDown":function(e){this.showPrevMonth();},"enter":function(e){e.stopPropagation();return true;},scope:this});this.eventEl.on("click",this.handleDateClick,this,{delegate:"a.x-date-date"});this.eventEl.addKeyListener(Ext.EventObject.SPACE,this.selectToday,this);this.el.unselectable();this.cells=this.el.select("table.x-date-inner tbody td");this.textNodes=this.el.query("table.x-date-inner tbody span");this.mbtn=new Ext.Button(this.el.child("td.x-date-middle",true),{text:"&#160;",tooltip:this.monthYearText});this.mbtn.on('click',this.showMonthPicker,this);this.mbtn.el.child(this.mbtn.menuClassTarget).addClass("x-btn-with-menu");var today=(new Date()).dateFormat(this.format);var todayBtn=new Ext.Button(this.el.child("td.x-date-bottom",true),{text:String.format(this.todayText,today),tooltip:String.format(this.todayTip,today),handler:this.selectToday,scope:this});if(Ext.isIE){this.el.repaint();}
-this.update(this.value);},createMonthPicker:function(){if(!this.monthPicker.dom.firstChild){var buf=['<table border="0" cellspacing="0">'];for(var i=0;i<6;i++){buf.push('<tr><td class="x-date-mp-month"><a href="#">',this.monthNames[i].substr(0,3),'</a></td>','<td class="x-date-mp-month x-date-mp-sep"><a href="#">',this.monthNames[i+6].substr(0,3),'</a></td>',i==0?'<td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-prev"></a></td><td class="x-date-mp-ybtn" align="center"><a class="x-date-mp-next"></a></td>':'<td class="x-date-mp-year"><a href="#"></a></td><td class="x-date-mp-year"><a href="#"></a></td></tr>');}
-buf.push('<tr class="x-date-mp-btns"><td colspan="4"><button type="button" class="x-date-mp-ok">',this.okText,'</button><button type="button" class="x-date-mp-cancel">',this.cancelText,'</button></td></tr>','</table>');this.monthPicker.update(buf.join(''));this.monthPicker.on('click',this.onMonthClick,this);this.monthPicker.on('dblclick',this.onMonthDblClick,this);this.mpMonths=this.monthPicker.select('td.x-date-mp-month');this.mpYears=this.monthPicker.select('td.x-date-mp-year');this.mpMonths.each(function(m,a,i){i+=1;if((i%2)==0){m.dom.xmonth=5+Math.round(i*.5);}else{m.dom.xmonth=Math.round((i-1)*.5);}});}},showMonthPicker:function(){this.createMonthPicker();var size=this.el.getSize();this.monthPicker.setSize(size);this.monthPicker.child('table').setSize(size);this.mpSelMonth=(this.activeDate||this.value).getMonth();this.updateMPMonth(this.mpSelMonth);this.mpSelYear=(this.activeDate||this.value).getFullYear();this.updateMPYear(this.mpSelYear);this.monthPicker.slideIn('t',{duration:.2});},updateMPYear:function(y){this.mpyear=y;var ys=this.mpYears.elements;for(var i=1;i<=10;i++){var td=ys[i-1],y2;if((i%2)==0){y2=y+Math.round(i*.5);td.firstChild.innerHTML=y2;td.xyear=y2;}else{y2=y-(5-Math.round(i*.5));td.firstChild.innerHTML=y2;td.xyear=y2;}
-this.mpYears.item(i-1)[y2==this.mpSelYear?'addClass':'removeClass']('x-date-mp-sel');}},updateMPMonth:function(sm){this.mpMonths.each(function(m,a,i){m[m.dom.xmonth==sm?'addClass':'removeClass']('x-date-mp-sel');});},selectMPMonth:function(m){},onMonthClick:function(e,t){e.stopEvent();var el=new Ext.Element(t),pn;if(el.is('button.x-date-mp-cancel')){this.hideMonthPicker();}
-else if(el.is('button.x-date-mp-ok')){this.update(new Date(this.mpSelYear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}
-else if(pn=el.up('td.x-date-mp-month',2)){this.mpMonths.removeClass('x-date-mp-sel');pn.addClass('x-date-mp-sel');this.mpSelMonth=pn.dom.xmonth;}
-else if(pn=el.up('td.x-date-mp-year',2)){this.mpYears.removeClass('x-date-mp-sel');pn.addClass('x-date-mp-sel');this.mpSelYear=pn.dom.xyear;}
-else if(el.is('a.x-date-mp-prev')){this.updateMPYear(this.mpyear-10);}
-else if(el.is('a.x-date-mp-next')){this.updateMPYear(this.mpyear+10);}},onMonthDblClick:function(e,t){e.stopEvent();var el=new Ext.Element(t),pn;if(pn=el.up('td.x-date-mp-month',2)){this.update(new Date(this.mpSelYear,pn.dom.xmonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}
-else if(pn=el.up('td.x-date-mp-year',2)){this.update(new Date(pn.dom.xyear,this.mpSelMonth,(this.activeDate||this.value).getDate()));this.hideMonthPicker();}},hideMonthPicker:function(disableAnim){if(this.monthPicker){if(disableAnim===true){this.monthPicker.hide();}else{this.monthPicker.slideOut('t',{duration:.2});}}},showPrevMonth:function(e){this.update(this.activeDate.add("mo",-1));},showNextMonth:function(e){this.update(this.activeDate.add("mo",1));},showPrevYear:function(){this.update(this.activeDate.add("y",-1));},showNextYear:function(){this.update(this.activeDate.add("y",1));},handleMouseWheel:function(e){var delta=e.getWheelDelta();if(delta>0){this.showPrevMonth();e.stopEvent();}else if(delta<0){this.showNextMonth();e.stopEvent();}},handleDateClick:function(e,t){e.stopEvent();if(t.dateValue&&!Ext.fly(t.parentNode).hasClass("x-date-disabled")){this.setValue(new Date(t.dateValue));this.fireEvent("select",this,this.value);}},selectToday:function(){this.setValue(new Date().clearTime());this.fireEvent("select",this,this.value);},update:function(date){var vd=this.activeDate;this.activeDate=date;if(vd&&this.el){var t=date.getTime();if(vd.getMonth()==date.getMonth()&&vd.getFullYear()==date.getFullYear()){this.cells.removeClass("x-date-selected");this.cells.each(function(c){if(c.dom.firstChild.dateValue==t){c.addClass("x-date-selected");setTimeout(function(){try{c.dom.firstChild.focus();}catch(e){}},50);return false;}});return;}}
-var days=date.getDaysInMonth();var firstOfMonth=date.getFirstDateOfMonth();var startingPos=firstOfMonth.getDay()-this.startDay;if(startingPos<=this.startDay){startingPos+=7;}
-var pm=date.add("mo",-1);var prevStart=pm.getDaysInMonth()-startingPos;var cells=this.cells.elements;var textEls=this.textNodes;days+=startingPos;var day=86400000;var d=(new Date(pm.getFullYear(),pm.getMonth(),prevStart)).clearTime();var today=new Date().clearTime().getTime();var sel=date.clearTime().getTime();var min=this.minDate?this.minDate.clearTime():Number.NEGATIVE_INFINITY;var max=this.maxDate?this.maxDate.clearTime():Number.POSITIVE_INFINITY;var ddMatch=this.disabledDatesRE;var ddText=this.disabledDatesText;var ddays=this.disabledDays?this.disabledDays.join(""):false;var ddaysText=this.disabledDaysText;var format=this.format;var setCellClass=function(cal,cell){cell.title="";var t=d.getTime();cell.firstChild.dateValue=t;if(t==today){cell.className+=" x-date-today";cell.title=cal.todayText;}
-if(t==sel){cell.className+=" x-date-selected";setTimeout(function(){try{cell.firstChild.focus();}catch(e){}},50);}
-if(t<min){cell.className=" x-date-disabled";cell.title=cal.minText;return;}
-if(t>max){cell.className=" x-date-disabled";cell.title=cal.maxText;return;}
-if(ddays){if(ddays.indexOf(d.getDay())!=-1){cell.title=ddaysText;cell.className=" x-date-disabled";}}
-if(ddMatch&&format){var fvalue=d.dateFormat(format);if(ddMatch.test(fvalue)){cell.title=ddText.replace("%0",fvalue);cell.className=" x-date-disabled";}}};var i=0;for(;i<startingPos;i++){textEls[i].innerHTML=(++prevStart);d.setDate(d.getDate()+1);cells[i].className="x-date-prevday";setCellClass(this,cells[i]);}
-for(;i<days;i++){intDay=i-startingPos+1;textEls[i].innerHTML=(intDay);d.setDate(d.getDate()+1);cells[i].className="x-date-active";setCellClass(this,cells[i]);}
-var extraDays=0;for(;i<42;i++){textEls[i].innerHTML=(++extraDays);d.setDate(d.getDate()+1);cells[i].className="x-date-nextday";setCellClass(this,cells[i]);}
-this.mbtn.setText(this.monthNames[date.getMonth()]+" "+date.getFullYear());if(!this.internalRender){var main=this.el.dom.firstChild;var w=main.offsetWidth;this.el.setWidth(w+this.el.getBorderWidth("lr"));Ext.fly(main).setWidth(w);this.internalRender=true;if(Ext.isOpera&&!this.secondPass){main.rows[0].cells[1].style.width=(w-(main.rows[0].cells[0].offsetWidth+main.rows[0].cells[2].offsetWidth))+"px";this.secondPass=true;this.update.defer(10,this,[date]);}}}});
diff --git a/lib/web/extjs/package/dialog/dialogs-debug.js b/lib/web/extjs/package/dialog/dialogs-debug.js
deleted file mode 100644
index 42b360c7cf2cee9165cfc9f6840d910dc1910e6c..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/dialog/dialogs-debug.js
+++ /dev/null
@@ -1,1241 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.BasicDialog = function(el, config){
-    this.el = Ext.get(el);
-    var dh = Ext.DomHelper;
-    if(!this.el && config && config.autoCreate){
-        if(typeof config.autoCreate == "object"){
-            if(!config.autoCreate.id){
-                config.autoCreate.id = el;
-            }
-            this.el = dh.append(document.body,
-                        config.autoCreate, true);
-        }else{
-            this.el = dh.append(document.body,
-                        {tag: "div", id: el, style:'visibility:hidden;'}, true);
-        }
-    }
-    el = this.el;                                                                                                                                                                                                                                                                                                                                                                                                  
-    el.setDisplayed(true);
-    el.hide = this.hideAction;
-    this.id = el.id;
-    el.addClass("x-dlg");
-
-    Ext.apply(this, config);
-
-    this.proxy = el.createProxy("x-dlg-proxy");
-    this.proxy.hide = this.hideAction;
-    this.proxy.setOpacity(.5);
-    this.proxy.hide();
-
-    if(config.width){
-        el.setWidth(config.width);
-    }
-    if(config.height){
-        el.setHeight(config.height);
-    }
-    this.size = el.getSize();
-    if(typeof config.x != "undefined" && typeof config.y != "undefined"){
-        this.xy = [config.x,config.y];
-    }else{
-        this.xy = el.getCenterXY(true);
-    }
-    
-    this.header = el.child("> .x-dlg-hd");
-    
-    this.body = el.child("> .x-dlg-bd");
-    
-    this.footer = el.child("> .x-dlg-ft");
-
-    if(!this.header){
-        this.header = el.createChild({tag: "div", cls:"x-dlg-hd", html: "&#160;"}, this.body ? this.body.dom : null);
-    }
-    if(!this.body){
-        this.body = el.createChild({tag: "div", cls:"x-dlg-bd"});
-    }
-
-    this.header.unselectable();
-    if(this.title){
-        this.header.update(this.title);
-    }
-    // this element allows the dialog to be focused for keyboard event
-    this.focusEl = el.createChild({tag: "a", href:"#", cls:"x-dlg-focus", tabIndex:"-1"});
-    this.focusEl.swallowEvent("click", true);
-
-    this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"}, true);
-
-    // wrap the body and footer for special rendering
-    this.bwrap = this.body.wrap({tag: "div", cls:"x-dlg-dlg-body"});
-    if(this.footer){
-        this.bwrap.dom.appendChild(this.footer.dom);
-    }
-
-    this.bg = this.el.createChild({
-        tag: "div", cls:"x-dlg-bg",
-        html: '<div class="x-dlg-bg-left"><div class="x-dlg-bg-right"><div class="x-dlg-bg-center">&#160;</div></div></div>'
-    });
-    this.centerBg = this.bg.child("div.x-dlg-bg-center");
-
-
-    if(this.autoScroll !== false && !this.autoTabs){
-        this.body.setStyle("overflow", "auto");
-    }
-
-    this.toolbox = this.el.createChild({cls: "x-dlg-toolbox"});
-
-    if(this.closable !== false){
-        this.el.addClass("x-dlg-closable");
-        this.close = this.toolbox.createChild({cls:"x-dlg-close"});
-        this.close.on("click", this.closeClick, this);
-        this.close.addClassOnOver("x-dlg-close-over");
-    }
-    if(this.collapsible !== false){
-        this.collapseBtn = this.toolbox.createChild({cls:"x-dlg-collapse"});
-        this.collapseBtn.on("click", this.collapseClick, this);
-        this.collapseBtn.addClassOnOver("x-dlg-collapse-over");
-        this.header.on("dblclick", this.collapseClick, this);
-    }
-    if(this.resizable !== false){
-        this.el.addClass("x-dlg-resizable");
-        this.resizer = new Ext.Resizable(el, {
-            minWidth: this.minWidth || 80,
-            minHeight:this.minHeight || 80,
-            handles: this.resizeHandles || "all",
-            pinned: true
-        });
-        this.resizer.on("beforeresize", this.beforeResize, this);
-        this.resizer.on("resize", this.onResize, this);
-    }
-    if(this.draggable !== false){
-        el.addClass("x-dlg-draggable");
-        if (!this.proxyDrag) {
-            var dd = new Ext.dd.DD(el.dom.id, "WindowDrag");
-        }
-        else {
-            var dd = new Ext.dd.DDProxy(el.dom.id, "WindowDrag", {dragElId: this.proxy.id});
-        }
-        dd.setHandleElId(this.header.id);
-        dd.endDrag = this.endMove.createDelegate(this);
-        dd.startDrag = this.startMove.createDelegate(this);
-        dd.onDrag = this.onDrag.createDelegate(this);
-        dd.scroll = false;
-        this.dd = dd;
-    }
-    if(this.modal){
-        this.mask = dh.append(document.body, {tag: "div", cls:"x-dlg-mask"}, true);
-        this.mask.enableDisplayMode("block");
-        this.mask.hide();
-        this.el.addClass("x-dlg-modal");
-    }
-    if(this.shadow){
-        this.shadow = new Ext.Shadow({
-            mode : typeof this.shadow == "string" ? this.shadow : "sides",
-            offset : this.shadowOffset
-        });
-    }else{
-        this.shadowOffset = 0;
-    }
-    if(Ext.useShims && this.shim !== false){
-        this.shim = this.el.createShim();
-        this.shim.hide = this.hideAction;
-        this.shim.hide();
-    }else{
-        this.shim = false;
-    }
-    if(this.autoTabs){
-        this.initTabs();
-    }
-    this.addEvents({
-        
-        "keydown" : true,
-        
-        "move" : true,
-        
-        "resize" : true,
-        
-        "beforehide" : true,
-        
-        "hide" : true,
-        
-        "beforeshow" : true,
-        
-        "show" : true
-    });
-    el.on("keydown", this.onKeyDown, this);
-    el.on("mousedown", this.toFront, this);
-    Ext.EventManager.onWindowResize(this.adjustViewport, this, true);
-    this.el.hide();
-    Ext.DialogManager.register(this);
-    Ext.BasicDialog.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.BasicDialog, Ext.util.Observable, {
-    shadowOffset: Ext.isIE ? 6 : 5,
-    minHeight: 80,
-    minWidth: 200,
-    minButtonWidth: 75,
-    defaultButton: null,
-    buttonAlign: "right",
-    tabTag: 'div',
-    firstShow: true,
-
-    
-    setTitle : function(text){
-        this.header.update(text);
-        return this;
-    },
-
-    // private
-    closeClick : function(){
-        this.hide();
-    },
-
-    // private
-    collapseClick : function(){
-        this[this.collapsed ? "expand" : "collapse"]();
-    },
-
-    
-    collapse : function(){
-        if(!this.collapsed){
-            this.collapsed = true;
-            this.el.addClass("x-dlg-collapsed");
-            this.restoreHeight = this.el.getHeight();
-            this.resizeTo(this.el.getWidth(), this.header.getHeight());
-        }
-    },
-
-    
-    expand : function(){
-        if(this.collapsed){
-            this.collapsed = false;
-            this.el.removeClass("x-dlg-collapsed");
-            this.resizeTo(this.el.getWidth(), this.restoreHeight);
-        }
-    },
-
-    
-    initTabs : function(){
-        var tabs = this.getTabs();
-        while(tabs.getTab(0)){
-            tabs.removeTab(0);
-        }
-        this.el.select(this.tabTag+'.x-dlg-tab').each(function(el){
-            var dom = el.dom;
-            tabs.addTab(Ext.id(dom), dom.title);
-            dom.title = "";
-        });
-        tabs.activate(0);
-        return tabs;
-    },
-
-    // private
-    beforeResize : function(){
-        this.resizer.minHeight = Math.max(this.minHeight, this.getHeaderFooterHeight(true)+40);
-    },
-
-    // private
-    onResize : function(){
-        this.refreshSize();
-        this.syncBodyHeight();
-        this.adjustAssets();
-        this.focus();
-        this.fireEvent("resize", this, this.size.width, this.size.height);
-    },
-
-    // private
-    onKeyDown : function(e){
-        if(this.isVisible()){
-            this.fireEvent("keydown", this, e);
-        }
-    },
-
-    
-    resizeTo : function(width, height){
-        this.el.setSize(width, height);
-        this.size = {width: width, height: height};
-        this.syncBodyHeight();
-        if(this.fixedcenter){
-            this.center();
-        }
-        if(this.isVisible()){
-            this.constrainXY();
-            this.adjustAssets();
-        }
-        this.fireEvent("resize", this, width, height);
-        return this;
-    },
-
-
-    
-    setContentSize : function(w, h){
-        h += this.getHeaderFooterHeight() + this.body.getMargins("tb");
-        w += this.body.getMargins("lr") + this.bwrap.getMargins("lr") + this.centerBg.getPadding("lr");
-        //if(!this.el.isBorderBox()){
-            h +=  this.body.getPadding("tb") + this.bwrap.getBorderWidth("tb") + this.body.getBorderWidth("tb") + this.el.getBorderWidth("tb");
-            w += this.body.getPadding("lr") + this.bwrap.getBorderWidth("lr") + this.body.getBorderWidth("lr") + this.bwrap.getPadding("lr") + this.el.getBorderWidth("lr");
-        //}
-        if(this.tabs){
-            h += this.tabs.stripWrap.getHeight() + this.tabs.bodyEl.getMargins("tb") + this.tabs.bodyEl.getPadding("tb");
-            w += this.tabs.bodyEl.getMargins("lr") + this.tabs.bodyEl.getPadding("lr");
-        }
-        this.resizeTo(w, h);
-        return this;
-    },
-
-    
-    addKeyListener : function(key, fn, scope){
-        var keyCode, shift, ctrl, alt;
-        if(typeof key == "object" && !(key instanceof Array)){
-            keyCode = key["key"];
-            shift = key["shift"];
-            ctrl = key["ctrl"];
-            alt = key["alt"];
-        }else{
-            keyCode = key;
-        }
-        var handler = function(dlg, e){
-            if((!shift || e.shiftKey) && (!ctrl || e.ctrlKey) &&  (!alt || e.altKey)){
-                var k = e.getKey();
-                if(keyCode instanceof Array){
-                    for(var i = 0, len = keyCode.length; i < len; i++){
-                        if(keyCode[i] == k){
-                          fn.call(scope || window, dlg, k, e);
-                          return;
-                        }
-                    }
-                }else{
-                    if(k == keyCode){
-                        fn.call(scope || window, dlg, k, e);
-                    }
-                }
-            }
-        };
-        this.on("keydown", handler);
-        return this;
-    },
-
-    
-    getTabs : function(){
-        if(!this.tabs){
-            this.el.addClass("x-dlg-auto-tabs");
-            this.body.addClass(this.tabPosition == "bottom" ? "x-tabs-bottom" : "x-tabs-top");
-            this.tabs = new Ext.TabPanel(this.body.dom, this.tabPosition == "bottom");
-        }
-        return this.tabs;
-    },
-
-    
-    addButton : function(config, handler, scope){
-        var dh = Ext.DomHelper;
-        if(!this.footer){
-            this.footer = dh.append(this.bwrap, {tag: "div", cls:"x-dlg-ft"}, true);
-        }
-        if(!this.btnContainer){
-            var tb = this.footer.createChild({
-                tag:"div",
-                cls:"x-dlg-btns x-dlg-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }, null, true);
-            this.btnContainer = tb.firstChild.firstChild.firstChild;
-        }
-        var bconfig = {
-            handler: handler,
-            scope: scope,
-            minWidth: this.minButtonWidth,
-            hideParent:true
-        };
-        if(typeof config == "string"){
-            bconfig.text = config;
-        }else{
-            if(config.tag){
-                bconfig.dhconfig = config;
-            }else{
-                Ext.apply(bconfig, config);
-            }
-        }
-        var btn = new Ext.Button(
-            this.btnContainer.appendChild(document.createElement("td")),
-            bconfig
-        );
-        this.syncBodyHeight();
-        if(!this.buttons){
-            
-            this.buttons = [];
-        }
-        this.buttons.push(btn);
-        return btn;
-    },
-
-    
-    setDefaultButton : function(btn){
-        this.defaultButton = btn;
-        return this;
-    },
-
-    // private
-    getHeaderFooterHeight : function(safe){
-        var height = 0;
-        if(this.header){
-           height += this.header.getHeight();
-        }
-        if(this.footer){
-           var fm = this.footer.getMargins();
-            height += (this.footer.getHeight()+fm.top+fm.bottom);
-        }
-        height += this.bwrap.getPadding("tb")+this.bwrap.getBorderWidth("tb");
-        height += this.centerBg.getPadding("tb");
-        return height;
-    },
-
-    // private
-    syncBodyHeight : function(){
-        var bd = this.body, cb = this.centerBg, bw = this.bwrap;
-        var height = this.size.height - this.getHeaderFooterHeight(false);
-        bd.setHeight(height-bd.getMargins("tb"));
-        var hh = this.header.getHeight();
-        var h = this.size.height-hh;
-        cb.setHeight(h);
-        bw.setLeftTop(cb.getPadding("l"), hh+cb.getPadding("t"));
-        bw.setHeight(h-cb.getPadding("tb"));
-        bw.setWidth(this.el.getWidth(true)-cb.getPadding("lr"));
-        bd.setWidth(bw.getWidth(true));
-        if(this.tabs){
-            this.tabs.syncHeight();
-            if(Ext.isIE){
-                this.tabs.el.repaint();
-            }
-        }
-    },
-
-    
-    restoreState : function(){
-        var box = Ext.state.Manager.get(this.stateId || (this.el.id + "-state"));
-        if(box && box.width){
-            this.xy = [box.x, box.y];
-            this.resizeTo(box.width, box.height);
-        }
-        return this;
-    },
-
-    // private
-    beforeShow : function(){
-        this.expand();
-        if(this.fixedcenter){
-            this.xy = this.el.getCenterXY(true);
-        }
-        if(this.modal){
-            Ext.get(document.body).addClass("x-body-masked");
-            this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-            this.mask.show();
-        }
-        this.constrainXY();
-    },
-
-    // private
-    animShow : function(){
-        var b = Ext.get(this.animateTarget, true).getBox();
-        this.proxy.setSize(b.width, b.height);
-        this.proxy.setLocation(b.x, b.y);
-        this.proxy.show();
-        this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height,
-                    true, .35, this.showEl.createDelegate(this));
-    },
-
-    
-    show : function(animateTarget){
-        if (this.fireEvent("beforeshow", this) === false){
-            return;
-        }
-        if(this.syncHeightBeforeShow){
-            this.syncBodyHeight();
-        }else if(this.firstShow){
-            this.firstShow = false;
-            this.syncBodyHeight(); // sync the height on the first show instead of in the constructor
-        }
-        this.animateTarget = animateTarget || this.animateTarget;
-        if(!this.el.isVisible()){
-            this.beforeShow();
-            if(this.animateTarget){
-                this.animShow();
-            }else{
-                this.showEl();
-            }
-        }
-        return this;
-    },
-
-    // private
-    showEl : function(){
-        this.proxy.hide();
-        this.el.setXY(this.xy);
-        this.el.show();
-        this.adjustAssets(true);
-        this.toFront();
-        this.focus();
-        // IE peekaboo bug - fix found by Dave Fenwick
-        if(Ext.isIE){
-            this.el.repaint();
-        }
-        this.fireEvent("show", this);
-    },
-
-    
-    focus : function(){
-        if(this.defaultButton){
-            this.defaultButton.focus();
-        }else{
-            this.focusEl.focus();
-        }
-    },
-
-    // private
-    constrainXY : function(){
-        if(this.constraintoviewport !== false){
-            if(!this.viewSize){
-                if(this.container){
-                    var s = this.container.getSize();
-                    this.viewSize = [s.width, s.height];
-                }else{
-                    this.viewSize = [Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()];
-                }
-            }
-            var s = Ext.get(this.container||document).getScroll();
-
-            var x = this.xy[0], y = this.xy[1];
-            var w = this.size.width, h = this.size.height;
-            var vw = this.viewSize[0], vh = this.viewSize[1];
-            // only move it if it needs it
-            var moved = false;
-            // first validate right/bottom
-            if(x + w > vw+s.left){
-                x = vw - w;
-                moved = true;
-            }
-            if(y + h > vh+s.top){
-                y = vh - h;
-                moved = true;
-            }
-            // then make sure top/left isn't negative
-            if(x < s.left){
-                x = s.left;
-                moved = true;
-            }
-            if(y < s.top){
-                y = s.top;
-                moved = true;
-            }
-            if(moved){
-                // cache xy
-                this.xy = [x, y];
-                if(this.isVisible()){
-                    this.el.setLocation(x, y);
-                    this.adjustAssets();
-                }
-            }
-        }
-    },
-
-    // private
-    onDrag : function(){
-        if(!this.proxyDrag){
-            this.xy = this.el.getXY();
-            this.adjustAssets();
-        }
-    },
-
-    // private
-    adjustAssets : function(doShow){
-        var x = this.xy[0], y = this.xy[1];
-        var w = this.size.width, h = this.size.height;
-        if(doShow === true){
-            if(this.shadow){
-                this.shadow.show(this.el);
-            }
-            if(this.shim){
-                this.shim.show();
-            }
-        }
-        if(this.shadow && this.shadow.isVisible()){
-            this.shadow.show(this.el);
-        }
-        if(this.shim && this.shim.isVisible()){
-            this.shim.setBounds(x, y, w, h);
-        }
-    },
-
-    // private
-    adjustViewport : function(w, h){
-        if(!w || !h){
-            w = Ext.lib.Dom.getViewWidth();
-            h = Ext.lib.Dom.getViewHeight();
-        }
-        // cache the size
-        this.viewSize = [w, h];
-        if(this.modal && this.mask.isVisible()){
-            this.mask.setSize(w, h); // first make sure the mask isn't causing overflow
-            this.mask.setSize(Ext.lib.Dom.getViewWidth(true), Ext.lib.Dom.getViewHeight(true));
-        }
-        if(this.isVisible()){
-            this.constrainXY();
-        }
-    },
-
-    
-    destroy : function(removeEl){
-        if(this.isVisible()){
-            this.animateTarget = null;
-            this.hide();
-        }
-        Ext.EventManager.removeResizeListener(this.adjustViewport, this);
-        if(this.tabs){
-            this.tabs.destroy(removeEl);
-        }
-        Ext.destroy(
-             this.shim,
-             this.proxy,
-             this.resizer,
-             this.close,
-             this.mask
-        );
-        if(this.dd){
-            this.dd.unreg();
-        }
-        if(this.buttons){
-           for(var i = 0, len = this.buttons.length; i < len; i++){
-               this.buttons[i].destroy();
-           }
-        }
-        this.el.removeAllListeners();
-        if(removeEl === true){
-            this.el.update("");
-            this.el.remove();
-        }
-        Ext.DialogManager.unregister(this);
-    },
-
-    // private
-    startMove : function(){
-        if(this.proxyDrag){
-            this.proxy.show();
-        }
-        if(this.constraintoviewport !== false){
-            this.dd.constrainTo(document.body, {right: this.shadowOffset, bottom: this.shadowOffset});
-        }
-    },
-
-    // private
-    endMove : function(){
-        if(!this.proxyDrag){
-            Ext.dd.DD.prototype.endDrag.apply(this.dd, arguments);
-        }else{
-            Ext.dd.DDProxy.prototype.endDrag.apply(this.dd, arguments);
-            this.proxy.hide();
-        }
-        this.refreshSize();
-        this.adjustAssets();
-        this.focus();
-        this.fireEvent("move", this, this.xy[0], this.xy[1]);
-    },
-
-    
-    toFront : function(){
-        Ext.DialogManager.bringToFront(this);
-        return this;
-    },
-
-    
-    toBack : function(){
-        Ext.DialogManager.sendToBack(this);
-        return this;
-    },
-
-    
-    center : function(){
-        var xy = this.el.getCenterXY(true);
-        this.moveTo(xy[0], xy[1]);
-        return this;
-    },
-
-    
-    moveTo : function(x, y){
-        this.xy = [x,y];
-        if(this.isVisible()){
-            this.el.setXY(this.xy);
-            this.adjustAssets();
-        }
-        return this;
-    },
-
-    
-    alignTo : function(element, position, offsets){
-        this.xy = this.el.getAlignToXY(element, position, offsets);
-        if(this.isVisible()){
-            this.el.setXY(this.xy);
-            this.adjustAssets();
-        }
-        return this;
-    },
-
-    
-    anchorTo : function(el, alignment, offsets, monitorScroll){
-        var action = function(){
-            this.alignTo(el, alignment, offsets);
-        };
-        Ext.EventManager.onWindowResize(action, this);
-        var tm = typeof monitorScroll;
-        if(tm != 'undefined'){
-            Ext.EventManager.on(window, 'scroll', action, this,
-                {buffer: tm == 'number' ? monitorScroll : 50});
-        }
-        action.call(this);
-        return this;
-    },
-
-    
-    isVisible : function(){
-        return this.el.isVisible();
-    },
-
-    // private
-    animHide : function(callback){
-        var b = Ext.get(this.animateTarget).getBox();
-        this.proxy.show();
-        this.proxy.setBounds(this.xy[0], this.xy[1], this.size.width, this.size.height);
-        this.el.hide();
-        this.proxy.setBounds(b.x, b.y, b.width, b.height, true, .35,
-                    this.hideEl.createDelegate(this, [callback]));
-    },
-
-    
-    hide : function(callback){
-        if (this.fireEvent("beforehide", this) === false){
-            return;
-        }
-        if(this.shadow){
-            this.shadow.hide();
-        }
-        if(this.shim) {
-          this.shim.hide();
-        }
-        if(this.animateTarget){
-           this.animHide(callback);
-        }else{
-            this.el.hide();
-            this.hideEl(callback);
-        }
-        return this;
-    },
-
-    // private
-    hideEl : function(callback){
-        this.proxy.hide();
-        if(this.modal){
-            this.mask.hide();
-            Ext.get(document.body).removeClass("x-body-masked");
-        }
-        this.fireEvent("hide", this);
-        if(typeof callback == "function"){
-            callback();
-        }
-    },
-
-    // private
-    hideAction : function(){
-        this.setLeft("-10000px");
-        this.setTop("-10000px");
-        this.setStyle("visibility", "hidden");
-    },
-
-    // private
-    refreshSize : function(){
-        this.size = this.el.getSize();
-        this.xy = this.el.getXY();
-        Ext.state.Manager.set(this.stateId || this.el.id + "-state", this.el.getBox());
-    },
-
-    // private
-    // z-index is managed by the DialogManager and may be overwritten at any time
-    setZIndex : function(index){
-        if(this.modal){
-            this.mask.setStyle("z-index", index);
-        }
-        if(this.shim){
-            this.shim.setStyle("z-index", ++index);
-        }
-        if(this.shadow){
-            this.shadow.setZIndex(++index);
-        }
-        this.el.setStyle("z-index", ++index);
-        if(this.proxy){
-            this.proxy.setStyle("z-index", ++index);
-        }
-        if(this.resizer){
-            this.resizer.proxy.setStyle("z-index", ++index);
-        }
-
-        this.lastZIndex = index;
-    },
-
-    
-    getEl : function(){
-        return this.el;
-    }
-});
-
-
-Ext.DialogManager = function(){
-    var list = {};
-    var accessList = [];
-    var front = null;
-
-    // private
-    var sortDialogs = function(d1, d2){
-        return (!d1._lastAccess || d1._lastAccess < d2._lastAccess) ? -1 : 1;
-    };
-
-    // private
-    var orderDialogs = function(){
-        accessList.sort(sortDialogs);
-        var seed = Ext.DialogManager.zseed;
-        for(var i = 0, len = accessList.length; i < len; i++){
-            var dlg = accessList[i];
-            if(dlg){
-                dlg.setZIndex(seed + (i*10));
-            }
-        }
-    };
-
-    return {
-        
-        zseed : 9000,
-
-        // private
-        register : function(dlg){
-            list[dlg.id] = dlg;
-            accessList.push(dlg);
-        },
-
-        // private
-        unregister : function(dlg){
-            delete list[dlg.id];
-            if(!accessList.indexOf){
-                for(var i = 0, len = accessList.length; i < len; i++){
-                    if(accessList[i] == dlg){
-                        accessList.splice(i, 1);
-                        return;
-                    }
-                }
-            }else{
-                var i = accessList.indexOf(dlg);
-                if(i != -1){
-                    accessList.splice(i, 1);
-                }
-            }
-        },
-
-        
-        get : function(id){
-            return typeof id == "object" ? id : list[id];
-        },
-
-        
-        bringToFront : function(dlg){
-            dlg = this.get(dlg);
-            if(dlg != front){
-                front = dlg;
-                dlg._lastAccess = new Date().getTime();
-                orderDialogs();
-            }
-            return dlg;
-        },
-
-        
-        sendToBack : function(dlg){
-            dlg = this.get(dlg);
-            dlg._lastAccess = -(new Date().getTime());
-            orderDialogs();
-            return dlg;
-        },
-
-        
-        hideAll : function(){
-            for(var id in list){
-                if(list[id] && typeof list[id] != "function" && list[id].isVisible()){
-                    list[id].hide();
-                }
-            }
-        }
-    };
-}();
-
-
-Ext.LayoutDialog = function(el, config){
-    config.autoTabs = false;
-    Ext.LayoutDialog.superclass.constructor.call(this, el, config);
-    this.body.setStyle({overflow:"hidden", position:"relative"});
-    this.layout = new Ext.BorderLayout(this.body.dom, config);
-    this.layout.monitorWindowResize = false;
-    this.el.addClass("x-dlg-auto-layout");
-    // fix case when center region overwrites center function
-    this.center = Ext.BasicDialog.prototype.center;
-    this.on("show", this.layout.layout, this.layout, true);
-};
-Ext.extend(Ext.LayoutDialog, Ext.BasicDialog, {
-    
-    endUpdate : function(){
-        this.layout.endUpdate();
-    },
-
-    
-    beginUpdate : function(){
-        this.layout.beginUpdate();
-    },
-
-    
-    getLayout : function(){
-        return this.layout;
-    },
-
-    showEl : function(){
-        Ext.LayoutDialog.superclass.showEl.apply(this, arguments);
-        if(Ext.isIE7){
-            this.layout.layout();
-        }
-    },
-
-    // private
-    // Use the syncHeightBeforeShow config option to control this automatically
-    syncBodyHeight : function(){
-        Ext.LayoutDialog.superclass.syncBodyHeight.call(this);
-        if(this.layout){this.layout.layout();}
-    }
-});
-
-Ext.MessageBox = function(){
-    var dlg, opt, mask, waitTimer;
-    var bodyEl, msgEl, textboxEl, textareaEl, progressEl, pp;
-    var buttons, activeTextEl, bwidth;
-
-    // private
-    var handleButton = function(button){
-        dlg.hide();
-        Ext.callback(opt.fn, opt.scope||window, [button, activeTextEl.dom.value], 1);
-    };
-
-    // private
-    var handleHide = function(){
-        if(opt && opt.cls){
-            dlg.el.removeClass(opt.cls);
-        }
-        if(waitTimer){
-            Ext.TaskMgr.stop(waitTimer);
-            waitTimer = null;
-        }
-    };
-
-    // private
-    var updateButtons = function(b){
-        var width = 0;
-        if(!b){
-            buttons["ok"].hide();
-            buttons["cancel"].hide();
-            buttons["yes"].hide();
-            buttons["no"].hide();
-            dlg.footer.dom.style.display = 'none';
-            return width;
-        }
-        dlg.footer.dom.style.display = '';
-        for(var k in buttons){
-            if(typeof buttons[k] != "function"){
-                if(b[k]){
-                    buttons[k].show();
-                    buttons[k].setText(typeof b[k] == "string" ? b[k] : Ext.MessageBox.buttonText[k]);
-                    width += buttons[k].el.getWidth()+15;
-                }else{
-                    buttons[k].hide();
-                }
-            }
-        }
-        return width;
-    };
-
-    // private
-    var handleEsc = function(d, k, e){
-        if(opt && opt.closable !== false){
-            dlg.hide();
-        }
-        if(e){
-            e.stopEvent();
-        }
-    };
-
-    return {
-        
-        getDialog : function(){
-           if(!dlg){
-                dlg = new Ext.BasicDialog("x-msg-box", {
-                    autoCreate : true,
-                    shadow: true,
-                    draggable: true,
-                    resizable:false,
-                    constraintoviewport:false,
-                    fixedcenter:true,
-                    collapsible : false,
-                    shim:true,
-                    modal: true,
-                    width:400, height:100,
-                    buttonAlign:"center",
-                    closeClick : function(){
-                        if(opt && opt.buttons && opt.buttons.no && !opt.buttons.cancel){
-                            handleButton("no");
-                        }else{
-                            handleButton("cancel");
-                        }
-                    }
-                });
-                dlg.on("hide", handleHide);
-                mask = dlg.mask;
-                dlg.addKeyListener(27, handleEsc);
-                buttons = {};
-                var bt = this.buttonText;
-                buttons["ok"] = dlg.addButton(bt["ok"], handleButton.createCallback("ok"));
-                buttons["yes"] = dlg.addButton(bt["yes"], handleButton.createCallback("yes"));
-                buttons["no"] = dlg.addButton(bt["no"], handleButton.createCallback("no"));
-                buttons["cancel"] = dlg.addButton(bt["cancel"], handleButton.createCallback("cancel"));
-                bodyEl = dlg.body.createChild({
-                    tag:"div",
-                    html:'<span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea><div class="ext-mb-progress-wrap"><div class="ext-mb-progress"><div class="ext-mb-progress-bar">&#160;</div></div></div>'
-                });
-                msgEl = bodyEl.dom.firstChild;
-                textboxEl = Ext.get(bodyEl.dom.childNodes[2]);
-                textboxEl.enableDisplayMode();
-                textboxEl.addKeyListener([10,13], function(){
-                    if(dlg.isVisible() && opt && opt.buttons){
-                        if(opt.buttons.ok){
-                            handleButton("ok");
-                        }else if(opt.buttons.yes){
-                            handleButton("yes");
-                        }
-                    }
-                });
-                textareaEl = Ext.get(bodyEl.dom.childNodes[3]);
-                textareaEl.enableDisplayMode();
-                progressEl = Ext.get(bodyEl.dom.childNodes[4]);
-                progressEl.enableDisplayMode();
-                var pf = progressEl.dom.firstChild;
-                pp = Ext.get(pf.firstChild);
-                pp.setHeight(pf.offsetHeight);
-            }
-            return dlg;
-        },
-
-        
-        updateText : function(text){
-            if(!dlg.isVisible() && !opt.width){
-                dlg.resizeTo(this.maxWidth, 100); // resize first so content is never clipped from previous shows
-            }
-            msgEl.innerHTML = text || '&#160;';
-            var w = Math.max(Math.min(opt.width || msgEl.offsetWidth, this.maxWidth), 
-                        Math.max(opt.minWidth || this.minWidth, bwidth));
-            if(opt.prompt){
-                activeTextEl.setWidth(w);
-            }
-            if(dlg.isVisible()){
-                dlg.fixedcenter = false;
-            }
-            dlg.setContentSize(w, bodyEl.getHeight());
-            if(dlg.isVisible()){
-                dlg.fixedcenter = true;
-            }
-            return this;
-        },
-
-        
-        updateProgress : function(value, text){
-            if(text){
-                this.updateText(text);
-            }
-            pp.setWidth(Math.floor(value*progressEl.dom.firstChild.offsetWidth));
-            return this;
-        },        
-
-        
-        isVisible : function(){
-            return dlg && dlg.isVisible();  
-        },
-
-        
-        hide : function(){
-            if(this.isVisible()){
-                dlg.hide();
-            }  
-        },
-
-        
-        show : function(options){
-            if(this.isVisible()){
-                this.hide();
-            }
-            var d = this.getDialog();
-            opt = options;
-            d.setTitle(opt.title || "&#160;");
-            d.close.setDisplayed(opt.closable !== false);
-            activeTextEl = textboxEl;
-            opt.prompt = opt.prompt || (opt.multiline ? true : false);
-            if(opt.prompt){
-                if(opt.multiline){
-                    textboxEl.hide();
-                    textareaEl.show();
-                    textareaEl.setHeight(typeof opt.multiline == "number" ?
-                        opt.multiline : this.defaultTextHeight);
-                    activeTextEl = textareaEl;
-                }else{
-                    textboxEl.show();
-                    textareaEl.hide();
-                }
-            }else{
-                textboxEl.hide();
-                textareaEl.hide();
-            }
-            progressEl.setDisplayed(opt.progress === true);
-            this.updateProgress(0);
-            activeTextEl.dom.value = opt.value || "";
-            if(opt.prompt){
-                dlg.setDefaultButton(activeTextEl);
-            }else{
-                var bs = opt.buttons;
-                var db = null;
-                if(bs && bs.ok){
-                    db = buttons["ok"];
-                }else if(bs && bs.yes){
-                    db = buttons["yes"];
-                }
-                dlg.setDefaultButton(db);
-            }
-            bwidth = updateButtons(opt.buttons);
-            this.updateText(opt.msg);
-            if(opt.cls){
-                d.el.addClass(opt.cls);
-            }
-            d.proxyDrag = opt.proxyDrag === true;
-            d.modal = opt.modal !== false;
-            d.mask = opt.modal !== false ? mask : false;
-            if(!d.isVisible()){
-                // force it to the end of the z-index stack so it gets a cursor in FF
-                document.body.appendChild(dlg.el.dom);
-                d.animateTarget = null;
-                d.show(options.animEl);
-            }
-            return this;
-        },
-
-        
-        progress : function(title, msg){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: false,
-                progress:true,
-                closable:false,
-                minWidth: this.minProgressWidth
-            });
-            return this;
-        },
-
-        
-        alert : function(title, msg, fn, scope){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: this.OK,
-                fn: fn,
-                scope : scope
-            });
-            return this;
-        },
-
-        
-        wait : function(msg, title){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: false,
-                closable:false,
-                progress:true,
-                modal:true,
-                width:300,
-                wait:true
-            });
-            waitTimer = Ext.TaskMgr.start({
-                run: function(i){
-                    Ext.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);
-                },
-                interval: 1000
-            });
-            return this;
-        },
-
-        
-        confirm : function(title, msg, fn, scope){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: this.YESNO,
-                fn: fn,
-                scope : scope
-            });
-            return this;
-        },
-
-        
-        prompt : function(title, msg, fn, scope, multiline){
-            this.show({
-                title : title,
-                msg : msg,
-                buttons: this.OKCANCEL,
-                fn: fn,
-                minWidth:250,
-                scope : scope,
-                prompt:true,
-                multiline: multiline
-            });
-            return this;
-        },
-
-        
-        OK : {ok:true},
-        
-        YESNO : {yes:true, no:true},
-        
-        OKCANCEL : {ok:true, cancel:true},
-        
-        YESNOCANCEL : {yes:true, no:true, cancel:true},
-
-        
-        defaultTextHeight : 75,
-        
-        maxWidth : 600,
-        
-        minWidth : 100,
-        
-        minProgressWidth : 250,
-        
-        buttonText : {
-            ok : "OK",
-            cancel : "Cancel",
-            yes : "Yes",
-            no : "No"
-        }
-    };
-}();
-
-
-Ext.Msg = Ext.MessageBox;
diff --git a/lib/web/extjs/package/dialog/dialogs.js b/lib/web/extjs/package/dialog/dialogs.js
deleted file mode 100644
index d97f389096a7a8c15a8c7b1be2a23a6897420bc4..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/dialog/dialogs.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.BasicDialog=function(el,config){this.el=Ext.get(el);var dh=Ext.DomHelper;if(!this.el&&config&&config.autoCreate){if(typeof config.autoCreate=="object"){if(!config.autoCreate.id){config.autoCreate.id=el;}
-this.el=dh.append(document.body,config.autoCreate,true);}else{this.el=dh.append(document.body,{tag:"div",id:el,style:'visibility:hidden;'},true);}}
-el=this.el;el.setDisplayed(true);el.hide=this.hideAction;this.id=el.id;el.addClass("x-dlg");Ext.apply(this,config);this.proxy=el.createProxy("x-dlg-proxy");this.proxy.hide=this.hideAction;this.proxy.setOpacity(.5);this.proxy.hide();if(config.width){el.setWidth(config.width);}
-if(config.height){el.setHeight(config.height);}
-this.size=el.getSize();if(typeof config.x!="undefined"&&typeof config.y!="undefined"){this.xy=[config.x,config.y];}else{this.xy=el.getCenterXY(true);}
-this.header=el.child("> .x-dlg-hd");this.body=el.child("> .x-dlg-bd");this.footer=el.child("> .x-dlg-ft");if(!this.header){this.header=el.createChild({tag:"div",cls:"x-dlg-hd",html:"&#160;"},this.body?this.body.dom:null);}
-if(!this.body){this.body=el.createChild({tag:"div",cls:"x-dlg-bd"});}
-this.header.unselectable();if(this.title){this.header.update(this.title);}
-this.focusEl=el.createChild({tag:"a",href:"#",cls:"x-dlg-focus",tabIndex:"-1"});this.focusEl.swallowEvent("click",true);this.header.wrap({cls:"x-dlg-hd-right"}).wrap({cls:"x-dlg-hd-left"},true);this.bwrap=this.body.wrap({tag:"div",cls:"x-dlg-dlg-body"});if(this.footer){this.bwrap.dom.appendChild(this.footer.dom);}
-this.bg=this.el.createChild({tag:"div",cls:"x-dlg-bg",html:'<div class="x-dlg-bg-left"><div class="x-dlg-bg-right"><div class="x-dlg-bg-center">&#160;</div></div></div>'});this.centerBg=this.bg.child("div.x-dlg-bg-center");if(this.autoScroll!==false&&!this.autoTabs){this.body.setStyle("overflow","auto");}
-this.toolbox=this.el.createChild({cls:"x-dlg-toolbox"});if(this.closable!==false){this.el.addClass("x-dlg-closable");this.close=this.toolbox.createChild({cls:"x-dlg-close"});this.close.on("click",this.closeClick,this);this.close.addClassOnOver("x-dlg-close-over");}
-if(this.collapsible!==false){this.collapseBtn=this.toolbox.createChild({cls:"x-dlg-collapse"});this.collapseBtn.on("click",this.collapseClick,this);this.collapseBtn.addClassOnOver("x-dlg-collapse-over");this.header.on("dblclick",this.collapseClick,this);}
-if(this.resizable!==false){this.el.addClass("x-dlg-resizable");this.resizer=new Ext.Resizable(el,{minWidth:this.minWidth||80,minHeight:this.minHeight||80,handles:this.resizeHandles||"all",pinned:true});this.resizer.on("beforeresize",this.beforeResize,this);this.resizer.on("resize",this.onResize,this);}
-if(this.draggable!==false){el.addClass("x-dlg-draggable");if(!this.proxyDrag){var dd=new Ext.dd.DD(el.dom.id,"WindowDrag");}
-else{var dd=new Ext.dd.DDProxy(el.dom.id,"WindowDrag",{dragElId:this.proxy.id});}
-dd.setHandleElId(this.header.id);dd.endDrag=this.endMove.createDelegate(this);dd.startDrag=this.startMove.createDelegate(this);dd.onDrag=this.onDrag.createDelegate(this);dd.scroll=false;this.dd=dd;}
-if(this.modal){this.mask=dh.append(document.body,{tag:"div",cls:"x-dlg-mask"},true);this.mask.enableDisplayMode("block");this.mask.hide();this.el.addClass("x-dlg-modal");}
-if(this.shadow){this.shadow=new Ext.Shadow({mode:typeof this.shadow=="string"?this.shadow:"sides",offset:this.shadowOffset});}else{this.shadowOffset=0;}
-if(Ext.useShims&&this.shim!==false){this.shim=this.el.createShim();this.shim.hide=this.hideAction;this.shim.hide();}else{this.shim=false;}
-if(this.autoTabs){this.initTabs();}
-this.addEvents({"keydown":true,"move":true,"resize":true,"beforehide":true,"hide":true,"beforeshow":true,"show":true});el.on("keydown",this.onKeyDown,this);el.on("mousedown",this.toFront,this);Ext.EventManager.onWindowResize(this.adjustViewport,this,true);this.el.hide();Ext.DialogManager.register(this);Ext.BasicDialog.superclass.constructor.call(this);};Ext.extend(Ext.BasicDialog,Ext.util.Observable,{shadowOffset:Ext.isIE?6:5,minHeight:80,minWidth:200,minButtonWidth:75,defaultButton:null,buttonAlign:"right",tabTag:'div',firstShow:true,setTitle:function(text){this.header.update(text);return this;},closeClick:function(){this.hide();},collapseClick:function(){this[this.collapsed?"expand":"collapse"]();},collapse:function(){if(!this.collapsed){this.collapsed=true;this.el.addClass("x-dlg-collapsed");this.restoreHeight=this.el.getHeight();this.resizeTo(this.el.getWidth(),this.header.getHeight());}},expand:function(){if(this.collapsed){this.collapsed=false;this.el.removeClass("x-dlg-collapsed");this.resizeTo(this.el.getWidth(),this.restoreHeight);}},initTabs:function(){var tabs=this.getTabs();while(tabs.getTab(0)){tabs.removeTab(0);}
-this.el.select(this.tabTag+'.x-dlg-tab').each(function(el){var dom=el.dom;tabs.addTab(Ext.id(dom),dom.title);dom.title="";});tabs.activate(0);return tabs;},beforeResize:function(){this.resizer.minHeight=Math.max(this.minHeight,this.getHeaderFooterHeight(true)+40);},onResize:function(){this.refreshSize();this.syncBodyHeight();this.adjustAssets();this.focus();this.fireEvent("resize",this,this.size.width,this.size.height);},onKeyDown:function(e){if(this.isVisible()){this.fireEvent("keydown",this,e);}},resizeTo:function(width,height){this.el.setSize(width,height);this.size={width:width,height:height};this.syncBodyHeight();if(this.fixedcenter){this.center();}
-if(this.isVisible()){this.constrainXY();this.adjustAssets();}
-this.fireEvent("resize",this,width,height);return this;},setContentSize:function(w,h){h+=this.getHeaderFooterHeight()+this.body.getMargins("tb");w+=this.body.getMargins("lr")+this.bwrap.getMargins("lr")+this.centerBg.getPadding("lr");h+=this.body.getPadding("tb")+this.bwrap.getBorderWidth("tb")+this.body.getBorderWidth("tb")+this.el.getBorderWidth("tb");w+=this.body.getPadding("lr")+this.bwrap.getBorderWidth("lr")+this.body.getBorderWidth("lr")+this.bwrap.getPadding("lr")+this.el.getBorderWidth("lr");if(this.tabs){h+=this.tabs.stripWrap.getHeight()+this.tabs.bodyEl.getMargins("tb")+this.tabs.bodyEl.getPadding("tb");w+=this.tabs.bodyEl.getMargins("lr")+this.tabs.bodyEl.getPadding("lr");}
-this.resizeTo(w,h);return this;},addKeyListener:function(key,fn,scope){var keyCode,shift,ctrl,alt;if(typeof key=="object"&&!(key instanceof Array)){keyCode=key["key"];shift=key["shift"];ctrl=key["ctrl"];alt=key["alt"];}else{keyCode=key;}
-var handler=function(dlg,e){if((!shift||e.shiftKey)&&(!ctrl||e.ctrlKey)&&(!alt||e.altKey)){var k=e.getKey();if(keyCode instanceof Array){for(var i=0,len=keyCode.length;i<len;i++){if(keyCode[i]==k){fn.call(scope||window,dlg,k,e);return;}}}else{if(k==keyCode){fn.call(scope||window,dlg,k,e);}}}};this.on("keydown",handler);return this;},getTabs:function(){if(!this.tabs){this.el.addClass("x-dlg-auto-tabs");this.body.addClass(this.tabPosition=="bottom"?"x-tabs-bottom":"x-tabs-top");this.tabs=new Ext.TabPanel(this.body.dom,this.tabPosition=="bottom");}
-return this.tabs;},addButton:function(config,handler,scope){var dh=Ext.DomHelper;if(!this.footer){this.footer=dh.append(this.bwrap,{tag:"div",cls:"x-dlg-ft"},true);}
-if(!this.btnContainer){var tb=this.footer.createChild({tag:"div",cls:"x-dlg-btns x-dlg-btns-"+this.buttonAlign,html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'},null,true);this.btnContainer=tb.firstChild.firstChild.firstChild;}
-var bconfig={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bconfig.text=config;}else{if(config.tag){bconfig.dhconfig=config;}else{Ext.apply(bconfig,config);}}
-var btn=new Ext.Button(this.btnContainer.appendChild(document.createElement("td")),bconfig);this.syncBodyHeight();if(!this.buttons){this.buttons=[];}
-this.buttons.push(btn);return btn;},setDefaultButton:function(btn){this.defaultButton=btn;return this;},getHeaderFooterHeight:function(safe){var height=0;if(this.header){height+=this.header.getHeight();}
-if(this.footer){var fm=this.footer.getMargins();height+=(this.footer.getHeight()+fm.top+fm.bottom);}
-height+=this.bwrap.getPadding("tb")+this.bwrap.getBorderWidth("tb");height+=this.centerBg.getPadding("tb");return height;},syncBodyHeight:function(){var bd=this.body,cb=this.centerBg,bw=this.bwrap;var height=this.size.height-this.getHeaderFooterHeight(false);bd.setHeight(height-bd.getMargins("tb"));var hh=this.header.getHeight();var h=this.size.height-hh;cb.setHeight(h);bw.setLeftTop(cb.getPadding("l"),hh+cb.getPadding("t"));bw.setHeight(h-cb.getPadding("tb"));bw.setWidth(this.el.getWidth(true)-cb.getPadding("lr"));bd.setWidth(bw.getWidth(true));if(this.tabs){this.tabs.syncHeight();if(Ext.isIE){this.tabs.el.repaint();}}},restoreState:function(){var box=Ext.state.Manager.get(this.stateId||(this.el.id+"-state"));if(box&&box.width){this.xy=[box.x,box.y];this.resizeTo(box.width,box.height);}
-return this;},beforeShow:function(){this.expand();if(this.fixedcenter){this.xy=this.el.getCenterXY(true);}
-if(this.modal){Ext.get(document.body).addClass("x-body-masked");this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.mask.show();}
-this.constrainXY();},animShow:function(){var b=Ext.get(this.animateTarget,true).getBox();this.proxy.setSize(b.width,b.height);this.proxy.setLocation(b.x,b.y);this.proxy.show();this.proxy.setBounds(this.xy[0],this.xy[1],this.size.width,this.size.height,true,.35,this.showEl.createDelegate(this));},show:function(animateTarget){if(this.fireEvent("beforeshow",this)===false){return;}
-if(this.syncHeightBeforeShow){this.syncBodyHeight();}else if(this.firstShow){this.firstShow=false;this.syncBodyHeight();}
-this.animateTarget=animateTarget||this.animateTarget;if(!this.el.isVisible()){this.beforeShow();if(this.animateTarget){this.animShow();}else{this.showEl();}}
-return this;},showEl:function(){this.proxy.hide();this.el.setXY(this.xy);this.el.show();this.adjustAssets(true);this.toFront();this.focus();if(Ext.isIE){this.el.repaint();}
-this.fireEvent("show",this);},focus:function(){if(this.defaultButton){this.defaultButton.focus();}else{this.focusEl.focus();}},constrainXY:function(){if(this.constraintoviewport!==false){if(!this.viewSize){if(this.container){var s=this.container.getSize();this.viewSize=[s.width,s.height];}else{this.viewSize=[Ext.lib.Dom.getViewWidth(),Ext.lib.Dom.getViewHeight()];}}
-var s=Ext.get(this.container||document).getScroll();var x=this.xy[0],y=this.xy[1];var w=this.size.width,h=this.size.height;var vw=this.viewSize[0],vh=this.viewSize[1];var moved=false;if(x+w>vw+s.left){x=vw-w;moved=true;}
-if(y+h>vh+s.top){y=vh-h;moved=true;}
-if(x<s.left){x=s.left;moved=true;}
-if(y<s.top){y=s.top;moved=true;}
-if(moved){this.xy=[x,y];if(this.isVisible()){this.el.setLocation(x,y);this.adjustAssets();}}}},onDrag:function(){if(!this.proxyDrag){this.xy=this.el.getXY();this.adjustAssets();}},adjustAssets:function(doShow){var x=this.xy[0],y=this.xy[1];var w=this.size.width,h=this.size.height;if(doShow===true){if(this.shadow){this.shadow.show(this.el);}
-if(this.shim){this.shim.show();}}
-if(this.shadow&&this.shadow.isVisible()){this.shadow.show(this.el);}
-if(this.shim&&this.shim.isVisible()){this.shim.setBounds(x,y,w,h);}},adjustViewport:function(w,h){if(!w||!h){w=Ext.lib.Dom.getViewWidth();h=Ext.lib.Dom.getViewHeight();}
-this.viewSize=[w,h];if(this.modal&&this.mask.isVisible()){this.mask.setSize(w,h);this.mask.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));}
-if(this.isVisible()){this.constrainXY();}},destroy:function(removeEl){if(this.isVisible()){this.animateTarget=null;this.hide();}
-Ext.EventManager.removeResizeListener(this.adjustViewport,this);if(this.tabs){this.tabs.destroy(removeEl);}
-Ext.destroy(this.shim,this.proxy,this.resizer,this.close,this.mask);if(this.dd){this.dd.unreg();}
-if(this.buttons){for(var i=0,len=this.buttons.length;i<len;i++){this.buttons[i].destroy();}}
-this.el.removeAllListeners();if(removeEl===true){this.el.update("");this.el.remove();}
-Ext.DialogManager.unregister(this);},startMove:function(){if(this.proxyDrag){this.proxy.show();}
-if(this.constraintoviewport!==false){this.dd.constrainTo(document.body,{right:this.shadowOffset,bottom:this.shadowOffset});}},endMove:function(){if(!this.proxyDrag){Ext.dd.DD.prototype.endDrag.apply(this.dd,arguments);}else{Ext.dd.DDProxy.prototype.endDrag.apply(this.dd,arguments);this.proxy.hide();}
-this.refreshSize();this.adjustAssets();this.focus();this.fireEvent("move",this,this.xy[0],this.xy[1]);},toFront:function(){Ext.DialogManager.bringToFront(this);return this;},toBack:function(){Ext.DialogManager.sendToBack(this);return this;},center:function(){var xy=this.el.getCenterXY(true);this.moveTo(xy[0],xy[1]);return this;},moveTo:function(x,y){this.xy=[x,y];if(this.isVisible()){this.el.setXY(this.xy);this.adjustAssets();}
-return this;},alignTo:function(element,position,offsets){this.xy=this.el.getAlignToXY(element,position,offsets);if(this.isVisible()){this.el.setXY(this.xy);this.adjustAssets();}
-return this;},anchorTo:function(el,alignment,offsets,monitorScroll){var action=function(){this.alignTo(el,alignment,offsets);};Ext.EventManager.onWindowResize(action,this);var tm=typeof monitorScroll;if(tm!='undefined'){Ext.EventManager.on(window,'scroll',action,this,{buffer:tm=='number'?monitorScroll:50});}
-action.call(this);return this;},isVisible:function(){return this.el.isVisible();},animHide:function(callback){var b=Ext.get(this.animateTarget).getBox();this.proxy.show();this.proxy.setBounds(this.xy[0],this.xy[1],this.size.width,this.size.height);this.el.hide();this.proxy.setBounds(b.x,b.y,b.width,b.height,true,.35,this.hideEl.createDelegate(this,[callback]));},hide:function(callback){if(this.fireEvent("beforehide",this)===false){return;}
-if(this.shadow){this.shadow.hide();}
-if(this.shim){this.shim.hide();}
-if(this.animateTarget){this.animHide(callback);}else{this.el.hide();this.hideEl(callback);}
-return this;},hideEl:function(callback){this.proxy.hide();if(this.modal){this.mask.hide();Ext.get(document.body).removeClass("x-body-masked");}
-this.fireEvent("hide",this);if(typeof callback=="function"){callback();}},hideAction:function(){this.setLeft("-10000px");this.setTop("-10000px");this.setStyle("visibility","hidden");},refreshSize:function(){this.size=this.el.getSize();this.xy=this.el.getXY();Ext.state.Manager.set(this.stateId||this.el.id+"-state",this.el.getBox());},setZIndex:function(index){if(this.modal){this.mask.setStyle("z-index",index);}
-if(this.shim){this.shim.setStyle("z-index",++index);}
-if(this.shadow){this.shadow.setZIndex(++index);}
-this.el.setStyle("z-index",++index);if(this.proxy){this.proxy.setStyle("z-index",++index);}
-if(this.resizer){this.resizer.proxy.setStyle("z-index",++index);}
-this.lastZIndex=index;},getEl:function(){return this.el;}});Ext.DialogManager=function(){var list={};var accessList=[];var front=null;var sortDialogs=function(d1,d2){return(!d1._lastAccess||d1._lastAccess<d2._lastAccess)?-1:1;};var orderDialogs=function(){accessList.sort(sortDialogs);var seed=Ext.DialogManager.zseed;for(var i=0,len=accessList.length;i<len;i++){var dlg=accessList[i];if(dlg){dlg.setZIndex(seed+(i*10));}}};return{zseed:9000,register:function(dlg){list[dlg.id]=dlg;accessList.push(dlg);},unregister:function(dlg){delete list[dlg.id];if(!accessList.indexOf){for(var i=0,len=accessList.length;i<len;i++){if(accessList[i]==dlg){accessList.splice(i,1);return;}}}else{var i=accessList.indexOf(dlg);if(i!=-1){accessList.splice(i,1);}}},get:function(id){return typeof id=="object"?id:list[id];},bringToFront:function(dlg){dlg=this.get(dlg);if(dlg!=front){front=dlg;dlg._lastAccess=new Date().getTime();orderDialogs();}
-return dlg;},sendToBack:function(dlg){dlg=this.get(dlg);dlg._lastAccess=-(new Date().getTime());orderDialogs();return dlg;},hideAll:function(){for(var id in list){if(list[id]&&typeof list[id]!="function"&&list[id].isVisible()){list[id].hide();}}}};}();Ext.LayoutDialog=function(el,config){config.autoTabs=false;Ext.LayoutDialog.superclass.constructor.call(this,el,config);this.body.setStyle({overflow:"hidden",position:"relative"});this.layout=new Ext.BorderLayout(this.body.dom,config);this.layout.monitorWindowResize=false;this.el.addClass("x-dlg-auto-layout");this.center=Ext.BasicDialog.prototype.center;this.on("show",this.layout.layout,this.layout,true);};Ext.extend(Ext.LayoutDialog,Ext.BasicDialog,{endUpdate:function(){this.layout.endUpdate();},beginUpdate:function(){this.layout.beginUpdate();},getLayout:function(){return this.layout;},showEl:function(){Ext.LayoutDialog.superclass.showEl.apply(this,arguments);if(Ext.isIE7){this.layout.layout();}},syncBodyHeight:function(){Ext.LayoutDialog.superclass.syncBodyHeight.call(this);if(this.layout){this.layout.layout();}}});
-
-Ext.MessageBox=function(){var dlg,opt,mask,waitTimer;var bodyEl,msgEl,textboxEl,textareaEl,progressEl,pp;var buttons,activeTextEl,bwidth;var handleButton=function(button){dlg.hide();Ext.callback(opt.fn,opt.scope||window,[button,activeTextEl.dom.value],1);};var handleHide=function(){if(opt&&opt.cls){dlg.el.removeClass(opt.cls);}
-if(waitTimer){Ext.TaskMgr.stop(waitTimer);waitTimer=null;}};var updateButtons=function(b){var width=0;if(!b){buttons["ok"].hide();buttons["cancel"].hide();buttons["yes"].hide();buttons["no"].hide();dlg.footer.dom.style.display='none';return width;}
-dlg.footer.dom.style.display='';for(var k in buttons){if(typeof buttons[k]!="function"){if(b[k]){buttons[k].show();buttons[k].setText(typeof b[k]=="string"?b[k]:Ext.MessageBox.buttonText[k]);width+=buttons[k].el.getWidth()+15;}else{buttons[k].hide();}}}
-return width;};var handleEsc=function(d,k,e){if(opt&&opt.closable!==false){dlg.hide();}
-if(e){e.stopEvent();}};return{getDialog:function(){if(!dlg){dlg=new Ext.BasicDialog("x-msg-box",{autoCreate:true,shadow:true,draggable:true,resizable:false,constraintoviewport:false,fixedcenter:true,collapsible:false,shim:true,modal:true,width:400,height:100,buttonAlign:"center",closeClick:function(){if(opt&&opt.buttons&&opt.buttons.no&&!opt.buttons.cancel){handleButton("no");}else{handleButton("cancel");}}});dlg.on("hide",handleHide);mask=dlg.mask;dlg.addKeyListener(27,handleEsc);buttons={};var bt=this.buttonText;buttons["ok"]=dlg.addButton(bt["ok"],handleButton.createCallback("ok"));buttons["yes"]=dlg.addButton(bt["yes"],handleButton.createCallback("yes"));buttons["no"]=dlg.addButton(bt["no"],handleButton.createCallback("no"));buttons["cancel"]=dlg.addButton(bt["cancel"],handleButton.createCallback("cancel"));bodyEl=dlg.body.createChild({tag:"div",html:'<span class="ext-mb-text"></span><br /><input type="text" class="ext-mb-input" /><textarea class="ext-mb-textarea"></textarea><div class="ext-mb-progress-wrap"><div class="ext-mb-progress"><div class="ext-mb-progress-bar">&#160;</div></div></div>'});msgEl=bodyEl.dom.firstChild;textboxEl=Ext.get(bodyEl.dom.childNodes[2]);textboxEl.enableDisplayMode();textboxEl.addKeyListener([10,13],function(){if(dlg.isVisible()&&opt&&opt.buttons){if(opt.buttons.ok){handleButton("ok");}else if(opt.buttons.yes){handleButton("yes");}}});textareaEl=Ext.get(bodyEl.dom.childNodes[3]);textareaEl.enableDisplayMode();progressEl=Ext.get(bodyEl.dom.childNodes[4]);progressEl.enableDisplayMode();var pf=progressEl.dom.firstChild;pp=Ext.get(pf.firstChild);pp.setHeight(pf.offsetHeight);}
-return dlg;},updateText:function(text){if(!dlg.isVisible()&&!opt.width){dlg.resizeTo(this.maxWidth,100);}
-msgEl.innerHTML=text||'&#160;';var w=Math.max(Math.min(opt.width||msgEl.offsetWidth,this.maxWidth),Math.max(opt.minWidth||this.minWidth,bwidth));if(opt.prompt){activeTextEl.setWidth(w);}
-if(dlg.isVisible()){dlg.fixedcenter=false;}
-dlg.setContentSize(w,bodyEl.getHeight());if(dlg.isVisible()){dlg.fixedcenter=true;}
-return this;},updateProgress:function(value,text){if(text){this.updateText(text);}
-pp.setWidth(Math.floor(value*progressEl.dom.firstChild.offsetWidth));return this;},isVisible:function(){return dlg&&dlg.isVisible();},hide:function(){if(this.isVisible()){dlg.hide();}},show:function(options){if(this.isVisible()){this.hide();}
-var d=this.getDialog();opt=options;d.setTitle(opt.title||"&#160;");d.close.setDisplayed(opt.closable!==false);activeTextEl=textboxEl;opt.prompt=opt.prompt||(opt.multiline?true:false);if(opt.prompt){if(opt.multiline){textboxEl.hide();textareaEl.show();textareaEl.setHeight(typeof opt.multiline=="number"?opt.multiline:this.defaultTextHeight);activeTextEl=textareaEl;}else{textboxEl.show();textareaEl.hide();}}else{textboxEl.hide();textareaEl.hide();}
-progressEl.setDisplayed(opt.progress===true);this.updateProgress(0);activeTextEl.dom.value=opt.value||"";if(opt.prompt){dlg.setDefaultButton(activeTextEl);}else{var bs=opt.buttons;var db=null;if(bs&&bs.ok){db=buttons["ok"];}else if(bs&&bs.yes){db=buttons["yes"];}
-dlg.setDefaultButton(db);}
-bwidth=updateButtons(opt.buttons);this.updateText(opt.msg);if(opt.cls){d.el.addClass(opt.cls);}
-d.proxyDrag=opt.proxyDrag===true;d.modal=opt.modal!==false;d.mask=opt.modal!==false?mask:false;if(!d.isVisible()){document.body.appendChild(dlg.el.dom);d.animateTarget=null;d.show(options.animEl);}
-return this;},progress:function(title,msg){this.show({title:title,msg:msg,buttons:false,progress:true,closable:false,minWidth:this.minProgressWidth});return this;},alert:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.OK,fn:fn,scope:scope});return this;},wait:function(msg,title){this.show({title:title,msg:msg,buttons:false,closable:false,progress:true,modal:true,width:300,wait:true});waitTimer=Ext.TaskMgr.start({run:function(i){Ext.MessageBox.updateProgress(((((i+20)%20)+1)*5)*.01);},interval:1000});return this;},confirm:function(title,msg,fn,scope){this.show({title:title,msg:msg,buttons:this.YESNO,fn:fn,scope:scope});return this;},prompt:function(title,msg,fn,scope,multiline){this.show({title:title,msg:msg,buttons:this.OKCANCEL,fn:fn,minWidth:250,scope:scope,prompt:true,multiline:multiline});return this;},OK:{ok:true},YESNO:{yes:true,no:true},OKCANCEL:{ok:true,cancel:true},YESNOCANCEL:{yes:true,no:true,cancel:true},defaultTextHeight:75,maxWidth:600,minWidth:100,minProgressWidth:250,buttonText:{ok:"OK",cancel:"Cancel",yes:"Yes",no:"No"}};}();Ext.Msg=Ext.MessageBox;
diff --git a/lib/web/extjs/package/dragdrop/dragdrop.js b/lib/web/extjs/package/dragdrop/dragdrop.js
deleted file mode 100644
index 760e067f447f457dede0e85a0b9f07ba3288baa1..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/dragdrop/dragdrop.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-(function(){var Event=Ext.EventManager;var Dom=Ext.lib.Dom;Ext.dd.DragDrop=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.dd.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,b4StartDrag:function(x,y){},startDrag:function(x,y){},b4Drag:function(e){},onDrag:function(e){},onDragEnter:function(e,id){},b4DragOver:function(e){},onDragOver:function(e,id){},b4DragOut:function(e){},onDragOut:function(e,id){},b4DragDrop:function(e){},onDragDrop:function(e,id){},onInvalidDrop:function(e){},b4EndDrag:function(e){},endDrag:function(e){},b4MouseDown:function(e){},onMouseDown:function(e){},onMouseUp:function(e){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(constrainTo,pad,inContent){if(typeof pad=="number"){pad={left:pad,right:pad,top:pad,bottom:pad};}
-pad=pad||this.defaultPadding;var b=Ext.get(this.getEl()).getBox();var ce=Ext.get(constrainTo);var s=ce.getScroll();var c,cd=ce.dom;if(cd==document.body){c={x:s.left,y:s.top,width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}else{xy=ce.getXY();c={x:xy[0]+s.left,y:xy[1]+s.top,width:cd.clientWidth,height:cd.clientHeight};}
-var topSpace=b.y-c.y;var leftSpace=b.x-c.x;this.resetConstraints();this.setXConstraint(leftSpace-(pad.left||0),c.width-leftSpace-b.width-(pad.right||0));this.setYConstraint(topSpace-(pad.top||0),c.height-topSpace-b.height-(pad.bottom||0));},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id);}
-return this._domRef;},getDragEl:function(){return Ext.getDom(this.dragElId);},init:function(id,sGroup,config){this.initTarget(id,sGroup,config);Event.on(this.id,"mousedown",this.handleMouseDown,this);},initTarget:function(id,sGroup,config){this.config=config||{};this.DDM=Ext.dd.DDM;this.groups={};if(typeof id!=="string"){id=Ext.id(id);}
-this.id=id;this.addToGroup((sGroup)?sGroup:"default");this.handleElId=id;this.setDragElId(id);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();this.handleOnAvailable();},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(iTop,iRight,iBot,iLeft){if(!iRight&&0!==iRight){this.padding=[iTop,iTop,iTop,iTop];}else if(!iBot&&0!==iBot){this.padding=[iTop,iRight,iTop,iRight];}else{this.padding=[iTop,iRight,iBot,iLeft];}},setInitPosition:function(diffX,diffY){var el=this.getEl();if(!this.DDM.verifyEl(el)){return;}
-var dx=diffX||0;var dy=diffY||0;var p=Dom.getXY(el);this.initPageX=p[0]-dx;this.initPageY=p[1]-dy;this.lastPageX=p[0];this.lastPageY=p[1];this.setStartPosition(p);},setStartPosition:function(pos){var p=pos||Dom.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=p[0];this.startPageY=p[1];},addToGroup:function(sGroup){this.groups[sGroup]=true;this.DDM.regDragDrop(this,sGroup);},removeFromGroup:function(sGroup){if(this.groups[sGroup]){delete this.groups[sGroup];}
-this.DDM.removeDDFromGroup(this,sGroup);},setDragElId:function(id){this.dragElId=id;},setHandleElId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-this.handleElId=id;this.DDM.regHandle(this.id,id);},setOuterHandleElId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-Event.on(id,"mousedown",this.handleMouseDown,this);this.setHandleElId(id);this.hasOuterHandles=true;},unreg:function(){Event.un(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},destroy:function(){this.unreg();},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(e,oDD){if(this.primaryButtonOnly&&e.button!=0){return;}
-if(this.isLocked()){return;}
-this.DDM.refreshCache(this.groups);var pt=new Ext.lib.Point(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(pt,this)){}else{if(this.clickValidator(e)){this.setStartPosition();this.b4MouseDown(e);this.onMouseDown(e);this.DDM.handleMouseDown(e,this);this.DDM.stopEvent(e);}else{}}},clickValidator:function(e){var target=Ext.lib.Event.getTarget(e);return(this.isValidHandleChild(target)&&(this.id==this.handleElId||this.DDM.handleWasClicked(target,this.id)));},addInvalidHandleType:function(tagName){var type=tagName.toUpperCase();this.invalidHandleTypes[type]=type;},addInvalidHandleId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-this.invalidHandleIds[id]=id;},addInvalidHandleClass:function(cssClass){this.invalidHandleClasses.push(cssClass);},removeInvalidHandleType:function(tagName){var type=tagName.toUpperCase();delete this.invalidHandleTypes[type];},removeInvalidHandleId:function(id){if(typeof id!=="string"){id=Ext.id(id);}
-delete this.invalidHandleIds[id];},removeInvalidHandleClass:function(cssClass){for(var i=0,len=this.invalidHandleClasses.length;i<len;++i){if(this.invalidHandleClasses[i]==cssClass){delete this.invalidHandleClasses[i];}}},isValidHandleChild:function(node){var valid=true;var nodeName;try{nodeName=node.nodeName.toUpperCase();}catch(e){nodeName=node.nodeName;}
-valid=valid&&!this.invalidHandleTypes[nodeName];valid=valid&&!this.invalidHandleIds[node.id];for(var i=0,len=this.invalidHandleClasses.length;valid&&i<len;++i){valid=!Dom.hasClass(node,this.invalidHandleClasses[i]);}
-return valid;},setXTicks:function(iStartX,iTickSize){this.xTicks=[];this.xTickSize=iTickSize;var tickMap={};for(var i=this.initPageX;i>=this.minX;i=i-iTickSize){if(!tickMap[i]){this.xTicks[this.xTicks.length]=i;tickMap[i]=true;}}
-for(i=this.initPageX;i<=this.maxX;i=i+iTickSize){if(!tickMap[i]){this.xTicks[this.xTicks.length]=i;tickMap[i]=true;}}
-this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(iStartY,iTickSize){this.yTicks=[];this.yTickSize=iTickSize;var tickMap={};for(var i=this.initPageY;i>=this.minY;i=i-iTickSize){if(!tickMap[i]){this.yTicks[this.yTicks.length]=i;tickMap[i]=true;}}
-for(i=this.initPageY;i<=this.maxY;i=i+iTickSize){if(!tickMap[i]){this.yTicks[this.yTicks.length]=i;tickMap[i]=true;}}
-this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(iLeft,iRight,iTickSize){this.leftConstraint=iLeft;this.rightConstraint=iRight;this.minX=this.initPageX-iLeft;this.maxX=this.initPageX+iRight;if(iTickSize){this.setXTicks(this.initPageX,iTickSize);}
-this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(iUp,iDown,iTickSize){this.topConstraint=iUp;this.bottomConstraint=iDown;this.minY=this.initPageY-iUp;this.maxY=this.initPageY+iDown;if(iTickSize){this.setYTicks(this.initPageY,iTickSize);}
-this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var dx=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var dy=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(dx,dy);}else{this.setInitPosition();}
-if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}
-if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(val,tickArray){if(!tickArray){return val;}else if(tickArray[0]>=val){return tickArray[0];}else{for(var i=0,len=tickArray.length;i<len;++i){var next=i+1;if(tickArray[next]&&tickArray[next]>=val){var diff1=val-tickArray[i];var diff2=tickArray[next]-val;return(diff2>diff1)?tickArray[i]:tickArray[next];}}
-return tickArray[tickArray.length-1];}},toString:function(){return("DragDrop "+this.id);}};})();if(!Ext.dd.DragDropMgr){Ext.dd.DragDropMgr=function(){var Event=Ext.EventManager;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initalized:false,locked:false,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,mode:0,_execOnAll:function(sMethod,args){for(var i in this.ids){for(var j in this.ids[i]){var oDD=this.ids[i][j];if(!this.isTypeOfDD(oDD)){continue;}
-oDD[sMethod].apply(oDD,args);}}},_onLoad:function(){this.init();Event.on(document,"mouseup",this.handleMouseUp,this,true);Event.on(document,"mousemove",this.handleMouseMove,this,true);Event.on(window,"unload",this._onUnload,this,true);Event.on(window,"resize",this._onResize,this,true);},_onResize:function(e){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:350,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,regDragDrop:function(oDD,sGroup){if(!this.initialized){this.init();}
-if(!this.ids[sGroup]){this.ids[sGroup]={};}
-this.ids[sGroup][oDD.id]=oDD;},removeDDFromGroup:function(oDD,sGroup){if(!this.ids[sGroup]){this.ids[sGroup]={};}
-var obj=this.ids[sGroup];if(obj&&obj[oDD.id]){delete obj[oDD.id];}},_remove:function(oDD){for(var g in oDD.groups){if(g&&this.ids[g][oDD.id]){delete this.ids[g][oDD.id];}}
-delete this.handleIds[oDD.id];},regHandle:function(sDDId,sHandleId){if(!this.handleIds[sDDId]){this.handleIds[sDDId]={};}
-this.handleIds[sDDId][sHandleId]=sHandleId;},isDragDrop:function(id){return(this.getDDById(id))?true:false;},getRelated:function(p_oDD,bTargetsOnly){var oDDs=[];for(var i in p_oDD.groups){for(j in this.ids[i]){var dd=this.ids[i][j];if(!this.isTypeOfDD(dd)){continue;}
-if(!bTargetsOnly||dd.isTarget){oDDs[oDDs.length]=dd;}}}
-return oDDs;},isLegalTarget:function(oDD,oTargetDD){var targets=this.getRelated(oDD,true);for(var i=0,len=targets.length;i<len;++i){if(targets[i].id==oTargetDD.id){return true;}}
-return false;},isTypeOfDD:function(oDD){return(oDD&&oDD.__ygDragDrop);},isHandle:function(sDDId,sHandleId){return(this.handleIds[sDDId]&&this.handleIds[sDDId][sHandleId]);},getDDById:function(id){for(var i in this.ids){if(this.ids[i][id]){return this.ids[i][id];}}
-return null;},handleMouseDown:function(e,oDD){if(Ext.QuickTips){Ext.QuickTips.disable();}
-this.currentTarget=Ext.lib.Event.getTarget(e);this.dragCurrent=oDD;var el=oDD.getEl();this.startX=Ext.lib.Event.getPageX(e);this.startY=Ext.lib.Event.getPageY(e);this.deltaX=this.startX-el.offsetLeft;this.deltaY=this.startY-el.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var DDM=Ext.dd.DDM;DDM.startDrag(DDM.startX,DDM.startY);},this.clickTimeThresh);},startDrag:function(x,y){clearTimeout(this.clickTimeout);if(this.dragCurrent){this.dragCurrent.b4StartDrag(x,y);this.dragCurrent.startDrag(x,y);}
-this.dragThreshMet=true;},handleMouseUp:function(e){if(Ext.QuickTips){Ext.QuickTips.enable();}
-if(!this.dragCurrent){return;}
-clearTimeout(this.clickTimeout);if(this.dragThreshMet){this.fireEvents(e,true);}else{}
-this.stopDrag(e);this.stopEvent(e);},stopEvent:function(e){if(this.stopPropagation){e.stopPropagation();}
-if(this.preventDefault){e.preventDefault();}},stopDrag:function(e){if(this.dragCurrent){if(this.dragThreshMet){this.dragCurrent.b4EndDrag(e);this.dragCurrent.endDrag(e);}
-this.dragCurrent.onMouseUp(e);}
-this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(e){if(!this.dragCurrent){return true;}
-if(Ext.isIE&&(e.button!==0&&e.button!==1&&e.button!==2)){this.stopEvent(e);return this.handleMouseUp(e);}
-if(!this.dragThreshMet){var diffX=Math.abs(this.startX-Ext.lib.Event.getPageX(e));var diffY=Math.abs(this.startY-Ext.lib.Event.getPageY(e));if(diffX>this.clickPixelThresh||diffY>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}
-if(this.dragThreshMet){this.dragCurrent.b4Drag(e);this.dragCurrent.onDrag(e);if(!this.dragCurrent.moveOnly){this.fireEvents(e,false);}}
-this.stopEvent(e);return true;},fireEvents:function(e,isDrop){var dc=this.dragCurrent;if(!dc||dc.isLocked()){return;}
-var x=Ext.lib.Event.getPageX(e);var y=Ext.lib.Event.getPageY(e);var pt=new Ext.lib.Point(x,y);var oldOvers=[];var outEvts=[];var overEvts=[];var dropEvts=[];var enterEvts=[];for(var i in this.dragOvers){var ddo=this.dragOvers[i];if(!this.isTypeOfDD(ddo)){continue;}
-if(!this.isOverTarget(pt,ddo,this.mode)){outEvts.push(ddo);}
-oldOvers[i]=true;delete this.dragOvers[i];}
-for(var sGroup in dc.groups){if("string"!=typeof sGroup){continue;}
-for(i in this.ids[sGroup]){var oDD=this.ids[sGroup][i];if(!this.isTypeOfDD(oDD)){continue;}
-if(oDD.isTarget&&!oDD.isLocked()&&oDD!=dc){if(this.isOverTarget(pt,oDD,this.mode)){if(isDrop){dropEvts.push(oDD);}else{if(!oldOvers[oDD.id]){enterEvts.push(oDD);}else{overEvts.push(oDD);}
-this.dragOvers[oDD.id]=oDD;}}}}}
-if(this.mode){if(outEvts.length){dc.b4DragOut(e,outEvts);dc.onDragOut(e,outEvts);}
-if(enterEvts.length){dc.onDragEnter(e,enterEvts);}
-if(overEvts.length){dc.b4DragOver(e,overEvts);dc.onDragOver(e,overEvts);}
-if(dropEvts.length){dc.b4DragDrop(e,dropEvts);dc.onDragDrop(e,dropEvts);}}else{var len=0;for(i=0,len=outEvts.length;i<len;++i){dc.b4DragOut(e,outEvts[i].id);dc.onDragOut(e,outEvts[i].id);}
-for(i=0,len=enterEvts.length;i<len;++i){dc.onDragEnter(e,enterEvts[i].id);}
-for(i=0,len=overEvts.length;i<len;++i){dc.b4DragOver(e,overEvts[i].id);dc.onDragOver(e,overEvts[i].id);}
-for(i=0,len=dropEvts.length;i<len;++i){dc.b4DragDrop(e,dropEvts[i].id);dc.onDragDrop(e,dropEvts[i].id);}}
-if(isDrop&&!dropEvts.length){dc.onInvalidDrop(e);}},getBestMatch:function(dds){var winner=null;var len=dds.length;if(len==1){winner=dds[0];}else{for(var i=0;i<len;++i){var dd=dds[i];if(dd.cursorIsOver){winner=dd;break;}else{if(!winner||winner.overlap.getArea()<dd.overlap.getArea()){winner=dd;}}}}
-return winner;},refreshCache:function(groups){for(var sGroup in groups){if("string"!=typeof sGroup){continue;}
-for(var i in this.ids[sGroup]){var oDD=this.ids[sGroup][i];if(this.isTypeOfDD(oDD)){var loc=this.getLocation(oDD);if(loc){this.locationCache[oDD.id]=loc;}else{delete this.locationCache[oDD.id];}}}}},verifyEl:function(el){try{if(el){var parent=el.offsetParent;if(parent){return true;}}}catch(e){}
-return false;},getLocation:function(oDD){if(!this.isTypeOfDD(oDD)){return null;}
-var el=oDD.getEl(),pos,x1,x2,y1,y2,t,r,b,l;try{pos=Ext.lib.Dom.getXY(el);}catch(e){}
-if(!pos){return null;}
-x1=pos[0];x2=x1+el.offsetWidth;y1=pos[1];y2=y1+el.offsetHeight;t=y1-oDD.padding[0];r=x2+oDD.padding[1];b=y2+oDD.padding[2];l=x1-oDD.padding[3];return new Ext.lib.Region(t,r,b,l);},isOverTarget:function(pt,oTarget,intersect){var loc=this.locationCache[oTarget.id];if(!loc||!this.useCache){loc=this.getLocation(oTarget);this.locationCache[oTarget.id]=loc;}
-if(!loc){return false;}
-oTarget.cursorIsOver=loc.contains(pt);var dc=this.dragCurrent;if(!dc||!dc.getTargetCoord||(!intersect&&!dc.constrainX&&!dc.constrainY)){return oTarget.cursorIsOver;}
-oTarget.overlap=null;var pos=dc.getTargetCoord(pt.x,pt.y);var el=dc.getDragEl();var curRegion=new Ext.lib.Region(pos.y,pos.x+el.offsetWidth,pos.y+el.offsetHeight,pos.x);var overlap=curRegion.intersect(loc);if(overlap){oTarget.overlap=overlap;return(intersect)?true:oTarget.cursorIsOver;}else{return false;}},_onUnload:function(e,me){Ext.dd.DragDropMgr.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}
-this._execOnAll("unreg",[]);for(i in this.elementCache){delete this.elementCache[i];}
-this.elementCache={};this.ids={};},elementCache:{},getElWrapper:function(id){var oWrapper=this.elementCache[id];if(!oWrapper||!oWrapper.el){oWrapper=this.elementCache[id]=new this.ElementWrapper(Ext.getDom(id));}
-return oWrapper;},getElement:function(id){return Ext.getDom(id);},getCss:function(id){var el=Ext.getDom(id);return(el)?el.style:null;},ElementWrapper:function(el){this.el=el||null;this.id=this.el&&el.id;this.css=this.el&&el.style;},getPosX:function(el){return Ext.lib.Dom.getX(el);},getPosY:function(el){return Ext.lib.Dom.getY(el);},swapNode:function(n1,n2){if(n1.swapNode){n1.swapNode(n2);}else{var p=n2.parentNode;var s=n2.nextSibling;if(s==n1){p.insertBefore(n1,n2);}else if(n2==n1.nextSibling){p.insertBefore(n2,n1);}else{n1.parentNode.replaceChild(n2,n1);p.insertBefore(n1,s);}}},getScroll:function(){var t,l,dde=document.documentElement,db=document.body;if(dde&&(dde.scrollTop||dde.scrollLeft)){t=dde.scrollTop;l=dde.scrollLeft;}else if(db){t=db.scrollTop;l=db.scrollLeft;}else{}
-return{top:t,left:l};},getStyle:function(el,styleProp){return Ext.fly(el).getStyle(styleProp);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(moveEl,targetEl){var aCoord=Ext.lib.Dom.getXY(targetEl);Ext.lib.Dom.setXY(moveEl,aCoord);},numericSort:function(a,b){return(a-b);},_timeoutCount:0,_addListeners:function(){var DDM=Ext.dd.DDM;if(Ext.lib.Event&&document){DDM._onLoad();}else{if(DDM._timeoutCount>2000){}else{setTimeout(DDM._addListeners,10);if(document&&document.body){DDM._timeoutCount+=1;}}}},handleWasClicked:function(node,id){if(this.isHandle(id,node.id)){return true;}else{var p=node.parentNode;while(p){if(this.isHandle(id,p.id)){return true;}else{p=p.parentNode;}}}
-return false;}};}();Ext.dd.DDM=Ext.dd.DragDropMgr;Ext.dd.DDM._addListeners();}
-Ext.dd.DD=function(id,sGroup,config){if(id){this.init(id,sGroup,config);}};Ext.extend(Ext.dd.DD,Ext.dd.DragDrop,{scroll:true,autoOffset:function(iPageX,iPageY){var x=iPageX-this.startPageX;var y=iPageY-this.startPageY;this.setDelta(x,y);},setDelta:function(iDeltaX,iDeltaY){this.deltaX=iDeltaX;this.deltaY=iDeltaY;},setDragElPos:function(iPageX,iPageY){var el=this.getDragEl();this.alignElWithMouse(el,iPageX,iPageY);},alignElWithMouse:function(el,iPageX,iPageY){var oCoord=this.getTargetCoord(iPageX,iPageY);var fly=el.dom?el:Ext.fly(el);if(!this.deltaSetXY){var aCoord=[oCoord.x,oCoord.y];fly.setXY(aCoord);var newLeft=fly.getLeft(true);var newTop=fly.getTop(true);this.deltaSetXY=[newLeft-oCoord.x,newTop-oCoord.y];}else{fly.setLeftTop(oCoord.x+this.deltaSetXY[0],oCoord.y+this.deltaSetXY[1]);}
-this.cachePosition(oCoord.x,oCoord.y);this.autoScroll(oCoord.x,oCoord.y,el.offsetHeight,el.offsetWidth);return oCoord;},cachePosition:function(iPageX,iPageY){if(iPageX){this.lastPageX=iPageX;this.lastPageY=iPageY;}else{var aCoord=Ext.lib.Dom.getXY(this.getEl());this.lastPageX=aCoord[0];this.lastPageY=aCoord[1];}},autoScroll:function(x,y,h,w){if(this.scroll){var clientH=Ext.lib.Dom.getViewWidth();var clientW=Ext.lib.Dom.getViewHeight();var st=this.DDM.getScrollTop();var sl=this.DDM.getScrollLeft();var bot=h+y;var right=w+x;var toBot=(clientH+st-y-this.deltaY);var toRight=(clientW+sl-x-this.deltaX);var thresh=40;var scrAmt=(document.all)?80:30;if(bot>clientH&&toBot<thresh){window.scrollTo(sl,st+scrAmt);}
-if(y<st&&st>0&&y-st<thresh){window.scrollTo(sl,st-scrAmt);}
-if(right>clientW&&toRight<thresh){window.scrollTo(sl+scrAmt,st);}
-if(x<sl&&sl>0&&x-sl<thresh){window.scrollTo(sl-scrAmt,st);}}},getTargetCoord:function(iPageX,iPageY){var x=iPageX-this.deltaX;var y=iPageY-this.deltaY;if(this.constrainX){if(x<this.minX){x=this.minX;}
-if(x>this.maxX){x=this.maxX;}}
-if(this.constrainY){if(y<this.minY){y=this.minY;}
-if(y>this.maxY){y=this.maxY;}}
-x=this.getTick(x,this.xTicks);y=this.getTick(y,this.yTicks);return{x:x,y:y};},applyConfig:function(){Ext.dd.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(e){this.autoOffset(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));},b4Drag:function(e){this.setDragElPos(Ext.lib.Event.getPageX(e),Ext.lib.Event.getPageY(e));},toString:function(){return("DD "+this.id);}});Ext.dd.DDProxy=function(id,sGroup,config){if(id){this.init(id,sGroup,config);this.initFrame();}};Ext.dd.DDProxy.dragElId="ygddfdiv";Ext.extend(Ext.dd.DDProxy,Ext.dd.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var self=this;var body=document.body;if(!body||!body.firstChild){setTimeout(function(){self.createFrame();},50);return;}
-var div=this.getDragEl();if(!div){div=document.createElement("div");div.id=this.dragElId;var s=div.style;s.position="absolute";s.visibility="hidden";s.cursor="move";s.border="2px solid #aaa";s.zIndex=999;body.insertBefore(div,body.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){Ext.dd.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||Ext.dd.DDProxy.dragElId);},showFrame:function(iPageX,iPageY){var el=this.getEl();var dragEl=this.getDragEl();var s=dragEl.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(s.width,10)/2),Math.round(parseInt(s.height,10)/2));}
-this.setDragElPos(iPageX,iPageY);Ext.fly(dragEl).show();},_resizeProxy:function(){if(this.resizeFrame){var el=this.getEl();Ext.fly(this.getDragEl()).setSize(el.offsetWidth,el.offsetHeight);}},b4MouseDown:function(e){var x=Ext.lib.Event.getPageX(e);var y=Ext.lib.Event.getPageY(e);this.autoOffset(x,y);this.setDragElPos(x,y);},b4StartDrag:function(x,y){this.showFrame(x,y);},b4EndDrag:function(e){Ext.fly(this.getDragEl()).hide();},endDrag:function(e){var lel=this.getEl();var del=this.getDragEl();del.style.visibility="";this.beforeMove();lel.style.visibility="hidden";Ext.dd.DDM.moveToEl(lel,del);del.style.visibility="hidden";lel.style.visibility="";this.afterDrag();},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id);}});Ext.dd.DDTarget=function(id,sGroup,config){if(id){this.initTarget(id,sGroup,config);}};Ext.extend(Ext.dd.DDTarget,Ext.dd.DragDrop,{toString:function(){return("DDTarget "+this.id);}});
-
-Ext.dd.ScrollManager=function(){var ddm=Ext.dd.DragDropMgr;var els={};var dragEl=null;var proc={};var onStop=function(e){dragEl=null;clearProc();};var triggerRefresh=function(){if(ddm.dragCurrent){ddm.refreshCache(ddm.dragCurrent.groups);}};var doScroll=function(){if(ddm.dragCurrent){var dds=Ext.dd.ScrollManager;if(!dds.animate){if(proc.el.scroll(proc.dir,dds.increment)){triggerRefresh();}}else{proc.el.scroll(proc.dir,dds.increment,true,dds.animDuration,triggerRefresh);}}};var clearProc=function(){if(proc.id){clearInterval(proc.id);}
-proc.id=0;proc.el=null;proc.dir="";};var startProc=function(el,dir){clearProc();proc.el=el;proc.dir=dir;proc.id=setInterval(doScroll,Ext.dd.ScrollManager.frequency);};var onFire=function(e,isDrop){if(isDrop||!ddm.dragCurrent){return;}
-var dds=Ext.dd.ScrollManager;if(!dragEl||dragEl!=ddm.dragCurrent){dragEl=ddm.dragCurrent;dds.refreshCache();}
-var xy=Ext.lib.Event.getXY(e);var pt=new Ext.lib.Point(xy[0],xy[1]);for(var id in els){var el=els[id],r=el._region;if(r&&r.contains(pt)&&el.isScrollable()){if(r.bottom-pt.y<=dds.thresh){if(proc.el!=el){startProc(el,"down");}
-return;}else if(r.right-pt.x<=dds.thresh){if(proc.el!=el){startProc(el,"left");}
-return;}else if(pt.y-r.top<=dds.thresh){if(proc.el!=el){startProc(el,"up");}
-return;}else if(pt.x-r.left<=dds.thresh){if(proc.el!=el){startProc(el,"right");}
-return;}}}
-clearProc();};ddm.fireEvents=ddm.fireEvents.createSequence(onFire,ddm);ddm.stopDrag=ddm.stopDrag.createSequence(onStop,ddm);return{register:function(el){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.register(el[i]);}}else{el=Ext.get(el);els[el.id]=el;}},unregister:function(el){if(el instanceof Array){for(var i=0,len=el.length;i<len;i++){this.unregister(el[i]);}}else{el=Ext.get(el);delete els[el.id];}},thresh:25,increment:100,frequency:500,animate:true,animDuration:.4,refreshCache:function(){for(var id in els){if(typeof els[id]=='object'){els[id]._region=els[id].getRegion();}}}};}();
-
-Ext.dd.Registry=function(){var elements={};var handles={};var autoIdSeed=0;var getId=function(el,autogen){if(typeof el=="string"){return el;}
-var id=el.id;if(!id&&autogen!==false){id="extdd-"+(++autoIdSeed);el.id=id;}
-return id;};return{register:function(el,data){data=data||{};if(typeof el=="string"){el=document.getElementById(el);}
-data.ddel=el;elements[getId(el)]=data;if(data.isHandle!==false){handles[data.ddel.id]=data;}
-if(data.handles){var hs=data.handles;for(var i=0,len=hs.length;i<len;i++){handles[getId(hs[i])]=data;}}},unregister:function(el){var id=getId(el,false);var data=elements[id];if(data){delete elements[id];if(data.handles){var hs=data.handles;for(var i=0,len=hs.length;i<len;i++){delete handles[getId(hs[i],false)];}}}},getHandle:function(id){if(typeof id!="string"){id=id.id;}
-return handles[id];},getHandleFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);return t?handles[t.id]:null;},getTarget:function(id){if(typeof id!="string"){id=id.id;}
-return elements[id];},getTargetFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);return t?elements[t.id]||handles[t.id]:null;}};}();
-
-Ext.dd.StatusProxy=function(config){Ext.apply(this,config);this.id=this.id||Ext.id();this.el=new Ext.Layer({dh:{id:this.id,tag:"div",cls:"x-dd-drag-proxy "+this.dropNotAllowed,children:[{tag:"div",cls:"x-dd-drop-icon"},{tag:"div",cls:"x-dd-drag-ghost"}]},shadow:!config||config.shadow!==false});this.ghost=Ext.get(this.el.dom.childNodes[1]);this.dropStatus=this.dropNotAllowed;};Ext.dd.StatusProxy.prototype={dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",setStatus:function(cssClass){cssClass=cssClass||this.dropNotAllowed;if(this.dropStatus!=cssClass){this.el.replaceClass(this.dropStatus,cssClass);this.dropStatus=cssClass;}},reset:function(clearGhost){this.el.dom.className="x-dd-drag-proxy "+this.dropNotAllowed;this.dropStatus=this.dropNotAllowed;if(clearGhost){this.ghost.update("");}},update:function(html){if(typeof html=="string"){this.ghost.update(html);}else{this.ghost.update("");html.style.margin="0";this.ghost.dom.appendChild(html);}},getEl:function(){return this.el;},getGhost:function(){return this.ghost;},hide:function(clear){this.el.hide();if(clear){this.reset(true);}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop();}},show:function(){this.el.show();},sync:function(){this.el.sync();},repair:function(xy,callback,scope){this.callback=callback;this.scope=scope;if(xy&&this.animRepair!==false){this.el.addClass("x-dd-drag-repair");this.el.hideUnders(true);this.anim=this.el.shift({duration:this.repairDuration||.5,easing:'easeOut',xy:xy,stopFx:true,callback:this.afterRepair,scope:this});}else{this.afterRepair();}},afterRepair:function(){this.hide(true);if(typeof this.callback=="function"){this.callback.call(this.scope||this);}
-this.callback=null;this.scope=null;}};
-
-Ext.dd.DragSource=function(el,config){this.el=Ext.get(el);this.dragData={};Ext.apply(this,config);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy();}
-Ext.dd.DragSource.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{dragElId:this.proxy.id,resizeFrame:false,isTarget:false,scroll:this.scroll===true});this.dragging=false;};Ext.extend(Ext.dd.DragSource,Ext.dd.DDProxy,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",getDragData:function(e){return this.dragData;},onDragEnter:function(e,id){var target=Ext.dd.DragDropMgr.getDDById(id);this.cachedTarget=target;if(this.beforeDragEnter(target,e,id)!==false){if(target.isNotifyTarget){var status=target.notifyEnter(this,e,this.dragData);this.proxy.setStatus(status);}else{this.proxy.setStatus(this.dropAllowed);}
-if(this.afterDragEnter){this.afterDragEnter(target,e,id);}}},beforeDragEnter:function(target,e,id){return true;},alignElWithMouse:function(){Ext.dd.DragSource.superclass.alignElWithMouse.apply(this,arguments);this.proxy.sync();},onDragOver:function(e,id){var target=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragOver(target,e,id)!==false){if(target.isNotifyTarget){var status=target.notifyOver(this,e,this.dragData);this.proxy.setStatus(status);}
-if(this.afterDragOver){this.afterDragOver(target,e,id);}}},beforeDragOver:function(target,e,id){return true;},onDragOut:function(e,id){var target=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragOut(target,e,id)!==false){if(target.isNotifyTarget){target.notifyOut(this,e,this.dragData);}
-this.proxy.reset();if(this.afterDragOut){this.afterDragOut(target,e,id);}}
-this.cachedTarget=null;},beforeDragOut:function(target,e,id){return true;},onDragDrop:function(e,id){var target=this.cachedTarget||Ext.dd.DragDropMgr.getDDById(id);if(this.beforeDragDrop(target,e,id)!==false){if(target.isNotifyTarget){if(target.notifyDrop(this,e,this.dragData)){this.onValidDrop(target,e,id);}else{this.onInvalidDrop(target,e,id);}}else{this.onValidDrop(target,e,id);}
-if(this.afterDragDrop){this.afterDragDrop(target,e,id);}}},beforeDragDrop:function(target,e,id){return true;},onValidDrop:function(target,e,id){this.hideProxy();if(this.afterValidDrop){this.afterValidDrop(target,e,id);}},getRepairXY:function(e,data){return this.el.getXY();},onInvalidDrop:function(target,e,id){this.beforeInvalidDrop(target,e,id);if(this.cachedTarget){if(this.cachedTarget.isNotifyTarget){this.cachedTarget.notifyOut(this,e,this.dragData);}
-this.cacheTarget=null;}
-this.proxy.repair(this.getRepairXY(e,this.dragData),this.afterRepair,this);if(this.afterInvalidDrop){this.afterInvalidDrop(e,id);}},afterRepair:function(){if(Ext.enableFx){this.el.highlight(this.hlColor||"c3daf9");}
-this.dragging=false;},beforeInvalidDrop:function(target,e,id){return true;},handleMouseDown:function(e){if(this.dragging){return;}
-var data=this.getDragData(e);if(data&&this.onBeforeDrag(data,e)!==false){this.dragData=data;this.proxy.stop();Ext.dd.DragSource.superclass.handleMouseDown.apply(this,arguments);}},onBeforeDrag:function(data,e){return true;},onStartDrag:Ext.emptyFn,startDrag:function(x,y){this.proxy.reset();this.dragging=true;this.proxy.update("");this.onInitDrag(x,y);this.proxy.show();},onInitDrag:function(x,y){var clone=this.el.dom.cloneNode(true);clone.id=Ext.id();this.proxy.update(clone);this.onStartDrag(x,y);return true;},getProxy:function(){return this.proxy;},hideProxy:function(){this.proxy.hide();this.proxy.reset(true);this.dragging=false;},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups);},b4EndDrag:function(e){},endDrag:function(e){this.onEndDrag(this.dragData,e);},onEndDrag:function(data,e){},autoOffset:function(x,y){this.setDelta(-12,-20);}});
-
-Ext.dd.DropTarget=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}
-Ext.dd.DropTarget.superclass.constructor.call(this,this.el.dom,this.ddGroup||this.group,{isTarget:true});};Ext.extend(Ext.dd.DropTarget,Ext.dd.DDTarget,{dropAllowed:"x-dd-drop-ok",dropNotAllowed:"x-dd-drop-nodrop",isTarget:true,isNotifyTarget:true,notifyEnter:function(dd,e,data){if(this.overClass){this.el.addClass(this.overClass);}
-return this.dropAllowed;},notifyOver:function(dd,e,data){return this.dropAllowed;},notifyOut:function(dd,e,data){if(this.overClass){this.el.removeClass(this.overClass);}},notifyDrop:function(dd,e,data){return false;}});
-
-Ext.dd.DragZone=function(el,config){Ext.dd.DragZone.superclass.constructor.call(this,el,config);if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}};Ext.extend(Ext.dd.DragZone,Ext.dd.DragSource,{getDragData:function(e){return Ext.dd.Registry.getHandleFromEvent(e);},onInitDrag:function(x,y){this.proxy.update(this.dragData.ddel.cloneNode(true));this.onStartDrag(x,y);return true;},afterRepair:function(){if(Ext.enableFx){Ext.Element.fly(this.dragData.ddel).highlight(this.hlColor||"c3daf9");}
-this.dragging=false;},getRepairXY:function(e){return Ext.Element.fly(this.dragData.ddel).getXY();}});
-
-Ext.dd.DropZone=function(el,config){Ext.dd.DropZone.superclass.constructor.call(this,el,config);};Ext.extend(Ext.dd.DropZone,Ext.dd.DropTarget,{getTargetFromEvent:function(e){return Ext.dd.Registry.getTargetFromEvent(e);},onNodeEnter:function(n,dd,e,data){},onNodeOver:function(n,dd,e,data){return this.dropAllowed;},onNodeOut:function(n,dd,e,data){},onNodeDrop:function(n,dd,e,data){return false;},onContainerOver:function(dd,e,data){return this.dropNotAllowed;},onContainerDrop:function(dd,e,data){return false;},notifyEnter:function(dd,e,data){return this.dropNotAllowed;},notifyOver:function(dd,e,data){var n=this.getTargetFromEvent(e);if(!n){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);this.lastOverNode=null;}
-return this.onContainerOver(dd,e,data);}
-if(this.lastOverNode!=n){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);}
-this.onNodeEnter(n,dd,e,data);this.lastOverNode=n;}
-return this.onNodeOver(n,dd,e,data);},notifyOut:function(dd,e,data){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);this.lastOverNode=null;}},notifyDrop:function(dd,e,data){if(this.lastOverNode){this.onNodeOut(this.lastOverNode,dd,e,data);this.lastOverNode=null;}
-var n=this.getTargetFromEvent(e);return n?this.onNodeDrop(n,dd,e,data):this.onContainerDrop(dd,e,data);},triggerCacheRefresh:function(){Ext.dd.DDM.refreshCache(this.groups);}});
diff --git a/lib/web/extjs/package/form/form-debug.js b/lib/web/extjs/package/form/form-debug.js
deleted file mode 100644
index dbe3f22435419e80bfff8507872d2301a46f14d8..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/form/form-debug.js
+++ /dev/null
@@ -1,2996 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://www.extjs.com/license
- */
-
-
-Ext.form.Field = function(config){
-    Ext.form.Field.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.Field, Ext.BoxComponent,  {
-
-    invalidClass : "x-form-invalid",
-
-    invalidText : "The value in this field is invalid",
-
-    focusClass : "x-form-focus",
-
-    validationEvent : "keyup",
-
-    validateOnBlur : true,
-
-    validationDelay : 250,
-
-    defaultAutoCreate : {tag: "input", type: "text", size: "20", autocomplete: "off"},
-
-    fieldClass: "x-form-field",
-
-    msgTarget: 'qtip',
-
-    msgFx : 'normal',
-
-
-
-
-    inputType : undefined,
-
-    // private
-    isFormField : true,
-
-    // private
-    hasFocus : false,
-
-
-    value : undefined,
-
-
-    initComponent : function(){
-        Ext.form.Field.superclass.initComponent.call(this);
-        this.addEvents({
-
-            focus : true,
-
-            blur : true,
-
-            specialkey : true,
-
-            change : true,
-
-            invalid : true,
-
-            valid : true
-        });
-    },
-
-
-    getName: function(){
-         return this.rendered && this.el.dom.name ? this.el.dom.name : (this.hiddenName || '');
-    },
-
-
-    applyTo : function(target){
-        this.allowDomMove = false;
-        this.el = Ext.get(target);
-        this.render(this.el.dom.parentNode);
-        return this;
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.Field.superclass.onRender.call(this, ct, position);
-        if(!this.el){
-            var cfg = this.getAutoCreate();
-            if(!cfg.name){
-                cfg.name = this.name || this.id;
-            }
-            if(this.inputType){
-                cfg.type = this.inputType;
-            }
-            if(this.tabIndex !== undefined){
-                cfg.tabIndex = this.tabIndex;
-            }
-            this.el = ct.createChild(cfg, position);
-        }
-        var type = this.el.dom.type;
-        if(type){
-            if(type == 'password'){
-                type = 'text';
-            }
-            this.el.addClass('x-form-'+type);
-        }
-        if(this.readOnly){
-            this.el.dom.readOnly = true;
-        }
-
-        this.el.addClass([this.fieldClass, this.cls]);
-        this.initValue();
-    },
-
-    // private
-    initValue : function(){
-        if(this.value !== undefined){
-            this.setValue(this.value);
-        }else if(this.el.dom.value.length > 0){
-            this.setValue(this.el.dom.value);
-        }
-    },
-
-
-    isDirty : function() {
-        if(this.disabled) {
-            return false;
-        }
-        return String(this.getValue()) !== String(this.originalValue);
-    },
-
-    // private
-    afterRender : function(){
-        Ext.form.Field.superclass.afterRender.call(this);
-        this.initEvents();
-    },
-
-    // private
-    fireKey : function(e){
-        if(e.isNavKeyPress()){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-
-    reset : function(){
-        this.setValue(this.originalValue);
-        this.clearInvalid();
-    },
-
-    // private
-    initEvents : function(){
-        this.el.on(Ext.isIE ? "keydown" : "keypress", this.fireKey,  this);
-        this.el.on("focus", this.onFocus,  this);
-        this.el.on("blur", this.onBlur,  this);
-
-        // reference to original value for reset
-        this.originalValue = this.getValue();
-    },
-
-    // private
-    onFocus : function(){
-        if(!Ext.isOpera){ // don't touch in Opera
-            this.el.addClass(this.focusClass);
-        }
-        this.hasFocus = true;
-        this.startValue = this.getValue();
-        this.fireEvent("focus", this);
-    },
-
-    // private
-    onBlur : function(){
-        this.el.removeClass(this.focusClass);
-        this.hasFocus = false;
-        if(this.validationEvent !== false && this.validateOnBlur && this.validationEvent != "blur"){
-            this.validate();
-        }
-        var v = this.getValue();
-        if(v != this.startValue){
-            this.fireEvent('change', this, v, this.startValue);
-        }
-        this.fireEvent("blur", this);
-    },
-
-
-    isValid : function(preventMark){
-        if(this.disabled){
-            return true;
-        }
-        var restore = this.preventMark;
-        this.preventMark = preventMark === true;
-        var v = this.validateValue(this.getRawValue());
-        this.preventMark = restore;
-        return v;
-    },
-
-
-    validate : function(){
-        if(this.disabled || this.validateValue(this.getRawValue())){
-            this.clearInvalid();
-            return true;
-        }
-        return false;
-    },
-
-    // private
-    // Subclasses should provide the validation implementation by overriding this
-    validateValue : function(value){
-        return true;
-    },
-
-
-    markInvalid : function(msg){
-        if(!this.rendered || this.preventMark){ // not rendered
-            return;
-        }
-        this.el.addClass(this.invalidClass);
-        msg = msg || this.invalidText;
-        switch(this.msgTarget){
-            case 'qtip':
-                this.el.dom.qtip = msg;
-                this.el.dom.qclass = 'x-form-invalid-tip';
-                break;
-            case 'title':
-                this.el.dom.title = msg;
-                break;
-            case 'under':
-                if(!this.errorEl){
-                    var elp = this.el.findParent('.x-form-element', 5, true);
-                    this.errorEl = elp.createChild({cls:'x-form-invalid-msg'});
-                    this.errorEl.setWidth(elp.getWidth(true)-20);
-                }
-                this.errorEl.update(msg);
-                Ext.form.Field.msgFx[this.msgFx].show(this.errorEl, this);
-                break;
-            case 'side':
-                if(!this.errorIcon){
-                    var elp = this.el.findParent('.x-form-element', 5, true);
-                    this.errorIcon = elp.createChild({cls:'x-form-invalid-icon'});
-                }
-                this.alignErrorIcon();
-                this.errorIcon.dom.qtip = msg;
-                this.errorIcon.dom.qclass = 'x-form-invalid-tip';
-                this.errorIcon.show();
-                break;
-            default:
-                var t = Ext.getDom(this.msgTarget);
-                t.innerHTML = msg;
-                t.style.display = this.msgDisplay;
-                break;
-        }
-        this.fireEvent('invalid', this, msg);
-    },
-
-    // private
-    alignErrorIcon : function(){
-        this.errorIcon.alignTo(this.el, 'tl-tr', [2, 0]);
-    },
-
-
-    clearInvalid : function(){
-        if(!this.rendered || this.preventMark){ // not rendered
-            return;
-        }
-        this.el.removeClass(this.invalidClass);
-        switch(this.msgTarget){
-            case 'qtip':
-                this.el.dom.qtip = '';
-                break;
-            case 'title':
-                this.el.dom.title = '';
-                break;
-            case 'under':
-                if(this.errorEl){
-                    Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl, this);
-                }
-                break;
-            case 'side':
-                if(this.errorIcon){
-                    this.errorIcon.dom.qtip = '';
-                    this.errorIcon.hide();
-                }
-                break;
-            default:
-                var t = Ext.getDom(this.msgTarget);
-                t.innerHTML = '';
-                t.style.display = 'none';
-                break;
-        }
-        this.fireEvent('valid', this);
-    },
-
-
-    getRawValue : function(){
-        return this.el.getValue();
-    },
-
-
-    getValue : function(){
-        var v = this.el.getValue();
-        if(v == this.emptyText || v === undefined){
-            v = '';
-        }
-        return v;
-    },
-
-
-    setRawValue : function(v){
-        return this.el.dom.value = (v === null || v === undefined ? '' : v);
-    },
-
-
-    setValue : function(v){
-        this.value = v;
-        if(this.rendered){
-            this.el.dom.value = (v === null || v === undefined ? '' : v);
-            this.validate();
-        }
-    },
-
-    adjustSize : function(w, h){
-        var s = Ext.form.Field.superclass.adjustSize.call(this, w, h);
-        s.width = this.adjustWidth(this.el.dom.tagName, s.width);
-        return s;
-    },
-
-    adjustWidth : function(tag, w){
-        tag = tag.toLowerCase();
-        if(typeof w == 'number' && Ext.isStrict && !Ext.isSafari){
-            if(Ext.isIE && (tag == 'input' || tag == 'textarea')){
-                if(tag == 'input'){
-                    return w + 2;
-                }
-                if(tag = 'textarea'){
-                    return w-2;
-                }
-            }else if(Ext.isGecko && tag == 'textarea'){
-                return w-6;
-            }else if(Ext.isOpera){
-                if(tag == 'input'){
-                    return w + 2;
-                }
-                if(tag = 'textarea'){
-                    return w-2;
-                }
-            }
-        }
-        return w;
-    }
-});
-
-
-// anything other than normal should be considered experimental
-Ext.form.Field.msgFx = {
-    normal : {
-        show: function(msgEl, f){
-            msgEl.setDisplayed('block');
-        },
-
-        hide : function(msgEl, f){
-            msgEl.setDisplayed(false).update('');
-        }
-    },
-
-    slide : {
-        show: function(msgEl, f){
-            msgEl.slideIn('t', {stopFx:true});
-        },
-
-        hide : function(msgEl, f){
-            msgEl.slideOut('t', {stopFx:true,useDisplay:true});
-        }
-    },
-
-    slideRight : {
-        show: function(msgEl, f){
-            msgEl.fixDisplay();
-            msgEl.alignTo(f.el, 'tl-tr');
-            msgEl.slideIn('l', {stopFx:true});
-        },
-
-        hide : function(msgEl, f){
-            msgEl.slideOut('l', {stopFx:true,useDisplay:true});
-        }
-    }
-};
-
-
-Ext.form.TextField = function(config){
-    Ext.form.TextField.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        autosize : true
-    });
-};
-
-Ext.extend(Ext.form.TextField, Ext.form.Field,  {
-
-    grow : false,
-
-    growMin : 30,
-
-    growMax : 800,
-
-    vtype : null,
-
-    maskRe : null,
-
-    disableKeyFilter : false,
-
-    allowBlank : true,
-
-    minLength : 0,
-
-    maxLength : Number.MAX_VALUE,
-
-    minLengthText : "The minimum length for this field is {0}",
-
-    maxLengthText : "The maximum length for this field is {0}",
-
-    selectOnFocus : false,
-
-    blankText : "This field is required",
-
-    validator : null,
-
-    regex : null,
-
-    regexText : "",
-
-    emptyText : null,
-
-    emptyClass : 'x-form-empty-field',
-
-    // private
-    initEvents : function(){
-        Ext.form.TextField.superclass.initEvents.call(this);
-        if(this.validationEvent == 'keyup'){
-            this.validationTask = new Ext.util.DelayedTask(this.validate, this);
-            this.el.on('keyup', this.filterValidation, this);
-        }
-        else if(this.validationEvent !== false){
-            this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay});
-        }
-        if(this.selectOnFocus || this.emptyText){
-            this.on("focus", this.preFocus, this);
-            if(this.emptyText){
-                this.on('blur', this.postBlur, this);
-                this.applyEmptyText();
-            }
-        }
-        if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){
-            this.el.on("keypress", this.filterKeys, this);
-        }
-        if(this.grow){
-            this.el.on("keyup", this.onKeyUp,  this, {buffer:50});
-            this.el.on("click", this.autoSize,  this);
-        }
-    },
-
-    filterValidation : function(e){
-        if(!e.isNavKeyPress()){
-            this.validationTask.delay(this.validationDelay);
-        }
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(!e.isNavKeyPress()){
-            this.autoSize();
-        }
-    },
-
-
-    reset : function(){
-        Ext.form.TextField.superclass.reset.call(this);
-        this.applyEmptyText();
-    },
-
-    applyEmptyText : function(){
-        if(this.rendered && this.emptyText && this.getRawValue().length < 1){
-            this.setRawValue(this.emptyText);
-            this.el.addClass(this.emptyClass);
-        }
-    },
-
-    // private
-    preFocus : function(){
-        if(this.emptyText){
-            if(this.getRawValue() == this.emptyText){
-                this.setRawValue('');
-            }
-            this.el.removeClass(this.emptyClass);
-        }
-        if(this.selectOnFocus){
-            this.el.dom.select();
-        }
-    },
-
-    // private
-    postBlur : function(){
-        this.applyEmptyText();
-    },
-
-    // private
-    filterKeys : function(e){
-        var k = e.getKey();
-        if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
-            return;
-        }
-        if(Ext.isIE && (k == e.BACKSPACE || k == e.DELETE || e.isNavKeyPress() || k == e.HOME || k == e.END)){
-            return;
-        }
-        var c = e.getCharCode();
-        if(!this.maskRe.test(String.fromCharCode(c) || '')){
-            e.stopEvent();
-        }
-    },
-
-    setValue : function(v){
-        if(this.emptyText && v !== undefined && v !== null && v !== ''){
-            this.el.removeClass(this.emptyClass);
-        }
-        Ext.form.TextField.superclass.setValue.apply(this, arguments);
-    },
-
-
-    validateValue : function(value){
-        if(value.length < 1 || value === this.emptyText){ // if it's blank
-             if(this.allowBlank){
-                 this.clearInvalid();
-                 return true;
-             }else{
-                 this.markInvalid(this.blankText);
-                 return false;
-             }
-        }
-        if(value.length < this.minLength){
-            this.markInvalid(String.format(this.minLengthText, this.minLength));
-            return false;
-        }
-        if(value.length > this.maxLength){
-            this.markInvalid(String.format(this.maxLengthText, this.maxLength));
-            return false;
-        }
-        if(this.vtype){
-            var vt = Ext.form.VTypes;
-            if(!vt[this.vtype](value, this)){
-                this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
-                return false;
-            }
-        }
-        if(typeof this.validator == "function"){
-            var msg = this.validator(value);
-            if(msg !== true){
-                this.markInvalid(msg);
-                return false;
-            }
-        }
-        if(this.regex && !this.regex.test(value)){
-            this.markInvalid(this.regexText);
-            return false;
-        }
-        return true;
-    },
-
-
-    selectText : function(start, end){
-        var v = this.getRawValue();
-        if(v.length > 0){
-            start = start === undefined ? 0 : start;
-            end = end === undefined ? v.length : end;
-            var d = this.el.dom;
-            if(d.setSelectionRange){
-                d.setSelectionRange(start, end);
-            }else if(d.createTextRange){
-                var range = d.createTextRange();
-                range.moveStart("character", start);
-                range.moveEnd("character", v.length-end);
-                range.select();
-            }
-        }
-    },
-
-
-    autoSize : function(){
-        if(!this.grow || !this.rendered){
-            return;
-        }
-        if(!this.metrics){
-            this.metrics = Ext.util.TextMetrics.createInstance(this.el);
-        }
-        var el = this.el;
-        var v = el.dom.value + "&#160;";
-        var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) +  10, this.growMin));
-        this.el.setWidth(w);
-        this.fireEvent("autosize", this, w);
-    }
-});
-
-Ext.form.TriggerField = function(config){
-    Ext.form.TriggerField.superclass.constructor.call(this, config);
-    this.mimicing = false;
-    this.on('disable', this.disableWrapper, this);
-    this.on('enable', this.enableWrapper, this);
-};
-
-Ext.extend(Ext.form.TriggerField, Ext.form.TextField,  {
-
-    // private
-    defaultAutoCreate : {tag: "input", type: "text", size: "16", autocomplete: "off"},
-
-    hideTrigger:false,
-
-
-
-
-
-
-    autoSize: Ext.emptyFn,
-
-    monitorTab : true,
-
-    deferHeight : true,
-
-    // private
-    onResize : function(w, h){
-        Ext.form.TriggerField.superclass.onResize.apply(this, arguments);
-        if(typeof w == 'number'){
-            this.el.setWidth(this.adjustWidth('input', w - this.trigger.getWidth()));
-        }
-    },
-
-    adjustSize : Ext.BoxComponent.prototype.adjustSize,
-
-    getResizeEl : function(){
-        return this.wrap;
-    },
-
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    alignErrorIcon : function(){
-        this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.TriggerField.superclass.onRender.call(this, ct, position);
-        this.wrap = this.el.wrap({cls: "x-form-field-wrap"});
-        this.trigger = this.wrap.createChild(this.triggerConfig ||
-                {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.triggerClass});
-        if(this.hideTrigger){
-            this.trigger.setDisplayed(false);
-        }
-        this.initTrigger();
-        if(!this.width){
-            this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());
-        }
-    },
-
-    initTrigger : function(){
-        this.trigger.on("click", this.onTriggerClick, this, {preventDefault:true});
-        this.trigger.addClassOnOver('x-form-trigger-over');
-        this.trigger.addClassOnClick('x-form-trigger-click');
-    },
-
-    onDestroy : function(){
-        if(this.trigger){
-            this.trigger.removeAllListeners();
-            this.trigger.remove();
-        }
-        if(this.wrap){
-            this.wrap.remove();
-        }
-        Ext.form.TriggerField.superclass.onDestroy.call(this);
-    },
-
-    // private
-    onFocus : function(){
-        Ext.form.TriggerField.superclass.onFocus.call(this);
-        if(!this.mimicing){
-            this.wrap.addClass('x-trigger-wrap-focus');
-            this.mimicing = true;
-            Ext.get(Ext.isIE ? document.body : document).on("mousedown", this.mimicBlur, this);
-            if(this.monitorTab){
-                this.el.on("keydown", this.checkTab, this);
-            }
-        }
-    },
-
-    // private
-    checkTab : function(e){
-        if(e.getKey() == e.TAB){
-            this.triggerBlur();
-        }
-    },
-
-    // private
-    onBlur : function(){
-        // do nothing
-    },
-
-    // private
-    mimicBlur : function(e, t){
-        if(!this.wrap.contains(t) && this.validateBlur()){
-            this.triggerBlur();
-        }
-    },
-
-    // private
-    triggerBlur : function(){
-        this.mimicing = false;
-        Ext.get(Ext.isIE ? document.body : document).un("mousedown", this.mimicBlur);
-        if(this.monitorTab){
-            this.el.un("keydown", this.checkTab, this);
-        }
-        this.beforeBlur();
-        this.wrap.removeClass('x-trigger-wrap-focus');
-        Ext.form.TriggerField.superclass.onBlur.call(this);
-    },
-
-    beforeBlur : Ext.emptyFn,
-
-    // private
-    // This should be overridden by any subclass that needs to check whether or not the field can be blurred.
-    validateBlur : function(e, t){
-        return true;
-    },
-
-    // private
-    disableWrapper : function(){
-        if(this.wrap){
-            this.wrap.addClass('x-item-disabled');
-        }
-    },
-
-    // private
-    enableWrapper : function(){
-        if(this.wrap){
-            this.wrap.removeClass('x-item-disabled');
-        }
-    },
-
-    // private
-    onShow : function(){
-        if(this.wrap){
-            this.wrap.dom.style.display = '';
-            this.wrap.dom.style.visibility = 'visible';
-        }
-    },
-
-    // private
-    onHide : function(){
-        this.wrap.dom.style.display = 'none';
-    },
-
-
-    onTriggerClick : Ext.emptyFn
-});
-
-Ext.form.TwinTriggerField = Ext.extend(Ext.form.TriggerField, {
-    initComponent : function(){
-        Ext.form.TwinTriggerField.superclass.initComponent.call(this);
-
-        this.triggerConfig = {
-            tag:'span', cls:'x-form-twin-triggers', cn:[
-            {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger1Class},
-            {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger " + this.trigger2Class}
-        ]};
-    },
-
-    getTrigger : function(index){
-        return this.triggers[index];
-    },
-
-    initTrigger : function(){
-        var ts = this.trigger.select('.x-form-trigger', true);
-        this.wrap.setStyle('overflow', 'hidden');
-        var triggerField = this;
-        ts.each(function(t, all, index){
-            t.hide = function(){
-                var w = triggerField.wrap.getWidth();
-                this.dom.style.display = 'none';
-                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
-            };
-            t.show = function(){
-                var w = triggerField.wrap.getWidth();
-                this.dom.style.display = '';
-                triggerField.el.setWidth(w-triggerField.trigger.getWidth());
-            };
-            var triggerIndex = 'Trigger'+(index+1);
-
-            if(this['hide'+triggerIndex]){
-                t.dom.style.display = 'none';
-            }
-            t.on("click", this['on'+triggerIndex+'Click'], this, {preventDefault:true});
-            t.addClassOnOver('x-form-trigger-over');
-            t.addClassOnClick('x-form-trigger-click');
-        }, this);
-        this.triggers = ts.elements;
-    },
-
-    onTrigger1Click : Ext.emptyFn,
-    onTrigger2Click : Ext.emptyFn
-});
-
-Ext.form.TextArea = function(config){
-    Ext.form.TextArea.superclass.constructor.call(this, config);
-    // these are provided exchanges for backwards compat
-    // minHeight/maxHeight were replaced by growMin/growMax to be
-    // compatible with TextField growing config values
-    if(this.minHeight !== undefined){
-        this.growMin = this.minHeight;
-    }
-    if(this.maxHeight !== undefined){
-        this.growMax = this.maxHeight;
-    }
-};
-
-Ext.extend(Ext.form.TextArea, Ext.form.TextField,  {
-
-    growMin : 60,
-
-    growMax: 1000,
-
-    preventScrollbars: false,
-
-    // private
-    onRender : function(ct, position){
-        if(!this.el){
-            this.defaultAutoCreate = {
-                tag: "textarea",
-                style:"width:300px;height:60px;",
-                autocomplete: "off"
-            };
-        }
-        Ext.form.TextArea.superclass.onRender.call(this, ct, position);
-        if(this.grow){
-            this.textSizeEl = Ext.DomHelper.append(document.body, {
-                tag: "pre", cls: "x-form-grow-sizer"
-            });
-            if(this.preventScrollbars){
-                this.el.setStyle("overflow", "hidden");
-            }
-            this.el.setHeight(this.growMin);
-        }
-    },
-
-    onDestroy : function(){
-        if(this.textSizeEl){
-            this.textSizeEl.remove();
-        }
-        Ext.form.TextArea.superclass.onDestroy.call(this);
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(!e.isNavKeyPress() || e.getKey() == e.ENTER){
-            this.autoSize();
-        }
-    },
-
-
-    autoSize : function(){
-        if(!this.grow || !this.textSizeEl){
-            return;
-        }
-        var el = this.el;
-        var v = el.dom.value;
-        var ts = this.textSizeEl;
-        Ext.fly(ts).setWidth(this.el.getWidth());
-        if(v.length < 1){
-            v = "&#160;&#160;";
-        }else{
-            if(Ext.isIE){
-                v = v.replace(/\n/g, '<p>&#160;</p>');
-            }
-            v += "&#160;\n&#160;";
-        }
-        ts.innerHTML = v;
-        var h = Math.min(this.growMax, Math.max(ts.offsetHeight, this.growMin));
-        if(h != this.lastHeight){
-            this.lastHeight = h;
-            this.el.setHeight(h);
-            this.fireEvent("autosize", this, h);
-        }
-    },
-
-    // private
-    setValue : function(v){
-        Ext.form.TextArea.superclass.setValue.call(this, v);
-        this.autoSize();
-    }
-});
-
-Ext.form.NumberField = function(config){
-    Ext.form.NumberField.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.NumberField, Ext.form.TextField,  {
-
-    fieldClass: "x-form-field x-form-num-field",
-
-    allowDecimals : true,
-
-    decimalSeparator : ".",
-
-    decimalPrecision : 2,
-
-    allowNegative : true,
-
-    minValue : Number.NEGATIVE_INFINITY,
-
-    maxValue : Number.MAX_VALUE,
-
-    minText : "The minimum value for this field is {0}",
-
-    maxText : "The maximum value for this field is {0}",
-
-    nanText : "{0} is not a valid number",
-
-    // private
-    initEvents : function(){
-        Ext.form.NumberField.superclass.initEvents.call(this);
-        var allowed = "0123456789";
-        if(this.allowDecimals){
-            allowed += this.decimalSeparator;
-        }
-        if(this.allowNegative){
-            allowed += "-";
-        }
-        var keyPress = function(e){
-            var k = e.getKey();
-            if(!Ext.isIE && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))){
-                return;
-            }
-            var c = e.getCharCode();
-            if(allowed.indexOf(String.fromCharCode(c)) === -1){
-                e.stopEvent();
-            }
-        };
-        this.el.on("keypress", keyPress, this);
-    },
-
-    // private
-    validateValue : function(value){
-        if(!Ext.form.NumberField.superclass.validateValue.call(this, value)){
-            return false;
-        }
-        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
-             return true;
-        }
-        value = String(value).replace(this.decimalSeparator, ".");
-        if(isNaN(value)){
-            this.markInvalid(String.format(this.nanText, value));
-            return false;
-        }
-        var num = this.parseValue(value);
-        if(num < this.minValue){
-            this.markInvalid(String.format(this.minText, this.minValue));
-            return false;
-        }
-        if(num > this.maxValue){
-            this.markInvalid(String.format(this.maxText, this.maxValue));
-            return false;
-        }
-        return true;
-    },
-
-    // private
-    parseValue : function(value){
-        return parseFloat(String(value).replace(this.decimalSeparator, "."));
-    },
-
-    // private
-    fixPrecision : function(value){
-       if(!this.allowDecimals || this.decimalPrecision == -1 || isNaN(value) || value == 0 || !value){
-           return value;
-       }
-       // this should work but doesn't due to precision error in JS
-       // var scale = Math.pow(10, this.decimalPrecision);
-       // var fixed = this.decimalPrecisionFcn(value * scale);
-       // return fixed / scale;
-       //
-       // so here's our workaround:
-       var scale = Math.pow(10, this.decimalPrecision+1);
-       var fixed = this.decimalPrecisionFcn(value * scale);
-       fixed = this.decimalPrecisionFcn(fixed/10);
-       return fixed / (scale/10);
-    },
-
-    // private
-    decimalPrecisionFcn : function(v){
-        return Math.floor(v);
-    }
-});
-
-Ext.form.DateField = function(config){
-    Ext.form.DateField.superclass.constructor.call(this, config);
-    if(typeof this.minValue == "string") this.minValue = this.parseDate(this.minValue);
-    if(typeof this.maxValue == "string") this.maxValue = this.parseDate(this.maxValue);
-    this.ddMatch = null;
-    if(this.disabledDates){
-        var dd = this.disabledDates;
-        var re = "(?:";
-        for(var i = 0; i < dd.length; i++){
-            re += dd[i];
-            if(i != dd.length-1) re += "|";
-        }
-        this.ddMatch = new RegExp(re + ")");
-    }
-};
-
-Ext.extend(Ext.form.DateField, Ext.form.TriggerField,  {
-
-    format : "m/d/y",
-
-    altFormats : "m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",
-
-    disabledDays : null,
-
-    disabledDaysText : "Disabled",
-
-    disabledDates : null,
-
-    disabledDatesText : "Disabled",
-
-    minValue : null,
-
-    maxValue : null,
-
-    minText : "The date in this field must be after {0}",
-
-    maxText : "The date in this field must be before {0}",
-
-    invalidText : "{0} is not a valid date - it must be in the format {1}",
-
-    triggerClass : 'x-form-date-trigger',
-
-
-    // private
-    defaultAutoCreate : {tag: "input", type: "text", size: "10", autocomplete: "off"},
-
-    // private
-    validateValue : function(value){
-        value = this.formatDate(value);
-        if(!Ext.form.DateField.superclass.validateValue.call(this, value)){
-            return false;
-        }
-        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
-             return true;
-        }
-        var svalue = value;
-        value = this.parseDate(value);
-        if(!value){
-            this.markInvalid(String.format(this.invalidText, svalue, this.format));
-            return false;
-        }
-        var time = value.getTime();
-        if(this.minValue && time < this.minValue.getTime()){
-            this.markInvalid(String.format(this.minText, this.formatDate(this.minValue)));
-            return false;
-        }
-        if(this.maxValue && time > this.maxValue.getTime()){
-            this.markInvalid(String.format(this.maxText, this.formatDate(this.maxValue)));
-            return false;
-        }
-        if(this.disabledDays){
-            var day = value.getDay();
-            for(var i = 0; i < this.disabledDays.length; i++) {
-            	if(day === this.disabledDays[i]){
-            	    this.markInvalid(this.disabledDaysText);
-                    return false;
-            	}
-            }
-        }
-        var fvalue = this.formatDate(value);
-        if(this.ddMatch && this.ddMatch.test(fvalue)){
-            this.markInvalid(String.format(this.disabledDatesText, fvalue));
-            return false;
-        }
-        return true;
-    },
-
-    // private
-    // Provides logic to override the default TriggerField.validateBlur which just returns true
-    validateBlur : function(){
-        return !this.menu || !this.menu.isVisible();
-    },
-
-
-    getValue : function(){
-        return this.parseDate(Ext.form.DateField.superclass.getValue.call(this)) || "";
-    },
-
-
-    setValue : function(date){
-        Ext.form.DateField.superclass.setValue.call(this, this.formatDate(this.parseDate(date)));
-    },
-
-    // private
-    parseDate : function(value){
-        if(!value || value instanceof Date){
-            return value;
-        }
-        var v = Date.parseDate(value, this.format);
-        if(!v && this.altFormats){
-            if(!this.altFormatsArray){
-                this.altFormatsArray = this.altFormats.split("|");
-            }
-            for(var i = 0, len = this.altFormatsArray.length; i < len && !v; i++){
-                v = Date.parseDate(value, this.altFormatsArray[i]);
-            }
-        }
-        return v;
-    },
-
-    // private
-    formatDate : function(date){
-        return (!date || !(date instanceof Date)) ?
-               date : date.dateFormat(this.format);
-    },
-
-    // private
-    menuListeners : {
-        select: function(m, d){
-            this.setValue(d);
-        },
-        show : function(){ // retain focus styling
-            this.onFocus();
-        },
-        hide : function(){
-            this.focus.defer(10, this);
-            var ml = this.menuListeners;
-            this.menu.un("select", ml.select,  this);
-            this.menu.un("show", ml.show,  this);
-            this.menu.un("hide", ml.hide,  this);
-        }
-    },
-
-    // private
-    // Implements the default empty TriggerField.onTriggerClick function to display the DatePicker
-    onTriggerClick : function(){
-        if(this.disabled){
-            return;
-        }
-        if(this.menu == null){
-            this.menu = new Ext.menu.DateMenu();
-        }
-        Ext.apply(this.menu.picker,  {
-            minDate : this.minValue,
-            maxDate : this.maxValue,
-            disabledDatesRE : this.ddMatch,
-            disabledDatesText : this.disabledDatesText,
-            disabledDays : this.disabledDays,
-            disabledDaysText : this.disabledDaysText,
-            format : this.format,
-            minText : String.format(this.minText, this.formatDate(this.minValue)),
-            maxText : String.format(this.maxText, this.formatDate(this.maxValue))
-        });
-        this.menu.on(Ext.apply({}, this.menuListeners, {
-            scope:this
-        }));
-        this.menu.picker.setValue(this.getValue() || new Date());
-        this.menu.show(this.el, "tl-bl?");
-    },
-
-    beforeBlur : function(){
-        var v = this.parseDate(this.getRawValue());
-        if(v){
-            this.setValue(v);
-        }
-    }
-});
-
-Ext.form.Checkbox = function(config){
-    Ext.form.Checkbox.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        check : true
-    });
-};
-
-Ext.extend(Ext.form.Checkbox, Ext.form.Field,  {
-
-    focusClass : "x-form-check-focus",
-
-    fieldClass: "x-form-field",
-
-    checked: false,
-
-    // private
-    defaultAutoCreate : { tag: "input", type: 'checkbox', autocomplete: "off"},
-
-    boxLabel : undefined,
-
-    //
-    onResize : function(){
-        Ext.form.Checkbox.superclass.onResize.apply(this, arguments);
-        if(!this.boxLabel){
-            this.el.alignTo(this.wrap, 'c-c');
-        }
-    },
-
-    initEvents : function(){
-        Ext.form.Checkbox.superclass.initEvents.call(this);
-        this.el.on("click", this.onClick,  this);
-        this.el.on("change", this.onClick,  this);
-    },
-
-
-    getResizeEl : function(){
-        return this.wrap;
-    },
-
-    getPositionEl : function(){
-        return this.wrap;
-    },
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.Checkbox.superclass.onRender.call(this, ct, position);
-        if(this.inputValue !== undefined){
-            this.el.dom.value = this.inputValue;
-        }
-        this.wrap = this.el.wrap({cls: "x-form-check-wrap"});
-        if(this.boxLabel){
-            this.wrap.createChild({tag: 'label', htmlFor: this.el.id, cls: 'x-form-cb-label', html: this.boxLabel});
-        }
-        if(this.checked){
-            this.setValue(true);
-        }
-    },
-
-    // private
-    initValue : Ext.emptyFn,
-
-
-    getValue : function(){
-        if(this.rendered){
-            return this.el.dom.checked;
-        }
-        return false;
-    },
-
-    onClick : function(){
-        if(this.el.dom.checked != this.checked){
-            this.setValue(this.el.dom.checked);
-        }
-    },
-
-
-    setValue : function(v){
-        this.checked = (v === true || v === 'true' || v == '1');
-        if(this.el && this.el.dom){
-            this.el.dom.checked = this.checked;
-        }
-        this.fireEvent("check", this, this.checked);
-    }
-});
-
-Ext.form.Radio = function(){
-    Ext.form.Radio.superclass.constructor.apply(this, arguments);
-};
-Ext.extend(Ext.form.Radio, Ext.form.Checkbox, {
-    inputType: 'radio',
-
-
-    getGroupValue : function(){
-        return this.el.up('form').child('input[name='+this.el.dom.name+']:checked', true).value;
-    }
-});
-
-Ext.form.ComboBox = function(config){
-    Ext.form.ComboBox.superclass.constructor.call(this, config);
-    this.addEvents({
-
-        'expand' : true,
-
-        'collapse' : true,
-
-        'beforeselect' : true,
-
-        'select' : true,
-
-        'beforequery': true
-    });
-    if(this.transform){
-        var s = Ext.getDom(this.transform);
-        if(!this.hiddenName){
-            this.hiddenName = s.name;
-        }
-        if(!this.store){
-            this.mode = 'local';
-            var d = [], opts = s.options;
-            for(var i = 0, len = opts.length;i < len; i++){
-                var o = opts[i];
-                var value = (Ext.isIE ? o.getAttributeNode('value').specified : o.hasAttribute('value')) ? o.value : o.text;
-                if(o.selected) {
-                    this.value = value;
-                }
-                d.push([value, o.text]);
-            }
-            this.store = new Ext.data.SimpleStore({
-                'id': 0,
-                fields: ['value', 'text'],
-                data : d
-            });
-            this.valueField = 'value';
-            this.displayField = 'text';
-        }
-        s.name = Ext.id(); // wipe out the name in case somewhere else they have a reference
-        if(!this.lazyRender){
-            this.target = true;
-            this.el = Ext.DomHelper.insertBefore(s, this.autoCreate || this.defaultAutoCreate);
-            s.parentNode.removeChild(s); // remove it
-            this.render(this.el.parentNode);
-        }else{
-            s.parentNode.removeChild(s); // remove it
-        }
-
-    }
-    this.selectedIndex = -1;
-    if(this.mode == 'local'){
-        if(config.queryDelay === undefined){
-            this.queryDelay = 10;
-        }
-        if(config.minChars === undefined){
-            this.minChars = 0;
-        }
-    }
-};
-
-Ext.extend(Ext.form.ComboBox, Ext.form.TriggerField, {
-
-
-
-
-    // private
-    defaultAutoCreate : {tag: "input", type: "text", size: "24", autocomplete: "off"},
-
-    listWidth: undefined,
-
-    displayField: undefined,
-
-    valueField: undefined,
-
-    hiddenName: undefined,
-
-    listClass: '',
-
-    selectedClass: 'x-combo-selected',
-
-    triggerClass : 'x-form-arrow-trigger',
-
-    shadow:'sides',
-
-    listAlign: 'tl-bl?',
-
-    maxHeight: 300,
-
-    triggerAction: 'query',
-
-    minChars : 4,
-
-    typeAhead: false,
-
-    queryDelay: 500,
-
-    pageSize: 0,
-
-    selectOnFocus:false,
-
-    queryParam: 'query',
-
-    loadingText: 'Loading...',
-
-    resizable: false,
-
-    handleHeight : 8,
-
-    editable: true,
-
-    allQuery: '',
-
-    mode: 'remote',
-
-    minListWidth : 70,
-
-    forceSelection:false,
-
-    typeAheadDelay : 250,
-
-    valueNotFoundText : undefined,
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.ComboBox.superclass.onRender.call(this, ct, position);
-        if(this.hiddenName){
-            this.hiddenField = this.el.insertSibling({tag:'input', type:'hidden', name: this.hiddenName, id: this.hiddenName},
-                    'before', true);
-            this.hiddenField.value =
-                this.hiddenValue !== undefined ? this.hiddenValue :
-                this.value !== undefined ? this.value : '';
-
-            // prevent input submission
-            this.el.dom.removeAttribute('name');
-        }
-        if(Ext.isGecko){
-            this.el.dom.setAttribute('autocomplete', 'off');
-        }
-
-        var cls = 'x-combo-list';
-
-        this.list = new Ext.Layer({
-            shadow: this.shadow, cls: [cls, this.listClass].join(' '), constrain:false
-        });
-
-        var lw = this.listWidth || Math.max(this.wrap.getWidth(), this.minListWidth);
-        this.list.setWidth(lw);
-        this.list.swallowEvent('mousewheel');
-        this.assetHeight = 0;
-
-        if(this.title){
-            this.header = this.list.createChild({cls:cls+'-hd', html: this.title});
-            this.assetHeight += this.header.getHeight();
-        }
-
-        this.innerList = this.list.createChild({cls:cls+'-inner'});
-        this.innerList.on('mouseover', this.onViewOver, this);
-        this.innerList.on('mousemove', this.onViewMove, this);
-        this.innerList.setWidth(lw - this.list.getFrameWidth('lr'))
-
-        if(this.pageSize){
-            this.footer = this.list.createChild({cls:cls+'-ft'});
-            this.pageTb = new Ext.PagingToolbar(this.footer, this.store,
-                    {pageSize: this.pageSize});
-            this.assetHeight += this.footer.getHeight();
-        }
-
-        if(!this.tpl){
-            this.tpl = '<div class="'+cls+'-item">{' + this.displayField + '}</div>';
-        }
-
-        this.view = new Ext.View(this.innerList, this.tpl, {
-            singleSelect:true, store: this.store, selectedClass: this.selectedClass
-        });
-
-        this.view.on('click', this.onViewClick, this);
-
-        this.store.on('beforeload', this.onBeforeLoad, this);
-        this.store.on('load', this.onLoad, this);
-        this.store.on('loadexception', this.collapse, this);
-
-        if(this.resizable){
-            this.resizer = new Ext.Resizable(this.list,  {
-               pinned:true, handles:'se'
-            });
-            this.resizer.on('resize', function(r, w, h){
-                this.maxHeight = h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;
-                this.listWidth = w;
-                this.restrictHeight();
-            }, this);
-            this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom', this.handleHeight+'px');
-        }
-        if(!this.editable){
-            this.editable = true;
-            this.setEditable(false);
-        }
-    },
-
-    // private
-    initEvents : function(){
-        Ext.form.ComboBox.superclass.initEvents.call(this);
-
-        this.keyNav = new Ext.KeyNav(this.el, {
-            "up" : function(e){
-                this.inKeyMode = true;
-                this.selectPrev();
-            },
-
-            "down" : function(e){
-                if(!this.isExpanded()){
-                    this.onTriggerClick();
-                }else{
-                    this.inKeyMode = true;
-                    this.selectNext();
-                }
-            },
-
-            "enter" : function(e){
-                this.onViewClick();
-                //return true;
-            },
-
-            "esc" : function(e){
-                this.collapse();
-            },
-
-            "tab" : function(e){
-                this.onViewClick(false);
-                return true;
-            },
-
-            scope : this,
-
-            doRelay : function(foo, bar, hname){
-                if(hname == 'down' || this.scope.isExpanded()){
-                   return Ext.KeyNav.prototype.doRelay.apply(this, arguments);
-                }
-                return true;
-            }
-        });
-        this.queryDelay = Math.max(this.queryDelay || 10,
-                this.mode == 'local' ? 10 : 250);
-        this.dqTask = new Ext.util.DelayedTask(this.initQuery, this);
-        if(this.typeAhead){
-            this.taTask = new Ext.util.DelayedTask(this.onTypeAhead, this);
-        }
-        if(this.editable !== false){
-            this.el.on("keyup", this.onKeyUp, this);
-        }
-        if(this.forceSelection){
-            this.on('blur', this.doForce, this);
-        }
-    },
-
-    onDestroy : function(){
-        if(this.view){
-            this.view.setStore(null);
-            this.view.el.removeAllListeners();
-            this.view.el.remove();
-            this.view.purgeListeners();
-        }
-        if(this.list){
-            this.list.destroy();
-        }
-        if(this.store){
-            this.store.un('beforeload', this.onBeforeLoad, this);
-            this.store.un('load', this.onLoad, this);
-            this.store.un('loadexception', this.collapse, this);
-        }
-        Ext.form.ComboBox.superclass.onDestroy.call(this);
-    },
-
-    // private
-    fireKey : function(e){
-        if(e.isNavKeyPress() && !this.list.isVisible()){
-            this.fireEvent("specialkey", this, e);
-        }
-    },
-
-    // private
-    onResize: function(w, h){
-        Ext.form.ComboBox.superclass.onResize.apply(this, arguments);
-        if(this.list && this.listWidth === undefined){
-            var lw = Math.max(w, this.minListWidth);
-            this.list.setWidth(lw);
-            this.innerList.setWidth(lw - this.list.getFrameWidth('lr'))
-        }
-    },
-
-
-    setEditable : function(value){
-        if(value == this.editable){
-            return;
-        }
-        this.editable = value;
-        if(!value){
-            this.el.dom.setAttribute('readOnly', true);
-            this.el.on('mousedown', this.onTriggerClick,  this);
-            this.el.addClass('x-combo-noedit');
-        }else{
-            this.el.dom.setAttribute('readOnly', false);
-            this.el.un('mousedown', this.onTriggerClick,  this);
-            this.el.removeClass('x-combo-noedit');
-        }
-    },
-
-    // private
-    onBeforeLoad : function(){
-        if(!this.hasFocus){
-            return;
-        }
-        this.innerList.update(this.loadingText ?
-               '<div class="loading-indicator">'+this.loadingText+'</div>' : '');
-        this.restrictHeight();
-        this.selectedIndex = -1;
-    },
-
-    // private
-    onLoad : function(){
-        if(!this.hasFocus){
-            return;
-        }
-        if(this.store.getCount() > 0){
-            this.expand();
-            this.restrictHeight();
-            if(this.lastQuery == this.allQuery){
-                if(this.editable){
-                    this.el.dom.select();
-                }
-                if(!this.selectByValue(this.value, true)){
-                    this.select(0, true);
-                }
-            }else{
-                this.selectNext();
-                if(this.typeAhead && this.lastKey != Ext.EventObject.BACKSPACE && this.lastKey != Ext.EventObject.DELETE){
-                    this.taTask.delay(this.typeAheadDelay);
-                }
-            }
-        }else{
-            this.onEmptyResults();
-        }
-        //this.el.focus();
-    },
-
-    // private
-    onTypeAhead : function(){
-        if(this.store.getCount() > 0){
-            var r = this.store.getAt(0);
-            var newValue = r.data[this.displayField];
-            var len = newValue.length;
-            var selStart = this.getRawValue().length;
-            if(selStart != len){
-                this.setRawValue(newValue);
-                this.selectText(selStart, newValue.length);
-            }
-        }
-    },
-
-    // private
-    onSelect : function(record, index){
-        if(this.fireEvent('beforeselect', this, record, index) !== false){
-            this.setValue(record.data[this.valueField || this.displayField]);
-            this.collapse();
-            this.fireEvent('select', this, record, index);
-        }
-    },
-
-
-    getValue : function(){
-        if(this.valueField){
-            return typeof this.value != 'undefined' ? this.value : '';
-        }else{
-            return Ext.form.ComboBox.superclass.getValue.call(this);
-        }
-    },
-
-
-    clearValue : function(){
-        if(this.hiddenField){
-            this.hiddenField.value = '';
-        }
-        this.setRawValue('');
-        this.lastSelectionText = '';
-    },
-
-
-    setValue : function(v){
-        var text = v;
-        if(this.valueField){
-            var r = this.findRecord(this.valueField, v);
-            if(r){
-                text = r.data[this.displayField];
-            }else if(this.valueNotFoundText !== undefined){
-                text = this.valueNotFoundText;
-            }
-        }
-        this.lastSelectionText = text;
-        if(this.hiddenField){
-            this.hiddenField.value = v;
-        }
-        Ext.form.ComboBox.superclass.setValue.call(this, text);
-        this.value = v;
-    },
-
-    // private
-    findRecord : function(prop, value){
-        var record;
-        if(this.store.getCount() > 0){
-            this.store.each(function(r){
-                if(r.data[prop] == value){
-                    record = r;
-                    return false;
-                }
-            });
-        }
-        return record;
-    },
-
-    // private
-    onViewMove : function(e, t){
-        this.inKeyMode = false;
-    },
-
-    // private
-    onViewOver : function(e, t){
-        if(this.inKeyMode){ // prevent key nav and mouse over conflicts
-            return;
-        }
-        var item = this.view.findItemFromChild(t);
-        if(item){
-            var index = this.view.indexOf(item);
-            this.select(index, false);
-        }
-    },
-
-    // private
-    onViewClick : function(doFocus){
-        var index = this.view.getSelectedIndexes()[0];
-        var r = this.store.getAt(index);
-        if(r){
-            this.onSelect(r, index);
-        }
-        if(doFocus !== false){
-            this.el.focus();
-        }
-    },
-
-    // private
-    restrictHeight : function(){
-        this.innerList.dom.style.height = '';
-        var inner = this.innerList.dom;
-        var h = Math.max(inner.clientHeight, inner.offsetHeight, inner.scrollHeight);
-        this.innerList.setHeight(h < this.maxHeight ? 'auto' : this.maxHeight);
-        this.list.beginUpdate();
-        this.list.setHeight(this.innerList.getHeight()+this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight);
-        this.list.alignTo(this.el, this.listAlign);
-        this.list.endUpdate();
-    },
-
-    // private
-    onEmptyResults : function(){
-        this.collapse();
-    },
-
-
-    isExpanded : function(){
-        return this.list.isVisible();
-    },
-
-
-    selectByValue : function(v, scrollIntoView){
-        if(v !== undefined && v !== null){
-            var r = this.findRecord(this.valueField || this.displayField, v);
-            if(r){
-                this.select(this.store.indexOf(r), scrollIntoView);
-                return true;
-            }
-        }
-        return false;
-    },
-
-
-    select : function(index, scrollIntoView){
-        this.selectedIndex = index;
-        this.view.select(index);
-        if(scrollIntoView !== false){
-            var el = this.view.getNode(index);
-            if(el){
-                this.innerList.scrollChildIntoView(el, false);
-            }
-        }
-    },
-
-    // private
-    selectNext : function(){
-        var ct = this.store.getCount();
-        if(ct > 0){
-            if(this.selectedIndex == -1){
-                this.select(0);
-            }else if(this.selectedIndex < ct-1){
-                this.select(this.selectedIndex+1);
-            }
-        }
-    },
-
-    // private
-    selectPrev : function(){
-        var ct = this.store.getCount();
-        if(ct > 0){
-            if(this.selectedIndex == -1){
-                this.select(0);
-            }else if(this.selectedIndex != 0){
-                this.select(this.selectedIndex-1);
-            }
-        }
-    },
-
-    // private
-    onKeyUp : function(e){
-        if(this.editable !== false && !e.isSpecialKey()){
-            this.lastKey = e.getKey();
-            this.dqTask.delay(this.queryDelay);
-        }
-    },
-
-    // private
-    validateBlur : function(){
-        return !this.list || !this.list.isVisible();
-    },
-
-    // private
-    initQuery : function(){
-        this.doQuery(this.getRawValue());
-    },
-
-    // private
-    doForce : function(){
-        if(this.el.dom.value.length > 0){
-            this.el.dom.value =
-                this.lastSelectionText === undefined ? '' : this.lastSelectionText;
-            this.applyEmptyText();
-        }
-    },
-
-
-    doQuery : function(q, forceAll){
-        if(q === undefined || q === null){
-            q = '';
-        }
-        var qe = {
-            query: q,
-            forceAll: forceAll,
-            combo: this,
-            cancel:false
-        };
-        if(this.fireEvent('beforequery', qe)===false || qe.cancel){
-            return false;
-        }
-        q = qe.query;
-        forceAll = qe.forceAll;
-        if(forceAll === true || (q.length >= this.minChars)){
-            if(this.lastQuery != q){
-                this.lastQuery = q;
-                if(this.mode == 'local'){
-                    this.selectedIndex = -1;
-                    if(forceAll){
-                        this.store.clearFilter();
-                    }else{
-                        this.store.filter(this.displayField, q);
-                    }
-                    this.onLoad();
-                }else{
-                    this.store.baseParams[this.queryParam] = q;
-                    this.store.load({
-                        params: this.getParams(q)
-                    });
-                    this.expand();
-                }
-            }else{
-                this.selectedIndex = -1;
-                this.onLoad();
-            }
-        }
-    },
-
-    // private
-    getParams : function(q){
-        var p = {};
-        //p[this.queryParam] = q;
-        if(this.pageSize){
-            p.start = 0;
-            p.limit = this.pageSize;
-        }
-        return p;
-    },
-
-
-    collapse : function(){
-        if(!this.isExpanded()){
-            return;
-        }
-        this.list.hide();
-        Ext.get(document).un('mousedown', this.collapseIf, this);
-        this.fireEvent('collapse', this);
-    },
-
-    // private
-    collapseIf : function(e){
-        if(!e.within(this.wrap) && !e.within(this.list)){
-            this.collapse();
-        }
-    },
-
-
-    expand : function(){
-        if(this.isExpanded() || !this.hasFocus){
-            return;
-        }
-        this.list.alignTo(this.el, this.listAlign);
-        this.list.show();
-        Ext.get(document).on('mousedown', this.collapseIf, this);
-        this.fireEvent('expand', this);
-    },
-
-    // private
-    // Implements the default empty TriggerField.onTriggerClick function
-    onTriggerClick : function(){
-        if(this.disabled){
-            return;
-        }
-        if(this.isExpanded()){
-            this.collapse();
-            this.el.focus();
-        }else {
-            this.hasFocus = true;
-            if(this.triggerAction == 'all') {
-                this.doQuery(this.allQuery, true);
-            } else {
-                this.doQuery(this.getRawValue());
-            }
-            this.el.focus();
-        }
-    }
-});
-
-Ext.Editor = function(field, config){
-    Ext.Editor.superclass.constructor.call(this, config);
-    this.field = field;
-    this.addEvents({
-
-        "beforestartedit" : true,
-
-        "startedit" : true,
-
-        "beforecomplete" : true,
-
-        "complete" : true,
-
-        "specialkey" : true
-    });
-};
-
-Ext.extend(Ext.Editor, Ext.Component, {
-
-
-
-
-
-    value : "",
-
-    alignment: "c-c?",
-
-    shadow : "frame",
-
-    constrain : false,
-
-    // private
-    updateEl : false,
-
-    // private
-    onRender : function(ct, position){
-        this.el = new Ext.Layer({
-            shadow: this.shadow,
-            cls: "x-editor",
-            parentEl : ct,
-            shim : this.shim,
-            shadowOffset:4,
-            id: this.id
-        });
-        this.el.setStyle("overflow", Ext.isGecko ? "auto" : "hidden");
-        if(this.field.msgTarget != 'title'){
-            this.field.msgTarget = 'qtip';
-        }
-        this.field.render(this.el);
-        if(Ext.isGecko){
-            this.field.el.dom.setAttribute('autocomplete', 'off');
-        }
-        this.field.show();
-        this.field.on("blur", this.onBlur, this);
-        this.relayEvents(this.field,  ["specialkey"]);
-        if(this.field.grow){
-            this.field.on("autosize", this.el.sync,  this.el, {delay:1});
-        }
-    },
-
-    // private
-    startEdit : function(el, value){
-        if(this.editing){
-            this.completeEdit();
-        }
-        this.boundEl = Ext.get(el);
-        var v = value !== undefined ? value : this.boundEl.dom.innerHTML;
-        if(!this.rendered){
-            this.render(this.parentEl || document.body);
-        }
-        if(this.fireEvent("beforestartedit", this, this.boundEl, v) === false){
-            return;
-        }
-        this.startValue = v;
-        this.field.setValue(v);
-        if(this.autoSize){
-            var sz = this.boundEl.getSize();
-            switch(this.autoSize){
-                case "width":
-                this.setSize(sz.width,  "");
-                break;
-                case "height":
-                this.setSize("",  sz.height);
-                break;
-                default:
-                this.setSize(sz.width,  sz.height);
-            }
-        }
-        this.el.alignTo(this.boundEl, this.alignment);
-        this.editing = true;
-        if(Ext.QuickTips){
-            Ext.QuickTips.disable();
-        }
-        this.show();
-    },
-
-
-    setSize : function(w, h){
-        this.field.setSize(w, h);
-        if(this.el){
-            this.el.sync();
-        }
-    },
-
-
-    realign : function(){
-        this.el.alignTo(this.boundEl, this.alignment);
-    },
-
-
-    completeEdit : function(remainVisible){
-        if(!this.editing){
-            return;
-        }
-        var v = this.getValue();
-        if(this.revertInvalid !== false && !this.field.isValid()){
-            v = this.startValue;
-            this.cancelEdit(true);
-        }
-        if(String(v) == String(this.startValue) && this.ignoreNoChange){
-            this.editing = false;
-            this.hide();
-            return;
-        }
-        if(this.fireEvent("beforecomplete", this, v, this.startValue) !== false){
-            this.editing = false;
-            if(this.updateEl && this.boundEl){
-                this.boundEl.update(v);
-            }
-            if(remainVisible !== true){
-                this.hide();
-            }
-            this.fireEvent("complete", this, v, this.startValue);
-        }
-    },
-
-    // private
-    onShow : function(){
-        this.el.show();
-        if(this.hideEl !== false){
-            this.boundEl.hide();
-        }
-        this.field.show();
-        if(Ext.isIE && !this.fixIEFocus){ // IE has problems with focusing the first time
-            this.fixIEFocus = true;
-            this.deferredFocus.defer(50, this);
-        }else{
-            this.field.focus();
-        }
-        this.fireEvent("startedit", this.boundEl, this.startValue);
-    },
-
-    deferredFocus : function(){
-        if(this.editing){
-            this.field.focus();
-        }
-    },
-
-
-    cancelEdit : function(remainVisible){
-        if(this.editing){
-            this.setValue(this.startValue);
-            if(remainVisible !== true){
-                this.hide();
-            }
-        }
-    },
-
-    // private
-    onBlur : function(){
-        if(this.allowBlur !== true && this.editing){
-            this.completeEdit();
-        }
-    },
-
-    // private
-    onHide : function(){
-        if(this.editing){
-            this.completeEdit();
-            return;
-        }
-        this.field.blur();
-        if(this.field.collapse){
-            this.field.collapse();
-        }
-        this.el.hide();
-        if(this.hideEl !== false){
-            this.boundEl.show();
-        }
-        if(Ext.QuickTips){
-            Ext.QuickTips.enable();
-        }
-    },
-
-
-    setValue : function(v){
-        this.field.setValue(v);
-    },
-
-
-    getValue : function(){
-        return this.field.getValue();
-    }
-});
-
-Ext.form.BasicForm = function(el, config){
-    Ext.apply(this, config);
-
-    this.items = new Ext.util.MixedCollection(false, function(o){
-        return o.id || (o.id = Ext.id());
-    });
-    this.addEvents({
-
-        beforeaction: true,
-
-        actionfailed : true,
-
-        actioncomplete : true
-    });
-    if(el){
-        this.initEl(el);
-    }
-    Ext.form.BasicForm.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.form.BasicForm, Ext.util.Observable, {
-
-
-
-
-
-
-
-    timeout: 30,
-
-    // private
-    activeAction : null,
-
-
-    trackResetOnLoad : false,
-
-
-    waitMsgTarget : undefined,
-
-    // private
-    initEl : function(el){
-        this.el = Ext.get(el);
-        this.id = this.el.id || Ext.id();
-        this.el.on('submit', this.onSubmit, this);
-        this.el.addClass('x-form');
-    },
-
-    // private
-    onSubmit : function(e){
-        e.stopEvent();
-    },
-
-
-    isValid : function(){
-        var valid = true;
-        this.items.each(function(f){
-           if(!f.validate()){
-               valid = false;
-           }
-        });
-        return valid;
-    },
-
-
-    isDirty : function(){
-        var dirty = false;
-        this.items.each(function(f){
-           if(f.isDirty()){
-               dirty = true;
-               return false;
-           }
-        });
-        return dirty;
-    },
-
-
-    doAction : function(action, options){
-        if(typeof action == 'string'){
-            action = new Ext.form.Action.ACTION_TYPES[action](this, options);
-        }
-        if(this.fireEvent('beforeaction', this, action) !== false){
-            this.beforeAction(action);
-            action.run.defer(100, action);
-        }
-        return this;
-    },
-
-
-    submit : function(options){
-        this.doAction('submit', options);
-        return this;
-    },
-
-
-    load : function(options){
-        this.doAction('load', options);
-        return this;
-    },
-
-
-    updateRecord : function(record){
-        record.beginEdit();
-        var fs = record.fields;
-        fs.each(function(f){
-            var field = this.findField(f.name);
-            if(field){
-                record.set(f.name, field.getValue());
-            }
-        }, this);
-        record.endEdit();
-        return this;
-    },
-
-
-    loadRecord : function(record){
-        this.setValues(record.data);
-        return this;
-    },
-
-    // private
-    beforeAction : function(action){
-        var o = action.options;
-        if(o.waitMsg){
-            if(this.waitMsgTarget === true){
-                this.el.mask(o.waitMsg, 'x-mask-loading');
-            }else if(this.waitMsgTarget){
-                this.waitMsgTarget = Ext.get(this.waitMsgTarget);
-                this.waitMsgTarget.mask(o.waitMsg, 'x-mask-loading');
-            }else{
-                Ext.MessageBox.wait(o.waitMsg, o.waitTitle || this.waitTitle || 'Please Wait...');
-            }
-        }
-    },
-
-    // private
-    afterAction : function(action, success){
-        this.activeAction = null;
-        var o = action.options;
-        if(o.waitMsg){
-            if(this.waitMsgTarget === true){
-                this.el.unmask();
-            }else if(this.waitMsgTarget){
-                this.waitMsgTarget.unmask();
-            }else{
-                Ext.MessageBox.updateProgress(1);
-                Ext.MessageBox.hide();
-            }
-        }
-        if(success){
-            if(o.reset){
-                this.reset();
-            }
-            Ext.callback(o.success, o.scope, [this, action]);
-            this.fireEvent('actioncomplete', this, action);
-        }else{
-            Ext.callback(o.failure, o.scope, [this, action]);
-            this.fireEvent('actionfailed', this, action);
-        }
-    },
-
-
-    findField : function(id){
-        var field = this.items.get(id);
-        if(!field){
-            this.items.each(function(f){
-                if(f.isFormField && (f.dataIndex == id || f.id == id || f.getName() == id)){
-                    field = f;
-                    return false;
-                }
-            });
-        }
-        return field || null;
-    },
-
-
-
-    markInvalid : function(errors){
-        if(errors instanceof Array){
-            for(var i = 0, len = errors.length; i < len; i++){
-                var fieldError = errors[i];
-                var f = this.findField(fieldError.id);
-                if(f){
-                    f.markInvalid(fieldError.msg);
-                }
-            }
-        }else{
-            var field, id;
-            for(id in errors){
-                if(typeof errors[id] != 'function' && (field = this.findField(id))){
-                    field.markInvalid(errors[id]);
-                }
-            }
-        }
-        return this;
-    },
-
-
-    setValues : function(values){
-        if(values instanceof Array){ // array of objects
-            for(var i = 0, len = values.length; i < len; i++){
-                var v = values[i];
-                var f = this.findField(v.id);
-                if(f){
-                    f.setValue(v.value);
-                    if(this.trackResetOnLoad){
-                        f.originalValue = f.getValue();
-                    }
-                }
-            }
-        }else{ // object hash
-            var field, id;
-            for(id in values){
-                if(typeof values[id] != 'function' && (field = this.findField(id))){
-                    field.setValue(values[id]);
-                    if(this.trackResetOnLoad){
-                        field.originalValue = field.getValue();
-                    }
-                }
-            }
-        }
-        return this;
-    },
-
-
-    getValues : function(asString){
-        var fs = Ext.lib.Ajax.serializeForm(this.el.dom);
-        if(asString === true){
-            return fs;
-        }
-        return Ext.urlDecode(fs);
-    },
-
-
-    clearInvalid : function(){
-        this.items.each(function(f){
-           f.clearInvalid();
-        });
-        return this;
-    },
-
-
-    reset : function(){
-        this.items.each(function(f){
-            f.reset();
-        });
-        return this;
-    },
-
-
-    add : function(){
-        this.items.addAll(Array.prototype.slice.call(arguments, 0));
-        return this;
-    },
-
-
-
-    remove : function(field){
-        this.items.remove(field);
-        return this;
-    },
-
-
-    render : function(){
-        this.items.each(function(f){
-            if(f.isFormField && !f.rendered && document.getElementById(f.id)){ // if the element exists
-                f.applyTo(f.id);
-            }
-        });
-        return this;
-    },
-
-
-    applyToFields : function(o){
-        this.items.each(function(f){
-           Ext.apply(f, o);
-        });
-        return this;
-    },
-
-
-    applyIfToFields : function(o){
-        this.items.each(function(f){
-           Ext.applyIf(f, o);
-        });
-        return this;
-    }
-});
-
-// back compat
-Ext.BasicForm = Ext.form.BasicForm;
-
-Ext.form.Form = function(config){
-    Ext.form.Form.superclass.constructor.call(this, null, config);
-    this.url = this.url || this.action;
-    if(!this.root){
-        this.root = new Ext.form.Layout(Ext.applyIf({
-            id: Ext.id()
-        }, config));
-    }
-    this.active = this.root;
-
-    this.buttons = [];
-    this.addEvents({
-
-        clientvalidation: true
-    });
-};
-
-Ext.extend(Ext.form.Form, Ext.form.BasicForm, {
-
-
-
-    buttonAlign:'center',
-
-
-    minButtonWidth:75,
-
-
-    labelAlign:'left',
-
-
-    monitorValid : false,
-
-
-    monitorPoll : 200,
-
-
-    column : function(c){
-        var col = new Ext.form.Column(c);
-        this.start(col);
-        if(arguments.length > 1){ // duplicate code required because of Opera
-            this.add.apply(this, Array.prototype.slice.call(arguments, 1));
-            this.end();
-        }
-        return col;
-    },
-
-
-    fieldset : function(c){
-        var fs = new Ext.form.FieldSet(c);
-        this.start(fs);
-        if(arguments.length > 1){ // duplicate code required because of Opera
-            this.add.apply(this, Array.prototype.slice.call(arguments, 1));
-            this.end();
-        }
-        return fs;
-    },
-
-
-    container : function(c){
-        var l = new Ext.form.Layout(c);
-        this.start(l);
-        if(arguments.length > 1){ // duplicate code required because of Opera
-            this.add.apply(this, Array.prototype.slice.call(arguments, 1));
-            this.end();
-        }
-        return l;
-    },
-
-
-    start : function(c){
-        // cascade label info
-        Ext.applyIf(c, {'labelAlign': this.active.labelAlign, 'labelWidth': this.active.labelWidth, 'itemCls': this.active.itemCls});
-        this.active.stack.push(c);
-        c.ownerCt = this.active;
-        this.active = c;
-        return this;
-    },
-
-
-    end : function(){
-        if(this.active == this.root){
-            return this;
-        }
-        this.active = this.active.ownerCt;
-        return this;
-    },
-
-
-    add : function(){
-        this.active.stack.push.apply(this.active.stack, arguments);
-        var r = [];
-        for(var i = 0, a = arguments, len = a.length; i < len; i++) {
-            if(a[i].isFormField){
-                r.push(a[i]);
-            }
-        }
-        if(r.length > 0){
-            Ext.form.Form.superclass.add.apply(this, r);
-        }
-        return this;
-    },
-
-
-    render : function(ct){
-        ct = Ext.get(ct);
-        var o = this.autoCreate || {
-            tag: 'form',
-            method : this.method || 'POST',
-            id : this.id || Ext.id()
-        };
-        this.initEl(ct.createChild(o));
-
-        this.root.render(this.el);
-
-        this.items.each(function(f){
-            f.render('x-form-el-'+f.id);
-        });
-
-        if(this.buttons.length > 0){
-            // tables are required to maintain order and for correct IE layout
-            var tb = this.el.createChild({cls:'x-form-btns-ct', cn: {
-                cls:"x-form-btns x-form-btns-"+this.buttonAlign,
-                html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'
-            }}, null, true);
-            var tr = tb.getElementsByTagName('tr')[0];
-            for(var i = 0, len = this.buttons.length; i < len; i++) {
-                var b = this.buttons[i];
-                var td = document.createElement('td');
-                td.className = 'x-form-btn-td';
-                b.render(tr.appendChild(td));
-            }
-        }
-        if(this.monitorValid){ // initialize after render
-            this.startMonitoring();
-        }
-        return this;
-    },
-
-
-    addButton : function(config, handler, scope){
-        var bc = {
-            handler: handler,
-            scope: scope,
-            minWidth: this.minButtonWidth,
-            hideParent:true
-        };
-        if(typeof config == "string"){
-            bc.text = config;
-        }else{
-            Ext.apply(bc, config);
-        }
-        var btn = new Ext.Button(null, bc);
-        this.buttons.push(btn);
-        return btn;
-    },
-
-
-    startMonitoring : function(){
-        if(!this.bound){
-            this.bound = true;
-            Ext.TaskMgr.start({
-                run : this.bindHandler,
-                interval : this.monitorPoll || 200,
-                scope: this
-            });
-        }
-    },
-
-
-    stopMonitoring : function(){
-        this.bound = false;
-    },
-
-    // private
-    bindHandler : function(){
-        if(!this.bound){
-            return false; // stops binding
-        }
-        var valid = true;
-        this.items.each(function(f){
-            if(!f.isValid(true)){
-                valid = false;
-                return false;
-            }
-        });
-        for(var i = 0, len = this.buttons.length; i < len; i++){
-            var btn = this.buttons[i];
-            if(btn.formBind === true && btn.disabled === valid){
-                btn.setDisabled(!valid);
-            }
-        }
-        this.fireEvent('clientvalidation', this, valid);
-    }
-});
-
-
-// back compat
-Ext.Form = Ext.form.Form;
-
-
-// define the action interface
-Ext.form.Action = function(form, options){
-    this.form = form;
-    this.options = options || {};
-};
-
-Ext.form.Action.CLIENT_INVALID = 'client';
-Ext.form.Action.SERVER_INVALID = 'server';
-Ext.form.Action.CONNECT_FAILURE = 'connect';
-Ext.form.Action.LOAD_FAILURE = 'load';
-
-Ext.form.Action.prototype = {
-    type : 'default',
-    failureType : undefined,
-    response : undefined,
-    result : undefined,
-
-    // interface method
-    run : function(options){
-
-    },
-
-    // interface method
-    success : function(response){
-
-    },
-
-    // interface method
-    handleResponse : function(response){
-
-    },
-
-    // default connection failure
-    failure : function(response){
-        this.response = response;
-        this.failureType = Ext.form.Action.CONNECT_FAILURE;
-        this.form.afterAction(this, false);
-    },
-
-    processResponse : function(response){
-        this.response = response;
-        if(!response.responseText){
-            return true;
-        }
-        this.result = this.handleResponse(response);
-        return this.result;
-    },
-
-    // utility functions used internally
-    getUrl : function(appendParams){
-        var url = this.options.url || this.form.url || this.form.el.dom.action;
-        if(appendParams){
-            var p = this.getParams();
-            if(p){
-                url += (url.indexOf('?') != -1 ? '&' : '?') + p;
-            }
-        }
-        return url;
-    },
-
-    getMethod : function(){
-        return (this.options.method || this.form.method || this.form.el.dom.method || 'POST').toUpperCase();
-    },
-
-    getParams : function(){
-        var bp = this.form.baseParams;
-        var p = this.options.params;
-        if(p){
-            if(typeof p == "object"){
-                p = Ext.urlEncode(Ext.applyIf(p, bp));
-            }else if(typeof p == 'string' && bp){
-                p += '&' + Ext.urlEncode(bp);
-            }
-        }else if(bp){
-            p = Ext.urlEncode(bp);
-        }
-        return p;
-    },
-
-    createCallback : function(){
-        return {
-            success: this.success,
-            failure: this.failure,
-            scope: this,
-            timeout: (this.form.timeout*1000),
-            upload: this.form.fileUpload ? this.success : undefined
-        };
-    }
-};
-
-Ext.form.Action.Submit = function(form, options){
-    Ext.form.Action.Submit.superclass.constructor.call(this, form, options);
-};
-
-Ext.extend(Ext.form.Action.Submit, Ext.form.Action, {
-    type : 'submit',
-
-    run : function(){
-        var o = this.options;
-        var isPost = this.getMethod() == 'POST';
-        if(o.clientValidation === false || this.form.isValid()){
-            Ext.lib.Ajax.formRequest(
-                this.form.el.dom,
-                this.getUrl(!isPost),
-                this.createCallback(),
-                isPost ? this.getParams() : null, this.form.fileUpload, Ext.SSL_SECURE_URL);
-
-        }else if (o.clientValidation !== false){ // client validation failed
-            this.failureType = Ext.form.Action.CLIENT_INVALID;
-            this.form.afterAction(this, false);
-        }
-    },
-
-    success : function(response){
-        var result = this.processResponse(response);
-        if(result === true || result.success){
-            this.form.afterAction(this, true);
-            return;
-        }
-        if(result.errors){
-            this.form.markInvalid(result.errors);
-            this.failureType = Ext.form.Action.SERVER_INVALID;
-        }
-        this.form.afterAction(this, false);
-    },
-
-    handleResponse : function(response){
-        if(this.form.errorReader){
-            var rs = this.form.errorReader.read(response);
-            var errors = [];
-            if(rs.records){
-                for(var i = 0, len = rs.records.length; i < len; i++) {
-                    var r = rs.records[i];
-                    errors[i] = r.data;
-                }
-            }
-            if(errors.length < 1){
-                errors = null;
-            }
-            return {
-                success : rs.success,
-                errors : errors
-            };
-        }
-        return Ext.decode(response.responseText);
-    }
-});
-
-
-Ext.form.Action.Load = function(form, options){
-    Ext.form.Action.Load.superclass.constructor.call(this, form, options);
-    this.reader = this.form.reader;
-};
-
-Ext.extend(Ext.form.Action.Load, Ext.form.Action, {
-    type : 'load',
-
-    run : function(){
-        Ext.lib.Ajax.request(
-            this.getMethod(),
-            this.getUrl(false),
-            this.createCallback(),
-            this.getParams());
-    },
-
-    success : function(response){
-        var result = this.processResponse(response);
-        if(result === true || !result.success || !result.data){
-            this.failureType = Ext.form.Action.LOAD_FAILURE;
-            this.form.afterAction(this, false);
-            return;
-        }
-        this.form.clearInvalid();
-        this.form.setValues(result.data);
-        this.form.afterAction(this, true);
-    },
-
-    handleResponse : function(response){
-        if(this.form.reader){
-            var rs = this.form.reader.read(response);
-            var data = rs.records && rs.records[0] ? rs.records[0].data : null;
-            return {
-                success : rs.success,
-                data : data
-            };
-        }
-        return Ext.decode(response.responseText);
-    }
-});
-
-Ext.form.Action.ACTION_TYPES = {
-    'load' : Ext.form.Action.Load,
-    'submit' : Ext.form.Action.Submit
-};
-
-
-Ext.form.Layout = function(config){
-    Ext.form.Layout.superclass.constructor.call(this, config);
-    this.stack = [];
-};
-
-Ext.extend(Ext.form.Layout, Ext.Component, {
-
-
-
-
-
-    clear : true,
-
-    labelSeparator : ':',
-
-    hideLabels : false,
-
-    // private
-    defaultAutoCreate : {tag: 'div', cls: 'x-form-ct'},
-
-    // private
-    onRender : function(ct, position){
-        if(this.el){ // from markup
-            this.el = Ext.get(this.el);
-        }else {  // generate
-            var cfg = this.getAutoCreate();
-            this.el = ct.createChild(cfg, position);
-        }
-        if(this.style){
-            this.el.applyStyles(this.style);
-        }
-        if(this.labelAlign){
-            this.el.addClass('x-form-label-'+this.labelAlign);
-        }
-        if(this.hideLabels){
-            this.labelStyle = "display:none";
-            this.elementStyle = "padding-left:0;";
-        }else{
-            if(typeof this.labelWidth == 'number'){
-                this.labelStyle = "width:"+this.labelWidth+"px;";
-                this.elementStyle = "padding-left:"+((this.labelWidth+(typeof this.labelPad == 'number' ? this.labelPad : 5))+'px')+";";
-            }
-            if(this.labelAlign == 'top'){
-                this.labelStyle = "width:auto;";
-                this.elementStyle = "padding-left:0;";
-            }
-        }
-        var stack = this.stack;
-        var slen = stack.length;
-        if(slen > 0){
-            if(!this.fieldTpl){
-                var t = new Ext.Template(
-                    '<div class="x-form-item {5}">',
-                        '<label for="{0}" style="{2}">{1}{4}</label>',
-                        '<div class="x-form-element" id="x-form-el-{0}" style="{3}">',
-                        '</div>',
-                    '</div><div class="x-form-clear-left"></div>'
-                );
-                t.disableFormats = true;
-                t.compile();
-                Ext.form.Layout.prototype.fieldTpl = t;
-            }
-            for(var i = 0; i < slen; i++) {
-                if(stack[i].isFormField){
-                    this.renderField(stack[i]);
-                }else{
-                    this.renderComponent(stack[i]);
-                }
-            }
-        }
-        if(this.clear){
-            this.el.createChild({cls:'x-form-clear'});
-        }
-    },
-
-    // private
-    renderField : function(f){
-       this.fieldTpl.append(this.el, [
-               f.id, f.fieldLabel,
-               f.labelStyle||this.labelStyle||'',
-               this.elementStyle||'',
-               typeof f.labelSeparator == 'undefined' ? this.labelSeparator : f.labelSeparator,
-               f.itemCls||this.itemCls||''
-       ]);
-    },
-
-    // private
-    renderComponent : function(c){
-        c.render(this.el);
-    }
-});
-
-
-Ext.form.Column = function(config){
-    Ext.form.Column.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.Column, Ext.form.Layout, {
-
-
-
-    // private
-    defaultAutoCreate : {tag: 'div', cls: 'x-form-ct x-form-column'},
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.Column.superclass.onRender.call(this, ct, position);
-        if(this.width){
-            this.el.setWidth(this.width);
-        }
-    }
-});
-
-
-Ext.form.FieldSet = function(config){
-    Ext.form.FieldSet.superclass.constructor.call(this, config);
-};
-
-Ext.extend(Ext.form.FieldSet, Ext.form.Layout, {
-
-
-
-    // private
-    defaultAutoCreate : {tag: 'fieldset', cn: {tag:'legend'}},
-
-    // private
-    onRender : function(ct, position){
-        Ext.form.FieldSet.superclass.onRender.call(this, ct, position);
-        if(this.legend){
-            this.setLegend(this.legend);
-        }
-    },
-
-    // private
-    setLegend : function(text){
-        if(this.rendered){
-            this.el.child('legend').update(text);
-        }
-    }
-});
-
-Ext.form.VTypes = function(){
-    // closure these in so they are only created once.
-    var alpha = /^[a-zA-Z_]+$/;
-    var alphanum = /^[a-zA-Z0-9_]+$/;
-    var email = /^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;
-    var url = /(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
-
-    // All these messages and functions are configurable
-    return {
-
-        'email' : function(v){
-            return email.test(v);
-        },
-
-        'emailText' : 'This field should be an e-mail address in the format "user@domain.com"',
-
-        'emailMask' : /[a-z0-9_\.\-@]/i,
-
-
-        'url' : function(v){
-            return url.test(v);
-        },
-
-        'urlText' : 'This field should be a URL in the format "http:/'+'/www.domain.com"',
-
-
-        'alpha' : function(v){
-            return alpha.test(v);
-        },
-
-        'alphaText' : 'This field should only contain letters and _',
-
-        'alphaMask' : /[a-z_]/i,
-
-
-        'alphanum' : function(v){
-            return alphanum.test(v);
-        },
-
-        'alphanumText' : 'This field should only contain letters, numbers and _',
-
-        'alphanumMask' : /[a-z0-9_]/i
-    };
-}();
diff --git a/lib/web/extjs/package/form/form.js b/lib/web/extjs/package/form/form.js
deleted file mode 100644
index a28f8c57681f17a6545a65af78f04e783b72aa1b..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/form/form.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.form.Field=function(config){Ext.form.Field.superclass.constructor.call(this,config);};Ext.extend(Ext.form.Field,Ext.BoxComponent,{invalidClass:"x-form-invalid",invalidText:"The value in this field is invalid",focusClass:"x-form-focus",validationEvent:"keyup",validateOnBlur:true,validationDelay:250,defaultAutoCreate:{tag:"input",type:"text",size:"20",autocomplete:"off"},fieldClass:"x-form-field",msgTarget:'qtip',msgFx:'normal',inputType:undefined,isFormField:true,hasFocus:false,value:undefined,initComponent:function(){Ext.form.Field.superclass.initComponent.call(this);this.addEvents({focus:true,blur:true,specialkey:true,change:true,invalid:true,valid:true});},getName:function(){return this.rendered&&this.el.dom.name?this.el.dom.name:(this.hiddenName||'');},applyTo:function(target){this.allowDomMove=false;this.el=Ext.get(target);this.render(this.el.dom.parentNode);return this;},onRender:function(ct,position){Ext.form.Field.superclass.onRender.call(this,ct,position);if(!this.el){var cfg=this.getAutoCreate();if(!cfg.name){cfg.name=this.name||this.id;}
-if(this.inputType){cfg.type=this.inputType;}
-if(this.tabIndex!==undefined){cfg.tabIndex=this.tabIndex;}
-this.el=ct.createChild(cfg,position);}
-var type=this.el.dom.type;if(type){if(type=='password'){type='text';}
-this.el.addClass('x-form-'+type);}
-if(this.readOnly){this.el.dom.readOnly=true;}
-this.el.addClass([this.fieldClass,this.cls]);this.initValue();},initValue:function(){if(this.value!==undefined){this.setValue(this.value);}else if(this.el.dom.value.length>0){this.setValue(this.el.dom.value);}},isDirty:function(){if(this.disabled){return false;}
-return String(this.getValue())!==String(this.originalValue);},afterRender:function(){Ext.form.Field.superclass.afterRender.call(this);this.initEvents();},fireKey:function(e){if(e.isNavKeyPress()){this.fireEvent("specialkey",this,e);}},reset:function(){this.setValue(this.originalValue);this.clearInvalid();},initEvents:function(){this.el.on(Ext.isIE?"keydown":"keypress",this.fireKey,this);this.el.on("focus",this.onFocus,this);this.el.on("blur",this.onBlur,this);this.originalValue=this.getValue();},onFocus:function(){if(!Ext.isOpera){this.el.addClass(this.focusClass);}
-this.hasFocus=true;this.startValue=this.getValue();this.fireEvent("focus",this);},onBlur:function(){this.el.removeClass(this.focusClass);this.hasFocus=false;if(this.validationEvent!==false&&this.validateOnBlur&&this.validationEvent!="blur"){this.validate();}
-var v=this.getValue();if(v!=this.startValue){this.fireEvent('change',this,v,this.startValue);}
-this.fireEvent("blur",this);},isValid:function(preventMark){if(this.disabled){return true;}
-var restore=this.preventMark;this.preventMark=preventMark===true;var v=this.validateValue(this.getRawValue());this.preventMark=restore;return v;},validate:function(){if(this.disabled||this.validateValue(this.getRawValue())){this.clearInvalid();return true;}
-return false;},validateValue:function(value){return true;},markInvalid:function(msg){if(!this.rendered||this.preventMark){return;}
-this.el.addClass(this.invalidClass);msg=msg||this.invalidText;switch(this.msgTarget){case'qtip':this.el.dom.qtip=msg;this.el.dom.qclass='x-form-invalid-tip';break;case'title':this.el.dom.title=msg;break;case'under':if(!this.errorEl){var elp=this.el.findParent('.x-form-element',5,true);this.errorEl=elp.createChild({cls:'x-form-invalid-msg'});this.errorEl.setWidth(elp.getWidth(true)-20);}
-this.errorEl.update(msg);Ext.form.Field.msgFx[this.msgFx].show(this.errorEl,this);break;case'side':if(!this.errorIcon){var elp=this.el.findParent('.x-form-element',5,true);this.errorIcon=elp.createChild({cls:'x-form-invalid-icon'});}
-this.alignErrorIcon();this.errorIcon.dom.qtip=msg;this.errorIcon.dom.qclass='x-form-invalid-tip';this.errorIcon.show();break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML=msg;t.style.display=this.msgDisplay;break;}
-this.fireEvent('invalid',this,msg);},alignErrorIcon:function(){this.errorIcon.alignTo(this.el,'tl-tr',[2,0]);},clearInvalid:function(){if(!this.rendered||this.preventMark){return;}
-this.el.removeClass(this.invalidClass);switch(this.msgTarget){case'qtip':this.el.dom.qtip='';break;case'title':this.el.dom.title='';break;case'under':if(this.errorEl){Ext.form.Field.msgFx[this.msgFx].hide(this.errorEl,this);}
-break;case'side':if(this.errorIcon){this.errorIcon.dom.qtip='';this.errorIcon.hide();}
-break;default:var t=Ext.getDom(this.msgTarget);t.innerHTML='';t.style.display='none';break;}
-this.fireEvent('valid',this);},getRawValue:function(){return this.el.getValue();},getValue:function(){var v=this.el.getValue();if(v==this.emptyText||v===undefined){v='';}
-return v;},setRawValue:function(v){return this.el.dom.value=(v===null||v===undefined?'':v);},setValue:function(v){this.value=v;if(this.rendered){this.el.dom.value=(v===null||v===undefined?'':v);this.validate();}},adjustSize:function(w,h){var s=Ext.form.Field.superclass.adjustSize.call(this,w,h);s.width=this.adjustWidth(this.el.dom.tagName,s.width);return s;},adjustWidth:function(tag,w){tag=tag.toLowerCase();if(typeof w=='number'&&Ext.isStrict&&!Ext.isSafari){if(Ext.isIE&&(tag=='input'||tag=='textarea')){if(tag=='input'){return w+2;}
-if(tag='textarea'){return w-2;}}else if(Ext.isGecko&&tag=='textarea'){return w-6;}else if(Ext.isOpera){if(tag=='input'){return w+2;}
-if(tag='textarea'){return w-2;}}}
-return w;}});Ext.form.Field.msgFx={normal:{show:function(msgEl,f){msgEl.setDisplayed('block');},hide:function(msgEl,f){msgEl.setDisplayed(false).update('');}},slide:{show:function(msgEl,f){msgEl.slideIn('t',{stopFx:true});},hide:function(msgEl,f){msgEl.slideOut('t',{stopFx:true,useDisplay:true});}},slideRight:{show:function(msgEl,f){msgEl.fixDisplay();msgEl.alignTo(f.el,'tl-tr');msgEl.slideIn('l',{stopFx:true});},hide:function(msgEl,f){msgEl.slideOut('l',{stopFx:true,useDisplay:true});}}};
-
-Ext.form.TextField=function(config){Ext.form.TextField.superclass.constructor.call(this,config);this.addEvents({autosize:true});};Ext.extend(Ext.form.TextField,Ext.form.Field,{grow:false,growMin:30,growMax:800,vtype:null,maskRe:null,disableKeyFilter:false,allowBlank:true,minLength:0,maxLength:Number.MAX_VALUE,minLengthText:"The minimum length for this field is {0}",maxLengthText:"The maximum length for this field is {0}",selectOnFocus:false,blankText:"This field is required",validator:null,regex:null,regexText:"",emptyText:null,emptyClass:'x-form-empty-field',initEvents:function(){Ext.form.TextField.superclass.initEvents.call(this);if(this.validationEvent=='keyup'){this.validationTask=new Ext.util.DelayedTask(this.validate,this);this.el.on('keyup',this.filterValidation,this);}
-else if(this.validationEvent!==false){this.el.on(this.validationEvent,this.validate,this,{buffer:this.validationDelay});}
-if(this.selectOnFocus||this.emptyText){this.on("focus",this.preFocus,this);if(this.emptyText){this.on('blur',this.postBlur,this);this.applyEmptyText();}}
-if(this.maskRe||(this.vtype&&this.disableKeyFilter!==true&&(this.maskRe=Ext.form.VTypes[this.vtype+'Mask']))){this.el.on("keypress",this.filterKeys,this);}
-if(this.grow){this.el.on("keyup",this.onKeyUp,this,{buffer:50});this.el.on("click",this.autoSize,this);}},filterValidation:function(e){if(!e.isNavKeyPress()){this.validationTask.delay(this.validationDelay);}},onKeyUp:function(e){if(!e.isNavKeyPress()){this.autoSize();}},reset:function(){Ext.form.TextField.superclass.reset.call(this);this.applyEmptyText();},applyEmptyText:function(){if(this.rendered&&this.emptyText&&this.getRawValue().length<1){this.setRawValue(this.emptyText);this.el.addClass(this.emptyClass);}},preFocus:function(){if(this.emptyText){if(this.getRawValue()==this.emptyText){this.setRawValue('');}
-this.el.removeClass(this.emptyClass);}
-if(this.selectOnFocus){this.el.dom.select();}},postBlur:function(){this.applyEmptyText();},filterKeys:function(e){var k=e.getKey();if(!Ext.isIE&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}
-if(Ext.isIE&&(k==e.BACKSPACE||k==e.DELETE||e.isNavKeyPress()||k==e.HOME||k==e.END)){return;}
-var c=e.getCharCode();if(!this.maskRe.test(String.fromCharCode(c)||'')){e.stopEvent();}},setValue:function(v){if(this.emptyText&&v!==undefined&&v!==null&&v!==''){this.el.removeClass(this.emptyClass);}
-Ext.form.TextField.superclass.setValue.apply(this,arguments);},validateValue:function(value){if(value.length<1||value===this.emptyText){if(this.allowBlank){this.clearInvalid();return true;}else{this.markInvalid(this.blankText);return false;}}
-if(value.length<this.minLength){this.markInvalid(String.format(this.minLengthText,this.minLength));return false;}
-if(value.length>this.maxLength){this.markInvalid(String.format(this.maxLengthText,this.maxLength));return false;}
-if(this.vtype){var vt=Ext.form.VTypes;if(!vt[this.vtype](value,this)){this.markInvalid(this.vtypeText||vt[this.vtype+'Text']);return false;}}
-if(typeof this.validator=="function"){var msg=this.validator(value);if(msg!==true){this.markInvalid(msg);return false;}}
-if(this.regex&&!this.regex.test(value)){this.markInvalid(this.regexText);return false;}
-return true;},selectText:function(start,end){var v=this.getRawValue();if(v.length>0){start=start===undefined?0:start;end=end===undefined?v.length:end;var d=this.el.dom;if(d.setSelectionRange){d.setSelectionRange(start,end);}else if(d.createTextRange){var range=d.createTextRange();range.moveStart("character",start);range.moveEnd("character",v.length-end);range.select();}}},autoSize:function(){if(!this.grow||!this.rendered){return;}
-if(!this.metrics){this.metrics=Ext.util.TextMetrics.createInstance(this.el);}
-var el=this.el;var v=el.dom.value+"&#160;";var w=Math.min(this.growMax,Math.max(this.metrics.getWidth(v)+10,this.growMin));this.el.setWidth(w);this.fireEvent("autosize",this,w);}});
-
-Ext.form.TriggerField=function(config){Ext.form.TriggerField.superclass.constructor.call(this,config);this.mimicing=false;this.on('disable',this.disableWrapper,this);this.on('enable',this.enableWrapper,this);};Ext.extend(Ext.form.TriggerField,Ext.form.TextField,{defaultAutoCreate:{tag:"input",type:"text",size:"16",autocomplete:"off"},hideTrigger:false,autoSize:Ext.emptyFn,monitorTab:true,deferHeight:true,onResize:function(w,h){Ext.form.TriggerField.superclass.onResize.apply(this,arguments);if(typeof w=='number'){this.el.setWidth(this.adjustWidth('input',w-this.trigger.getWidth()));}},adjustSize:Ext.BoxComponent.prototype.adjustSize,getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},alignErrorIcon:function(){this.errorIcon.alignTo(this.wrap,'tl-tr',[2,0]);},onRender:function(ct,position){Ext.form.TriggerField.superclass.onRender.call(this,ct,position);this.wrap=this.el.wrap({cls:"x-form-field-wrap"});this.trigger=this.wrap.createChild(this.triggerConfig||{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.triggerClass});if(this.hideTrigger){this.trigger.setDisplayed(false);}
-this.initTrigger();if(!this.width){this.wrap.setWidth(this.el.getWidth()+this.trigger.getWidth());}},initTrigger:function(){this.trigger.on("click",this.onTriggerClick,this,{preventDefault:true});this.trigger.addClassOnOver('x-form-trigger-over');this.trigger.addClassOnClick('x-form-trigger-click');},onDestroy:function(){if(this.trigger){this.trigger.removeAllListeners();this.trigger.remove();}
-if(this.wrap){this.wrap.remove();}
-Ext.form.TriggerField.superclass.onDestroy.call(this);},onFocus:function(){Ext.form.TriggerField.superclass.onFocus.call(this);if(!this.mimicing){this.wrap.addClass('x-trigger-wrap-focus');this.mimicing=true;Ext.get(Ext.isIE?document.body:document).on("mousedown",this.mimicBlur,this);if(this.monitorTab){this.el.on("keydown",this.checkTab,this);}}},checkTab:function(e){if(e.getKey()==e.TAB){this.triggerBlur();}},onBlur:function(){},mimicBlur:function(e,t){if(!this.wrap.contains(t)&&this.validateBlur()){this.triggerBlur();}},triggerBlur:function(){this.mimicing=false;Ext.get(Ext.isIE?document.body:document).un("mousedown",this.mimicBlur);if(this.monitorTab){this.el.un("keydown",this.checkTab,this);}
-this.beforeBlur();this.wrap.removeClass('x-trigger-wrap-focus');Ext.form.TriggerField.superclass.onBlur.call(this);},beforeBlur:Ext.emptyFn,validateBlur:function(e,t){return true;},disableWrapper:function(){if(this.wrap){this.wrap.addClass('x-item-disabled');}},enableWrapper:function(){if(this.wrap){this.wrap.removeClass('x-item-disabled');}},onShow:function(){if(this.wrap){this.wrap.dom.style.display='';this.wrap.dom.style.visibility='visible';}},onHide:function(){this.wrap.dom.style.display='none';},onTriggerClick:Ext.emptyFn});Ext.form.TwinTriggerField=Ext.extend(Ext.form.TriggerField,{initComponent:function(){Ext.form.TwinTriggerField.superclass.initComponent.call(this);this.triggerConfig={tag:'span',cls:'x-form-twin-triggers',cn:[{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger1Class},{tag:"img",src:Ext.BLANK_IMAGE_URL,cls:"x-form-trigger "+this.trigger2Class}]};},getTrigger:function(index){return this.triggers[index];},initTrigger:function(){var ts=this.trigger.select('.x-form-trigger',true);this.wrap.setStyle('overflow','hidden');var triggerField=this;ts.each(function(t,all,index){t.hide=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='none';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};t.show=function(){var w=triggerField.wrap.getWidth();this.dom.style.display='';triggerField.el.setWidth(w-triggerField.trigger.getWidth());};var triggerIndex='Trigger'+(index+1);if(this['hide'+triggerIndex]){t.dom.style.display='none';}
-t.on("click",this['on'+triggerIndex+'Click'],this,{preventDefault:true});t.addClassOnOver('x-form-trigger-over');t.addClassOnClick('x-form-trigger-click');},this);this.triggers=ts.elements;},onTrigger1Click:Ext.emptyFn,onTrigger2Click:Ext.emptyFn});
-
-Ext.form.TextArea=function(config){Ext.form.TextArea.superclass.constructor.call(this,config);if(this.minHeight!==undefined){this.growMin=this.minHeight;}
-if(this.maxHeight!==undefined){this.growMax=this.maxHeight;}};Ext.extend(Ext.form.TextArea,Ext.form.TextField,{growMin:60,growMax:1000,preventScrollbars:false,onRender:function(ct,position){if(!this.el){this.defaultAutoCreate={tag:"textarea",style:"width:300px;height:60px;",autocomplete:"off"};}
-Ext.form.TextArea.superclass.onRender.call(this,ct,position);if(this.grow){this.textSizeEl=Ext.DomHelper.append(document.body,{tag:"pre",cls:"x-form-grow-sizer"});if(this.preventScrollbars){this.el.setStyle("overflow","hidden");}
-this.el.setHeight(this.growMin);}},onDestroy:function(){if(this.textSizeEl){this.textSizeEl.remove();}
-Ext.form.TextArea.superclass.onDestroy.call(this);},onKeyUp:function(e){if(!e.isNavKeyPress()||e.getKey()==e.ENTER){this.autoSize();}},autoSize:function(){if(!this.grow||!this.textSizeEl){return;}
-var el=this.el;var v=el.dom.value;var ts=this.textSizeEl;Ext.fly(ts).setWidth(this.el.getWidth());if(v.length<1){v="&#160;&#160;";}else{if(Ext.isIE){v=v.replace(/\n/g,'<p>&#160;</p>');}
-v+="&#160;\n&#160;";}
-ts.innerHTML=v;var h=Math.min(this.growMax,Math.max(ts.offsetHeight,this.growMin));if(h!=this.lastHeight){this.lastHeight=h;this.el.setHeight(h);this.fireEvent("autosize",this,h);}},setValue:function(v){Ext.form.TextArea.superclass.setValue.call(this,v);this.autoSize();}});
-
-Ext.form.NumberField=function(config){Ext.form.NumberField.superclass.constructor.call(this,config);};Ext.extend(Ext.form.NumberField,Ext.form.TextField,{fieldClass:"x-form-field x-form-num-field",allowDecimals:true,decimalSeparator:".",decimalPrecision:2,allowNegative:true,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,minText:"The minimum value for this field is {0}",maxText:"The maximum value for this field is {0}",nanText:"{0} is not a valid number",initEvents:function(){Ext.form.NumberField.superclass.initEvents.call(this);var allowed="0123456789";if(this.allowDecimals){allowed+=this.decimalSeparator;}
-if(this.allowNegative){allowed+="-";}
-var keyPress=function(e){var k=e.getKey();if(!Ext.isIE&&(e.isNavKeyPress()||k==e.BACKSPACE||(k==e.DELETE&&e.button==-1))){return;}
-var c=e.getCharCode();if(allowed.indexOf(String.fromCharCode(c))===-1){e.stopEvent();}};this.el.on("keypress",keyPress,this);},validateValue:function(value){if(!Ext.form.NumberField.superclass.validateValue.call(this,value)){return false;}
-if(value.length<1){return true;}
-value=String(value).replace(this.decimalSeparator,".");if(isNaN(value)){this.markInvalid(String.format(this.nanText,value));return false;}
-var num=this.parseValue(value);if(num<this.minValue){this.markInvalid(String.format(this.minText,this.minValue));return false;}
-if(num>this.maxValue){this.markInvalid(String.format(this.maxText,this.maxValue));return false;}
-return true;},parseValue:function(value){return parseFloat(String(value).replace(this.decimalSeparator,"."));},fixPrecision:function(value){if(!this.allowDecimals||this.decimalPrecision==-1||isNaN(value)||value==0||!value){return value;}
-var scale=Math.pow(10,this.decimalPrecision+1);var fixed=this.decimalPrecisionFcn(value*scale);fixed=this.decimalPrecisionFcn(fixed/10);return fixed/(scale/10);},decimalPrecisionFcn:function(v){return Math.floor(v);}});
-
-Ext.form.DateField=function(config){Ext.form.DateField.superclass.constructor.call(this,config);if(typeof this.minValue=="string")this.minValue=this.parseDate(this.minValue);if(typeof this.maxValue=="string")this.maxValue=this.parseDate(this.maxValue);this.ddMatch=null;if(this.disabledDates){var dd=this.disabledDates;var re="(?:";for(var i=0;i<dd.length;i++){re+=dd[i];if(i!=dd.length-1)re+="|";}
-this.ddMatch=new RegExp(re+")");}};Ext.extend(Ext.form.DateField,Ext.form.TriggerField,{format:"m/d/y",altFormats:"m/d/Y|m-d-y|m-d-Y|m/d|m-d|md|mdy|mdY|d",disabledDays:null,disabledDaysText:"Disabled",disabledDates:null,disabledDatesText:"Disabled",minValue:null,maxValue:null,minText:"The date in this field must be after {0}",maxText:"The date in this field must be before {0}",invalidText:"{0} is not a valid date - it must be in the format {1}",triggerClass:'x-form-date-trigger',defaultAutoCreate:{tag:"input",type:"text",size:"10",autocomplete:"off"},validateValue:function(value){value=this.formatDate(value);if(!Ext.form.DateField.superclass.validateValue.call(this,value)){return false;}
-if(value.length<1){return true;}
-var svalue=value;value=this.parseDate(value);if(!value){this.markInvalid(String.format(this.invalidText,svalue,this.format));return false;}
-var time=value.getTime();if(this.minValue&&time<this.minValue.getTime()){this.markInvalid(String.format(this.minText,this.formatDate(this.minValue)));return false;}
-if(this.maxValue&&time>this.maxValue.getTime()){this.markInvalid(String.format(this.maxText,this.formatDate(this.maxValue)));return false;}
-if(this.disabledDays){var day=value.getDay();for(var i=0;i<this.disabledDays.length;i++){if(day===this.disabledDays[i]){this.markInvalid(this.disabledDaysText);return false;}}}
-var fvalue=this.formatDate(value);if(this.ddMatch&&this.ddMatch.test(fvalue)){this.markInvalid(String.format(this.disabledDatesText,fvalue));return false;}
-return true;},validateBlur:function(){return!this.menu||!this.menu.isVisible();},getValue:function(){return this.parseDate(Ext.form.DateField.superclass.getValue.call(this))||"";},setValue:function(date){Ext.form.DateField.superclass.setValue.call(this,this.formatDate(this.parseDate(date)));},parseDate:function(value){if(!value||value instanceof Date){return value;}
-var v=Date.parseDate(value,this.format);if(!v&&this.altFormats){if(!this.altFormatsArray){this.altFormatsArray=this.altFormats.split("|");}
-for(var i=0,len=this.altFormatsArray.length;i<len&&!v;i++){v=Date.parseDate(value,this.altFormatsArray[i]);}}
-return v;},formatDate:function(date){return(!date||!(date instanceof Date))?date:date.dateFormat(this.format);},menuListeners:{select:function(m,d){this.setValue(d);},show:function(){this.onFocus();},hide:function(){this.focus.defer(10,this);var ml=this.menuListeners;this.menu.un("select",ml.select,this);this.menu.un("show",ml.show,this);this.menu.un("hide",ml.hide,this);}},onTriggerClick:function(){if(this.disabled){return;}
-if(this.menu==null){this.menu=new Ext.menu.DateMenu();}
-Ext.apply(this.menu.picker,{minDate:this.minValue,maxDate:this.maxValue,disabledDatesRE:this.ddMatch,disabledDatesText:this.disabledDatesText,disabledDays:this.disabledDays,disabledDaysText:this.disabledDaysText,format:this.format,minText:String.format(this.minText,this.formatDate(this.minValue)),maxText:String.format(this.maxText,this.formatDate(this.maxValue))});this.menu.on(Ext.apply({},this.menuListeners,{scope:this}));this.menu.picker.setValue(this.getValue()||new Date());this.menu.show(this.el,"tl-bl?");},beforeBlur:function(){var v=this.parseDate(this.getRawValue());if(v){this.setValue(v);}}});
-
-Ext.form.Checkbox=function(config){Ext.form.Checkbox.superclass.constructor.call(this,config);this.addEvents({check:true});};Ext.extend(Ext.form.Checkbox,Ext.form.Field,{focusClass:"x-form-check-focus",fieldClass:"x-form-field",checked:false,defaultAutoCreate:{tag:"input",type:'checkbox',autocomplete:"off"},boxLabel:undefined,onResize:function(){Ext.form.Checkbox.superclass.onResize.apply(this,arguments);if(!this.boxLabel){this.el.alignTo(this.wrap,'c-c');}},initEvents:function(){Ext.form.Checkbox.superclass.initEvents.call(this);this.el.on("click",this.onClick,this);this.el.on("change",this.onClick,this);},getResizeEl:function(){return this.wrap;},getPositionEl:function(){return this.wrap;},onRender:function(ct,position){Ext.form.Checkbox.superclass.onRender.call(this,ct,position);if(this.inputValue!==undefined){this.el.dom.value=this.inputValue;}
-this.wrap=this.el.wrap({cls:"x-form-check-wrap"});if(this.boxLabel){this.wrap.createChild({tag:'label',htmlFor:this.el.id,cls:'x-form-cb-label',html:this.boxLabel});}
-if(this.checked){this.setValue(true);}},initValue:Ext.emptyFn,getValue:function(){if(this.rendered){return this.el.dom.checked;}
-return false;},onClick:function(){if(this.el.dom.checked!=this.checked){this.setValue(this.el.dom.checked);}},setValue:function(v){this.checked=(v===true||v==='true'||v=='1');if(this.el&&this.el.dom){this.el.dom.checked=this.checked;}
-this.fireEvent("check",this,this.checked);}});
-
-Ext.form.Radio=function(){Ext.form.Radio.superclass.constructor.apply(this,arguments);};Ext.extend(Ext.form.Radio,Ext.form.Checkbox,{inputType:'radio',getGroupValue:function(){return this.el.up('form').child('input[name='+this.el.dom.name+']:checked',true).value;}});
-
-Ext.form.ComboBox=function(config){Ext.form.ComboBox.superclass.constructor.call(this,config);this.addEvents({'expand':true,'collapse':true,'beforeselect':true,'select':true,'beforequery':true});if(this.transform){var s=Ext.getDom(this.transform);if(!this.hiddenName){this.hiddenName=s.name;}
-if(!this.store){this.mode='local';var d=[],opts=s.options;for(var i=0,len=opts.length;i<len;i++){var o=opts[i];var value=(Ext.isIE?o.getAttributeNode('value').specified:o.hasAttribute('value'))?o.value:o.text;if(o.selected){this.value=value;}
-d.push([value,o.text]);}
-this.store=new Ext.data.SimpleStore({'id':0,fields:['value','text'],data:d});this.valueField='value';this.displayField='text';}
-s.name=Ext.id();if(!this.lazyRender){this.target=true;this.el=Ext.DomHelper.insertBefore(s,this.autoCreate||this.defaultAutoCreate);s.parentNode.removeChild(s);this.render(this.el.parentNode);}else{s.parentNode.removeChild(s);}}
-this.selectedIndex=-1;if(this.mode=='local'){if(config.queryDelay===undefined){this.queryDelay=10;}
-if(config.minChars===undefined){this.minChars=0;}}};Ext.extend(Ext.form.ComboBox,Ext.form.TriggerField,{defaultAutoCreate:{tag:"input",type:"text",size:"24",autocomplete:"off"},listWidth:undefined,displayField:undefined,valueField:undefined,hiddenName:undefined,listClass:'',selectedClass:'x-combo-selected',triggerClass:'x-form-arrow-trigger',shadow:'sides',listAlign:'tl-bl?',maxHeight:300,triggerAction:'query',minChars:4,typeAhead:false,queryDelay:500,pageSize:0,selectOnFocus:false,queryParam:'query',loadingText:'Loading...',resizable:false,handleHeight:8,editable:true,allQuery:'',mode:'remote',minListWidth:70,forceSelection:false,typeAheadDelay:250,valueNotFoundText:undefined,onRender:function(ct,position){Ext.form.ComboBox.superclass.onRender.call(this,ct,position);if(this.hiddenName){this.hiddenField=this.el.insertSibling({tag:'input',type:'hidden',name:this.hiddenName,id:this.hiddenName},'before',true);this.hiddenField.value=this.hiddenValue!==undefined?this.hiddenValue:this.value!==undefined?this.value:'';this.el.dom.removeAttribute('name');}
-if(Ext.isGecko){this.el.dom.setAttribute('autocomplete','off');}
-var cls='x-combo-list';this.list=new Ext.Layer({shadow:this.shadow,cls:[cls,this.listClass].join(' '),constrain:false});var lw=this.listWidth||Math.max(this.wrap.getWidth(),this.minListWidth);this.list.setWidth(lw);this.list.swallowEvent('mousewheel');this.assetHeight=0;if(this.title){this.header=this.list.createChild({cls:cls+'-hd',html:this.title});this.assetHeight+=this.header.getHeight();}
-this.innerList=this.list.createChild({cls:cls+'-inner'});this.innerList.on('mouseover',this.onViewOver,this);this.innerList.on('mousemove',this.onViewMove,this);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'))
-if(this.pageSize){this.footer=this.list.createChild({cls:cls+'-ft'});this.pageTb=new Ext.PagingToolbar(this.footer,this.store,{pageSize:this.pageSize});this.assetHeight+=this.footer.getHeight();}
-if(!this.tpl){this.tpl='<div class="'+cls+'-item">{'+this.displayField+'}</div>';}
-this.view=new Ext.View(this.innerList,this.tpl,{singleSelect:true,store:this.store,selectedClass:this.selectedClass});this.view.on('click',this.onViewClick,this);this.store.on('beforeload',this.onBeforeLoad,this);this.store.on('load',this.onLoad,this);this.store.on('loadexception',this.collapse,this);if(this.resizable){this.resizer=new Ext.Resizable(this.list,{pinned:true,handles:'se'});this.resizer.on('resize',function(r,w,h){this.maxHeight=h-this.handleHeight-this.list.getFrameWidth('tb')-this.assetHeight;this.listWidth=w;this.restrictHeight();},this);this[this.pageSize?'footer':'innerList'].setStyle('margin-bottom',this.handleHeight+'px');}
-if(!this.editable){this.editable=true;this.setEditable(false);}},initEvents:function(){Ext.form.ComboBox.superclass.initEvents.call(this);this.keyNav=new Ext.KeyNav(this.el,{"up":function(e){this.inKeyMode=true;this.selectPrev();},"down":function(e){if(!this.isExpanded()){this.onTriggerClick();}else{this.inKeyMode=true;this.selectNext();}},"enter":function(e){this.onViewClick();},"esc":function(e){this.collapse();},"tab":function(e){this.onViewClick(false);return true;},scope:this,doRelay:function(foo,bar,hname){if(hname=='down'||this.scope.isExpanded()){return Ext.KeyNav.prototype.doRelay.apply(this,arguments);}
-return true;}});this.queryDelay=Math.max(this.queryDelay||10,this.mode=='local'?10:250);this.dqTask=new Ext.util.DelayedTask(this.initQuery,this);if(this.typeAhead){this.taTask=new Ext.util.DelayedTask(this.onTypeAhead,this);}
-if(this.editable!==false){this.el.on("keyup",this.onKeyUp,this);}
-if(this.forceSelection){this.on('blur',this.doForce,this);}},onDestroy:function(){if(this.view){this.view.setStore(null);this.view.el.removeAllListeners();this.view.el.remove();this.view.purgeListeners();}
-if(this.list){this.list.destroy();}
-if(this.store){this.store.un('beforeload',this.onBeforeLoad,this);this.store.un('load',this.onLoad,this);this.store.un('loadexception',this.collapse,this);}
-Ext.form.ComboBox.superclass.onDestroy.call(this);},fireKey:function(e){if(e.isNavKeyPress()&&!this.list.isVisible()){this.fireEvent("specialkey",this,e);}},onResize:function(w,h){Ext.form.ComboBox.superclass.onResize.apply(this,arguments);if(this.list&&this.listWidth===undefined){var lw=Math.max(w,this.minListWidth);this.list.setWidth(lw);this.innerList.setWidth(lw-this.list.getFrameWidth('lr'))}},setEditable:function(value){if(value==this.editable){return;}
-this.editable=value;if(!value){this.el.dom.setAttribute('readOnly',true);this.el.on('mousedown',this.onTriggerClick,this);this.el.addClass('x-combo-noedit');}else{this.el.dom.setAttribute('readOnly',false);this.el.un('mousedown',this.onTriggerClick,this);this.el.removeClass('x-combo-noedit');}},onBeforeLoad:function(){if(!this.hasFocus){return;}
-this.innerList.update(this.loadingText?'<div class="loading-indicator">'+this.loadingText+'</div>':'');this.restrictHeight();this.selectedIndex=-1;},onLoad:function(){if(!this.hasFocus){return;}
-if(this.store.getCount()>0){this.expand();this.restrictHeight();if(this.lastQuery==this.allQuery){if(this.editable){this.el.dom.select();}
-if(!this.selectByValue(this.value,true)){this.select(0,true);}}else{this.selectNext();if(this.typeAhead&&this.lastKey!=Ext.EventObject.BACKSPACE&&this.lastKey!=Ext.EventObject.DELETE){this.taTask.delay(this.typeAheadDelay);}}}else{this.onEmptyResults();}},onTypeAhead:function(){if(this.store.getCount()>0){var r=this.store.getAt(0);var newValue=r.data[this.displayField];var len=newValue.length;var selStart=this.getRawValue().length;if(selStart!=len){this.setRawValue(newValue);this.selectText(selStart,newValue.length);}}},onSelect:function(record,index){if(this.fireEvent('beforeselect',this,record,index)!==false){this.setValue(record.data[this.valueField||this.displayField]);this.collapse();this.fireEvent('select',this,record,index);}},getValue:function(){if(this.valueField){return typeof this.value!='undefined'?this.value:'';}else{return Ext.form.ComboBox.superclass.getValue.call(this);}},clearValue:function(){if(this.hiddenField){this.hiddenField.value='';}
-this.setRawValue('');this.lastSelectionText='';},setValue:function(v){var text=v;if(this.valueField){var r=this.findRecord(this.valueField,v);if(r){text=r.data[this.displayField];}else if(this.valueNotFoundText!==undefined){text=this.valueNotFoundText;}}
-this.lastSelectionText=text;if(this.hiddenField){this.hiddenField.value=v;}
-Ext.form.ComboBox.superclass.setValue.call(this,text);this.value=v;},findRecord:function(prop,value){var record;if(this.store.getCount()>0){this.store.each(function(r){if(r.data[prop]==value){record=r;return false;}});}
-return record;},onViewMove:function(e,t){this.inKeyMode=false;},onViewOver:function(e,t){if(this.inKeyMode){return;}
-var item=this.view.findItemFromChild(t);if(item){var index=this.view.indexOf(item);this.select(index,false);}},onViewClick:function(doFocus){var index=this.view.getSelectedIndexes()[0];var r=this.store.getAt(index);if(r){this.onSelect(r,index);}
-if(doFocus!==false){this.el.focus();}},restrictHeight:function(){this.innerList.dom.style.height='';var inner=this.innerList.dom;var h=Math.max(inner.clientHeight,inner.offsetHeight,inner.scrollHeight);this.innerList.setHeight(h<this.maxHeight?'auto':this.maxHeight);this.list.beginUpdate();this.list.setHeight(this.innerList.getHeight()+this.list.getFrameWidth('tb')+(this.resizable?this.handleHeight:0)+this.assetHeight);this.list.alignTo(this.el,this.listAlign);this.list.endUpdate();},onEmptyResults:function(){this.collapse();},isExpanded:function(){return this.list.isVisible();},selectByValue:function(v,scrollIntoView){if(v!==undefined&&v!==null){var r=this.findRecord(this.valueField||this.displayField,v);if(r){this.select(this.store.indexOf(r),scrollIntoView);return true;}}
-return false;},select:function(index,scrollIntoView){this.selectedIndex=index;this.view.select(index);if(scrollIntoView!==false){var el=this.view.getNode(index);if(el){this.innerList.scrollChildIntoView(el,false);}}},selectNext:function(){var ct=this.store.getCount();if(ct>0){if(this.selectedIndex==-1){this.select(0);}else if(this.selectedIndex<ct-1){this.select(this.selectedIndex+1);}}},selectPrev:function(){var ct=this.store.getCount();if(ct>0){if(this.selectedIndex==-1){this.select(0);}else if(this.selectedIndex!=0){this.select(this.selectedIndex-1);}}},onKeyUp:function(e){if(this.editable!==false&&!e.isSpecialKey()){this.lastKey=e.getKey();this.dqTask.delay(this.queryDelay);}},validateBlur:function(){return!this.list||!this.list.isVisible();},initQuery:function(){this.doQuery(this.getRawValue());},doForce:function(){if(this.el.dom.value.length>0){this.el.dom.value=this.lastSelectionText===undefined?'':this.lastSelectionText;this.applyEmptyText();}},doQuery:function(q,forceAll){if(q===undefined||q===null){q='';}
-var qe={query:q,forceAll:forceAll,combo:this,cancel:false};if(this.fireEvent('beforequery',qe)===false||qe.cancel){return false;}
-q=qe.query;forceAll=qe.forceAll;if(forceAll===true||(q.length>=this.minChars)){if(this.lastQuery!=q){this.lastQuery=q;if(this.mode=='local'){this.selectedIndex=-1;if(forceAll){this.store.clearFilter();}else{this.store.filter(this.displayField,q);}
-this.onLoad();}else{this.store.baseParams[this.queryParam]=q;this.store.load({params:this.getParams(q)});this.expand();}}else{this.selectedIndex=-1;this.onLoad();}}},getParams:function(q){var p={};if(this.pageSize){p.start=0;p.limit=this.pageSize;}
-return p;},collapse:function(){if(!this.isExpanded()){return;}
-this.list.hide();Ext.get(document).un('mousedown',this.collapseIf,this);this.fireEvent('collapse',this);},collapseIf:function(e){if(!e.within(this.wrap)&&!e.within(this.list)){this.collapse();}},expand:function(){if(this.isExpanded()||!this.hasFocus){return;}
-this.list.alignTo(this.el,this.listAlign);this.list.show();Ext.get(document).on('mousedown',this.collapseIf,this);this.fireEvent('expand',this);},onTriggerClick:function(){if(this.disabled){return;}
-if(this.isExpanded()){this.collapse();this.el.focus();}else{this.hasFocus=true;if(this.triggerAction=='all'){this.doQuery(this.allQuery,true);}else{this.doQuery(this.getRawValue());}
-this.el.focus();}}});
-
-Ext.Editor=function(field,config){Ext.Editor.superclass.constructor.call(this,config);this.field=field;this.addEvents({"beforestartedit":true,"startedit":true,"beforecomplete":true,"complete":true,"specialkey":true});};Ext.extend(Ext.Editor,Ext.Component,{value:"",alignment:"c-c?",shadow:"frame",constrain:false,updateEl:false,onRender:function(ct,position){this.el=new Ext.Layer({shadow:this.shadow,cls:"x-editor",parentEl:ct,shim:this.shim,shadowOffset:4,id:this.id});this.el.setStyle("overflow",Ext.isGecko?"auto":"hidden");if(this.field.msgTarget!='title'){this.field.msgTarget='qtip';}
-this.field.render(this.el);if(Ext.isGecko){this.field.el.dom.setAttribute('autocomplete','off');}
-this.field.show();this.field.on("blur",this.onBlur,this);this.relayEvents(this.field,["specialkey"]);if(this.field.grow){this.field.on("autosize",this.el.sync,this.el,{delay:1});}},startEdit:function(el,value){if(this.editing){this.completeEdit();}
-this.boundEl=Ext.get(el);var v=value!==undefined?value:this.boundEl.dom.innerHTML;if(!this.rendered){this.render(this.parentEl||document.body);}
-if(this.fireEvent("beforestartedit",this,this.boundEl,v)===false){return;}
-this.startValue=v;this.field.setValue(v);if(this.autoSize){var sz=this.boundEl.getSize();switch(this.autoSize){case"width":this.setSize(sz.width,"");break;case"height":this.setSize("",sz.height);break;default:this.setSize(sz.width,sz.height);}}
-this.el.alignTo(this.boundEl,this.alignment);this.editing=true;if(Ext.QuickTips){Ext.QuickTips.disable();}
-this.show();},setSize:function(w,h){this.field.setSize(w,h);if(this.el){this.el.sync();}},realign:function(){this.el.alignTo(this.boundEl,this.alignment);},completeEdit:function(remainVisible){if(!this.editing){return;}
-var v=this.getValue();if(this.revertInvalid!==false&&!this.field.isValid()){v=this.startValue;this.cancelEdit(true);}
-if(String(v)==String(this.startValue)&&this.ignoreNoChange){this.editing=false;this.hide();return;}
-if(this.fireEvent("beforecomplete",this,v,this.startValue)!==false){this.editing=false;if(this.updateEl&&this.boundEl){this.boundEl.update(v);}
-if(remainVisible!==true){this.hide();}
-this.fireEvent("complete",this,v,this.startValue);}},onShow:function(){this.el.show();if(this.hideEl!==false){this.boundEl.hide();}
-this.field.show();if(Ext.isIE&&!this.fixIEFocus){this.fixIEFocus=true;this.deferredFocus.defer(50,this);}else{this.field.focus();}
-this.fireEvent("startedit",this.boundEl,this.startValue);},deferredFocus:function(){if(this.editing){this.field.focus();}},cancelEdit:function(remainVisible){if(this.editing){this.setValue(this.startValue);if(remainVisible!==true){this.hide();}}},onBlur:function(){if(this.allowBlur!==true&&this.editing){this.completeEdit();}},onHide:function(){if(this.editing){this.completeEdit();return;}
-this.field.blur();if(this.field.collapse){this.field.collapse();}
-this.el.hide();if(this.hideEl!==false){this.boundEl.show();}
-if(Ext.QuickTips){Ext.QuickTips.enable();}},setValue:function(v){this.field.setValue(v);},getValue:function(){return this.field.getValue();}});
-
-Ext.form.BasicForm=function(el,config){Ext.apply(this,config);this.items=new Ext.util.MixedCollection(false,function(o){return o.id||(o.id=Ext.id());});this.addEvents({beforeaction:true,actionfailed:true,actioncomplete:true});if(el){this.initEl(el);}
-Ext.form.BasicForm.superclass.constructor.call(this);};Ext.extend(Ext.form.BasicForm,Ext.util.Observable,{timeout:30,activeAction:null,trackResetOnLoad:false,waitMsgTarget:undefined,initEl:function(el){this.el=Ext.get(el);this.id=this.el.id||Ext.id();this.el.on('submit',this.onSubmit,this);this.el.addClass('x-form');},onSubmit:function(e){e.stopEvent();},isValid:function(){var valid=true;this.items.each(function(f){if(!f.validate()){valid=false;}});return valid;},isDirty:function(){var dirty=false;this.items.each(function(f){if(f.isDirty()){dirty=true;return false;}});return dirty;},doAction:function(action,options){if(typeof action=='string'){action=new Ext.form.Action.ACTION_TYPES[action](this,options);}
-if(this.fireEvent('beforeaction',this,action)!==false){this.beforeAction(action);action.run.defer(100,action);}
-return this;},submit:function(options){this.doAction('submit',options);return this;},load:function(options){this.doAction('load',options);return this;},updateRecord:function(record){record.beginEdit();var fs=record.fields;fs.each(function(f){var field=this.findField(f.name);if(field){record.set(f.name,field.getValue());}},this);record.endEdit();return this;},loadRecord:function(record){this.setValues(record.data);return this;},beforeAction:function(action){var o=action.options;if(o.waitMsg){if(this.waitMsgTarget===true){this.el.mask(o.waitMsg,'x-mask-loading');}else if(this.waitMsgTarget){this.waitMsgTarget=Ext.get(this.waitMsgTarget);this.waitMsgTarget.mask(o.waitMsg,'x-mask-loading');}else{Ext.MessageBox.wait(o.waitMsg,o.waitTitle||this.waitTitle||'Please Wait...');}}},afterAction:function(action,success){this.activeAction=null;var o=action.options;if(o.waitMsg){if(this.waitMsgTarget===true){this.el.unmask();}else if(this.waitMsgTarget){this.waitMsgTarget.unmask();}else{Ext.MessageBox.updateProgress(1);Ext.MessageBox.hide();}}
-if(success){if(o.reset){this.reset();}
-Ext.callback(o.success,o.scope,[this,action]);this.fireEvent('actioncomplete',this,action);}else{Ext.callback(o.failure,o.scope,[this,action]);this.fireEvent('actionfailed',this,action);}},findField:function(id){var field=this.items.get(id);if(!field){this.items.each(function(f){if(f.isFormField&&(f.dataIndex==id||f.id==id||f.getName()==id)){field=f;return false;}});}
-return field||null;},markInvalid:function(errors){if(errors instanceof Array){for(var i=0,len=errors.length;i<len;i++){var fieldError=errors[i];var f=this.findField(fieldError.id);if(f){f.markInvalid(fieldError.msg);}}}else{var field,id;for(id in errors){if(typeof errors[id]!='function'&&(field=this.findField(id))){field.markInvalid(errors[id]);}}}
-return this;},setValues:function(values){if(values instanceof Array){for(var i=0,len=values.length;i<len;i++){var v=values[i];var f=this.findField(v.id);if(f){f.setValue(v.value);if(this.trackResetOnLoad){f.originalValue=f.getValue();}}}}else{var field,id;for(id in values){if(typeof values[id]!='function'&&(field=this.findField(id))){field.setValue(values[id]);if(this.trackResetOnLoad){field.originalValue=field.getValue();}}}}
-return this;},getValues:function(asString){var fs=Ext.lib.Ajax.serializeForm(this.el.dom);if(asString===true){return fs;}
-return Ext.urlDecode(fs);},clearInvalid:function(){this.items.each(function(f){f.clearInvalid();});return this;},reset:function(){this.items.each(function(f){f.reset();});return this;},add:function(){this.items.addAll(Array.prototype.slice.call(arguments,0));return this;},remove:function(field){this.items.remove(field);return this;},render:function(){this.items.each(function(f){if(f.isFormField&&!f.rendered&&document.getElementById(f.id)){f.applyTo(f.id);}});return this;},applyToFields:function(o){this.items.each(function(f){Ext.apply(f,o);});return this;},applyIfToFields:function(o){this.items.each(function(f){Ext.applyIf(f,o);});return this;}});Ext.BasicForm=Ext.form.BasicForm;
-
-Ext.form.Form=function(config){Ext.form.Form.superclass.constructor.call(this,null,config);this.url=this.url||this.action;if(!this.root){this.root=new Ext.form.Layout(Ext.applyIf({id:Ext.id()},config));}
-this.active=this.root;this.buttons=[];this.addEvents({clientvalidation:true});};Ext.extend(Ext.form.Form,Ext.form.BasicForm,{buttonAlign:'center',minButtonWidth:75,labelAlign:'left',monitorValid:false,monitorPoll:200,column:function(c){var col=new Ext.form.Column(c);this.start(col);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end();}
-return col;},fieldset:function(c){var fs=new Ext.form.FieldSet(c);this.start(fs);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end();}
-return fs;},container:function(c){var l=new Ext.form.Layout(c);this.start(l);if(arguments.length>1){this.add.apply(this,Array.prototype.slice.call(arguments,1));this.end();}
-return l;},start:function(c){Ext.applyIf(c,{'labelAlign':this.active.labelAlign,'labelWidth':this.active.labelWidth,'itemCls':this.active.itemCls});this.active.stack.push(c);c.ownerCt=this.active;this.active=c;return this;},end:function(){if(this.active==this.root){return this;}
-this.active=this.active.ownerCt;return this;},add:function(){this.active.stack.push.apply(this.active.stack,arguments);var r=[];for(var i=0,a=arguments,len=a.length;i<len;i++){if(a[i].isFormField){r.push(a[i]);}}
-if(r.length>0){Ext.form.Form.superclass.add.apply(this,r);}
-return this;},render:function(ct){ct=Ext.get(ct);var o=this.autoCreate||{tag:'form',method:this.method||'POST',id:this.id||Ext.id()};this.initEl(ct.createChild(o));this.root.render(this.el);this.items.each(function(f){f.render('x-form-el-'+f.id);});if(this.buttons.length>0){var tb=this.el.createChild({cls:'x-form-btns-ct',cn:{cls:"x-form-btns x-form-btns-"+this.buttonAlign,html:'<table cellspacing="0"><tbody><tr></tr></tbody></table><div class="x-clear"></div>'}},null,true);var tr=tb.getElementsByTagName('tr')[0];for(var i=0,len=this.buttons.length;i<len;i++){var b=this.buttons[i];var td=document.createElement('td');td.className='x-form-btn-td';b.render(tr.appendChild(td));}}
-if(this.monitorValid){this.startMonitoring();}
-return this;},addButton:function(config,handler,scope){var bc={handler:handler,scope:scope,minWidth:this.minButtonWidth,hideParent:true};if(typeof config=="string"){bc.text=config;}else{Ext.apply(bc,config);}
-var btn=new Ext.Button(null,bc);this.buttons.push(btn);return btn;},startMonitoring:function(){if(!this.bound){this.bound=true;Ext.TaskMgr.start({run:this.bindHandler,interval:this.monitorPoll||200,scope:this});}},stopMonitoring:function(){this.bound=false;},bindHandler:function(){if(!this.bound){return false;}
-var valid=true;this.items.each(function(f){if(!f.isValid(true)){valid=false;return false;}});for(var i=0,len=this.buttons.length;i<len;i++){var btn=this.buttons[i];if(btn.formBind===true&&btn.disabled===valid){btn.setDisabled(!valid);}}
-this.fireEvent('clientvalidation',this,valid);}});Ext.Form=Ext.form.Form;
-
-Ext.form.Action=function(form,options){this.form=form;this.options=options||{};};Ext.form.Action.CLIENT_INVALID='client';Ext.form.Action.SERVER_INVALID='server';Ext.form.Action.CONNECT_FAILURE='connect';Ext.form.Action.LOAD_FAILURE='load';Ext.form.Action.prototype={type:'default',failureType:undefined,response:undefined,result:undefined,run:function(options){},success:function(response){},handleResponse:function(response){},failure:function(response){this.response=response;this.failureType=Ext.form.Action.CONNECT_FAILURE;this.form.afterAction(this,false);},processResponse:function(response){this.response=response;if(!response.responseText){return true;}
-this.result=this.handleResponse(response);return this.result;},getUrl:function(appendParams){var url=this.options.url||this.form.url||this.form.el.dom.action;if(appendParams){var p=this.getParams();if(p){url+=(url.indexOf('?')!=-1?'&':'?')+p;}}
-return url;},getMethod:function(){return(this.options.method||this.form.method||this.form.el.dom.method||'POST').toUpperCase();},getParams:function(){var bp=this.form.baseParams;var p=this.options.params;if(p){if(typeof p=="object"){p=Ext.urlEncode(Ext.applyIf(p,bp));}else if(typeof p=='string'&&bp){p+='&'+Ext.urlEncode(bp);}}else if(bp){p=Ext.urlEncode(bp);}
-return p;},createCallback:function(){return{success:this.success,failure:this.failure,scope:this,timeout:(this.form.timeout*1000),upload:this.form.fileUpload?this.success:undefined};}};Ext.form.Action.Submit=function(form,options){Ext.form.Action.Submit.superclass.constructor.call(this,form,options);};Ext.extend(Ext.form.Action.Submit,Ext.form.Action,{type:'submit',run:function(){var o=this.options;var isPost=this.getMethod()=='POST';if(o.clientValidation===false||this.form.isValid()){Ext.lib.Ajax.formRequest(this.form.el.dom,this.getUrl(!isPost),this.createCallback(),isPost?this.getParams():null,this.form.fileUpload,Ext.SSL_SECURE_URL);}else if(o.clientValidation!==false){this.failureType=Ext.form.Action.CLIENT_INVALID;this.form.afterAction(this,false);}},success:function(response){var result=this.processResponse(response);if(result===true||result.success){this.form.afterAction(this,true);return;}
-if(result.errors){this.form.markInvalid(result.errors);this.failureType=Ext.form.Action.SERVER_INVALID;}
-this.form.afterAction(this,false);},handleResponse:function(response){if(this.form.errorReader){var rs=this.form.errorReader.read(response);var errors=[];if(rs.records){for(var i=0,len=rs.records.length;i<len;i++){var r=rs.records[i];errors[i]=r.data;}}
-if(errors.length<1){errors=null;}
-return{success:rs.success,errors:errors};}
-return Ext.decode(response.responseText);}});Ext.form.Action.Load=function(form,options){Ext.form.Action.Load.superclass.constructor.call(this,form,options);this.reader=this.form.reader;};Ext.extend(Ext.form.Action.Load,Ext.form.Action,{type:'load',run:function(){Ext.lib.Ajax.request(this.getMethod(),this.getUrl(false),this.createCallback(),this.getParams());},success:function(response){var result=this.processResponse(response);if(result===true||!result.success||!result.data){this.failureType=Ext.form.Action.LOAD_FAILURE;this.form.afterAction(this,false);return;}
-this.form.clearInvalid();this.form.setValues(result.data);this.form.afterAction(this,true);},handleResponse:function(response){if(this.form.reader){var rs=this.form.reader.read(response);var data=rs.records&&rs.records[0]?rs.records[0].data:null;return{success:rs.success,data:data};}
-return Ext.decode(response.responseText);}});Ext.form.Action.ACTION_TYPES={'load':Ext.form.Action.Load,'submit':Ext.form.Action.Submit};
-
-Ext.form.Layout=function(config){Ext.form.Layout.superclass.constructor.call(this,config);this.stack=[];};Ext.extend(Ext.form.Layout,Ext.Component,{clear:true,labelSeparator:':',hideLabels:false,defaultAutoCreate:{tag:'div',cls:'x-form-ct'},onRender:function(ct,position){if(this.el){this.el=Ext.get(this.el);}else{var cfg=this.getAutoCreate();this.el=ct.createChild(cfg,position);}
-if(this.style){this.el.applyStyles(this.style);}
-if(this.labelAlign){this.el.addClass('x-form-label-'+this.labelAlign);}
-if(this.hideLabels){this.labelStyle="display:none";this.elementStyle="padding-left:0;";}else{if(typeof this.labelWidth=='number'){this.labelStyle="width:"+this.labelWidth+"px;";this.elementStyle="padding-left:"+((this.labelWidth+(typeof this.labelPad=='number'?this.labelPad:5))+'px')+";";}
-if(this.labelAlign=='top'){this.labelStyle="width:auto;";this.elementStyle="padding-left:0;";}}
-var stack=this.stack;var slen=stack.length;if(slen>0){if(!this.fieldTpl){var t=new Ext.Template('<div class="x-form-item {5}">','<label for="{0}" style="{2}">{1}{4}</label>','<div class="x-form-element" id="x-form-el-{0}" style="{3}">','</div>','</div><div class="x-form-clear-left"></div>');t.disableFormats=true;t.compile();Ext.form.Layout.prototype.fieldTpl=t;}
-for(var i=0;i<slen;i++){if(stack[i].isFormField){this.renderField(stack[i]);}else{this.renderComponent(stack[i]);}}}
-if(this.clear){this.el.createChild({cls:'x-form-clear'});}},renderField:function(f){this.fieldTpl.append(this.el,[f.id,f.fieldLabel,f.labelStyle||this.labelStyle||'',this.elementStyle||'',typeof f.labelSeparator=='undefined'?this.labelSeparator:f.labelSeparator,f.itemCls||this.itemCls||'']);},renderComponent:function(c){c.render(this.el);}});Ext.form.Column=function(config){Ext.form.Column.superclass.constructor.call(this,config);};Ext.extend(Ext.form.Column,Ext.form.Layout,{defaultAutoCreate:{tag:'div',cls:'x-form-ct x-form-column'},onRender:function(ct,position){Ext.form.Column.superclass.onRender.call(this,ct,position);if(this.width){this.el.setWidth(this.width);}}});Ext.form.FieldSet=function(config){Ext.form.FieldSet.superclass.constructor.call(this,config);};Ext.extend(Ext.form.FieldSet,Ext.form.Layout,{defaultAutoCreate:{tag:'fieldset',cn:{tag:'legend'}},onRender:function(ct,position){Ext.form.FieldSet.superclass.onRender.call(this,ct,position);if(this.legend){this.setLegend(this.legend);}},setLegend:function(text){if(this.rendered){this.el.child('legend').update(text);}}});
-
-Ext.form.VTypes=function(){var alpha=/^[a-zA-Z_]+$/;var alphanum=/^[a-zA-Z0-9_]+$/;var email=/^([\w]+)(.[\w]+)*@([\w-]+\.){1,5}([A-Za-z]){2,4}$/;var url=/(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;return{'email':function(v){return email.test(v);},'emailText':'This field should be an e-mail address in the format "user@domain.com"','emailMask':/[a-z0-9_\.\-@]/i,'url':function(v){return url.test(v);},'urlText':'This field should be a URL in the format "http:/'+'/www.domain.com"','alpha':function(v){return alpha.test(v);},'alphaText':'This field should only contain letters and _','alphaMask':/[a-z_]/i,'alphanum':function(v){return alphanum.test(v);},'alphanumText':'This field should only contain letters, numbers and _','alphanumMask':/[a-z0-9_]/i};}();
diff --git a/lib/web/extjs/package/grid/edit-grid-debug.js b/lib/web/extjs/package/grid/edit-grid-debug.js
deleted file mode 100644
index 4aa768b694159729cdb0bfbc06a7e9b8856c6973..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/grid/edit-grid-debug.js
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.grid.EditorGrid = function(container, config){
-    Ext.grid.EditorGrid.superclass.constructor.call(this, container, config);
-    this.getGridEl().addClass("xedit-grid");
-
-    if(!this.selModel){
-        this.selModel = new Ext.grid.CellSelectionModel();
-    }
-
-    this.activeEditor = null;
-
-	this.addEvents({
-	    
-	    "beforeedit" : true,
-	    
-	    "afteredit" : true,
-	    
-	    "validateedit" : true
-	});
-    this.on("bodyscroll", this.stopEditing,  this);
-    this.on(this.clicksToEdit == 1 ? "cellclick" : "celldblclick", this.onCellDblClick,  this);
-};
-
-Ext.extend(Ext.grid.EditorGrid, Ext.grid.Grid, {
-    isEditor : true,
-    clicksToEdit: 2,
-    trackMouseOver: false, // causes very odd FF errors
-
-    onCellDblClick : function(g, row, col){
-        this.startEditing(row, col);
-    },
-
-    onEditComplete : function(ed, value, startValue){
-        this.editing = false;
-        this.activeEditor = null;
-        ed.un("specialkey", this.selModel.onEditorKey, this.selModel);
-        if(String(value) != String(startValue)){
-            var r = ed.record;
-            var field = this.colModel.getDataIndex(ed.col);
-            var e = {
-                grid: this,
-                record: r,
-                field: field,
-                originalValue: startValue,
-                value: value,
-                row: ed.row,
-                column: ed.col,
-                cancel:false
-            };
-            if(this.fireEvent("validateedit", e) !== false && !e.cancel){
-                r.set(field, e.value);
-                delete e.cancel;
-                this.fireEvent("afteredit", e);
-            }
-        }
-        this.view.focusCell(ed.row, ed.col);
-    },
-
-    
-    startEditing : function(row, col){
-        this.stopEditing();
-        if(this.colModel.isCellEditable(col, row)){
-            this.view.ensureVisible(row, col, true);
-            var r = this.dataSource.getAt(row);
-            var field = this.colModel.getDataIndex(col);
-            var e = {
-                grid: this,
-                record: r,
-                field: field,
-                value: r.data[field],
-                row: row,
-                column: col,
-                cancel:false
-            };
-            if(this.fireEvent("beforeedit", e) !== false && !e.cancel){
-                this.editing = true;
-                var ed = this.colModel.getCellEditor(col, row);
-                if(!ed.rendered){
-                    ed.render(ed.parentEl || document.body);
-                }
-                (function(){ // complex but required for focus issues in safari, ie and opera
-                    ed.row = row;
-                    ed.col = col;
-                    ed.record = r;
-                    ed.on("complete", this.onEditComplete, this, {single: true});
-                    ed.on("specialkey", this.selModel.onEditorKey, this.selModel);
-                    this.activeEditor = ed;
-                    var v = r.data[field];
-                    ed.startEdit(this.view.getCell(row, col), v);
-                }).defer(50, this);
-            }
-        }
-    },
-        
-    
-    stopEditing : function(){
-        if(this.activeEditor){
-            this.activeEditor.completeEdit();
-        }
-        this.activeEditor = null;
-    }
-});
-// private
-// This is a support class used internally by the Grid components
-Ext.grid.GridEditor = function(field, config){
-    Ext.grid.GridEditor.superclass.constructor.call(this, field, config);
-    field.monitorTab = false;
-};
-
-Ext.extend(Ext.grid.GridEditor, Ext.Editor, {
-    alignment: "tl-tl",
-    autoSize: "width",
-    hideEl : false,
-    cls: "x-small-editor x-grid-editor",
-    shim:false,
-    shadow:"frame"
-});
-Ext.grid.PropertyRecord = Ext.data.Record.create([
-    {name:'name',type:'string'}, 'value'
-]);
-
-Ext.grid.PropertyStore = function(grid, source){
-    this.grid = grid;
-    this.store = new Ext.data.Store({
-        recordType : Ext.grid.PropertyRecord
-    });
-    this.store.on('update', this.onUpdate,  this);
-    if(source){
-        this.setSource(source);
-    }
-    Ext.grid.PropertyStore.superclass.constructor.call(this);
-};
-Ext.extend(Ext.grid.PropertyStore, Ext.util.Observable, {
-    setSource : function(o){
-        this.source = o;
-        this.store.removeAll();
-        var data = [];
-        for(var k in o){
-            if(this.isEditableValue(o[k])){
-                data.push(new Ext.grid.PropertyRecord({name: k, value: o[k]}, k));
-            }
-        }
-        this.store.loadRecords({records: data}, {}, true);
-    },
-
-    onUpdate : function(ds, record, type){
-        if(type == Ext.data.Record.EDIT){
-            var v = record.data['value'];
-            var oldValue = record.modified['value'];
-            if(this.grid.fireEvent('beforepropertychange', this.source, record.id, v, oldValue) !== false){
-                this.source[record.id] = v;
-                record.commit();
-                this.grid.fireEvent('propertychange', this.source, record.id, v, oldValue);
-            }else{
-                record.reject();
-            }
-        }
-    },
-
-    getProperty : function(row){
-       return this.store.getAt(row);
-    },
-
-    isEditableValue: function(val){
-        if(val && val instanceof Date){
-            return true;
-        }else if(typeof val == 'object' || typeof val == 'function'){
-            return false;
-        }
-        return true;
-    },
-
-    setValue : function(prop, value){
-        this.source[prop] = value;
-        this.store.getById(prop).set('value', value);
-    },
-
-    getSource : function(){
-        return this.source;
-    }
-});
-
-Ext.grid.PropertyColumnModel = function(grid, store){
-    this.grid = grid;
-    var g = Ext.grid;
-    g.PropertyColumnModel.superclass.constructor.call(this, [
-        {header: this.nameText, sortable: true, dataIndex:'name', id: 'name'},
-        {header: this.valueText, resizable:false, dataIndex: 'value', id: 'value'}
-    ]);
-    this.store = store;
-    this.bselect = Ext.DomHelper.append(document.body, {
-        tag: 'select', style:'display:none', cls: 'x-grid-editor', children: [
-            {tag: 'option', value: 'true', html: 'true'},
-            {tag: 'option', value: 'false', html: 'false'}
-        ]
-    });
-    Ext.id(this.bselect);
-    var f = Ext.form;
-    this.editors = {
-        'date' : new g.GridEditor(new f.DateField({selectOnFocus:true})),
-        'string' : new g.GridEditor(new f.TextField({selectOnFocus:true})),
-        'number' : new g.GridEditor(new f.NumberField({selectOnFocus:true, style:'text-align:left;'})),
-        'boolean' : new g.GridEditor(new f.Field({el:this.bselect,selectOnFocus:true}))
-    };
-    this.renderCellDelegate = this.renderCell.createDelegate(this);
-    this.renderPropDelegate = this.renderProp.createDelegate(this);
-};
-
-Ext.extend(Ext.grid.PropertyColumnModel, Ext.grid.ColumnModel, {
-    nameText : 'Name',
-    valueText : 'Value',
-    dateFormat : 'm/j/Y',
-    renderDate : function(dateVal){
-        return dateVal.dateFormat(this.dateFormat);
-    },
-
-    renderBool : function(bVal){
-        return bVal ? 'true' : 'false';
-    },
-
-    isCellEditable : function(colIndex, rowIndex){
-        return colIndex == 1;
-    },
-
-    getRenderer : function(col){
-        return col == 1 ?
-            this.renderCellDelegate : this.renderPropDelegate;
-    },
-
-    renderProp : function(v){
-        return this.getPropertyName(v);
-    },
-
-    renderCell : function(val){
-        var rv = val;
-        if(val instanceof Date){
-            rv = this.renderDate(val);
-        }else if(typeof val == 'boolean'){
-            rv = this.renderBool(val);
-        }
-        return Ext.util.Format.htmlEncode(rv);
-    },
-
-    getPropertyName : function(name){
-        var pn = this.grid.propertyNames;
-        return pn && pn[name] ? pn[name] : name;
-    },
-
-    getCellEditor : function(colIndex, rowIndex){
-        var p = this.store.getProperty(rowIndex);
-        var n = p.data['name'], val = p.data['value'];
-        if(this.grid.customEditors[n]){
-            return this.grid.customEditors[n];
-        }
-        if(val instanceof Date){
-            return this.editors['date'];
-        }else if(typeof val == 'number'){
-            return this.editors['number'];
-        }else if(typeof val == 'boolean'){
-            return this.editors['boolean'];
-        }else{
-            return this.editors['string'];
-        }
-    }
-});
-
-Ext.grid.PropertyGrid = function(container, config){
-    config = config || {};
-    var store = new Ext.grid.PropertyStore(this);
-    this.store = store;
-    var cm = new Ext.grid.PropertyColumnModel(this, store);
-    store.store.sort('name', 'ASC');
-    Ext.grid.PropertyGrid.superclass.constructor.call(this, container, Ext.apply({
-        ds: store.store,
-        cm: cm,
-        enableColLock:false,
-        enableColumnMove:false,
-        stripeRows:false,
-        trackMouseOver: false,
-        clicksToEdit:1
-    }, config));
-    this.getGridEl().addClass('x-props-grid');
-    this.lastEditRow = null;
-    this.on('columnresize', this.onColumnResize, this);
-    this.addEvents({
-        beforepropertychange: true,
-        propertychange: true
-    });
-    this.customEditors = this.customEditors || {};
-};
-Ext.extend(Ext.grid.PropertyGrid, Ext.grid.EditorGrid, {
-    render : function(){
-        Ext.grid.PropertyGrid.superclass.render.call(this);
-        this.autoSize.defer(100, this);
-    },
-
-    autoSize : function(){
-        Ext.grid.PropertyGrid.superclass.autoSize.call(this);
-        if(this.view){
-            this.view.fitColumns();
-        }
-    },
-
-    onColumnResize : function(){
-        this.colModel.setColumnWidth(1, this.container.getWidth(true)-this.colModel.getColumnWidth(0));
-        this.autoSize();
-    },
-
-    setSource : function(source){
-        this.store.setSource(source);
-        //this.autoSize();
-    },
-
-    getSource : function(){
-        return this.store.getSource();
-    }
-});
diff --git a/lib/web/extjs/package/grid/edit-grid.js b/lib/web/extjs/package/grid/edit-grid.js
deleted file mode 100644
index 373d80b4a0975cdc594ad477f35a62ab0a3cd921..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/grid/edit-grid.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.grid.EditorGrid=function(container,config){Ext.grid.EditorGrid.superclass.constructor.call(this,container,config);this.getGridEl().addClass("xedit-grid");if(!this.selModel){this.selModel=new Ext.grid.CellSelectionModel();}
-this.activeEditor=null;this.addEvents({"beforeedit":true,"afteredit":true,"validateedit":true});this.on("bodyscroll",this.stopEditing,this);this.on(this.clicksToEdit==1?"cellclick":"celldblclick",this.onCellDblClick,this);};Ext.extend(Ext.grid.EditorGrid,Ext.grid.Grid,{isEditor:true,clicksToEdit:2,trackMouseOver:false,onCellDblClick:function(g,row,col){this.startEditing(row,col);},onEditComplete:function(ed,value,startValue){this.editing=false;this.activeEditor=null;ed.un("specialkey",this.selModel.onEditorKey,this.selModel);if(String(value)!=String(startValue)){var r=ed.record;var field=this.colModel.getDataIndex(ed.col);var e={grid:this,record:r,field:field,originalValue:startValue,value:value,row:ed.row,column:ed.col,cancel:false};if(this.fireEvent("validateedit",e)!==false&&!e.cancel){r.set(field,e.value);delete e.cancel;this.fireEvent("afteredit",e);}}
-this.view.focusCell(ed.row,ed.col);},startEditing:function(row,col){this.stopEditing();if(this.colModel.isCellEditable(col,row)){this.view.ensureVisible(row,col,true);var r=this.dataSource.getAt(row);var field=this.colModel.getDataIndex(col);var e={grid:this,record:r,field:field,value:r.data[field],row:row,column:col,cancel:false};if(this.fireEvent("beforeedit",e)!==false&&!e.cancel){this.editing=true;var ed=this.colModel.getCellEditor(col,row);if(!ed.rendered){ed.render(ed.parentEl||document.body);}
-(function(){ed.row=row;ed.col=col;ed.record=r;ed.on("complete",this.onEditComplete,this,{single:true});ed.on("specialkey",this.selModel.onEditorKey,this.selModel);this.activeEditor=ed;var v=r.data[field];ed.startEdit(this.view.getCell(row,col),v);}).defer(50,this);}}},stopEditing:function(){if(this.activeEditor){this.activeEditor.completeEdit();}
-this.activeEditor=null;}});
-
-Ext.grid.GridEditor=function(field,config){Ext.grid.GridEditor.superclass.constructor.call(this,field,config);field.monitorTab=false;};Ext.extend(Ext.grid.GridEditor,Ext.Editor,{alignment:"tl-tl",autoSize:"width",hideEl:false,cls:"x-small-editor x-grid-editor",shim:false,shadow:"frame"});
-
-Ext.grid.PropertyRecord=Ext.data.Record.create([{name:'name',type:'string'},'value']);Ext.grid.PropertyStore=function(grid,source){this.grid=grid;this.store=new Ext.data.Store({recordType:Ext.grid.PropertyRecord});this.store.on('update',this.onUpdate,this);if(source){this.setSource(source);}
-Ext.grid.PropertyStore.superclass.constructor.call(this);};Ext.extend(Ext.grid.PropertyStore,Ext.util.Observable,{setSource:function(o){this.source=o;this.store.removeAll();var data=[];for(var k in o){if(this.isEditableValue(o[k])){data.push(new Ext.grid.PropertyRecord({name:k,value:o[k]},k));}}
-this.store.loadRecords({records:data},{},true);},onUpdate:function(ds,record,type){if(type==Ext.data.Record.EDIT){var v=record.data['value'];var oldValue=record.modified['value'];if(this.grid.fireEvent('beforepropertychange',this.source,record.id,v,oldValue)!==false){this.source[record.id]=v;record.commit();this.grid.fireEvent('propertychange',this.source,record.id,v,oldValue);}else{record.reject();}}},getProperty:function(row){return this.store.getAt(row);},isEditableValue:function(val){if(val&&val instanceof Date){return true;}else if(typeof val=='object'||typeof val=='function'){return false;}
-return true;},setValue:function(prop,value){this.source[prop]=value;this.store.getById(prop).set('value',value);},getSource:function(){return this.source;}});Ext.grid.PropertyColumnModel=function(grid,store){this.grid=grid;var g=Ext.grid;g.PropertyColumnModel.superclass.constructor.call(this,[{header:this.nameText,sortable:true,dataIndex:'name',id:'name'},{header:this.valueText,resizable:false,dataIndex:'value',id:'value'}]);this.store=store;this.bselect=Ext.DomHelper.append(document.body,{tag:'select',style:'display:none',cls:'x-grid-editor',children:[{tag:'option',value:'true',html:'true'},{tag:'option',value:'false',html:'false'}]});Ext.id(this.bselect);var f=Ext.form;this.editors={'date':new g.GridEditor(new f.DateField({selectOnFocus:true})),'string':new g.GridEditor(new f.TextField({selectOnFocus:true})),'number':new g.GridEditor(new f.NumberField({selectOnFocus:true,style:'text-align:left;'})),'boolean':new g.GridEditor(new f.Field({el:this.bselect,selectOnFocus:true}))};this.renderCellDelegate=this.renderCell.createDelegate(this);this.renderPropDelegate=this.renderProp.createDelegate(this);};Ext.extend(Ext.grid.PropertyColumnModel,Ext.grid.ColumnModel,{nameText:'Name',valueText:'Value',dateFormat:'m/j/Y',renderDate:function(dateVal){return dateVal.dateFormat(this.dateFormat);},renderBool:function(bVal){return bVal?'true':'false';},isCellEditable:function(colIndex,rowIndex){return colIndex==1;},getRenderer:function(col){return col==1?this.renderCellDelegate:this.renderPropDelegate;},renderProp:function(v){return this.getPropertyName(v);},renderCell:function(val){var rv=val;if(val instanceof Date){rv=this.renderDate(val);}else if(typeof val=='boolean'){rv=this.renderBool(val);}
-return Ext.util.Format.htmlEncode(rv);},getPropertyName:function(name){var pn=this.grid.propertyNames;return pn&&pn[name]?pn[name]:name;},getCellEditor:function(colIndex,rowIndex){var p=this.store.getProperty(rowIndex);var n=p.data['name'],val=p.data['value'];if(this.grid.customEditors[n]){return this.grid.customEditors[n];}
-if(val instanceof Date){return this.editors['date'];}else if(typeof val=='number'){return this.editors['number'];}else if(typeof val=='boolean'){return this.editors['boolean'];}else{return this.editors['string'];}}});Ext.grid.PropertyGrid=function(container,config){config=config||{};var store=new Ext.grid.PropertyStore(this);this.store=store;var cm=new Ext.grid.PropertyColumnModel(this,store);store.store.sort('name','ASC');Ext.grid.PropertyGrid.superclass.constructor.call(this,container,Ext.apply({ds:store.store,cm:cm,enableColLock:false,enableColumnMove:false,stripeRows:false,trackMouseOver:false,clicksToEdit:1},config));this.getGridEl().addClass('x-props-grid');this.lastEditRow=null;this.on('columnresize',this.onColumnResize,this);this.addEvents({beforepropertychange:true,propertychange:true});this.customEditors=this.customEditors||{};};Ext.extend(Ext.grid.PropertyGrid,Ext.grid.EditorGrid,{render:function(){Ext.grid.PropertyGrid.superclass.render.call(this);this.autoSize.defer(100,this);},autoSize:function(){Ext.grid.PropertyGrid.superclass.autoSize.call(this);if(this.view){this.view.fitColumns();}},onColumnResize:function(){this.colModel.setColumnWidth(1,this.container.getWidth(true)-this.colModel.getColumnWidth(0));this.autoSize();},setSource:function(source){this.store.setSource(source);},getSource:function(){return this.store.getSource();}});
diff --git a/lib/web/extjs/package/grid/grid.js b/lib/web/extjs/package/grid/grid.js
deleted file mode 100644
index ce93d8471f7e37461d98c1a5763368438d1fde5d..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/grid/grid.js
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.grid.Grid=function(container,config){this.container=Ext.get(container);this.container.update("");this.container.setStyle("overflow","hidden");this.container.addClass('x-grid-container');this.id=this.container.id;Ext.apply(this,config);if(this.ds){this.dataSource=this.ds;delete this.ds;}
-if(this.cm){this.colModel=this.cm;delete this.cm;}
-if(this.sm){this.selModel=this.sm;delete this.sm;}
-if(this.width){this.container.setWidth(this.width);}
-if(this.height){this.container.setHeight(this.height);}
-this.addEvents({"click":true,"dblclick":true,"contextmenu":true,"mousedown":true,"mouseup":true,"mouseover":true,"mouseout":true,"keypress":true,"keydown":true,"cellclick":true,"celldblclick":true,"rowclick":true,"rowdblclick":true,"headerclick":true,"headerdblclick":true,"rowcontextmenu":true,"cellcontextmenu":true,"headercontextmenu":true,"bodyscroll":true,"columnresize":true,"columnmove":true,"startdrag":true,"enddrag":true,"dragdrop":true,"dragover":true,"dragenter":true,"dragout":true,render:true});Ext.grid.Grid.superclass.constructor.call(this);};Ext.extend(Ext.grid.Grid,Ext.util.Observable,{minColumnWidth:25,autoSizeColumns:false,autoSizeHeaders:true,monitorWindowResize:true,maxRowsToMeasure:0,trackMouseOver:true,enableDragDrop:false,enableColumnMove:true,enableColumnHide:true,enableRowHeightSync:false,stripeRows:true,autoHeight:false,autoExpandColumn:false,autoExpandMin:50,autoExpandMax:1000,view:null,loadMask:false,rendered:false,render:function(){var c=this.container;if((!c.dom.offsetHeight||c.dom.offsetHeight<20)||c.getStyle("height")=="auto"){this.autoHeight=true;}
-var view=this.getView();view.init(this);c.on("click",this.onClick,this);c.on("dblclick",this.onDblClick,this);c.on("contextmenu",this.onContextMenu,this);c.on("keydown",this.onKeyDown,this);this.relayEvents(c,["mousedown","mouseup","mouseover","mouseout","keypress"]);this.getSelectionModel().init(this);view.render();if(this.loadMask){this.loadMask=new Ext.LoadMask(this.container,Ext.apply({store:this.dataSource},this.loadMask));}
-this.rendered=true;this.fireEvent('render',this);return this;},reconfigure:function(dataSource,colModel){if(this.loadMask){this.loadMask.destroy();this.loadMask=new Ext.LoadMask(this.container,Ext.apply({store:dataSource},this.loadMask));}
-this.view.bind(dataSource,colModel);this.dataSource=dataSource;this.colModel=colModel;this.view.refresh(true);},onKeyDown:function(e){this.fireEvent("keydown",e);},destroy:function(removeEl,keepListeners){if(this.loadMask){this.loadMask.destroy();}
-var c=this.container;c.removeAllListeners();this.view.destroy();this.colModel.purgeListeners();if(!keepListeners){this.purgeListeners();}
-c.update("");if(removeEl===true){c.remove();}},processEvent:function(name,e){this.fireEvent(name,e);var t=e.getTarget();var v=this.view;var header=v.findHeaderIndex(t);if(header!==false){this.fireEvent("header"+name,this,header,e);}else{var row=v.findRowIndex(t);var cell=v.findCellIndex(t);if(row!==false){this.fireEvent("row"+name,this,row,e);if(cell!==false){this.fireEvent("cell"+name,this,row,cell,e);}}}},onClick:function(e){this.processEvent("click",e);},onContextMenu:function(e,t){this.processEvent("contextmenu",e);},onDblClick:function(e){this.processEvent("dblclick",e);},walkCells:function(row,col,step,fn,scope){var cm=this.colModel,clen=cm.getColumnCount();var ds=this.dataSource,rlen=ds.getCount(),first=true;if(step<0){if(col<0){row--;first=false;}
-while(row>=0){if(!first){col=clen-1;}
-first=false;while(col>=0){if(fn.call(scope||this,row,col,cm)===true){return[row,col];}
-col--;}
-row--;}}else{if(col>=clen){row++;first=false;}
-while(row<rlen){if(!first){col=0;}
-first=false;while(col<clen){if(fn.call(scope||this,row,col,cm)===true){return[row,col];}
-col++;}
-row++;}}
-return null;},getSelections:function(){return this.selModel.getSelections();},autoSize:function(){if(this.rendered){this.view.layout();if(this.view.adjustForScroll){this.view.adjustForScroll();}}},getGridEl:function(){return this.container;},stopEditing:function(){},getSelectionModel:function(){if(!this.selModel){this.selModel=new Ext.grid.RowSelectionModel();}
-return this.selModel;},getDataSource:function(){return this.dataSource;},getColumnModel:function(){return this.colModel;},getView:function(){if(!this.view){this.view=new Ext.grid.GridView(this.viewConfig);}
-return this.view;},getDragDropText:function(){var count=this.selModel.getCount();return String.format(this.ddText,count,count==1?'':'s');}});Ext.grid.Grid.prototype.ddText="{0} selected row{1}";
-
-Ext.grid.AbstractGridView=function(){this.grid=null;this.events={"beforerowremoved":true,"beforerowsinserted":true,"beforerefresh":true,"rowremoved":true,"rowsinserted":true,"rowupdated":true,"refresh":true};Ext.grid.AbstractGridView.superclass.constructor.call(this);};Ext.extend(Ext.grid.AbstractGridView,Ext.util.Observable,{rowClass:"x-grid-row",cellClass:"x-grid-cell",tdClass:"x-grid-td",hdClass:"x-grid-hd",splitClass:"x-grid-hd-split",init:function(grid){this.grid=grid;var cid=this.grid.getGridEl().id;this.colSelector="#"+cid+" ."+this.cellClass+"-";this.tdSelector="#"+cid+" ."+this.tdClass+"-";this.hdSelector="#"+cid+" ."+this.hdClass+"-";this.splitSelector="#"+cid+" ."+this.splitClass+"-";},getColumnRenderers:function(){var renderers=[];var cm=this.grid.colModel;var colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){renderers[i]=cm.getRenderer(i);}
-return renderers;},getColumnIds:function(){var ids=[];var cm=this.grid.colModel;var colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){ids[i]=cm.getColumnId(i);}
-return ids;},getDataIndexes:function(){if(!this.indexMap){this.indexMap=this.buildIndexMap();}
-return this.indexMap.colToData;},getColumnIndexByDataIndex:function(dataIndex){if(!this.indexMap){this.indexMap=this.buildIndexMap();}
-return this.indexMap.dataToCol[dataIndex];},setCSSStyle:function(colIndex,name,value){var selector="#"+this.grid.id+" .x-grid-col-"+colIndex;Ext.util.CSS.updateRule(selector,name,value);},generateRules:function(cm){var ruleBuf=[];for(var i=0,len=cm.getColumnCount();i<len;i++){var cid=cm.getColumnId(i);ruleBuf.push(this.colSelector,cid," {\n",cm.config[i].css,"}\n",this.tdSelector,cid," {\n}\n",this.hdSelector,cid," {\n}\n",this.splitSelector,cid," {\n}\n");}
-return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));}});
-
-Ext.grid.GridView=function(config){Ext.grid.GridView.superclass.constructor.call(this);this.el=null;Ext.apply(this,config);};Ext.extend(Ext.grid.GridView,Ext.grid.AbstractGridView,{rowClass:"x-grid-row",cellClass:"x-grid-col",tdClass:"x-grid-td",hdClass:"x-grid-hd",splitClass:"x-grid-split",sortClasses:["sort-asc","sort-desc"],enableMoveAnim:false,hlColor:"C3DAF9",dh:Ext.DomHelper,fly:Ext.Element.fly,css:Ext.util.CSS,borderWidth:1,splitOffset:3,scrollIncrement:22,cellRE:/(?:.*?)x-grid-(?:hd|cell|csplit)-(?:[\d]+)-([\d]+)(?:.*?)/,findRE:/\s?(?:x-grid-hd|x-grid-col|x-grid-csplit)\s/,bind:function(ds,cm){if(this.ds){this.ds.un("load",this.onLoad,this);this.ds.un("datachanged",this.onDataChange);this.ds.un("add",this.onAdd);this.ds.un("remove",this.onRemove);this.ds.un("update",this.onUpdate);this.ds.un("clear",this.onClear);}
-if(ds){ds.on("load",this.onLoad,this);ds.on("datachanged",this.onDataChange,this);ds.on("add",this.onAdd,this);ds.on("remove",this.onRemove,this);ds.on("update",this.onUpdate,this);ds.on("clear",this.onClear,this);}
-this.ds=ds;if(this.cm){this.cm.un("widthchange",this.onColWidthChange,this);this.cm.un("headerchange",this.onHeaderChange,this);this.cm.un("hiddenchange",this.onHiddenChange,this);this.cm.un("columnmoved",this.onColumnMove,this);this.cm.un("columnlockchange",this.onColumnLock,this);}
-if(cm){this.generateRules(cm);cm.on("widthchange",this.onColWidthChange,this);cm.on("headerchange",this.onHeaderChange,this);cm.on("hiddenchange",this.onHiddenChange,this);cm.on("columnmoved",this.onColumnMove,this);cm.on("columnlockchange",this.onColumnLock,this);}
-this.cm=cm;},init:function(grid){Ext.grid.GridView.superclass.init.call(this,grid);this.bind(grid.dataSource,grid.colModel);grid.on("headerclick",this.handleHeaderClick,this);if(grid.trackMouseOver){grid.on("mouseover",this.onRowOver,this);grid.on("mouseout",this.onRowOut,this);}
-grid.cancelTextSelection=function(){};this.gridId=grid.id;var tpls=this.templates||{};if(!tpls.master){tpls.master=new Ext.Template('<div class="x-grid" hidefocus="true">','<div class="x-grid-topbar"></div>','<div class="x-grid-scroller"><div></div></div>','<div class="x-grid-locked">','<div class="x-grid-header">{lockedHeader}</div>','<div class="x-grid-body">{lockedBody}</div>',"</div>",'<div class="x-grid-viewport">','<div class="x-grid-header">{header}</div>','<div class="x-grid-body">{body}</div>',"</div>",'<div class="x-grid-bottombar"></div>','<a href="#" class="x-grid-focus" tabIndex="-1"></a>','<div class="x-grid-resize-proxy">&#160;</div>',"</div>");tpls.master.disableformats=true;}
-if(!tpls.header){tpls.header=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0">','<tbody><tr class="x-grid-hd-row">{cells}</tr></tbody>',"</table>{splits}");tpls.header.disableformats=true;}
-tpls.header.compile();if(!tpls.hcell){tpls.hcell=new Ext.Template('<td class="x-grid-hd x-grid-td-{id} {cellId}"><div title="{title}" class="x-grid-hd-inner x-grid-hd-{id}">','<div class="x-grid-hd-text" unselectable="on">{value}<img class="x-grid-sort-icon" src="',Ext.BLANK_IMAGE_URL,'" /></div>',"</div></td>");tpls.hcell.disableFormats=true;}
-tpls.hcell.compile();if(!tpls.hsplit){tpls.hsplit=new Ext.Template('<div class="x-grid-split {splitId} x-grid-split-{id}" style="{style}" unselectable="on">&#160;</div>');tpls.hsplit.disableFormats=true;}
-tpls.hsplit.compile();if(!tpls.body){tpls.body=new Ext.Template('<table border="0" cellspacing="0" cellpadding="0">',"<tbody>{rows}</tbody>","</table>");tpls.body.disableFormats=true;}
-tpls.body.compile();if(!tpls.row){tpls.row=new Ext.Template('<tr class="x-grid-row {alt}">{cells}</tr>');tpls.row.disableFormats=true;}
-tpls.row.compile();if(!tpls.cell){tpls.cell=new Ext.Template('<td class="x-grid-col x-grid-td-{id} {cellId} {css}" tabIndex="0">','<div class="x-grid-col-{id} x-grid-cell-inner"><div class="x-grid-cell-text" unselectable="on" {attr}>{value}</div></div>',"</td>");tpls.cell.disableFormats=true;}
-tpls.cell.compile();this.templates=tpls;},onColWidthChange:function(){this.updateColumns.apply(this,arguments);},onHeaderChange:function(){this.updateHeaders.apply(this,arguments);},onHiddenChange:function(){this.handleHiddenChange.apply(this,arguments);},onColumnMove:function(){this.handleColumnMove.apply(this,arguments);},onColumnLock:function(){this.handleLockChange.apply(this,arguments);},onDataChange:function(){this.refresh();this.updateHeaderSortState();},onClear:function(){this.refresh();},onUpdate:function(ds,record){this.refreshRow(record);},refreshRow:function(record){var ds=this.ds,index;if(typeof record=='number'){index=record;record=ds.getAt(index);}else{index=ds.indexOf(record);}
-var rows=this.getRowComposite(index);var cls=[];this.insertRows(ds,index,index,true);this.onRemove(ds,record,index+1,true);this.syncRowHeights(index,index);this.layout();this.fireEvent("rowupdated",this,index,record);},onAdd:function(ds,records,index){this.insertRows(ds,index,index+(records.length-1));},onRemove:function(ds,record,index,isUpdate){if(isUpdate!==true){this.fireEvent("beforerowremoved",this,index,record);}
-var bt=this.getBodyTable(),lt=this.getLockedTable();if(bt.rows[index]){bt.firstChild.removeChild(bt.rows[index]);}
-if(lt.rows[index]){lt.firstChild.removeChild(lt.rows[index]);}
-if(isUpdate!==true){this.stripeRows(index);this.syncRowHeights(index,index);this.layout();this.fireEvent("rowremoved",this,index,record);}},onLoad:function(){this.scrollToTop();},scrollToTop:function(){if(this.scroller){this.scroller.dom.scrollTop=0;this.syncScroll();}},getHeaderPanel:function(doShow){if(doShow){this.headerPanel.show();}
-return this.headerPanel;},getFooterPanel:function(doShow){if(doShow){this.footerPanel.show();}
-return this.footerPanel;},initElements:function(){var E=Ext.Element;var el=this.grid.getGridEl().dom.firstChild;var cs=el.childNodes;this.el=new E(el);this.headerPanel=new E(el.firstChild);this.headerPanel.enableDisplayMode("block");this.scroller=new E(cs[1]);this.scrollSizer=new E(this.scroller.dom.firstChild);this.lockedWrap=new E(cs[2]);this.lockedHd=new E(this.lockedWrap.dom.firstChild);this.lockedBody=new E(this.lockedWrap.dom.childNodes[1]);this.mainWrap=new E(cs[3]);this.mainHd=new E(this.mainWrap.dom.firstChild);this.mainBody=new E(this.mainWrap.dom.childNodes[1]);this.footerPanel=new E(cs[4]);this.footerPanel.enableDisplayMode("block");this.focusEl=new E(cs[5]);this.focusEl.swallowEvent("click",true);this.resizeProxy=new E(cs[6]);this.headerSelector=String.format('#{0} td.x-grid-hd, #{1} td.x-grid-hd',this.lockedHd.id,this.mainHd.id);this.splitterSelector=String.format('#{0} div.x-grid-split, #{1} div.x-grid-split',this.lockedHd.id,this.mainHd.id);},getHeaderCell:function(index){return Ext.DomQuery.select(this.headerSelector)[index];},getHeaderCellMeasure:function(index){return this.getHeaderCell(index).firstChild;},getHeaderCellText:function(index){return this.getHeaderCell(index).firstChild.firstChild;},getLockedTable:function(){return this.lockedBody.dom.firstChild;},getBodyTable:function(){return this.mainBody.dom.firstChild;},getLockedRow:function(index){return this.getLockedTable().rows[index];},getRow:function(index){return this.getBodyTable().rows[index];},getRowComposite:function(index){if(!this.rowEl){this.rowEl=new Ext.CompositeElementLite();}
-var els=[],lrow,mrow;if(lrow=this.getLockedRow(index)){els.push(lrow);}
-if(mrow=this.getRow(index)){els.push(mrow);}
-this.rowEl.elements=els;return this.rowEl;},getCell:function(rowIndex,colIndex){var locked=this.cm.getLockedCount();var source;if(colIndex<locked){source=this.lockedBody.dom.firstChild;}else{source=this.mainBody.dom.firstChild;colIndex-=locked;}
-return source.rows[rowIndex].childNodes[colIndex];},getCellText:function(rowIndex,colIndex){return this.getCell(rowIndex,colIndex).firstChild.firstChild;},getCellBox:function(cell){var b=this.fly(cell).getBox();if(Ext.isOpera){b.y=cell.offsetTop+this.mainBody.getY();}
-return b;},getCellIndex:function(cell){var id=String(cell.className).match(this.cellRE);if(id){return parseInt(id[1],10);}
-return 0;},findHeaderIndex:function(n){var r=Ext.fly(n).findParent("td."+this.hdClass,6);return r?this.getCellIndex(r):false;},findHeaderCell:function(n){var r=Ext.fly(n).findParent("td."+this.hdClass,6);return r?r:false;},findRowIndex:function(n){if(!n){return false;}
-var r=Ext.fly(n).findParent("tr."+this.rowClass,6);return r?r.rowIndex:false;},findCellIndex:function(node){var stop=this.el.dom;while(node&&node!=stop){if(this.findRE.test(node.className)){return this.getCellIndex(node);}
-node=node.parentNode;}
-return false;},getColumnId:function(index){return this.cm.getColumnId(index);},getSplitters:function(){if(this.splitterSelector){return Ext.DomQuery.select(this.splitterSelector);}else{return null;}},getSplitter:function(index){return this.getSplitters()[index];},onRowOver:function(e,t){var row;if((row=this.findRowIndex(t))!==false){this.getRowComposite(row).addClass("x-grid-row-over");}},onRowOut:function(e,t){var row;if((row=this.findRowIndex(t))!==false&&row!==this.findRowIndex(e.getRelatedTarget())){this.getRowComposite(row).removeClass("x-grid-row-over");}},renderHeaders:function(){var cm=this.cm;var ct=this.templates.hcell,ht=this.templates.header,st=this.templates.hsplit;var cb=[],lb=[],sb=[],lsb=[],p={};for(var i=0,len=cm.getColumnCount();i<len;i++){p.cellId="x-grid-hd-0-"+i;p.splitId="x-grid-csplit-0-"+i;p.id=cm.getColumnId(i);p.title=cm.getColumnTooltip(i)||"";p.value=cm.getColumnHeader(i)||"";p.style=(this.grid.enableColumnResize===false||!cm.isResizable(i)||cm.isFixed(i))?'cursor:default':'';if(!cm.isLocked(i)){cb[cb.length]=ct.apply(p);sb[sb.length]=st.apply(p);}else{lb[lb.length]=ct.apply(p);lsb[lsb.length]=st.apply(p);}}
-return[ht.apply({cells:lb.join(""),splits:lsb.join("")}),ht.apply({cells:cb.join(""),splits:sb.join("")})];},updateHeaders:function(){var html=this.renderHeaders();this.lockedHd.update(html[0]);this.mainHd.update(html[1]);},focusRow:function(row){var x=this.scroller.dom.scrollLeft;this.focusCell(row,0,false);this.scroller.dom.scrollLeft=x;},focusCell:function(row,col,hscroll){var el=this.ensureVisible(row,col,hscroll);this.focusEl.alignTo(el,"tl-tl");if(Ext.isGecko){this.focusEl.focus();}else{this.focusEl.focus.defer(1,this.focusEl);}},ensureVisible:function(row,col,hscroll){if(typeof row!="number"){row=row.rowIndex;}
-if(row<0&&row>=this.ds.getCount()){return;}
-col=(col!==undefined?col:0);var cm=this.grid.colModel;while(cm.isHidden(col)){col++;}
-var el=this.getCell(row,col);if(!el){return;}
-var c=this.scroller.dom;var ctop=parseInt(el.offsetTop,10);var cleft=parseInt(el.offsetLeft,10);var cbot=ctop+el.offsetHeight;var cright=cleft+el.offsetWidth;var ch=c.clientHeight-this.mainHd.dom.offsetHeight;var stop=parseInt(c.scrollTop,10);var sleft=parseInt(c.scrollLeft,10);var sbot=stop+ch;var sright=sleft+c.clientWidth;if(ctop<stop){c.scrollTop=ctop;}else if(cbot>sbot){c.scrollTop=cbot-ch;}
-if(hscroll!==false){if(cleft<sleft){c.scrollLeft=cleft;}else if(cright>sright){c.scrollLeft=cright-c.clientWidth;}}
-return el;},updateColumns:function(){this.grid.stopEditing();var cm=this.grid.colModel,colIds=this.getColumnIds();var pos=0;for(var i=0,len=cm.getColumnCount();i<len;i++){var w=cm.getColumnWidth(i);this.css.updateRule(this.colSelector+colIds[i],"width",(w-this.borderWidth)+"px");this.css.updateRule(this.hdSelector+colIds[i],"width",(w-this.borderWidth)+"px");}
-this.updateSplitters();},generateRules:function(cm){var ruleBuf=[];for(var i=0,len=cm.getColumnCount();i<len;i++){var cid=cm.getColumnId(i);var align='';if(cm.config[i].align){align='text-align:'+cm.config[i].align+';';}
-var hidden='';if(cm.isHidden(i)){hidden='display:none;';}
-var width="width:"+(cm.getColumnWidth(i)-this.borderWidth)+"px;";ruleBuf.push(this.colSelector,cid," {\n",cm.config[i].css,align,width,"\n}\n",this.hdSelector,cid," {\n",align,width,"}\n",this.tdSelector,cid," {\n",hidden,"\n}\n",this.splitSelector,cid," {\n",hidden,"\n}\n");}
-return Ext.util.CSS.createStyleSheet(ruleBuf.join(""));},updateSplitters:function(){var cm=this.cm,s=this.getSplitters();if(s){var pos=0,locked=true;for(var i=0,len=cm.getColumnCount();i<len;i++){if(cm.isHidden(i))continue;var w=cm.getColumnWidth(i);if(!cm.isLocked(i)&&locked){pos=0;locked=false;}
-pos+=w;s[i].style.left=(pos-this.splitOffset)+"px";}}},handleHiddenChange:function(colModel,colIndex,hidden){if(hidden){this.hideColumn(colIndex);}else{this.unhideColumn(colIndex);}},hideColumn:function(colIndex){var cid=this.getColumnId(colIndex);this.css.updateRule(this.tdSelector+cid,"display","none");this.css.updateRule(this.splitSelector+cid,"display","none");if(Ext.isSafari){this.updateHeaders();}
-this.updateSplitters();this.layout();},unhideColumn:function(colIndex){var cid=this.getColumnId(colIndex);this.css.updateRule(this.tdSelector+cid,"display","");this.css.updateRule(this.splitSelector+cid,"display","");if(Ext.isSafari){this.updateHeaders();}
-this.updateSplitters();this.layout();},insertRows:function(dm,firstRow,lastRow,isUpdate){if(firstRow==0&&lastRow==dm.getCount()-1){this.refresh();}else{if(!isUpdate){this.fireEvent("beforerowsinserted",this,firstRow,lastRow);}
-var s=this.getScrollState();var markup=this.renderRows(firstRow,lastRow);this.bufferRows(markup[0],this.getLockedTable(),firstRow);this.bufferRows(markup[1],this.getBodyTable(),firstRow);this.restoreScroll(s);if(!isUpdate){this.fireEvent("rowsinserted",this,firstRow,lastRow);this.syncRowHeights(firstRow,lastRow);this.stripeRows(firstRow);this.layout();}}},bufferRows:function(markup,target,index){var before=null,trows=target.rows,tbody=target.tBodies[0];if(index<trows.length){before=trows[index];}
-var b=document.createElement("div");b.innerHTML="<table><tbody>"+markup+"</tbody></table>";var rows=b.firstChild.rows;for(var i=0,len=rows.length;i<len;i++){if(before){tbody.insertBefore(rows[0],before);}else{tbody.appendChild(rows[0]);}}
-b.innerHTML="";b=null;},deleteRows:function(dm,firstRow,lastRow){if(dm.getRowCount()<1){this.fireEvent("beforerefresh",this);this.mainBody.update("");this.lockedBody.update("");this.fireEvent("refresh",this);}else{this.fireEvent("beforerowsdeleted",this,firstRow,lastRow);var bt=this.getBodyTable();var tbody=bt.firstChild;var rows=bt.rows;for(var rowIndex=firstRow;rowIndex<=lastRow;rowIndex++){tbody.removeChild(rows[firstRow]);}
-this.stripeRows(firstRow);this.fireEvent("rowsdeleted",this,firstRow,lastRow);}},updateRows:function(dataSource,firstRow,lastRow){var s=this.getScrollState();this.refresh();this.restoreScroll(s);},handleSort:function(dataSource,sortColumnIndex,sortDir,noRefresh){if(!noRefresh){this.refresh();}
-this.updateHeaderSortState();},getScrollState:function(){var sb=this.scroller.dom;return{left:sb.scrollLeft,top:sb.scrollTop};},stripeRows:function(startRow){if(!this.grid.stripeRows||this.ds.getCount()<1){return;}
-startRow=startRow||0;var rows=this.getBodyTable().rows;var lrows=this.getLockedTable().rows;var cls=' x-grid-row-alt ';for(var i=startRow,len=rows.length;i<len;i++){var row=rows[i],lrow=lrows[i];var isAlt=((i+1)%2==0);var hasAlt=(' '+row.className+' ').indexOf(cls)!=-1;if(isAlt==hasAlt){continue;}
-if(isAlt){row.className+=" x-grid-row-alt";}else{row.className=row.className.replace("x-grid-row-alt","");}
-if(lrow){lrow.className=row.className;}}},restoreScroll:function(state){var sb=this.scroller.dom;sb.scrollLeft=state.left;sb.scrollTop=state.top;this.syncScroll();},syncScroll:function(){var sb=this.scroller.dom;var sh=this.mainHd.dom;var bs=this.mainBody.dom;var lv=this.lockedBody.dom;sh.scrollLeft=bs.scrollLeft=sb.scrollLeft;lv.scrollTop=bs.scrollTop=sb.scrollTop;},handleScroll:function(e){this.syncScroll();var sb=this.scroller.dom;this.grid.fireEvent("bodyscroll",sb.scrollLeft,sb.scrollTop);e.stopEvent();},handleWheel:function(e){var d=e.getWheelDelta();this.scroller.dom.scrollTop-=d*22;this.lockedBody.dom.scrollTop=this.mainBody.dom.scrollTop=this.scroller.dom.scrollTop;e.stopEvent();},renderRows:function(startRow,endRow){var g=this.grid,cm=g.colModel,ds=g.dataSource,stripe=g.stripeRows;var colCount=cm.getColumnCount();if(ds.getCount()<1){return["",""];}
-var cs=[];for(var i=0;i<colCount;i++){var name=cm.getDataIndex(i);cs[i]={name:typeof name=='undefined'?ds.fields.get(i).name:name,renderer:cm.getRenderer(i),id:cm.getColumnId(i),locked:cm.isLocked(i)};}
-startRow=startRow||0;endRow=typeof endRow=="undefined"?ds.getCount()-1:endRow;var rs=ds.getRange(startRow,endRow);return this.doRender(cs,rs,ds,startRow,colCount,stripe);},doRender:Ext.isGecko?function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row;var buf="",lbuf="",cb,lcb,c,p={},rp={},r,rowIndex;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb="";lcb="";rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.cellId="x-grid-cell-"+rowIndex+"-"+i;p.id=c.id;p.css=p.attr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=p.css?' x-grid-dirty-cell':'x-grid-dirty-cell';}
-var markup=ct.apply(p);if(!c.locked){cb+=markup;}else{lcb+=markup;}}
-var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid-row-alt";}
-if(r.dirty){alt[1]=" x-grid-dirty-row";}
-rp.cells=lcb;if(this.getRowClass){alt[2]=this.getRowClass(r,rowIndex);}
-rp.alt=alt.join(" ");lbuf+=rt.apply(rp);rp.cells=cb;buf+=rt.apply(rp);}
-return[lbuf,buf];}:function(cs,rs,ds,startRow,colCount,stripe){var ts=this.templates,ct=ts.cell,rt=ts.row;var buf=[],lbuf=[],cb,lcb,c,p={},rp={},r,rowIndex;for(var j=0,len=rs.length;j<len;j++){r=rs[j];cb=[];lcb=[];rowIndex=(j+startRow);for(var i=0;i<colCount;i++){c=cs[i];p.cellId="x-grid-cell-"+rowIndex+"-"+i;p.id=c.id;p.css=p.attr="";p.value=c.renderer(r.data[c.name],p,r,rowIndex,i,ds);if(p.value==undefined||p.value==="")p.value="&#160;";if(r.dirty&&typeof r.modified[c.name]!=='undefined'){p.css+=p.css?' x-grid-dirty-cell':'x-grid-dirty-cell';}
-var markup=ct.apply(p);if(!c.locked){cb[cb.length]=markup;}else{lcb[lcb.length]=markup;}}
-var alt=[];if(stripe&&((rowIndex+1)%2==0)){alt[0]="x-grid-row-alt";}
-if(r.dirty){alt[1]=" x-grid-dirty-row";}
-rp.cells=lcb;if(this.getRowClass){alt[2]=this.getRowClass(r,rowIndex);}
-rp.alt=alt.join(" ");rp.cells=lcb.join("");lbuf[lbuf.length]=rt.apply(rp);rp.cells=cb.join("");buf[buf.length]=rt.apply(rp);}
-return[lbuf.join(""),buf.join("")];},renderBody:function(){var markup=this.renderRows();var bt=this.templates.body;return[bt.apply({rows:markup[0]}),bt.apply({rows:markup[1]})];},refresh:function(headersToo){this.fireEvent("beforerefresh",this);this.grid.stopEditing();var result=this.renderBody();this.lockedBody.update(result[0]);this.mainBody.update(result[1]);if(headersToo===true){this.updateHeaders();this.updateColumns();this.updateSplitters();this.updateHeaderSortState();}
-this.syncRowHeights();this.layout();this.fireEvent("refresh",this);},handleColumnMove:function(cm,oldIndex,newIndex){this.indexMap=null;var s=this.getScrollState();this.refresh(true);this.restoreScroll(s);this.afterMove(newIndex);},afterMove:function(colIndex){if(this.enableMoveAnim&&Ext.enableFx){this.fly(this.getHeaderCell(colIndex).firstChild).highlight(this.hlColor);}},updateCell:function(dm,rowIndex,dataIndex){var colIndex=this.getColumnIndexByDataIndex(dataIndex);if(typeof colIndex=="undefined"){return;}
-var cm=this.grid.colModel;var cell=this.getCell(rowIndex,colIndex);var cellText=this.getCellText(rowIndex,colIndex);var p={cellId:"x-grid-cell-"+rowIndex+"-"+colIndex,id:cm.getColumnId(colIndex),css:colIndex==cm.getColumnCount()-1?"x-grid-col-last":""};var renderer=cm.getRenderer(colIndex);var val=renderer(dm.getValueAt(rowIndex,dataIndex),p,rowIndex,colIndex,dm);if(typeof val=="undefined"||val==="")val="&#160;";cellText.innerHTML=val;cell.className=this.cellClass+" "+p.cellId+" "+p.css;this.syncRowHeights(rowIndex,rowIndex);},calcColumnWidth:function(colIndex,maxRowsToMeasure){var maxWidth=0;if(this.grid.autoSizeHeaders){var h=this.getHeaderCellMeasure(colIndex);maxWidth=Math.max(maxWidth,h.scrollWidth);}
-var tb,index;if(this.cm.isLocked(colIndex)){tb=this.getLockedTable();index=colIndex;}else{tb=this.getBodyTable();index=colIndex-this.cm.getLockedCount();}
-if(tb&&tb.rows){var rows=tb.rows;var stopIndex=Math.min(maxRowsToMeasure||rows.length,rows.length);for(var i=0;i<stopIndex;i++){var cell=rows[i].childNodes[index].firstChild;maxWidth=Math.max(maxWidth,cell.scrollWidth);}}
-return maxWidth+5;},autoSizeColumn:function(colIndex,forceMinSize,suppressEvent){if(this.cm.isHidden(colIndex)){return;}
-if(forceMinSize){var cid=this.cm.getColumnId(colIndex);this.css.updateRule(this.colSelector+cid,"width",this.grid.minColumnWidth+"px");if(this.grid.autoSizeHeaders){this.css.updateRule(this.hdSelector+cid,"width",this.grid.minColumnWidth+"px");}}
-var newWidth=this.calcColumnWidth(colIndex);this.cm.setColumnWidth(colIndex,Math.max(this.grid.minColumnWidth,newWidth),suppressEvent);if(!suppressEvent){this.grid.fireEvent("columnresize",colIndex,newWidth);}},autoSizeColumns:function(){var cm=this.grid.colModel;var colCount=cm.getColumnCount();for(var i=0;i<colCount;i++){this.autoSizeColumn(i,true,true);}
-if(cm.getTotalWidth()<this.scroller.dom.clientWidth){this.fitColumns();}else{this.updateColumns();this.layout();}},fitColumns:function(reserveScrollSpace){var cm=this.grid.colModel;var colCount=cm.getColumnCount();var cols=[];var width=0;var i,w;for(i=0;i<colCount;i++){if(!cm.isHidden(i)&&!cm.isFixed(i)){w=cm.getColumnWidth(i);cols.push(i);cols.push(w);width+=w;}}
-var avail=Math.min(this.scroller.dom.clientWidth,this.el.getWidth());if(reserveScrollSpace){avail-=17;}
-var frac=(avail-cm.getTotalWidth())/width;while(cols.length){w=cols.pop();i=cols.pop();cm.setColumnWidth(i,Math.floor(w+w*frac),true);}
-this.updateColumns();this.layout();},onRowSelect:function(rowIndex){var row=this.getRowComposite(rowIndex);row.addClass("x-grid-row-selected");},onRowDeselect:function(rowIndex){var row=this.getRowComposite(rowIndex);row.removeClass("x-grid-row-selected");},onCellSelect:function(row,col){var cell=this.getCell(row,col);if(cell){Ext.fly(cell).addClass("x-grid-cell-selected");}},onCellDeselect:function(row,col){var cell=this.getCell(row,col);if(cell){Ext.fly(cell).removeClass("x-grid-cell-selected");}},updateHeaderSortState:function(){var state=this.ds.getSortState();if(!state){return;}
-this.sortState=state;var sortColumn=this.cm.findColumnIndex(state.field);if(sortColumn!=-1){var sortDir=state.direction;var sc=this.sortClasses;var hds=this.el.select(this.headerSelector).removeClass(sc);hds.item(sortColumn).addClass(sc[sortDir=="DESC"?1:0]);}},handleHeaderClick:function(g,index){if(this.headersDisabled){return;}
-var dm=g.dataSource,cm=g.colModel;if(!cm.isSortable(index)){return;}
-g.stopEditing();dm.sort(cm.getDataIndex(index));},destroy:function(){if(this.colMenu){this.colMenu.removeAll();Ext.menu.MenuMgr.unregister(this.colMenu);this.colMenu.getEl().remove();delete this.colMenu;}
-if(this.hmenu){this.hmenu.removeAll();Ext.menu.MenuMgr.unregister(this.hmenu);this.hmenu.getEl().remove();delete this.hmenu;}
-if(this.grid.enableColumnMove){var dds=Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];if(dds){for(var dd in dds){if(!dds[dd].config.isTarget&&dds[dd].dragElId){var elid=dds[dd].dragElId;dds[dd].unreg();Ext.get(elid).remove();}else if(dds[dd].config.isTarget){dds[dd].proxyTop.remove();dds[dd].proxyBottom.remove();dds[dd].unreg();}
-if(Ext.dd.DDM.locationCache[dd]){delete Ext.dd.DDM.locationCache[dd];}}
-delete Ext.dd.DDM.ids['gridHeader'+this.grid.getGridEl().id];}}
-this.bind(null,null);Ext.EventManager.removeResizeListener(this.onWindowResize,this);},handleLockChange:function(){this.refresh(true);},onDenyColumnLock:function(){},onDenyColumnHide:function(){},handleHdMenuClick:function(item){var index=this.hdCtxIndex;var cm=this.cm,ds=this.ds;switch(item.id){case"asc":ds.sort(cm.getDataIndex(index),"ASC");break;case"desc":ds.sort(cm.getDataIndex(index),"DESC");break;case"lock":var lc=cm.getLockedCount();if(cm.getColumnCount(true)<=lc+1){this.onDenyColumnLock();return;}
-if(lc!=index){cm.setLocked(index,true,true);cm.moveColumn(index,lc);this.grid.fireEvent("columnmove",index,lc);}else{cm.setLocked(index,true);}
-break;case"unlock":var lc=cm.getLockedCount();if((lc-1)!=index){cm.setLocked(index,false,true);cm.moveColumn(index,lc-1);this.grid.fireEvent("columnmove",index,lc-1);}else{cm.setLocked(index,false);}
-break;default:index=cm.getIndexById(item.id.substr(4));if(index!=-1){if(item.checked&&cm.getColumnCount(true)<=1){this.onDenyColumnHide();return false;}
-cm.setHidden(index,item.checked);}}
-return true;},beforeColMenuShow:function(){var cm=this.cm,colCount=cm.getColumnCount();this.colMenu.removeAll();for(var i=0;i<colCount;i++){this.colMenu.add(new Ext.menu.CheckItem({id:"col-"+cm.getColumnId(i),text:cm.getColumnHeader(i),checked:!cm.isHidden(i),hideOnClick:false}));}},handleHdCtx:function(g,index,e){e.stopEvent();var hd=this.getHeaderCell(index);this.hdCtxIndex=index;var ms=this.hmenu.items,cm=this.cm;ms.get("asc").setDisabled(!cm.isSortable(index));ms.get("desc").setDisabled(!cm.isSortable(index));if(this.grid.enableColLock!==false){ms.get("lock").setDisabled(cm.isLocked(index));ms.get("unlock").setDisabled(!cm.isLocked(index));}
-this.hmenu.show(hd,"tl-bl");},handleHdOver:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd&&!this.headersDisabled){if(this.grid.colModel.isSortable(this.getCellIndex(hd))){this.fly(hd).addClass("x-grid-hd-over");}}},handleHdOut:function(e){var hd=this.findHeaderCell(e.getTarget());if(hd){this.fly(hd).removeClass("x-grid-hd-over");}},handleSplitDblClick:function(e,t){var i=this.getCellIndex(t);if(this.grid.enableColumnResize!==false&&this.cm.isResizable(i)&&!this.cm.isFixed(i)){this.autoSizeColumn(i,true);this.layout();}},render:function(){var cm=this.cm;var colCount=cm.getColumnCount();if(this.grid.monitorWindowResize===true){Ext.EventManager.onWindowResize(this.onWindowResize,this,true);}
-var header=this.renderHeaders();var body=this.templates.body.apply({rows:""});var html=this.templates.master.apply({lockedBody:body,body:body,lockedHeader:header[0],header:header[1]});this.grid.getGridEl().dom.innerHTML=html;this.initElements();this.scroller.on("scroll",this.handleScroll,this);this.lockedBody.on("mousewheel",this.handleWheel,this);this.mainBody.on("mousewheel",this.handleWheel,this);this.mainHd.on("mouseover",this.handleHdOver,this);this.mainHd.on("mouseout",this.handleHdOut,this);this.mainHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});this.lockedHd.on("mouseover",this.handleHdOver,this);this.lockedHd.on("mouseout",this.handleHdOut,this);this.lockedHd.on("dblclick",this.handleSplitDblClick,this,{delegate:"."+this.splitClass});if(this.grid.enableColumnResize!==false&&Ext.grid.SplitDragZone){new Ext.grid.SplitDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}
-this.updateSplitters();if(this.grid.enableColumnMove&&Ext.grid.HeaderDragZone){new Ext.grid.HeaderDragZone(this.grid,this.lockedHd.dom,this.mainHd.dom);new Ext.grid.HeaderDropZone(this.grid,this.lockedHd.dom,this.mainHd.dom);}
-if(this.grid.enableCtxMenu!==false&&Ext.menu.Menu){this.hmenu=new Ext.menu.Menu({id:this.grid.id+"-hctx"});this.hmenu.add({id:"asc",text:this.sortAscText,cls:"xg-hmenu-sort-asc"},{id:"desc",text:this.sortDescText,cls:"xg-hmenu-sort-desc"});if(this.grid.enableColLock!==false){this.hmenu.add('-',{id:"lock",text:this.lockText,cls:"xg-hmenu-lock"},{id:"unlock",text:this.unlockText,cls:"xg-hmenu-unlock"});}
-if(this.grid.enableColumnHide!==false){this.colMenu=new Ext.menu.Menu({id:this.grid.id+"-hcols-menu"});this.colMenu.on("beforeshow",this.beforeColMenuShow,this);this.colMenu.on("itemclick",this.handleHdMenuClick,this);this.hmenu.add('-',{id:"columns",text:this.columnsText,menu:this.colMenu});}
-this.hmenu.on("itemclick",this.handleHdMenuClick,this);this.grid.on("headercontextmenu",this.handleHdCtx,this);}
-if((this.grid.enableDragDrop||this.grid.enableDrag)&&Ext.grid.GridDragZone){this.dd=new Ext.grid.GridDragZone(this.grid,{ddGroup:this.grid.ddGroup||'GridDD'});}
-this.updateHeaderSortState();this.beforeInitialResize();this.layout(true);this.renderPhase2.defer(1,this);},renderPhase2:function(){this.refresh();if(this.grid.autoSizeColumns){this.autoSizeColumns();}},beforeInitialResize:function(){},onColumnSplitterMoved:function(i,w){this.userResized=true;var cm=this.grid.colModel;cm.setColumnWidth(i,w,true);var cid=cm.getColumnId(i);this.css.updateRule(this.colSelector+cid,"width",(w-this.borderWidth)+"px");this.css.updateRule(this.hdSelector+cid,"width",(w-this.borderWidth)+"px");this.updateSplitters();this.layout();this.grid.fireEvent("columnresize",i,w);},syncRowHeights:function(startIndex,endIndex){if(this.grid.enableRowHeightSync===true&&this.cm.getLockedCount()>0){startIndex=startIndex||0;var mrows=this.getBodyTable().rows;var lrows=this.getLockedTable().rows;var len=mrows.length-1;endIndex=Math.min(endIndex||len,len);for(var i=startIndex;i<=endIndex;i++){var m=mrows[i],l=lrows[i];var h=Math.max(m.offsetHeight,l.offsetHeight);m.style.height=l.style.height=h+"px";}}},layout:function(initialRender,is2ndPass){var g=this.grid;var auto=g.autoHeight;var scrollOffset=16;var c=g.getGridEl(),cm=this.cm,expandCol=g.autoExpandColumn,gv=this;if(!c.dom.offsetWidth){if(initialRender){this.lockedWrap.show();this.mainWrap.show();}
-return;}
-var hasLock=this.cm.isLocked(0);var tbh=this.headerPanel.getHeight();var bbh=this.footerPanel.getHeight();if(auto){var ch=this.getBodyTable().offsetHeight+tbh+bbh+this.mainHd.getHeight();var newHeight=ch+c.getBorderWidth("tb");if(g.maxHeight){newHeight=Math.min(g.maxHeight,newHeight);}
-c.setHeight(newHeight);}
-if(g.autoWidth){c.setWidth(cm.getTotalWidth()+c.getBorderWidth('lr'));}
-var s=this.scroller;var csize=c.getSize(true);this.el.setSize(csize.width,csize.height);this.headerPanel.setWidth(csize.width);this.footerPanel.setWidth(csize.width);var hdHeight=this.mainHd.getHeight();var vw=csize.width;var vh=csize.height-(tbh+bbh);s.setSize(vw,vh);var bt=this.getBodyTable();var ltWidth=hasLock?Math.max(this.getLockedTable().offsetWidth,this.lockedHd.dom.firstChild.offsetWidth):0;var scrollHeight=bt.offsetHeight;var scrollWidth=ltWidth+bt.offsetWidth;var vscroll=false,hscroll=false;this.scrollSizer.setSize(scrollWidth,scrollHeight+hdHeight);var lw=this.lockedWrap,mw=this.mainWrap;var lb=this.lockedBody,mb=this.mainBody;setTimeout(function(){var t=s.dom.offsetTop;var w=s.dom.clientWidth,h=s.dom.clientHeight;lw.setTop(t);lw.setSize(ltWidth,h);mw.setLeftTop(ltWidth,t);mw.setSize(w-ltWidth,h);lb.setHeight(h-hdHeight);mb.setHeight(h-hdHeight);if(is2ndPass!==true&&!gv.userResized&&expandCol){var ci=cm.getIndexById(expandCol);var tw=cm.getTotalWidth(false);var currentWidth=cm.getColumnWidth(ci);var cw=Math.min(Math.max(((w-tw)+currentWidth-2)-(w<=s.dom.offsetWidth?0:18),g.autoExpandMin),g.autoExpandMax);if(currentWidth!=cw){cm.setColumnWidth(ci,cw,true);gv.css.updateRule(gv.colSelector+expandCol,"width",(cw-gv.borderWidth)+"px");gv.css.updateRule(gv.hdSelector+expandCol,"width",(cw-gv.borderWidth)+"px");gv.updateSplitters();gv.layout(false,true);}}
-if(initialRender){lw.show();mw.show();}},10);},onWindowResize:function(){if(!this.grid.monitorWindowResize||this.grid.autoHeight){return;}
-this.layout();},appendFooter:function(parentEl){return null;},sortAscText:"Sort Ascending",sortDescText:"Sort Descending",lockText:"Lock Column",unlockText:"Unlock Column",columnsText:"Columns"});
-
-Ext.grid.ColumnModel=function(config){Ext.grid.ColumnModel.superclass.constructor.call(this);this.config=config;this.lookup={};for(var i=0,len=config.length;i<len;i++){if(typeof config[i].dataIndex=="undefined"){config[i].dataIndex=i;}
-if(typeof config[i].renderer=="string"){config[i].renderer=Ext.util.Format[config[i].renderer];}
-if(typeof config[i].id=="undefined"){config[i].id=i;}
-this.lookup[config[i].id]=config[i];}
-this.defaultWidth=100;this.defaultSortable=false;this.addEvents({"widthchange":true,"headerchange":true,"hiddenchange":true,"columnmoved":true,"columnlockchange":true});Ext.grid.ColumnModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.ColumnModel,Ext.util.Observable,{getColumnId:function(index){return this.config[index].id;},getColumnById:function(id){return this.lookup[id];},getIndexById:function(id){for(var i=0,len=this.config.length;i<len;i++){if(this.config[i].id==id){return i;}}
-return-1;},moveColumn:function(oldIndex,newIndex){var c=this.config[oldIndex];this.config.splice(oldIndex,1);this.config.splice(newIndex,0,c);this.dataMap=null;this.fireEvent("columnmoved",this,oldIndex,newIndex);},isLocked:function(colIndex){return this.config[colIndex].locked===true;},setLocked:function(colIndex,value,suppressEvent){if(this.isLocked(colIndex)==value){return;}
-this.config[colIndex].locked=value;if(!suppressEvent){this.fireEvent("columnlockchange",this,colIndex,value);}},getTotalLockedWidth:function(){var totalWidth=0;for(var i=0;i<this.config.length;i++){if(this.isLocked(i)&&!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}
-return totalWidth;},getLockedCount:function(){for(var i=0,len=this.config.length;i<len;i++){if(!this.isLocked(i)){return i;}}},getColumnCount:function(visibleOnly){if(visibleOnly===true){var c=0;for(var i=0,len=this.config.length;i<len;i++){if(!this.isHidden(i)){c++;}}
-return c;}
-return this.config.length;},getColumnsBy:function(fn,scope){var r=[];for(var i=0,len=this.config.length;i<len;i++){var c=this.config[i];if(fn.call(scope||this,c,i)===true){r[r.length]=c;}}
-return r;},isSortable:function(col){if(typeof this.config[col].sortable=="undefined"){return this.defaultSortable;}
-return this.config[col].sortable;},getRenderer:function(col){if(!this.config[col].renderer){return Ext.grid.ColumnModel.defaultRenderer;}
-return this.config[col].renderer;},setRenderer:function(col,fn){this.config[col].renderer=fn;},getColumnWidth:function(col){return this.config[col].width||this.defaultWidth;},setColumnWidth:function(col,width,suppressEvent){this.config[col].width=width;this.totalWidth=null;if(!suppressEvent){this.fireEvent("widthchange",this,col,width);}},getTotalWidth:function(includeHidden){if(!this.totalWidth){this.totalWidth=0;for(var i=0,len=this.config.length;i<len;i++){if(includeHidden||!this.isHidden(i)){this.totalWidth+=this.getColumnWidth(i);}}}
-return this.totalWidth;},getColumnHeader:function(col){return this.config[col].header;},setColumnHeader:function(col,header){this.config[col].header=header;this.fireEvent("headerchange",this,col,header);},getColumnTooltip:function(col){return this.config[col].tooltip;},setColumnTooltip:function(col,tooltip){this.config[col].tooltip=tooltip;},getDataIndex:function(col){return this.config[col].dataIndex;},setDataIndex:function(col,dataIndex){this.config[col].dataIndex=dataIndex;},findColumnIndex:function(dataIndex){var c=this.config;for(var i=0,len=c.length;i<len;i++){if(c[i].dataIndex==dataIndex){return i;}}
-return-1;},isCellEditable:function(colIndex,rowIndex){return(this.config[colIndex].editable||(typeof this.config[colIndex].editable=="undefined"&&this.config[colIndex].editor))?true:false;},getCellEditor:function(colIndex,rowIndex){return this.config[colIndex].editor;},setEditable:function(col,editable){this.config[col].editable=editable;},isHidden:function(colIndex){return this.config[colIndex].hidden;},isFixed:function(colIndex){return this.config[colIndex].fixed;},isResizable:function(colIndex){return colIndex>=0&&this.config[colIndex].resizable!==false&&this.config[colIndex].fixed!==true;},setHidden:function(colIndex,hidden){this.config[colIndex].hidden=hidden;this.totalWidth=null;this.fireEvent("hiddenchange",this,colIndex,hidden);},setEditor:function(col,editor){this.config[col].editor=editor;}});Ext.grid.ColumnModel.defaultRenderer=function(value){if(typeof value=="string"&&value.length<1){return"&#160;";}
-return value;};Ext.grid.DefaultColumnModel=Ext.grid.ColumnModel;
-
-Ext.grid.AbstractSelectionModel=function(){this.locked=false;Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);};Ext.extend(Ext.grid.AbstractSelectionModel,Ext.util.Observable,{init:function(grid){this.grid=grid;this.initEvents();},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;}});
-
-Ext.grid.RowSelectionModel=function(config){Ext.apply(this,config);this.selections=new Ext.util.MixedCollection(false,function(o){return o.id;});this.last=false;this.lastActive=false;this.addEvents({"selectionchange":true,"beforerowselect":true,"rowselect":true,"rowdeselect":true});this.locked=false;};Ext.extend(Ext.grid.RowSelectionModel,Ext.grid.AbstractSelectionModel,{singleSelect:false,initEvents:function(){if(!this.grid.enableDragDrop&&!this.grid.enableDrag){this.grid.on("mousedown",this.handleMouseDown,this);}
-this.rowNav=new Ext.KeyNav(this.grid.getGridEl(),{"up":function(e){if(!e.shiftKey){this.selectPrevious(e.shiftKey);}else if(this.last!==false&&this.lastActive!==false){var last=this.last;this.selectRange(this.last,this.lastActive-1);this.grid.getView().focusRow(this.lastActive);if(last!==false){this.last=last;}}else{this.selectFirstRow();}},"down":function(e){if(!e.shiftKey){this.selectNext(e.shiftKey);}else if(this.last!==false&&this.lastActive!==false){var last=this.last;this.selectRange(this.last,this.lastActive+1);this.grid.getView().focusRow(this.lastActive);if(last!==false){this.last=last;}}else{this.selectFirstRow();}},scope:this});var view=this.grid.view;view.on("refresh",this.onRefresh,this);view.on("rowupdated",this.onRowUpdated,this);view.on("rowremoved",this.onRemove,this);},onRefresh:function(){var ds=this.grid.dataSource,i,v=this.grid.view;var s=this.selections;s.each(function(r){if((i=ds.indexOfId(r.id))!=-1){v.onRowSelect(i);}else{s.remove(r);}});},onRemove:function(v,index,r){this.selections.remove(r);},onRowUpdated:function(v,index,r){if(this.isSelected(r)){v.onRowSelect(index);}},selectRecords:function(records,keepExisting){if(!keepExisting){this.clearSelections();}
-var ds=this.grid.dataSource;for(var i=0,len=records.length;i<len;i++){this.selectRow(ds.indexOf(records[i]),true);}},getCount:function(){return this.selections.length;},selectFirstRow:function(){this.selectRow(0);},selectLastRow:function(keepExisting){this.selectRow(this.grid.dataSource.getCount()-1,keepExisting);},selectNext:function(keepExisting){if(this.last!==false&&(this.last+1)<this.grid.dataSource.getCount()){this.selectRow(this.last+1,keepExisting);this.grid.getView().focusRow(this.last);}},selectPrevious:function(keepExisting){if(this.last){this.selectRow(this.last-1,keepExisting);this.grid.getView().focusRow(this.last);}},getSelections:function(){return[].concat(this.selections.items);},getSelected:function(){return this.selections.itemAt(0);},clearSelections:function(fast){if(this.locked)return;if(fast!==true){var ds=this.grid.dataSource;var s=this.selections;s.each(function(r){this.deselectRow(ds.indexOfId(r.id));},this);s.clear();}else{this.selections.clear();}
-this.last=false;},selectAll:function(){if(this.locked)return;this.selections.clear();for(var i=0,len=this.grid.dataSource.getCount();i<len;i++){this.selectRow(i,true);}},hasSelection:function(){return this.selections.length>0;},isSelected:function(index){var r=typeof index=="number"?this.grid.dataSource.getAt(index):index;return(r&&this.selections.key(r.id)?true:false);},isIdSelected:function(id){return(this.selections.key(id)?true:false);},handleMouseDown:function(e,t){var view=this.grid.getView(),rowIndex;if(this.isLocked()||(rowIndex=view.findRowIndex(t))===false){return;};if(e.shiftKey&&this.last!==false){var last=this.last;this.selectRange(last,rowIndex,e.ctrlKey);this.last=last;view.focusRow(rowIndex);}else{var isSelected=this.isSelected(rowIndex);if(e.button!=0&&isSelected){view.focusRow(rowIndex);}else if(e.ctrlKey&&isSelected){this.deselectRow(rowIndex);}else{this.selectRow(rowIndex,e.button==0&&(e.ctrlKey||e.shiftKey));view.focusRow(rowIndex);}}},selectRows:function(rows,keepExisting){if(!keepExisting){this.clearSelections();}
-for(var i=0,len=rows.length;i<len;i++){this.selectRow(rows[i],true);}},selectRange:function(startRow,endRow,keepExisting){if(this.locked)return;if(!keepExisting){this.clearSelections();}
-if(startRow<=endRow){for(var i=startRow;i<=endRow;i++){this.selectRow(i,true);}}else{for(var i=startRow;i>=endRow;i--){this.selectRow(i,true);}}},deselectRange:function(startRow,endRow,preventViewNotify){if(this.locked)return;for(var i=startRow;i<=endRow;i++){this.deselectRow(i,preventViewNotify);}},selectRow:function(index,keepExisting,preventViewNotify){if(this.locked||(index<0||index>=this.grid.dataSource.getCount()))return;if(this.fireEvent("beforerowselect",this,index,keepExisting)!==false){if(!keepExisting||this.singleSelect){this.clearSelections();}
-var r=this.grid.dataSource.getAt(index);this.selections.add(r);this.last=this.lastActive=index;if(!preventViewNotify){this.grid.getView().onRowSelect(index);}
-this.fireEvent("rowselect",this,index,r);this.fireEvent("selectionchange",this);}},deselectRow:function(index,preventViewNotify){if(this.locked)return;if(this.last==index){this.last=false;}
-if(this.lastActive==index){this.lastActive=false;}
-var r=this.grid.dataSource.getAt(index);this.selections.remove(r);if(!preventViewNotify){this.grid.getView().onRowDeselect(index);}
-this.fireEvent("rowdeselect",this,index);this.fireEvent("selectionchange",this);},restoreLast:function(){if(this._last){this.last=this._last;}},acceptsNav:function(row,col,cm){return!cm.isHidden(col)&&cm.isCellEditable(col,row);},onEditorKey:function(field,e){var k=e.getKey(),newCell,g=this.grid,ed=g.activeEditor;if(k==e.TAB){e.stopEvent();ed.completeEdit();if(e.shiftKey){newCell=g.walkCells(ed.row,ed.col-1,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row,ed.col+1,1,this.acceptsNav,this);}}else if(k==e.ENTER&&!e.ctrlKey){e.stopEvent();ed.completeEdit();if(e.shiftKey){newCell=g.walkCells(ed.row-1,ed.col,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row+1,ed.col,1,this.acceptsNav,this);}}else if(k==e.ESC){ed.cancelEdit();}
-if(newCell){g.startEditing(newCell[0],newCell[1]);}}});
-
-Ext.grid.CellSelectionModel=function(config){Ext.apply(this,config);this.selection=null;this.addEvents({"beforecellselect":true,"cellselect":true,"selectionchange":true});};Ext.extend(Ext.grid.CellSelectionModel,Ext.grid.AbstractSelectionModel,{initEvents:function(){this.grid.on("mousedown",this.handleMouseDown,this);this.grid.getGridEl().on(Ext.isIE?"keydown":"keypress",this.handleKeyDown,this);var view=this.grid.view;view.on("refresh",this.onViewChange,this);view.on("rowupdated",this.onRowUpdated,this);view.on("beforerowremoved",this.clearSelections,this);view.on("beforerowsinserted",this.clearSelections,this);if(this.grid.isEditor){this.grid.on("beforeedit",this.beforeEdit,this);}},beforeEdit:function(e){this.select(e.row,e.column,false,true,e.record);},onRowUpdated:function(v,index,r){if(this.selection&&this.selection.record==r){v.onCellSelect(index,this.selection.cell[1]);}},onViewChange:function(){this.clearSelections(true);},getSelectedCell:function(){return this.selection?this.selection.cell:null;},clearSelections:function(preventNotify){var s=this.selection;if(s){if(preventNotify!==true){this.grid.view.onCellDeselect(s.cell[0],s.cell[1]);}
-this.selection=null;this.fireEvent("selectionchange",this,null);}},hasSelection:function(){return this.selection?true:false;},handleMouseDown:function(e,t){var v=this.grid.getView();if(this.isLocked()){return;};var row=v.findRowIndex(t);var cell=v.findCellIndex(t);if(row!==false&&cell!==false){this.select(row,cell);}},select:function(rowIndex,colIndex,preventViewNotify,preventFocus,r){if(this.fireEvent("beforecellselect",this,rowIndex,colIndex)!==false){this.clearSelections();r=r||this.grid.dataSource.getAt(rowIndex);this.selection={record:r,cell:[rowIndex,colIndex]};if(!preventViewNotify){var v=this.grid.getView();v.onCellSelect(rowIndex,colIndex);if(preventFocus!==true){v.focusCell(rowIndex,colIndex);}}
-this.fireEvent("cellselect",this,rowIndex,colIndex);this.fireEvent("selectionchange",this,this.selection);}},isSelectable:function(rowIndex,colIndex,cm){return!cm.isHidden(colIndex);},handleKeyDown:function(e){if(!e.isNavKeyPress()){return;}
-var g=this.grid,s=this.selection;if(!s){e.stopEvent();var cell=g.walkCells(0,0,1,this.isSelectable,this);if(cell){this.select(cell[0],cell[1]);}
-return;}
-var sm=this;var walk=function(row,col,step){return g.walkCells(row,col,step,sm.isSelectable,sm);};var k=e.getKey(),r=s.cell[0],c=s.cell[1];var newCell;switch(k){case e.TAB:if(e.shiftKey){newCell=walk(r,c-1,-1);}else{newCell=walk(r,c+1,1);}
-break;case e.DOWN:newCell=walk(r+1,c,1);break;case e.UP:newCell=walk(r-1,c,-1);break;case e.RIGHT:newCell=walk(r,c+1,1);break;case e.LEFT:newCell=walk(r,c-1,-1);break;case e.ENTER:if(g.isEditor&&!g.editing){g.startEditing(r,c);e.stopEvent();return;}
-break;};if(newCell){this.select(newCell[0],newCell[1]);e.stopEvent();}},acceptsNav:function(row,col,cm){return!cm.isHidden(col)&&cm.isCellEditable(col,row);},onEditorKey:function(field,e){var k=e.getKey(),newCell,g=this.grid,ed=g.activeEditor;if(k==e.TAB){if(e.shiftKey){newCell=g.walkCells(ed.row,ed.col-1,-1,this.acceptsNav,this);}else{newCell=g.walkCells(ed.row,ed.col+1,1,this.acceptsNav,this);}
-e.stopEvent();}else if(k==e.ENTER&&!e.ctrlKey){ed.completeEdit();e.stopEvent();}else if(k==e.ESC){ed.cancelEdit();}
-if(newCell){g.startEditing(newCell[0],newCell[1]);}}});
-
-Ext.grid.HeaderDragZone=function(grid,hd,hd2){this.grid=grid;this.view=grid.getView();this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDragZone.superclass.constructor.call(this,hd);if(hd2){this.setHandleElId(Ext.id(hd));this.setOuterHandleElId(Ext.id(hd2));}
-this.scroll=false;};Ext.extend(Ext.grid.HeaderDragZone,Ext.dd.DragZone,{maxDragWidth:120,getDragData:function(e){var t=Ext.lib.Event.getTarget(e);var h=this.view.findHeaderCell(t);if(h){return{ddel:h.firstChild,header:h};}
-return false;},onInitDrag:function(e){this.view.headersDisabled=true;var clone=this.dragData.ddel.cloneNode(true);clone.id=Ext.id();clone.style.width=Math.min(this.dragData.header.offsetWidth,this.maxDragWidth)+"px";this.proxy.update(clone);return true;},afterValidDrop:function(){var v=this.view;setTimeout(function(){v.headersDisabled=false;},50);},afterInvalidDrop:function(){var v=this.view;setTimeout(function(){v.headersDisabled=false;},50);}});Ext.grid.HeaderDropZone=function(grid,hd,hd2){this.grid=grid;this.view=grid.getView();this.proxyTop=Ext.DomHelper.append(document.body,{tag:"div",cls:"col-move-top",html:"&#160;"},true);this.proxyBottom=Ext.DomHelper.append(document.body,{tag:"div",cls:"col-move-bottom",html:"&#160;"},true);this.proxyTop.hide=this.proxyBottom.hide=function(){this.setLeftTop(-100,-100);this.setStyle("visibility","hidden");};this.ddGroup="gridHeader"+this.grid.getGridEl().id;Ext.grid.HeaderDropZone.superclass.constructor.call(this,grid.getGridEl().dom);};Ext.extend(Ext.grid.HeaderDropZone,Ext.dd.DropZone,{proxyOffsets:[-4,-9],fly:Ext.Element.fly,getTargetFromEvent:function(e){var t=Ext.lib.Event.getTarget(e);var cindex=this.view.findCellIndex(t);if(cindex!==false){return this.view.getHeaderCell(cindex);}},nextVisible:function(h){var v=this.view,cm=this.grid.colModel;h=h.nextSibling;while(h){if(!cm.isHidden(v.getCellIndex(h))){return h;}
-h=h.nextSibling;}
-return null;},prevVisible:function(h){var v=this.view,cm=this.grid.colModel;h=h.prevSibling;while(h){if(!cm.isHidden(v.getCellIndex(h))){return h;}
-h=h.prevSibling;}
-return null;},positionIndicator:function(h,n,e){var x=Ext.lib.Event.getPageX(e);var r=Ext.lib.Dom.getRegion(n.firstChild);var px,pt,py=r.top+this.proxyOffsets[1];if((r.right-x)<=(r.right-r.left)/2){px=r.right+this.view.borderWidth;pt="after";}else{px=r.left;pt="before";}
-var oldIndex=this.view.getCellIndex(h);var newIndex=this.view.getCellIndex(n);if(this.grid.colModel.isFixed(newIndex)){return false;}
-var locked=this.grid.colModel.isLocked(newIndex);if(pt=="after"){newIndex++;}
-if(oldIndex<newIndex){newIndex--;}
-if(oldIndex==newIndex&&(locked==this.grid.colModel.isLocked(oldIndex))){return false;}
-px+=this.proxyOffsets[0];this.proxyTop.setLeftTop(px,py);this.proxyTop.show();if(!this.bottomOffset){this.bottomOffset=this.view.mainHd.getHeight();}
-this.proxyBottom.setLeftTop(px,py+this.proxyTop.dom.offsetHeight+this.bottomOffset);this.proxyBottom.show();return pt;},onNodeEnter:function(n,dd,e,data){if(data.header!=n){this.positionIndicator(data.header,n,e);}},onNodeOver:function(n,dd,e,data){var result=false;if(data.header!=n){result=this.positionIndicator(data.header,n,e);}
-if(!result){this.proxyTop.hide();this.proxyBottom.hide();}
-return result?this.dropAllowed:this.dropNotAllowed;},onNodeOut:function(n,dd,e,data){this.proxyTop.hide();this.proxyBottom.hide();},onNodeDrop:function(n,dd,e,data){var h=data.header;if(h!=n){var cm=this.grid.colModel;var x=Ext.lib.Event.getPageX(e);var r=Ext.lib.Dom.getRegion(n.firstChild);var pt=(r.right-x)<=((r.right-r.left)/2)?"after":"before";var oldIndex=this.view.getCellIndex(h);var newIndex=this.view.getCellIndex(n);var locked=cm.isLocked(newIndex);if(pt=="after"){newIndex++;}
-if(oldIndex<newIndex){newIndex--;}
-if(oldIndex==newIndex&&(locked==cm.isLocked(oldIndex))){return false;}
-cm.setLocked(oldIndex,locked,true);cm.moveColumn(oldIndex,newIndex);this.grid.fireEvent("columnmove",oldIndex,newIndex);return true;}
-return false;}});Ext.grid.GridView.ColumnDragZone=function(grid,hd){Ext.grid.GridView.ColumnDragZone.superclass.constructor.call(this,grid,hd,null);this.proxy.el.addClass('x-grid3-col-dd');};Ext.extend(Ext.grid.GridView.ColumnDragZone,Ext.grid.HeaderDragZone,{handleMouseDown:function(e){},callHandleMouseDown:function(e){Ext.grid.GridView.ColumnDragZone.superclass.handleMouseDown.call(this,e);}});
-
-Ext.grid.SplitDragZone=function(grid,hd,hd2){this.grid=grid;this.view=grid.getView();this.proxy=this.view.resizeProxy;Ext.grid.SplitDragZone.superclass.constructor.call(this,hd,"gridSplitters"+this.grid.getGridEl().id,{dragElId:Ext.id(this.proxy.dom),resizeFrame:false});this.setHandleElId(Ext.id(hd));this.setOuterHandleElId(Ext.id(hd2));this.scroll=false;};Ext.extend(Ext.grid.SplitDragZone,Ext.dd.DDProxy,{fly:Ext.Element.fly,b4StartDrag:function(x,y){this.view.headersDisabled=true;this.proxy.setHeight(this.view.mainWrap.getHeight());var w=this.cm.getColumnWidth(this.cellIndex);var minw=Math.max(w-this.grid.minColumnWidth,0);this.resetConstraints();this.setXConstraint(minw,1000);this.setYConstraint(0,0);this.minX=x-minw;this.maxX=x+1000;this.startPos=x;Ext.dd.DDProxy.prototype.b4StartDrag.call(this,x,y);},handleMouseDown:function(e){ev=Ext.EventObject.setEvent(e);var t=this.fly(ev.getTarget());if(t.hasClass("x-grid-split")){this.cellIndex=this.view.getCellIndex(t.dom);this.split=t.dom;this.cm=this.grid.colModel;if(this.cm.isResizable(this.cellIndex)&&!this.cm.isFixed(this.cellIndex)){Ext.grid.SplitDragZone.superclass.handleMouseDown.apply(this,arguments);}}},endDrag:function(e){this.view.headersDisabled=false;var endX=Math.max(this.minX,Ext.lib.Event.getPageX(e));var diff=endX-this.startPos;this.view.onColumnSplitterMoved(this.cellIndex,this.cm.getColumnWidth(this.cellIndex)+diff);},autoOffset:function(){this.setDelta(0,0);}});
-
-Ext.grid.GridDragZone=function(grid,config){this.view=grid.getView();Ext.grid.GridDragZone.superclass.constructor.call(this,this.view.mainBody.dom,config);if(this.view.lockedBody){this.setHandleElId(Ext.id(this.view.mainBody.dom));this.setOuterHandleElId(Ext.id(this.view.lockedBody.dom));}
-this.scroll=false;this.grid=grid;this.ddel=document.createElement('div');this.ddel.className='x-grid-dd-wrap';};Ext.extend(Ext.grid.GridDragZone,Ext.dd.DragZone,{ddGroup:"GridDD",getDragData:function(e){var t=Ext.lib.Event.getTarget(e);var rowIndex=this.view.findRowIndex(t);if(rowIndex!==false){var sm=this.grid.selModel;if(!sm.isSelected(rowIndex)||e.hasModifier()){sm.handleMouseDown(e,t);}
-return{grid:this.grid,ddel:this.ddel,rowIndex:rowIndex,selections:sm.getSelections()};}
-return false;},onInitDrag:function(e){var data=this.dragData;this.ddel.innerHTML=this.grid.getDragDropText();this.proxy.update(this.ddel);},afterRepair:function(){this.dragging=false;},getRepairXY:function(e,data){return false;},onEndDrag:function(data,e){},onValidDrop:function(dd,e,id){this.hideProxy();},beforeInvalidDrop:function(e,id){}});
diff --git a/lib/web/extjs/package/layout/layout-debug.js b/lib/web/extjs/package/layout/layout-debug.js
deleted file mode 100644
index 5cfeaa6fa01b00fd76a97b5e3292ea1f493a1082..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/layout/layout-debug.js
+++ /dev/null
@@ -1,2032 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.LayoutManager = function(container, config){
-    Ext.LayoutManager.superclass.constructor.call(this);
-    this.el = Ext.get(container);
-    // ie scrollbar fix
-    if(this.el.dom == document.body && Ext.isIE && !config.allowScroll){
-        document.body.scroll = "no";
-    }else if(this.el.dom != document.body && this.el.getStyle('position') == 'static'){
-        this.el.position('relative');
-    }
-    this.id = this.el.id;
-    this.el.addClass("x-layout-container");
-    
-    this.monitorWindowResize = true;
-    this.regions = {};
-    this.addEvents({
-        
-        "layout" : true,
-        
-        "regionresized" : true,
-        
-        "regioncollapsed" : true,
-        
-        "regionexpanded" : true
-    });
-    this.updating = false;
-    Ext.EventManager.onWindowResize(this.onWindowResize, this, true);
-};
-
-Ext.extend(Ext.LayoutManager, Ext.util.Observable, {
-    
-    isUpdating : function(){
-        return this.updating; 
-    },
-    
-    
-    beginUpdate : function(){
-        this.updating = true;    
-    },
-    
-    
-    endUpdate : function(noLayout){
-        this.updating = false;
-        if(!noLayout){
-            this.layout();
-        }    
-    },
-    
-    layout: function(){
-        
-    },
-    
-    onRegionResized : function(region, newSize){
-        this.fireEvent("regionresized", region, newSize);
-        this.layout();
-    },
-    
-    onRegionCollapsed : function(region){
-        this.fireEvent("regioncollapsed", region);
-    },
-    
-    onRegionExpanded : function(region){
-        this.fireEvent("regionexpanded", region);
-    },
-        
-    
-    getViewSize : function(){
-        var size;
-        if(this.el.dom != document.body){
-            size = this.el.getSize();
-        }else{
-            size = {width: Ext.lib.Dom.getViewWidth(), height: Ext.lib.Dom.getViewHeight()};
-        }
-        size.width -= this.el.getBorderWidth("lr")-this.el.getPadding("lr");
-        size.height -= this.el.getBorderWidth("tb")-this.el.getPadding("tb");
-        return size;
-    },
-    
-    
-    getEl : function(){
-        return this.el;
-    },
-    
-    
-    getRegion : function(target){
-        return this.regions[target.toLowerCase()];
-    },
-    
-    onWindowResize : function(){
-        if(this.monitorWindowResize){
-            this.layout();
-        }
-    }
-});
-
-Ext.BorderLayout = function(container, config){
-    config = config || {};
-    Ext.BorderLayout.superclass.constructor.call(this, container, config);
-    this.factory = config.factory || Ext.BorderLayout.RegionFactory;
-    for(var i = 0, len = this.factory.validRegions.length; i < len; i++) {
-    	var target = this.factory.validRegions[i];
-    	if(config[target]){
-    	    this.addRegion(target, config[target]);
-    	}
-    }
-};
-
-Ext.extend(Ext.BorderLayout, Ext.LayoutManager, {
-    
-    addRegion : function(target, config){
-        if(!this.regions[target]){
-            var r = this.factory.create(target, this, config);
-    	    this.bindRegion(target, r);
-        }
-        return this.regions[target];
-    },
-
-    // private (kinda)
-    bindRegion : function(name, r){
-        this.regions[name] = r;
-        r.on("visibilitychange", this.layout, this);
-        r.on("paneladded", this.layout, this);
-        r.on("panelremoved", this.layout, this);
-        r.on("invalidated", this.layout, this);
-        r.on("resized", this.onRegionResized, this);
-        r.on("collapsed", this.onRegionCollapsed, this);
-        r.on("expanded", this.onRegionExpanded, this);
-    },
-    
-    
-    layout : function(){
-        if(this.updating) return;
-        var size = this.getViewSize();
-        var w = size.width, h = size.height;
-        var centerW = w, centerH = h, centerY = 0, centerX = 0;
-        //var x = 0, y = 0;
-        
-        var rs = this.regions;
-        var n = rs["north"], s = rs["south"], west = rs["west"], e = rs["east"], c = rs["center"];
-        //if(this.hideOnLayout){ // not supported anymore
-            //c.el.setStyle("display", "none");
-        //}
-        if(n && n.isVisible()){
-            var b = n.getBox();
-            var m = n.getMargins();
-            b.width = w - (m.left+m.right);
-            b.x = m.left;
-            b.y = m.top;
-            centerY = b.height + b.y + m.bottom;
-            centerH -= centerY;
-            n.updateBox(this.safeBox(b));
-        }
-        if(s && s.isVisible()){
-            var b = s.getBox();
-            var m = s.getMargins();
-            b.width = w - (m.left+m.right);
-            b.x = m.left;
-            var totalHeight = (b.height + m.top + m.bottom);
-            b.y = h - totalHeight + m.top;
-            centerH -= totalHeight;
-            s.updateBox(this.safeBox(b));
-        }
-        if(west && west.isVisible()){
-            var b = west.getBox();
-            var m = west.getMargins();
-            b.height = centerH - (m.top+m.bottom);
-            b.x = m.left;
-            b.y = centerY + m.top;
-            var totalWidth = (b.width + m.left + m.right);
-            centerX += totalWidth;
-            centerW -= totalWidth;
-            west.updateBox(this.safeBox(b));
-        }
-        if(e && e.isVisible()){
-            var b = e.getBox();
-            var m = e.getMargins();
-            b.height = centerH - (m.top+m.bottom);
-            var totalWidth = (b.width + m.left + m.right);
-            b.x = w - totalWidth + m.left;
-            b.y = centerY + m.top;
-            centerW -= totalWidth;
-            e.updateBox(this.safeBox(b));
-        }
-        if(c){
-            var m = c.getMargins();
-            var centerBox = {
-                x: centerX + m.left,
-                y: centerY + m.top,
-                width: centerW - (m.left+m.right),
-                height: centerH - (m.top+m.bottom)
-            };
-            //if(this.hideOnLayout){
-                //c.el.setStyle("display", "block");
-            //}
-            c.updateBox(this.safeBox(centerBox));
-        }
-        this.el.repaint();
-        this.fireEvent("layout", this);
-    },
-    
-    safeBox : function(box){
-        box.width = Math.max(0, box.width);
-        box.height = Math.max(0, box.height);
-        return box;
-    },
-    
-    
-    add : function(target, panel){
-        target = target.toLowerCase();
-        return this.regions[target].add(panel);
-    },
-    
-    
-    remove : function(target, panel){
-        target = target.toLowerCase();
-        return this.regions[target].remove(panel);
-    },
-    
-    
-    findPanel : function(panelId){
-        var rs = this.regions;
-        for(var target in rs){
-            if(typeof rs[target] != "function"){
-                var p = rs[target].getPanel(panelId);
-                if(p){
-                    return p;
-                }
-            }
-        }
-        return null;
-    },
-    
-    
-    showPanel : function(panelId) {
-      var rs = this.regions;
-      for(var target in rs){
-         var r = rs[target];
-         if(typeof r != "function"){
-            if(r.hasPanel(panelId)){
-               return r.showPanel(panelId);
-            }
-         }
-      }
-      return null;
-   },
-   
-   
-    restoreState : function(provider){
-        if(!provider){
-            provider = Ext.state.Manager;
-        }
-        var sm = new Ext.LayoutStateManager();
-        sm.init(this, provider);
-    },
-
-
-    batchAdd : function(regions){
-        this.beginUpdate();
-        for(var rname in regions){
-            var lr = this.regions[rname];
-            if(lr){
-                this.addTypedPanels(lr, regions[rname]);
-            }
-        }
-        this.endUpdate();
-    },
-
-    
-    addTypedPanels : function(lr, ps){
-        if(typeof ps == 'string'){
-            lr.add(new Ext.ContentPanel(ps));
-        }
-        else if(ps instanceof Array){
-            for(var i =0, len = ps.length; i < len; i++){
-                this.addTypedPanels(lr, ps[i]);
-            }
-        }
-        else if(!ps.events){ // raw config?
-            var el = ps.el;
-            delete ps.el; // prevent conflict
-            lr.add(new Ext.ContentPanel(el || Ext.id(), ps));
-        }
-        else {  // panel object assumed!
-            lr.add(ps);
-        }
-    }
-});
-
-Ext.BorderLayout.create = function(config, targetEl){
-    var layout = new Ext.BorderLayout(targetEl || document.body, config);
-    layout.beginUpdate();
-    var regions = Ext.BorderLayout.RegionFactory.validRegions;
-    for(var j = 0, jlen = regions.length; j < jlen; j++){
-        var lr = regions[j];
-        if(layout.regions[lr] && config[lr].panels){
-            var r = layout.regions[lr];
-            var ps = config[lr].panels;
-            layout.addTypedPanels(r, ps);
-        }
-    }
-    layout.endUpdate();
-    return layout;
-};
-
-Ext.BorderLayout.RegionFactory = {
-    validRegions : ["north","south","east","west","center"],
-    
-    create : function(target, mgr, config){
-        target = target.toLowerCase();
-        if(config.lightweight || config.basic){
-            return new Ext.BasicLayoutRegion(mgr, config, target);
-        }
-        switch(target){
-            case "north":
-                return new Ext.NorthLayoutRegion(mgr, config);
-            case "south":
-                return new Ext.SouthLayoutRegion(mgr, config);
-            case "east":
-                return new Ext.EastLayoutRegion(mgr, config);
-            case "west":
-                return new Ext.WestLayoutRegion(mgr, config);
-            case "center":
-                return new Ext.CenterLayoutRegion(mgr, config);
-        }
-        throw 'Layout region "'+target+'" not supported.';
-    }
-};
-
-Ext.BasicLayoutRegion = function(mgr, config, pos, skipConfig){
-    this.mgr = mgr;
-    this.position  = pos;
-    this.events = {
-        
-        "beforeremove" : true,
-        
-        "invalidated" : true,
-        
-        "visibilitychange" : true,
-        
-        "paneladded" : true,
-        
-        "panelremoved" : true,
-        
-        "collapsed" : true,
-        
-        "expanded" : true,
-        
-        "slideshow" : true,
-        
-        "slidehide" : true,
-        
-        "panelactivated" : true,
-        
-        "resized" : true
-    };
-    
-    this.panels = new Ext.util.MixedCollection();
-    this.panels.getKey = this.getPanelId.createDelegate(this);
-    this.box = null;
-    this.activePanel = null;
-    if(skipConfig !== true){
-        this.applyConfig(config);
-    }
-};
-
-Ext.extend(Ext.BasicLayoutRegion, Ext.util.Observable, {
-    getPanelId : function(p){
-        return p.getId();
-    },
-    
-    applyConfig : function(config){
-        this.margins = config.margins || this.margins || {top: 0, left: 0, right:0, bottom: 0};
-        this.config = config;
-    },
-    
-    
-    resizeTo : function(newSize){
-        var el = this.el ? this.el :
-                 (this.activePanel ? this.activePanel.getEl() : null);
-        if(el){
-            switch(this.position){
-                case "east":
-                case "west":
-                    el.setWidth(newSize);
-                    this.fireEvent("resized", this, newSize);
-                break;
-                case "north":
-                case "south":
-                    el.setHeight(newSize);
-                    this.fireEvent("resized", this, newSize);
-                break;                
-            }
-        }
-    },
-    
-    getBox : function(){
-        return this.activePanel ? this.activePanel.getEl().getBox(false, true) : null;
-    },
-    
-    getMargins : function(){
-        return this.margins;
-    },
-    
-    updateBox : function(box){
-        this.box = box;
-        var el = this.activePanel.getEl();
-        el.dom.style.left = box.x + "px";
-        el.dom.style.top = box.y + "px";
-        this.activePanel.setSize(box.width, box.height);
-    },
-    
-    
-    getEl : function(){
-        return this.activePanel;
-    },
-    
-    
-    isVisible : function(){
-        return this.activePanel ? true : false;
-    },
-    
-    setActivePanel : function(panel){
-        panel = this.getPanel(panel);
-        if(this.activePanel && this.activePanel != panel){
-            this.activePanel.setActiveState(false);
-            this.activePanel.getEl().setLeftTop(-10000,-10000);
-        }
-        this.activePanel = panel;
-        panel.setActiveState(true);
-        if(this.box){
-            panel.setSize(this.box.width, this.box.height);
-        }
-        this.fireEvent("panelactivated", this, panel);
-        this.fireEvent("invalidated");
-    },
-    
-    
-    showPanel : function(panel){
-        if(panel = this.getPanel(panel)){
-            this.setActivePanel(panel);
-        }
-        return panel;
-    },
-    
-    
-    getActivePanel : function(){
-        return this.activePanel;
-    },
-    
-    
-    add : function(panel){
-        if(arguments.length > 1){
-            for(var i = 0, len = arguments.length; i < len; i++) {
-            	this.add(arguments[i]);
-            }
-            return null;
-        }
-        if(this.hasPanel(panel)){
-            this.showPanel(panel);
-            return panel;
-        }
-        var el = panel.getEl();
-        if(el.dom.parentNode != this.mgr.el.dom){
-            this.mgr.el.dom.appendChild(el.dom);
-        }
-        if(panel.setRegion){
-            panel.setRegion(this);
-        }
-        this.panels.add(panel);
-        el.setStyle("position", "absolute");
-        if(!panel.background){
-            this.setActivePanel(panel);
-            if(this.config.initialSize && this.panels.getCount()==1){
-                this.resizeTo(this.config.initialSize);
-            }
-        }
-        this.fireEvent("paneladded", this, panel);
-        return panel;
-    },
-    
-    
-    hasPanel : function(panel){
-        if(typeof panel == "object"){ // must be panel obj
-            panel = panel.getId();
-        }
-        return this.getPanel(panel) ? true : false;
-    },
-    
-    
-    remove : function(panel, preservePanel){
-        panel = this.getPanel(panel);
-        if(!panel){
-            return null;
-        }
-        var e = {};
-        this.fireEvent("beforeremove", this, panel, e);
-        if(e.cancel === true){
-            return null;
-        }
-        var panelId = panel.getId();
-        this.panels.removeKey(panelId);
-        return panel;
-    },
-    
-    
-    getPanel : function(id){
-        if(typeof id == "object"){ // must be panel obj
-            return id;
-        }
-        return this.panels.get(id);
-    },
-    
-    
-    getPosition: function(){
-        return this.position;    
-    }
-});
-
-Ext.LayoutRegion = function(mgr, config, pos){
-    Ext.LayoutRegion.superclass.constructor.call(this, mgr, config, pos, true);
-    var dh = Ext.DomHelper;
-    
-    this.el = dh.append(mgr.el.dom, {tag: "div", cls: "x-layout-panel x-layout-panel-" + this.position}, true);
-    
-
-    this.titleEl = dh.append(this.el.dom, {tag: "div", unselectable: "on", cls: "x-unselectable x-layout-panel-hd x-layout-title-"+this.position, children:[
-        {tag: "span", cls: "x-unselectable x-layout-panel-hd-text", unselectable: "on", html: "&#160;"},
-        {tag: "div", cls: "x-unselectable x-layout-panel-hd-tools", unselectable: "on"}
-    ]}, true);
-    this.titleEl.enableDisplayMode();
-    
-    this.titleTextEl = this.titleEl.dom.firstChild;
-    this.tools = Ext.get(this.titleEl.dom.childNodes[1], true);
-    this.closeBtn = this.createTool(this.tools.dom, "x-layout-close");
-    this.closeBtn.enableDisplayMode();
-    this.closeBtn.on("click", this.closeClicked, this);
-    this.closeBtn.hide();
-
-    this.createBody(config);
-    this.visible = true;
-    this.collapsed = false;
-
-    if(config.hideWhenEmpty){
-        this.hide();
-        this.on("paneladded", this.validateVisibility, this);
-        this.on("panelremoved", this.validateVisibility, this);
-    }
-    this.applyConfig(config);
-};
-
-Ext.extend(Ext.LayoutRegion, Ext.BasicLayoutRegion, {
-
-    createBody : function(){
-        
-        this.bodyEl = this.el.createChild({tag: "div", cls: "x-layout-panel-body"});
-    },
-
-    applyConfig : function(c){
-        if(c.collapsible && this.position != "center" && !this.collapsedEl){
-            var dh = Ext.DomHelper;
-            if(c.titlebar !== false){
-                this.collapseBtn = this.createTool(this.tools.dom, "x-layout-collapse-"+this.position);
-                this.collapseBtn.on("click", this.collapse, this);
-                this.collapseBtn.enableDisplayMode();
-
-                if(c.showPin === true || this.showPin){
-                    this.stickBtn = this.createTool(this.tools.dom, "x-layout-stick");
-                    this.stickBtn.enableDisplayMode();
-                    this.stickBtn.on("click", this.expand, this);
-                    this.stickBtn.hide();
-                }
-            }
-            
-            this.collapsedEl = dh.append(this.mgr.el.dom, {cls: "x-layout-collapsed x-layout-collapsed-"+this.position, children:[
-                {cls: "x-layout-collapsed-tools", children:[{cls: "x-layout-ctools-inner"}]}
-            ]}, true);
-            if(c.floatable !== false){
-               this.collapsedEl.addClassOnOver("x-layout-collapsed-over");
-               this.collapsedEl.on("click", this.collapseClick, this);
-            }
-
-            if(c.collapsedTitle && (this.position == "north" || this.position== "south")) {
-                this.collapsedTitleTextEl = dh.append(this.collapsedEl.dom, {tag: "div", cls: "x-unselectable x-layout-panel-hd-text",
-                   id: "message", unselectable: "on", style:{"float":"left"}});
-               this.collapsedTitleTextEl.innerHTML = c.collapsedTitle;
-             }
-            this.expandBtn = this.createTool(this.collapsedEl.dom.firstChild.firstChild, "x-layout-expand-"+this.position);
-            this.expandBtn.on("click", this.expand, this);
-        }
-        if(this.collapseBtn){
-            this.collapseBtn.setVisible(c.collapsible == true);
-        }
-        this.cmargins = c.cmargins || this.cmargins ||
-                         (this.position == "west" || this.position == "east" ?
-                             {top: 0, left: 2, right:2, bottom: 0} :
-                             {top: 2, left: 0, right:0, bottom: 2});
-        this.margins = c.margins || this.margins || {top: 0, left: 0, right:0, bottom: 0};
-        this.bottomTabs = c.tabPosition != "top";
-        this.autoScroll = c.autoScroll || false;
-        if(this.autoScroll){
-            this.bodyEl.setStyle("overflow", "auto");
-        }else{
-            this.bodyEl.setStyle("overflow", "hidden");
-        }
-        //if(c.titlebar !== false){
-            if((!c.titlebar && !c.title) || c.titlebar === false){
-                this.titleEl.hide();
-            }else{
-                this.titleEl.show();
-                if(c.title){
-                    this.titleTextEl.innerHTML = c.title;
-                }
-            }
-        //}
-        this.duration = c.duration || .30;
-        this.slideDuration = c.slideDuration || .45;
-        this.config = c;
-        if(c.collapsed){
-            this.collapse(true);
-        }
-        if(c.hidden){
-            this.hide();
-        }
-    },
-    
-    isVisible : function(){
-        return this.visible;
-    },
-
-    
-    setCollapsedTitle : function(title){
-        title = title || "&#160;";
-        if(this.collapsedTitleTextEl){
-            this.collapsedTitleTextEl.innerHTML = title;
-        }
-    },
-
-    getBox : function(){
-        var b;
-        if(!this.collapsed){
-            b = this.el.getBox(false, true);
-        }else{
-            b = this.collapsedEl.getBox(false, true);
-        }
-        return b;
-    },
-
-    getMargins : function(){
-        return this.collapsed ? this.cmargins : this.margins;
-    },
-
-    highlight : function(){
-        this.el.addClass("x-layout-panel-dragover");
-    },
-
-    unhighlight : function(){
-        this.el.removeClass("x-layout-panel-dragover");
-    },
-
-    updateBox : function(box){
-        this.box = box;
-        if(!this.collapsed){
-            this.el.dom.style.left = box.x + "px";
-            this.el.dom.style.top = box.y + "px";
-            this.updateBody(box.width, box.height);
-        }else{
-            this.collapsedEl.dom.style.left = box.x + "px";
-            this.collapsedEl.dom.style.top = box.y + "px";
-            this.collapsedEl.setSize(box.width, box.height);
-        }
-        if(this.tabs){
-            this.tabs.autoSizeTabs();
-        }
-    },
-
-    updateBody : function(w, h){
-        if(w !== null){
-            this.el.setWidth(w);
-            w -= this.el.getBorderWidth("rl");
-            if(this.config.adjustments){
-                w += this.config.adjustments[0];
-            }
-        }
-        if(h !== null){
-            this.el.setHeight(h);
-            h = this.titleEl && this.titleEl.isDisplayed() ? h - (this.titleEl.getHeight()||0) : h;
-            h -= this.el.getBorderWidth("tb");
-            if(this.config.adjustments){
-                h += this.config.adjustments[1];
-            }
-            this.bodyEl.setHeight(h);
-            if(this.tabs){
-                h = this.tabs.syncHeight(h);
-            }
-        }
-        if(this.panelSize){
-            w = w !== null ? w : this.panelSize.width;
-            h = h !== null ? h : this.panelSize.height;
-        }
-        if(this.activePanel){
-            var el = this.activePanel.getEl();
-            w = w !== null ? w : el.getWidth();
-            h = h !== null ? h : el.getHeight();
-            this.panelSize = {width: w, height: h};
-            this.activePanel.setSize(w, h);
-        }
-        if(Ext.isIE && this.tabs){
-            this.tabs.el.repaint();
-        }
-    },
-
-    
-    getEl : function(){
-        return this.el;
-    },
-
-    
-    hide : function(){
-        if(!this.collapsed){
-            this.el.dom.style.left = "-2000px";
-            this.el.hide();
-        }else{
-            this.collapsedEl.dom.style.left = "-2000px";
-            this.collapsedEl.hide();
-        }
-        this.visible = false;
-        this.fireEvent("visibilitychange", this, false);
-    },
-
-    
-    show : function(){
-        if(!this.collapsed){
-            this.el.show();
-        }else{
-            this.collapsedEl.show();
-        }
-        this.visible = true;
-        this.fireEvent("visibilitychange", this, true);
-    },
-
-    closeClicked : function(){
-        if(this.activePanel){
-            this.remove(this.activePanel);
-        }
-    },
-
-    collapseClick : function(e){
-        if(this.isSlid){
-           e.stopPropagation();
-           this.slideIn();
-        }else{
-           e.stopPropagation();
-           this.slideOut();
-        }
-    },
-
-    
-    collapse : function(skipAnim){
-        if(this.collapsed) return;
-        this.collapsed = true;
-        if(this.split){
-            this.split.el.hide();
-        }
-        if(this.config.animate && skipAnim !== true){
-            this.fireEvent("invalidated", this);
-            this.animateCollapse();
-        }else{
-            this.el.setLocation(-20000,-20000);
-            this.el.hide();
-            this.collapsedEl.show();
-            this.fireEvent("collapsed", this);
-            this.fireEvent("invalidated", this);
-        }
-    },
-
-    animateCollapse : function(){
-        // overridden
-    },
-
-    
-    expand : function(e, skipAnim){
-        if(e) e.stopPropagation();
-        if(!this.collapsed || this.el.hasActiveFx()) return;
-        if(this.isSlid){
-            this.afterSlideIn();
-            skipAnim = true;
-        }
-        this.collapsed = false;
-        if(this.config.animate && skipAnim !== true){
-            this.animateExpand();
-        }else{
-            this.el.show();
-            if(this.split){
-                this.split.el.show();
-            }
-            this.collapsedEl.setLocation(-2000,-2000);
-            this.collapsedEl.hide();
-            this.fireEvent("invalidated", this);
-            this.fireEvent("expanded", this);
-        }
-    },
-
-    animateExpand : function(){
-        // overridden
-    },
-
-    initTabs : function(){
-        this.bodyEl.setStyle("overflow", "hidden");
-        var ts = new Ext.TabPanel(this.bodyEl.dom, {
-            tabPosition: this.bottomTabs ? 'bottom' : 'top',
-            disableTooltips: this.config.disableTabTips
-        });
-        if(this.config.hideTabs){
-            ts.stripWrap.setDisplayed(false);
-        }
-        this.tabs = ts;
-        ts.resizeTabs = this.config.resizeTabs === true;
-        ts.minTabWidth = this.config.minTabWidth || 40;
-        ts.maxTabWidth = this.config.maxTabWidth || 250;
-        ts.preferredTabWidth = this.config.preferredTabWidth || 150;
-        ts.monitorResize = false;
-        ts.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
-        ts.bodyEl.addClass('x-layout-tabs-body');
-        this.panels.each(this.initPanelAsTab, this);
-    },
-
-    initPanelAsTab : function(panel){
-        var ti = this.tabs.addTab(panel.getEl().id, panel.getTitle(), null,
-                    this.config.closeOnTab && panel.isClosable());
-        if(panel.tabTip !== undefined){
-            ti.setTooltip(panel.tabTip);
-        }
-        ti.on("activate", function(){
-              this.setActivePanel(panel);
-        }, this);
-        if(this.config.closeOnTab){
-            ti.on("beforeclose", function(t, e){
-                e.cancel = true;
-                this.remove(panel);
-            }, this);
-        }
-        return ti;
-    },
-
-    updatePanelTitle : function(panel, title){
-        if(this.activePanel == panel){
-            this.updateTitle(title);
-        }
-        if(this.tabs){
-            var ti = this.tabs.getTab(panel.getEl().id);
-            ti.setText(title);
-            if(panel.tabTip !== undefined){
-                ti.setTooltip(panel.tabTip);
-            }
-        }
-    },
-
-    updateTitle : function(title){
-        if(this.titleTextEl && !this.config.title){
-            this.titleTextEl.innerHTML = (typeof title != "undefined" && title.length > 0 ? title : "&#160;");
-        }
-    },
-
-    setActivePanel : function(panel){
-        panel = this.getPanel(panel);
-        if(this.activePanel && this.activePanel != panel){
-            this.activePanel.setActiveState(false);
-        }
-        this.activePanel = panel;
-        panel.setActiveState(true);
-        if(this.panelSize){
-            panel.setSize(this.panelSize.width, this.panelSize.height);
-        }
-        if(this.closeBtn){
-            this.closeBtn.setVisible(!this.config.closeOnTab && !this.isSlid && panel.isClosable());
-        }
-        this.updateTitle(panel.getTitle());
-        if(this.tabs){
-            this.fireEvent("invalidated", this);
-        }
-        this.fireEvent("panelactivated", this, panel);
-    },
-
-    
-    showPanel : function(panel){
-        if(panel = this.getPanel(panel)){
-            if(this.tabs){
-                var tab = this.tabs.getTab(panel.getEl().id);
-                if(tab.isHidden()){
-                    this.tabs.unhideTab(tab.id);
-                }
-                tab.activate();
-            }else{
-                this.setActivePanel(panel);
-            }
-        }
-        return panel;
-    },
-
-    
-    getActivePanel : function(){
-        return this.activePanel;
-    },
-
-    validateVisibility : function(){
-        if(this.panels.getCount() < 1){
-            this.updateTitle("&#160;");
-            this.closeBtn.hide();
-            this.hide();
-        }else{
-            if(!this.isVisible()){
-                this.show();
-            }
-        }
-    },
-
-    
-    add : function(panel){
-        if(arguments.length > 1){
-            for(var i = 0, len = arguments.length; i < len; i++) {
-            	this.add(arguments[i]);
-            }
-            return null;
-        }
-        if(this.hasPanel(panel)){
-            this.showPanel(panel);
-            return panel;
-        }
-        panel.setRegion(this);
-        this.panels.add(panel);
-        if(this.panels.getCount() == 1 && !this.config.alwaysShowTabs){
-            this.bodyEl.dom.appendChild(panel.getEl().dom);
-            if(panel.background !== true){
-                this.setActivePanel(panel);
-            }
-            this.fireEvent("paneladded", this, panel);
-            return panel;
-        }
-        if(!this.tabs){
-            this.initTabs();
-        }else{
-            this.initPanelAsTab(panel);
-        }
-        if(panel.background !== true){
-            this.tabs.activate(panel.getEl().id);
-        }
-        this.fireEvent("paneladded", this, panel);
-        return panel;
-    },
-
-    
-    hidePanel : function(panel){
-        if(this.tabs && (panel = this.getPanel(panel))){
-            this.tabs.hideTab(panel.getEl().id);
-        }
-    },
-
-    
-    unhidePanel : function(panel){
-        if(this.tabs && (panel = this.getPanel(panel))){
-            this.tabs.unhideTab(panel.getEl().id);
-        }
-    },
-
-    clearPanels : function(){
-        while(this.panels.getCount() > 0){
-             this.remove(this.panels.first());
-        }
-    },
-
-    
-    remove : function(panel, preservePanel){
-        panel = this.getPanel(panel);
-        if(!panel){
-            return null;
-        }
-        var e = {};
-        this.fireEvent("beforeremove", this, panel, e);
-        if(e.cancel === true){
-            return null;
-        }
-        preservePanel = (typeof preservePanel != "undefined" ? preservePanel : (this.config.preservePanels === true || panel.preserve === true));
-        var panelId = panel.getId();
-        this.panels.removeKey(panelId);
-        if(preservePanel){
-            document.body.appendChild(panel.getEl().dom);
-        }
-        if(this.tabs){
-            this.tabs.removeTab(panel.getEl().id);
-        }else if (!preservePanel){
-            this.bodyEl.dom.removeChild(panel.getEl().dom);
-        }
-        if(this.panels.getCount() == 1 && this.tabs && !this.config.alwaysShowTabs){
-            var p = this.panels.first();
-            var tempEl = document.createElement("div"); // temp holder to keep IE from deleting the node
-            tempEl.appendChild(p.getEl().dom);
-            this.bodyEl.update("");
-            this.bodyEl.dom.appendChild(p.getEl().dom);
-            tempEl = null;
-            this.updateTitle(p.getTitle());
-            this.tabs = null;
-            this.bodyEl.setStyle("overflow", this.config.autoScroll ? "auto" : "hidden");
-            this.setActivePanel(p);
-        }
-        panel.setRegion(null);
-        if(this.activePanel == panel){
-            this.activePanel = null;
-        }
-        if(this.config.autoDestroy !== false && preservePanel !== true){
-            try{panel.destroy();}catch(e){}
-        }
-        this.fireEvent("panelremoved", this, panel);
-        return panel;
-    },
-
-    
-    getTabs : function(){
-        return this.tabs;
-    },
-
-    createTool : function(parentEl, className){
-        var btn = Ext.DomHelper.append(parentEl, {tag: "div", cls: "x-layout-tools-button",
-            children: [{tag: "div", cls: "x-layout-tools-button-inner " + className, html: "&#160;"}]}, true);
-        btn.addClassOnOver("x-layout-tools-button-over");
-        return btn;
-    }
-});
-
-Ext.SplitLayoutRegion = function(mgr, config, pos, cursor){
-    this.cursor = cursor;
-    Ext.SplitLayoutRegion.superclass.constructor.call(this, mgr, config, pos);
-};
-
-Ext.extend(Ext.SplitLayoutRegion, Ext.LayoutRegion, {
-    splitTip : "Drag to resize.",
-    collapsibleSplitTip : "Drag to resize. Double click to hide.",
-    useSplitTips : false,
-
-    applyConfig : function(config){
-        Ext.SplitLayoutRegion.superclass.applyConfig.call(this, config);
-        if(config.split){
-            if(!this.split){
-                var splitEl = Ext.DomHelper.append(this.mgr.el.dom, 
-                        {tag: "div", id: this.el.id + "-split", cls: "x-layout-split x-layout-split-"+this.position, html: "&#160;"});
-                
-                this.split = new Ext.SplitBar(splitEl, this.el, this.orientation);
-                this.split.on("moved", this.onSplitMove, this);
-                this.split.useShim = config.useShim === true;
-                this.split.getMaximumSize = this[this.position == 'north' || this.position == 'south' ? 'getVMaxSize' : 'getHMaxSize'].createDelegate(this);
-                if(this.useSplitTips){
-                    this.split.el.dom.title = config.collapsible ? this.collapsibleSplitTip : this.splitTip;
-                }
-                if(config.collapsible){
-                    this.split.el.on("dblclick", this.collapse,  this);
-                }
-            }
-            if(typeof config.minSize != "undefined"){
-                this.split.minSize = config.minSize;
-            }
-            if(typeof config.maxSize != "undefined"){
-                this.split.maxSize = config.maxSize;
-            }
-            if(config.hideWhenEmpty || config.hidden){
-                this.hideSplitter();
-            }
-        }
-    },
-
-    getHMaxSize : function(){
-         var cmax = this.config.maxSize || 10000;
-         var center = this.mgr.getRegion("center");
-         return Math.min(cmax, (this.el.getWidth()+center.getEl().getWidth())-center.getMinWidth());
-    },
-
-    getVMaxSize : function(){
-         var cmax = this.config.maxSize || 10000;
-         var center = this.mgr.getRegion("center");
-         return Math.min(cmax, (this.el.getHeight()+center.getEl().getHeight())-center.getMinHeight());
-    },
-
-    onSplitMove : function(split, newSize){
-        this.fireEvent("resized", this, newSize);
-    },
-    
-    
-    getSplitBar : function(){
-        return this.split;
-    },
-    
-    hide : function(){
-        this.hideSplitter();
-        Ext.SplitLayoutRegion.superclass.hide.call(this);
-    },
-
-    hideSplitter : function(){
-        if(this.split){
-            this.split.el.setLocation(-2000,-2000);
-            this.split.el.hide();
-        }
-    },
-
-    show : function(){
-        if(this.split){
-            this.split.el.show();
-        }
-        Ext.SplitLayoutRegion.superclass.show.call(this);
-    },
-    
-    beforeSlide: function(){
-        if(Ext.isGecko){// firefox overflow auto bug workaround
-            this.bodyEl.clip();
-            if(this.tabs) this.tabs.bodyEl.clip();
-            if(this.activePanel){
-                this.activePanel.getEl().clip();
-                
-                if(this.activePanel.beforeSlide){
-                    this.activePanel.beforeSlide();
-                }
-            }
-        }
-    },
-    
-    afterSlide : function(){
-        if(Ext.isGecko){// firefox overflow auto bug workaround
-            this.bodyEl.unclip();
-            if(this.tabs) this.tabs.bodyEl.unclip();
-            if(this.activePanel){
-                this.activePanel.getEl().unclip();
-                if(this.activePanel.afterSlide){
-                    this.activePanel.afterSlide();
-                }
-            }
-        }
-    },
-
-    initAutoHide : function(){
-        if(this.autoHide !== false){
-            if(!this.autoHideHd){
-                var st = new Ext.util.DelayedTask(this.slideIn, this);
-                this.autoHideHd = {
-                    "mouseout": function(e){
-                        if(!e.within(this.el, true)){
-                            st.delay(500);
-                        }
-                    },
-                    "mouseover" : function(e){
-                        st.cancel();
-                    },
-                    scope : this
-                };
-            }
-            this.el.on(this.autoHideHd);
-        }
-    },
-
-    clearAutoHide : function(){
-        if(this.autoHide !== false){
-            this.el.un("mouseout", this.autoHideHd.mouseout);
-            this.el.un("mouseover", this.autoHideHd.mouseover);
-        }
-    },
-
-    clearMonitor : function(){
-        Ext.get(document).un("click", this.slideInIf, this);
-    },
-
-    // these names are backwards but not changed for compat
-    slideOut : function(){
-        if(this.isSlid || this.el.hasActiveFx()){
-            return;
-        }
-        this.isSlid = true;
-        if(this.collapseBtn){
-            this.collapseBtn.hide();
-        }
-        this.closeBtnState = this.closeBtn.getStyle('display');
-        this.closeBtn.hide();
-        if(this.stickBtn){
-            this.stickBtn.show();
-        }
-        this.el.show();
-        this.el.alignTo(this.collapsedEl, this.getCollapseAnchor());
-        this.beforeSlide();
-        this.el.setStyle("z-index", 10001);
-        this.el.slideIn(this.getSlideAnchor(), {
-            callback: function(){
-                this.afterSlide();
-                this.initAutoHide();
-                Ext.get(document).on("click", this.slideInIf, this);
-                this.fireEvent("slideshow", this);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    afterSlideIn : function(){
-        this.clearAutoHide();
-        this.isSlid = false;
-        this.clearMonitor();
-        this.el.setStyle("z-index", "");
-        if(this.collapseBtn){
-            this.collapseBtn.show();
-        }
-        this.closeBtn.setStyle('display', this.closeBtnState);
-        if(this.stickBtn){
-            this.stickBtn.hide();
-        }
-        this.fireEvent("slidehide", this);
-    },
-
-    slideIn : function(cb){
-        if(!this.isSlid || this.el.hasActiveFx()){
-            Ext.callback(cb);
-            return;
-        }
-        this.isSlid = false;
-        this.beforeSlide();
-        this.el.slideOut(this.getSlideAnchor(), {
-            callback: function(){
-                this.el.setLeftTop(-10000, -10000);
-                this.afterSlide();
-                this.afterSlideIn();
-                Ext.callback(cb);
-            },
-            scope: this,
-            block: true
-        });
-    },
-    
-    slideInIf : function(e){
-        if(!e.within(this.el)){
-            this.slideIn();
-        }
-    },
-
-    animateCollapse : function(){
-        this.beforeSlide();
-        this.el.setStyle("z-index", 20000);
-        var anchor = this.getSlideAnchor();
-        this.el.slideOut(anchor, {
-            callback : function(){
-                this.el.setStyle("z-index", "");
-                this.collapsedEl.slideIn(anchor, {duration:.3});
-                this.afterSlide();
-                this.el.setLocation(-10000,-10000);
-                this.el.hide();
-                this.fireEvent("collapsed", this);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    animateExpand : function(){
-        this.beforeSlide();
-        this.el.alignTo(this.collapsedEl, this.getCollapseAnchor(), this.getExpandAdj());
-        this.el.setStyle("z-index", 20000);
-        this.collapsedEl.hide({
-            duration:.1
-        });
-        this.el.slideIn(this.getSlideAnchor(), {
-            callback : function(){
-                this.el.setStyle("z-index", "");
-                this.afterSlide();
-                if(this.split){
-                    this.split.el.show();
-                }
-                this.fireEvent("invalidated", this);
-                this.fireEvent("expanded", this);
-            },
-            scope: this,
-            block: true
-        });
-    },
-
-    anchors : {
-        "west" : "left",
-        "east" : "right",
-        "north" : "top",
-        "south" : "bottom"
-    },
-
-    sanchors : {
-        "west" : "l",
-        "east" : "r",
-        "north" : "t",
-        "south" : "b"
-    },
-
-    canchors : {
-        "west" : "tl-tr",
-        "east" : "tr-tl",
-        "north" : "tl-bl",
-        "south" : "bl-tl"
-    },
-
-    getAnchor : function(){
-        return this.anchors[this.position];
-    },
-
-    getCollapseAnchor : function(){
-        return this.canchors[this.position];
-    },
-
-    getSlideAnchor : function(){
-        return this.sanchors[this.position];
-    },
-
-    getAlignAdj : function(){
-        var cm = this.cmargins;
-        switch(this.position){
-            case "west":
-                return [0, 0];
-            break;
-            case "east":
-                return [0, 0];
-            break;
-            case "north":
-                return [0, 0];
-            break;
-            case "south":
-                return [0, 0];
-            break;
-        }
-    },
-
-    getExpandAdj : function(){
-        var c = this.collapsedEl, cm = this.cmargins;
-        switch(this.position){
-            case "west":
-                return [-(cm.right+c.getWidth()+cm.left), 0];
-            break;
-            case "east":
-                return [cm.right+c.getWidth()+cm.left, 0];
-            break;
-            case "north":
-                return [0, -(cm.top+cm.bottom+c.getHeight())];
-            break;
-            case "south":
-                return [0, cm.top+cm.bottom+c.getHeight()];
-            break;
-        }
-    }
-});
-
-Ext.CenterLayoutRegion = function(mgr, config){
-    Ext.CenterLayoutRegion.superclass.constructor.call(this, mgr, config, "center");
-    this.visible = true;
-    this.minWidth = config.minWidth || 20;
-    this.minHeight = config.minHeight || 20;
-};
-
-Ext.extend(Ext.CenterLayoutRegion, Ext.LayoutRegion, {
-    hide : function(){
-        // center panel can't be hidden
-    },
-    
-    show : function(){
-        // center panel can't be hidden
-    },
-    
-    getMinWidth: function(){
-        return this.minWidth;
-    },
-    
-    getMinHeight: function(){
-        return this.minHeight;
-    }
-});
-
-
-Ext.NorthLayoutRegion = function(mgr, config){
-    Ext.NorthLayoutRegion.superclass.constructor.call(this, mgr, config, "north", "n-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.TOP;
-        this.split.orientation = Ext.SplitBar.VERTICAL;
-        this.split.el.addClass("x-layout-split-v");
-    }
-    var size = config.initialSize || config.height;
-    if(typeof size != "undefined"){
-        this.el.setHeight(size);
-    }
-};
-Ext.extend(Ext.NorthLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.VERTICAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            box.height += this.split.el.getHeight();
-        }
-        return box;
-    },
-    
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            box.height -= this.split.el.getHeight();
-            this.split.el.setLeft(box.x);
-            this.split.el.setTop(box.y+box.height);
-            this.split.el.setWidth(box.width);
-        }
-        if(this.collapsed){
-            this.updateBody(box.width, null);
-        }
-        Ext.NorthLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-Ext.SouthLayoutRegion = function(mgr, config){
-    Ext.SouthLayoutRegion.superclass.constructor.call(this, mgr, config, "south", "s-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.BOTTOM;
-        this.split.orientation = Ext.SplitBar.VERTICAL;
-        this.split.el.addClass("x-layout-split-v");
-    }
-    var size = config.initialSize || config.height;
-    if(typeof size != "undefined"){
-        this.el.setHeight(size);
-    }
-};
-Ext.extend(Ext.SouthLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.VERTICAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            var sh = this.split.el.getHeight();
-            box.height += sh;
-            box.y -= sh;
-        }
-        return box;
-    },
-    
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            var sh = this.split.el.getHeight();
-            box.height -= sh;
-            box.y += sh;
-            this.split.el.setLeft(box.x);
-            this.split.el.setTop(box.y-sh);
-            this.split.el.setWidth(box.width);
-        }
-        if(this.collapsed){
-            this.updateBody(box.width, null);
-        }
-        Ext.SouthLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-Ext.EastLayoutRegion = function(mgr, config){
-    Ext.EastLayoutRegion.superclass.constructor.call(this, mgr, config, "east", "e-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.RIGHT;
-        this.split.orientation = Ext.SplitBar.HORIZONTAL;
-        this.split.el.addClass("x-layout-split-h");
-    }
-    var size = config.initialSize || config.width;
-    if(typeof size != "undefined"){
-        this.el.setWidth(size);
-    }
-};
-Ext.extend(Ext.EastLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.HORIZONTAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            var sw = this.split.el.getWidth();
-            box.width += sw;
-            box.x -= sw;
-        }
-        return box;
-    },
-
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            var sw = this.split.el.getWidth();
-            box.width -= sw;
-            this.split.el.setLeft(box.x);
-            this.split.el.setTop(box.y);
-            this.split.el.setHeight(box.height);
-            box.x += sw;
-        }
-        if(this.collapsed){
-            this.updateBody(null, box.height);
-        }
-        Ext.EastLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-Ext.WestLayoutRegion = function(mgr, config){
-    Ext.WestLayoutRegion.superclass.constructor.call(this, mgr, config, "west", "w-resize");
-    if(this.split){
-        this.split.placement = Ext.SplitBar.LEFT;
-        this.split.orientation = Ext.SplitBar.HORIZONTAL;
-        this.split.el.addClass("x-layout-split-h");
-    }
-    var size = config.initialSize || config.width;
-    if(typeof size != "undefined"){
-        this.el.setWidth(size);
-    }
-};
-Ext.extend(Ext.WestLayoutRegion, Ext.SplitLayoutRegion, {
-    orientation: Ext.SplitBar.HORIZONTAL,
-    getBox : function(){
-        if(this.collapsed){
-            return this.collapsedEl.getBox();
-        }
-        var box = this.el.getBox();
-        if(this.split){
-            box.width += this.split.el.getWidth();
-        }
-        return box;
-    },
-    
-    updateBox : function(box){
-        if(this.split && !this.collapsed){
-            var sw = this.split.el.getWidth();
-            box.width -= sw;
-            this.split.el.setLeft(box.x+box.width);
-            this.split.el.setTop(box.y);
-            this.split.el.setHeight(box.height);
-        }
-        if(this.collapsed){
-            this.updateBody(null, box.height);
-        }
-        Ext.WestLayoutRegion.superclass.updateBox.call(this, box);
-    }
-});
-
-
-Ext.LayoutStateManager = function(layout){
-     // default empty state
-     this.state = {
-        north: {},
-        south: {},
-        east: {},
-        west: {}       
-    };
-};
-
-Ext.LayoutStateManager.prototype = {
-    init : function(layout, provider){
-        this.provider = provider;
-        var state = provider.get(layout.id+"-layout-state");
-        if(state){
-            var wasUpdating = layout.isUpdating();
-            if(!wasUpdating){
-                layout.beginUpdate();
-            }
-            for(var key in state){
-                if(typeof state[key] != "function"){
-                    var rstate = state[key];
-                    var r = layout.getRegion(key);
-                    if(r && rstate){
-                        if(rstate.size){
-                            r.resizeTo(rstate.size);
-                        }
-                        if(rstate.collapsed == true){
-                            r.collapse(true);
-                        }else{
-                            r.expand(null, true);
-                        }
-                    }
-                }
-            }
-            if(!wasUpdating){
-                layout.endUpdate();
-            }
-            this.state = state; 
-        }
-        this.layout = layout;
-        layout.on("regionresized", this.onRegionResized, this);
-        layout.on("regioncollapsed", this.onRegionCollapsed, this);
-        layout.on("regionexpanded", this.onRegionExpanded, this);
-    },
-    
-    storeState : function(){
-        this.provider.set(this.layout.id+"-layout-state", this.state);
-    },
-    
-    onRegionResized : function(region, newSize){
-        this.state[region.getPosition()].size = newSize;
-        this.storeState();
-    },
-    
-    onRegionCollapsed : function(region){
-        this.state[region.getPosition()].collapsed = true;
-        this.storeState();
-    },
-    
-    onRegionExpanded : function(region){
-        this.state[region.getPosition()].collapsed = false;
-        this.storeState();
-    }
-};
-
-Ext.ContentPanel = function(el, config, content){
-    if(el.autoCreate){
-        config = el;
-        el = Ext.id();
-    }
-    this.el = Ext.get(el);
-    if(!this.el && config && config.autoCreate){
-        if(typeof config.autoCreate == "object"){
-            if(!config.autoCreate.id){
-                config.autoCreate.id = config.id||el;
-            }
-            this.el = Ext.DomHelper.append(document.body,
-                        config.autoCreate, true);
-        }else{
-            this.el = Ext.DomHelper.append(document.body,
-                        {tag: "div", cls: "x-layout-inactive-content", id: config.id||el}, true);
-        }
-    }
-    this.closable = false;
-    this.loaded = false;
-    this.active = false;
-    if(typeof config == "string"){
-        this.title = config;
-    }else{
-        Ext.apply(this, config);
-    }
-    if(this.resizeEl){
-        this.resizeEl = Ext.get(this.resizeEl, true);
-    }else{
-        this.resizeEl = this.el;
-    }
-    this.addEvents({
-        
-        "activate" : true,
-        
-        "deactivate" : true,
-
-        
-        "resize" : true
-    });
-    if(this.autoScroll){
-        this.resizeEl.setStyle("overflow", "auto");
-    }
-    content = content || this.content;
-    if(content){
-        this.setContent(content);
-    }
-    if(config && config.url){
-        this.setUrl(this.url, this.params, this.loadOnce);
-    }
-    Ext.ContentPanel.superclass.constructor.call(this);
-};
-
-Ext.extend(Ext.ContentPanel, Ext.util.Observable, {
-    tabTip:'',
-    setRegion : function(region){
-        this.region = region;
-        if(region){
-           this.el.replaceClass("x-layout-inactive-content", "x-layout-active-content");
-        }else{
-           this.el.replaceClass("x-layout-active-content", "x-layout-inactive-content");
-        } 
-    },
-    
-    
-    getToolbar : function(){
-        return this.toolbar;
-    },
-    
-    setActiveState : function(active){
-        this.active = active;
-        if(!active){
-            this.fireEvent("deactivate", this);
-        }else{
-            this.fireEvent("activate", this);
-        }
-    },
-    
-    setContent : function(content, loadScripts){
-        this.el.update(content, loadScripts);
-    },
-
-    ignoreResize : function(w, h){
-        if(this.lastSize && this.lastSize.width == w && this.lastSize.height == h){
-            return true;
-        }else{
-            this.lastSize = {width: w, height: h};
-            return false;
-        }
-    },
-    
-    getUpdateManager : function(){
-        return this.el.getUpdateManager();
-    },
-     
-    load : function(){
-        var um = this.el.getUpdateManager();
-        um.update.apply(um, arguments);
-        return this;
-    },
-
-
-    
-    setUrl : function(url, params, loadOnce){
-        if(this.refreshDelegate){
-            this.removeListener("activate", this.refreshDelegate);
-        }
-        this.refreshDelegate = this._handleRefresh.createDelegate(this, [url, params, loadOnce]);
-        this.on("activate", this.refreshDelegate);
-        return this.el.getUpdateManager();
-    },
-    
-    _handleRefresh : function(url, params, loadOnce){
-        if(!loadOnce || !this.loaded){
-            var updater = this.el.getUpdateManager();
-            updater.update(url, params, this._setLoaded.createDelegate(this));
-        }
-    },
-    
-    _setLoaded : function(){
-        this.loaded = true;
-    }, 
-    
-    
-    getId : function(){
-        return this.el.id;
-    },
-    
-    
-    getEl : function(){
-        return this.el;
-    },
-    
-    adjustForComponents : function(width, height){
-        if(this.resizeEl != this.el){
-            width -= this.el.getFrameWidth('lr');
-            height -= this.el.getFrameWidth('tb');
-        }
-        if(this.toolbar){
-            var te = this.toolbar.getEl();
-            height -= te.getHeight();
-            te.setWidth(width);
-        }
-        if(this.adjustments){
-            width += this.adjustments[0];
-            height += this.adjustments[1];
-        }
-        return {"width": width, "height": height};
-    },
-    
-    setSize : function(width, height){
-        if(this.fitToFrame && !this.ignoreResize(width, height)){
-            if(this.fitContainer && this.resizeEl != this.el){
-                this.el.setSize(width, height);
-            }
-            var size = this.adjustForComponents(width, height);
-            this.resizeEl.setSize(this.autoWidth ? "auto" : size.width, this.autoHeight ? "auto" : size.height);
-            this.fireEvent('resize', this, size.width, size.height);
-        }
-    },
-    
-    
-    getTitle : function(){
-        return this.title;
-    },
-    
-    
-    setTitle : function(title){
-        this.title = title;
-        if(this.region){
-            this.region.updatePanelTitle(this, title);
-        }
-    },
-    
-    
-    isClosable : function(){
-        return this.closable;
-    },
-    
-    beforeSlide : function(){
-        this.el.clip();
-        this.resizeEl.clip();
-    },
-    
-    afterSlide : function(){
-        this.el.unclip();
-        this.resizeEl.unclip();
-    },
-    
-    
-    refresh : function(){
-        if(this.refreshDelegate){
-           this.loaded = false;
-           this.refreshDelegate();
-        }
-    },
-    
-    
-    destroy : function(){
-        this.el.removeAllListeners();
-        var tempEl = document.createElement("span");
-        tempEl.appendChild(this.el.dom);
-        tempEl.innerHTML = "";
-        this.el.remove();
-        this.el = null;
-    }
-});
-
-
-Ext.GridPanel = function(grid, config){
-    this.wrapper = Ext.DomHelper.append(document.body, // wrapper for IE7 strict & safari scroll issue
-        {tag: "div", cls: "x-layout-grid-wrapper x-layout-inactive-content"}, true);
-    this.wrapper.dom.appendChild(grid.getGridEl().dom);
-    Ext.GridPanel.superclass.constructor.call(this, this.wrapper, config);
-    if(this.toolbar){
-        this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);
-    }
-    grid.monitorWindowResize = false; // turn off autosizing
-    grid.autoHeight = false;
-    grid.autoWidth = false;
-    this.grid = grid;
-    this.grid.getGridEl().replaceClass("x-layout-inactive-content", "x-layout-component-panel");
-};
-
-Ext.extend(Ext.GridPanel, Ext.ContentPanel, {
-    getId : function(){
-        return this.grid.id;
-    },
-    
-    
-    getGrid : function(){
-        return this.grid;    
-    },
-    
-    setSize : function(width, height){
-        if(!this.ignoreResize(width, height)){
-            var grid = this.grid;
-            var size = this.adjustForComponents(width, height);
-            grid.getGridEl().setSize(size.width, size.height);
-            grid.autoSize();
-        }
-    },
-    
-    beforeSlide : function(){
-        this.grid.getView().scroller.clip();
-    },
-    
-    afterSlide : function(){
-        this.grid.getView().scroller.unclip();
-    },
-    
-    destroy : function(){
-        this.grid.destroy();
-        delete this.grid;
-        Ext.GridPanel.superclass.destroy.call(this); 
-    }
-});
-
-
-
-Ext.NestedLayoutPanel = function(layout, config){
-    Ext.NestedLayoutPanel.superclass.constructor.call(this, layout.getEl(), config);
-    layout.monitorWindowResize = false; // turn off autosizing
-    this.layout = layout;
-    this.layout.getEl().addClass("x-layout-nested-layout");
-};
-
-Ext.extend(Ext.NestedLayoutPanel, Ext.ContentPanel, {
-
-    setSize : function(width, height){
-        if(!this.ignoreResize(width, height)){
-            var size = this.adjustForComponents(width, height);
-            var el = this.layout.getEl();
-            el.setSize(size.width, size.height);
-            var touch = el.dom.offsetWidth;
-            this.layout.layout();
-            // ie requires a double layout on the first pass
-            if(Ext.isIE && !this.initialized){
-                this.initialized = true;
-                this.layout.layout();
-            }
-        }
-    },
-    
-    
-    getLayout : function(){
-        return this.layout;
-    }
-});
-
-Ext.ScrollPanel = function(el, config, content){
-    config = config || {};
-    config.fitToFrame = true;
-    Ext.ScrollPanel.superclass.constructor.call(this, el, config, content);
-    
-    this.el.dom.style.overflow = "hidden";
-    var wrap = this.el.wrap({cls: "x-scroller x-layout-inactive-content"});
-    this.el.removeClass("x-layout-inactive-content");
-    this.el.on("mousewheel", this.onWheel, this);
-
-    var up = wrap.createChild({cls: "x-scroller-up", html: "&#160;"}, this.el.dom);
-    var down = wrap.createChild({cls: "x-scroller-down", html: "&#160;"});
-    up.unselectable(); down.unselectable();
-    up.on("click", this.scrollUp, this);
-    down.on("click", this.scrollDown, this);
-    up.addClassOnOver("x-scroller-btn-over");
-    down.addClassOnOver("x-scroller-btn-over");
-    up.addClassOnClick("x-scroller-btn-click");
-    down.addClassOnClick("x-scroller-btn-click");
-    this.adjustments = [0, -(up.getHeight() + down.getHeight())];
-
-    this.resizeEl = this.el;
-    this.el = wrap; this.up = up; this.down = down;
-};
-
-Ext.extend(Ext.ScrollPanel, Ext.ContentPanel, {
-    increment : 100,
-    wheelIncrement : 5,
-    scrollUp : function(){
-        this.resizeEl.scroll("up", this.increment, {callback: this.afterScroll, scope: this});
-    },
-
-    scrollDown : function(){
-        this.resizeEl.scroll("down", this.increment, {callback: this.afterScroll, scope: this});
-    },
-
-    afterScroll : function(){
-        var el = this.resizeEl;
-        var t = el.dom.scrollTop, h = el.dom.scrollHeight, ch = el.dom.clientHeight;
-        this.up[t == 0 ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
-        this.down[h - t <= ch ? "addClass" : "removeClass"]("x-scroller-btn-disabled");
-    },
-
-    setSize : function(){
-        Ext.ScrollPanel.superclass.setSize.apply(this, arguments);
-        this.afterScroll();
-    },
-
-    onWheel : function(e){
-        var d = e.getWheelDelta();
-        this.resizeEl.dom.scrollTop -= (d*this.wheelIncrement);
-        this.afterScroll();
-        e.stopEvent();
-    },
-
-    setContent : function(content, loadScripts){
-        this.resizeEl.update(content, loadScripts);
-    }
-
-});
-
-Ext.ReaderLayout = function(config, renderTo){
-    var c = config || {size:{}};
-    Ext.ReaderLayout.superclass.constructor.call(this, renderTo || document.body, {
-        north: c.north !== false ? Ext.apply({
-            split:false,
-            initialSize: 32,
-            titlebar: false
-        }, c.north) : false,
-        west: c.west !== false ? Ext.apply({
-            split:true,
-            initialSize: 200,
-            minSize: 175,
-            maxSize: 400,
-            titlebar: true,
-            collapsible: true,
-            animate: true,
-            margins:{left:5,right:0,bottom:5,top:5},
-            cmargins:{left:5,right:5,bottom:5,top:5}
-        }, c.west) : false,
-        east: c.east !== false ? Ext.apply({
-            split:true,
-            initialSize: 200,
-            minSize: 175,
-            maxSize: 400,
-            titlebar: true,
-            collapsible: true,
-            animate: true,
-            margins:{left:0,right:5,bottom:5,top:5},
-            cmargins:{left:5,right:5,bottom:5,top:5}
-        }, c.east) : false,
-        center: Ext.apply({
-            tabPosition: 'top',
-            autoScroll:false,
-            closeOnTab: true,
-            titlebar:false,
-            margins:{left:c.west!==false ? 0 : 5,right:c.east!==false ? 0 : 5,bottom:5,top:2}
-        }, c.center)
-    });
-
-    this.el.addClass('x-reader');
-
-    this.beginUpdate();
-
-    var inner = new Ext.BorderLayout(Ext.get(document.body).createChild(), {
-        south: c.preview !== false ? Ext.apply({
-            split:true,
-            initialSize: 200,
-            minSize: 100,
-            autoScroll:true,
-            collapsible:true,
-            titlebar: true,
-            cmargins:{top:5,left:0, right:0, bottom:0}
-        }, c.preview) : false,
-        center: Ext.apply({
-            autoScroll:false,
-            titlebar:false,
-            minHeight:200
-        }, c.listView)
-    });
-    this.add('center', new Ext.NestedLayoutPanel(inner,
-            Ext.apply({title: c.mainTitle || '',tabTip:''},c.innerPanelCfg)));
-
-    this.endUpdate();
-
-    this.regions.preview = inner.getRegion('south');
-    this.regions.listView = inner.getRegion('center');
-};
-
-Ext.extend(Ext.ReaderLayout, Ext.BorderLayout);
diff --git a/lib/web/extjs/package/layout/layout.js b/lib/web/extjs/package/layout/layout.js
deleted file mode 100644
index 8d50052dbe60170df0e0d2858c680276d4455860..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/layout/layout.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.LayoutManager=function(container,config){Ext.LayoutManager.superclass.constructor.call(this);this.el=Ext.get(container);if(this.el.dom==document.body&&Ext.isIE&&!config.allowScroll){document.body.scroll="no";}else if(this.el.dom!=document.body&&this.el.getStyle('position')=='static'){this.el.position('relative');}
-this.id=this.el.id;this.el.addClass("x-layout-container");this.monitorWindowResize=true;this.regions={};this.addEvents({"layout":true,"regionresized":true,"regioncollapsed":true,"regionexpanded":true});this.updating=false;Ext.EventManager.onWindowResize(this.onWindowResize,this,true);};Ext.extend(Ext.LayoutManager,Ext.util.Observable,{isUpdating:function(){return this.updating;},beginUpdate:function(){this.updating=true;},endUpdate:function(noLayout){this.updating=false;if(!noLayout){this.layout();}},layout:function(){},onRegionResized:function(region,newSize){this.fireEvent("regionresized",region,newSize);this.layout();},onRegionCollapsed:function(region){this.fireEvent("regioncollapsed",region);},onRegionExpanded:function(region){this.fireEvent("regionexpanded",region);},getViewSize:function(){var size;if(this.el.dom!=document.body){size=this.el.getSize();}else{size={width:Ext.lib.Dom.getViewWidth(),height:Ext.lib.Dom.getViewHeight()};}
-size.width-=this.el.getBorderWidth("lr")-this.el.getPadding("lr");size.height-=this.el.getBorderWidth("tb")-this.el.getPadding("tb");return size;},getEl:function(){return this.el;},getRegion:function(target){return this.regions[target.toLowerCase()];},onWindowResize:function(){if(this.monitorWindowResize){this.layout();}}});
-
-Ext.BorderLayout=function(container,config){config=config||{};Ext.BorderLayout.superclass.constructor.call(this,container,config);this.factory=config.factory||Ext.BorderLayout.RegionFactory;for(var i=0,len=this.factory.validRegions.length;i<len;i++){var target=this.factory.validRegions[i];if(config[target]){this.addRegion(target,config[target]);}}};Ext.extend(Ext.BorderLayout,Ext.LayoutManager,{addRegion:function(target,config){if(!this.regions[target]){var r=this.factory.create(target,this,config);this.bindRegion(target,r);}
-return this.regions[target];},bindRegion:function(name,r){this.regions[name]=r;r.on("visibilitychange",this.layout,this);r.on("paneladded",this.layout,this);r.on("panelremoved",this.layout,this);r.on("invalidated",this.layout,this);r.on("resized",this.onRegionResized,this);r.on("collapsed",this.onRegionCollapsed,this);r.on("expanded",this.onRegionExpanded,this);},layout:function(){if(this.updating)return;var size=this.getViewSize();var w=size.width,h=size.height;var centerW=w,centerH=h,centerY=0,centerX=0;var rs=this.regions;var n=rs["north"],s=rs["south"],west=rs["west"],e=rs["east"],c=rs["center"];if(n&&n.isVisible()){var b=n.getBox();var m=n.getMargins();b.width=w-(m.left+m.right);b.x=m.left;b.y=m.top;centerY=b.height+b.y+m.bottom;centerH-=centerY;n.updateBox(this.safeBox(b));}
-if(s&&s.isVisible()){var b=s.getBox();var m=s.getMargins();b.width=w-(m.left+m.right);b.x=m.left;var totalHeight=(b.height+m.top+m.bottom);b.y=h-totalHeight+m.top;centerH-=totalHeight;s.updateBox(this.safeBox(b));}
-if(west&&west.isVisible()){var b=west.getBox();var m=west.getMargins();b.height=centerH-(m.top+m.bottom);b.x=m.left;b.y=centerY+m.top;var totalWidth=(b.width+m.left+m.right);centerX+=totalWidth;centerW-=totalWidth;west.updateBox(this.safeBox(b));}
-if(e&&e.isVisible()){var b=e.getBox();var m=e.getMargins();b.height=centerH-(m.top+m.bottom);var totalWidth=(b.width+m.left+m.right);b.x=w-totalWidth+m.left;b.y=centerY+m.top;centerW-=totalWidth;e.updateBox(this.safeBox(b));}
-if(c){var m=c.getMargins();var centerBox={x:centerX+m.left,y:centerY+m.top,width:centerW-(m.left+m.right),height:centerH-(m.top+m.bottom)};c.updateBox(this.safeBox(centerBox));}
-this.el.repaint();this.fireEvent("layout",this);},safeBox:function(box){box.width=Math.max(0,box.width);box.height=Math.max(0,box.height);return box;},add:function(target,panel){target=target.toLowerCase();return this.regions[target].add(panel);},remove:function(target,panel){target=target.toLowerCase();return this.regions[target].remove(panel);},findPanel:function(panelId){var rs=this.regions;for(var target in rs){if(typeof rs[target]!="function"){var p=rs[target].getPanel(panelId);if(p){return p;}}}
-return null;},showPanel:function(panelId){var rs=this.regions;for(var target in rs){var r=rs[target];if(typeof r!="function"){if(r.hasPanel(panelId)){return r.showPanel(panelId);}}}
-return null;},restoreState:function(provider){if(!provider){provider=Ext.state.Manager;}
-var sm=new Ext.LayoutStateManager();sm.init(this,provider);},batchAdd:function(regions){this.beginUpdate();for(var rname in regions){var lr=this.regions[rname];if(lr){this.addTypedPanels(lr,regions[rname]);}}
-this.endUpdate();},addTypedPanels:function(lr,ps){if(typeof ps=='string'){lr.add(new Ext.ContentPanel(ps));}
-else if(ps instanceof Array){for(var i=0,len=ps.length;i<len;i++){this.addTypedPanels(lr,ps[i]);}}
-else if(!ps.events){var el=ps.el;delete ps.el;lr.add(new Ext.ContentPanel(el||Ext.id(),ps));}
-else{lr.add(ps);}}});Ext.BorderLayout.create=function(config,targetEl){var layout=new Ext.BorderLayout(targetEl||document.body,config);layout.beginUpdate();var regions=Ext.BorderLayout.RegionFactory.validRegions;for(var j=0,jlen=regions.length;j<jlen;j++){var lr=regions[j];if(layout.regions[lr]&&config[lr].panels){var r=layout.regions[lr];var ps=config[lr].panels;layout.addTypedPanels(r,ps);}}
-layout.endUpdate();return layout;};Ext.BorderLayout.RegionFactory={validRegions:["north","south","east","west","center"],create:function(target,mgr,config){target=target.toLowerCase();if(config.lightweight||config.basic){return new Ext.BasicLayoutRegion(mgr,config,target);}
-switch(target){case"north":return new Ext.NorthLayoutRegion(mgr,config);case"south":return new Ext.SouthLayoutRegion(mgr,config);case"east":return new Ext.EastLayoutRegion(mgr,config);case"west":return new Ext.WestLayoutRegion(mgr,config);case"center":return new Ext.CenterLayoutRegion(mgr,config);}
-throw'Layout region "'+target+'" not supported.';}};
-
-Ext.BasicLayoutRegion=function(mgr,config,pos,skipConfig){this.mgr=mgr;this.position=pos;this.events={"beforeremove":true,"invalidated":true,"visibilitychange":true,"paneladded":true,"panelremoved":true,"collapsed":true,"expanded":true,"slideshow":true,"slidehide":true,"panelactivated":true,"resized":true};this.panels=new Ext.util.MixedCollection();this.panels.getKey=this.getPanelId.createDelegate(this);this.box=null;this.activePanel=null;if(skipConfig!==true){this.applyConfig(config);}};Ext.extend(Ext.BasicLayoutRegion,Ext.util.Observable,{getPanelId:function(p){return p.getId();},applyConfig:function(config){this.margins=config.margins||this.margins||{top:0,left:0,right:0,bottom:0};this.config=config;},resizeTo:function(newSize){var el=this.el?this.el:(this.activePanel?this.activePanel.getEl():null);if(el){switch(this.position){case"east":case"west":el.setWidth(newSize);this.fireEvent("resized",this,newSize);break;case"north":case"south":el.setHeight(newSize);this.fireEvent("resized",this,newSize);break;}}},getBox:function(){return this.activePanel?this.activePanel.getEl().getBox(false,true):null;},getMargins:function(){return this.margins;},updateBox:function(box){this.box=box;var el=this.activePanel.getEl();el.dom.style.left=box.x+"px";el.dom.style.top=box.y+"px";this.activePanel.setSize(box.width,box.height);},getEl:function(){return this.activePanel;},isVisible:function(){return this.activePanel?true:false;},setActivePanel:function(panel){panel=this.getPanel(panel);if(this.activePanel&&this.activePanel!=panel){this.activePanel.setActiveState(false);this.activePanel.getEl().setLeftTop(-10000,-10000);}
-this.activePanel=panel;panel.setActiveState(true);if(this.box){panel.setSize(this.box.width,this.box.height);}
-this.fireEvent("panelactivated",this,panel);this.fireEvent("invalidated");},showPanel:function(panel){if(panel=this.getPanel(panel)){this.setActivePanel(panel);}
-return panel;},getActivePanel:function(){return this.activePanel;},add:function(panel){if(arguments.length>1){for(var i=0,len=arguments.length;i<len;i++){this.add(arguments[i]);}
-return null;}
-if(this.hasPanel(panel)){this.showPanel(panel);return panel;}
-var el=panel.getEl();if(el.dom.parentNode!=this.mgr.el.dom){this.mgr.el.dom.appendChild(el.dom);}
-if(panel.setRegion){panel.setRegion(this);}
-this.panels.add(panel);el.setStyle("position","absolute");if(!panel.background){this.setActivePanel(panel);if(this.config.initialSize&&this.panels.getCount()==1){this.resizeTo(this.config.initialSize);}}
-this.fireEvent("paneladded",this,panel);return panel;},hasPanel:function(panel){if(typeof panel=="object"){panel=panel.getId();}
-return this.getPanel(panel)?true:false;},remove:function(panel,preservePanel){panel=this.getPanel(panel);if(!panel){return null;}
-var e={};this.fireEvent("beforeremove",this,panel,e);if(e.cancel===true){return null;}
-var panelId=panel.getId();this.panels.removeKey(panelId);return panel;},getPanel:function(id){if(typeof id=="object"){return id;}
-return this.panels.get(id);},getPosition:function(){return this.position;}});
-
-Ext.LayoutRegion=function(mgr,config,pos){Ext.LayoutRegion.superclass.constructor.call(this,mgr,config,pos,true);var dh=Ext.DomHelper;this.el=dh.append(mgr.el.dom,{tag:"div",cls:"x-layout-panel x-layout-panel-"+this.position},true);this.titleEl=dh.append(this.el.dom,{tag:"div",unselectable:"on",cls:"x-unselectable x-layout-panel-hd x-layout-title-"+this.position,children:[{tag:"span",cls:"x-unselectable x-layout-panel-hd-text",unselectable:"on",html:"&#160;"},{tag:"div",cls:"x-unselectable x-layout-panel-hd-tools",unselectable:"on"}]},true);this.titleEl.enableDisplayMode();this.titleTextEl=this.titleEl.dom.firstChild;this.tools=Ext.get(this.titleEl.dom.childNodes[1],true);this.closeBtn=this.createTool(this.tools.dom,"x-layout-close");this.closeBtn.enableDisplayMode();this.closeBtn.on("click",this.closeClicked,this);this.closeBtn.hide();this.createBody(config);this.visible=true;this.collapsed=false;if(config.hideWhenEmpty){this.hide();this.on("paneladded",this.validateVisibility,this);this.on("panelremoved",this.validateVisibility,this);}
-this.applyConfig(config);};Ext.extend(Ext.LayoutRegion,Ext.BasicLayoutRegion,{createBody:function(){this.bodyEl=this.el.createChild({tag:"div",cls:"x-layout-panel-body"});},applyConfig:function(c){if(c.collapsible&&this.position!="center"&&!this.collapsedEl){var dh=Ext.DomHelper;if(c.titlebar!==false){this.collapseBtn=this.createTool(this.tools.dom,"x-layout-collapse-"+this.position);this.collapseBtn.on("click",this.collapse,this);this.collapseBtn.enableDisplayMode();if(c.showPin===true||this.showPin){this.stickBtn=this.createTool(this.tools.dom,"x-layout-stick");this.stickBtn.enableDisplayMode();this.stickBtn.on("click",this.expand,this);this.stickBtn.hide();}}
-this.collapsedEl=dh.append(this.mgr.el.dom,{cls:"x-layout-collapsed x-layout-collapsed-"+this.position,children:[{cls:"x-layout-collapsed-tools",children:[{cls:"x-layout-ctools-inner"}]}]},true);if(c.floatable!==false){this.collapsedEl.addClassOnOver("x-layout-collapsed-over");this.collapsedEl.on("click",this.collapseClick,this);}
-if(c.collapsedTitle&&(this.position=="north"||this.position=="south")){this.collapsedTitleTextEl=dh.append(this.collapsedEl.dom,{tag:"div",cls:"x-unselectable x-layout-panel-hd-text",id:"message",unselectable:"on",style:{"float":"left"}});this.collapsedTitleTextEl.innerHTML=c.collapsedTitle;}
-this.expandBtn=this.createTool(this.collapsedEl.dom.firstChild.firstChild,"x-layout-expand-"+this.position);this.expandBtn.on("click",this.expand,this);}
-if(this.collapseBtn){this.collapseBtn.setVisible(c.collapsible==true);}
-this.cmargins=c.cmargins||this.cmargins||(this.position=="west"||this.position=="east"?{top:0,left:2,right:2,bottom:0}:{top:2,left:0,right:0,bottom:2});this.margins=c.margins||this.margins||{top:0,left:0,right:0,bottom:0};this.bottomTabs=c.tabPosition!="top";this.autoScroll=c.autoScroll||false;if(this.autoScroll){this.bodyEl.setStyle("overflow","auto");}else{this.bodyEl.setStyle("overflow","hidden");}
-if((!c.titlebar&&!c.title)||c.titlebar===false){this.titleEl.hide();}else{this.titleEl.show();if(c.title){this.titleTextEl.innerHTML=c.title;}}
-this.duration=c.duration||.30;this.slideDuration=c.slideDuration||.45;this.config=c;if(c.collapsed){this.collapse(true);}
-if(c.hidden){this.hide();}},isVisible:function(){return this.visible;},setCollapsedTitle:function(title){title=title||"&#160;";if(this.collapsedTitleTextEl){this.collapsedTitleTextEl.innerHTML=title;}},getBox:function(){var b;if(!this.collapsed){b=this.el.getBox(false,true);}else{b=this.collapsedEl.getBox(false,true);}
-return b;},getMargins:function(){return this.collapsed?this.cmargins:this.margins;},highlight:function(){this.el.addClass("x-layout-panel-dragover");},unhighlight:function(){this.el.removeClass("x-layout-panel-dragover");},updateBox:function(box){this.box=box;if(!this.collapsed){this.el.dom.style.left=box.x+"px";this.el.dom.style.top=box.y+"px";this.updateBody(box.width,box.height);}else{this.collapsedEl.dom.style.left=box.x+"px";this.collapsedEl.dom.style.top=box.y+"px";this.collapsedEl.setSize(box.width,box.height);}
-if(this.tabs){this.tabs.autoSizeTabs();}},updateBody:function(w,h){if(w!==null){this.el.setWidth(w);w-=this.el.getBorderWidth("rl");if(this.config.adjustments){w+=this.config.adjustments[0];}}
-if(h!==null){this.el.setHeight(h);h=this.titleEl&&this.titleEl.isDisplayed()?h-(this.titleEl.getHeight()||0):h;h-=this.el.getBorderWidth("tb");if(this.config.adjustments){h+=this.config.adjustments[1];}
-this.bodyEl.setHeight(h);if(this.tabs){h=this.tabs.syncHeight(h);}}
-if(this.panelSize){w=w!==null?w:this.panelSize.width;h=h!==null?h:this.panelSize.height;}
-if(this.activePanel){var el=this.activePanel.getEl();w=w!==null?w:el.getWidth();h=h!==null?h:el.getHeight();this.panelSize={width:w,height:h};this.activePanel.setSize(w,h);}
-if(Ext.isIE&&this.tabs){this.tabs.el.repaint();}},getEl:function(){return this.el;},hide:function(){if(!this.collapsed){this.el.dom.style.left="-2000px";this.el.hide();}else{this.collapsedEl.dom.style.left="-2000px";this.collapsedEl.hide();}
-this.visible=false;this.fireEvent("visibilitychange",this,false);},show:function(){if(!this.collapsed){this.el.show();}else{this.collapsedEl.show();}
-this.visible=true;this.fireEvent("visibilitychange",this,true);},closeClicked:function(){if(this.activePanel){this.remove(this.activePanel);}},collapseClick:function(e){if(this.isSlid){e.stopPropagation();this.slideIn();}else{e.stopPropagation();this.slideOut();}},collapse:function(skipAnim){if(this.collapsed)return;this.collapsed=true;if(this.split){this.split.el.hide();}
-if(this.config.animate&&skipAnim!==true){this.fireEvent("invalidated",this);this.animateCollapse();}else{this.el.setLocation(-20000,-20000);this.el.hide();this.collapsedEl.show();this.fireEvent("collapsed",this);this.fireEvent("invalidated",this);}},animateCollapse:function(){},expand:function(e,skipAnim){if(e)e.stopPropagation();if(!this.collapsed||this.el.hasActiveFx())return;if(this.isSlid){this.afterSlideIn();skipAnim=true;}
-this.collapsed=false;if(this.config.animate&&skipAnim!==true){this.animateExpand();}else{this.el.show();if(this.split){this.split.el.show();}
-this.collapsedEl.setLocation(-2000,-2000);this.collapsedEl.hide();this.fireEvent("invalidated",this);this.fireEvent("expanded",this);}},animateExpand:function(){},initTabs:function(){this.bodyEl.setStyle("overflow","hidden");var ts=new Ext.TabPanel(this.bodyEl.dom,{tabPosition:this.bottomTabs?'bottom':'top',disableTooltips:this.config.disableTabTips});if(this.config.hideTabs){ts.stripWrap.setDisplayed(false);}
-this.tabs=ts;ts.resizeTabs=this.config.resizeTabs===true;ts.minTabWidth=this.config.minTabWidth||40;ts.maxTabWidth=this.config.maxTabWidth||250;ts.preferredTabWidth=this.config.preferredTabWidth||150;ts.monitorResize=false;ts.bodyEl.setStyle("overflow",this.config.autoScroll?"auto":"hidden");ts.bodyEl.addClass('x-layout-tabs-body');this.panels.each(this.initPanelAsTab,this);},initPanelAsTab:function(panel){var ti=this.tabs.addTab(panel.getEl().id,panel.getTitle(),null,this.config.closeOnTab&&panel.isClosable());if(panel.tabTip!==undefined){ti.setTooltip(panel.tabTip);}
-ti.on("activate",function(){this.setActivePanel(panel);},this);if(this.config.closeOnTab){ti.on("beforeclose",function(t,e){e.cancel=true;this.remove(panel);},this);}
-return ti;},updatePanelTitle:function(panel,title){if(this.activePanel==panel){this.updateTitle(title);}
-if(this.tabs){var ti=this.tabs.getTab(panel.getEl().id);ti.setText(title);if(panel.tabTip!==undefined){ti.setTooltip(panel.tabTip);}}},updateTitle:function(title){if(this.titleTextEl&&!this.config.title){this.titleTextEl.innerHTML=(typeof title!="undefined"&&title.length>0?title:"&#160;");}},setActivePanel:function(panel){panel=this.getPanel(panel);if(this.activePanel&&this.activePanel!=panel){this.activePanel.setActiveState(false);}
-this.activePanel=panel;panel.setActiveState(true);if(this.panelSize){panel.setSize(this.panelSize.width,this.panelSize.height);}
-if(this.closeBtn){this.closeBtn.setVisible(!this.config.closeOnTab&&!this.isSlid&&panel.isClosable());}
-this.updateTitle(panel.getTitle());if(this.tabs){this.fireEvent("invalidated",this);}
-this.fireEvent("panelactivated",this,panel);},showPanel:function(panel){if(panel=this.getPanel(panel)){if(this.tabs){var tab=this.tabs.getTab(panel.getEl().id);if(tab.isHidden()){this.tabs.unhideTab(tab.id);}
-tab.activate();}else{this.setActivePanel(panel);}}
-return panel;},getActivePanel:function(){return this.activePanel;},validateVisibility:function(){if(this.panels.getCount()<1){this.updateTitle("&#160;");this.closeBtn.hide();this.hide();}else{if(!this.isVisible()){this.show();}}},add:function(panel){if(arguments.length>1){for(var i=0,len=arguments.length;i<len;i++){this.add(arguments[i]);}
-return null;}
-if(this.hasPanel(panel)){this.showPanel(panel);return panel;}
-panel.setRegion(this);this.panels.add(panel);if(this.panels.getCount()==1&&!this.config.alwaysShowTabs){this.bodyEl.dom.appendChild(panel.getEl().dom);if(panel.background!==true){this.setActivePanel(panel);}
-this.fireEvent("paneladded",this,panel);return panel;}
-if(!this.tabs){this.initTabs();}else{this.initPanelAsTab(panel);}
-if(panel.background!==true){this.tabs.activate(panel.getEl().id);}
-this.fireEvent("paneladded",this,panel);return panel;},hidePanel:function(panel){if(this.tabs&&(panel=this.getPanel(panel))){this.tabs.hideTab(panel.getEl().id);}},unhidePanel:function(panel){if(this.tabs&&(panel=this.getPanel(panel))){this.tabs.unhideTab(panel.getEl().id);}},clearPanels:function(){while(this.panels.getCount()>0){this.remove(this.panels.first());}},remove:function(panel,preservePanel){panel=this.getPanel(panel);if(!panel){return null;}
-var e={};this.fireEvent("beforeremove",this,panel,e);if(e.cancel===true){return null;}
-preservePanel=(typeof preservePanel!="undefined"?preservePanel:(this.config.preservePanels===true||panel.preserve===true));var panelId=panel.getId();this.panels.removeKey(panelId);if(preservePanel){document.body.appendChild(panel.getEl().dom);}
-if(this.tabs){this.tabs.removeTab(panel.getEl().id);}else if(!preservePanel){this.bodyEl.dom.removeChild(panel.getEl().dom);}
-if(this.panels.getCount()==1&&this.tabs&&!this.config.alwaysShowTabs){var p=this.panels.first();var tempEl=document.createElement("div");tempEl.appendChild(p.getEl().dom);this.bodyEl.update("");this.bodyEl.dom.appendChild(p.getEl().dom);tempEl=null;this.updateTitle(p.getTitle());this.tabs=null;this.bodyEl.setStyle("overflow",this.config.autoScroll?"auto":"hidden");this.setActivePanel(p);}
-panel.setRegion(null);if(this.activePanel==panel){this.activePanel=null;}
-if(this.config.autoDestroy!==false&&preservePanel!==true){try{panel.destroy();}catch(e){}}
-this.fireEvent("panelremoved",this,panel);return panel;},getTabs:function(){return this.tabs;},createTool:function(parentEl,className){var btn=Ext.DomHelper.append(parentEl,{tag:"div",cls:"x-layout-tools-button",children:[{tag:"div",cls:"x-layout-tools-button-inner "+className,html:"&#160;"}]},true);btn.addClassOnOver("x-layout-tools-button-over");return btn;}});
-
-Ext.SplitLayoutRegion=function(mgr,config,pos,cursor){this.cursor=cursor;Ext.SplitLayoutRegion.superclass.constructor.call(this,mgr,config,pos);};Ext.extend(Ext.SplitLayoutRegion,Ext.LayoutRegion,{splitTip:"Drag to resize.",collapsibleSplitTip:"Drag to resize. Double click to hide.",useSplitTips:false,applyConfig:function(config){Ext.SplitLayoutRegion.superclass.applyConfig.call(this,config);if(config.split){if(!this.split){var splitEl=Ext.DomHelper.append(this.mgr.el.dom,{tag:"div",id:this.el.id+"-split",cls:"x-layout-split x-layout-split-"+this.position,html:"&#160;"});this.split=new Ext.SplitBar(splitEl,this.el,this.orientation);this.split.on("moved",this.onSplitMove,this);this.split.useShim=config.useShim===true;this.split.getMaximumSize=this[this.position=='north'||this.position=='south'?'getVMaxSize':'getHMaxSize'].createDelegate(this);if(this.useSplitTips){this.split.el.dom.title=config.collapsible?this.collapsibleSplitTip:this.splitTip;}
-if(config.collapsible){this.split.el.on("dblclick",this.collapse,this);}}
-if(typeof config.minSize!="undefined"){this.split.minSize=config.minSize;}
-if(typeof config.maxSize!="undefined"){this.split.maxSize=config.maxSize;}
-if(config.hideWhenEmpty||config.hidden){this.hideSplitter();}}},getHMaxSize:function(){var cmax=this.config.maxSize||10000;var center=this.mgr.getRegion("center");return Math.min(cmax,(this.el.getWidth()+center.getEl().getWidth())-center.getMinWidth());},getVMaxSize:function(){var cmax=this.config.maxSize||10000;var center=this.mgr.getRegion("center");return Math.min(cmax,(this.el.getHeight()+center.getEl().getHeight())-center.getMinHeight());},onSplitMove:function(split,newSize){this.fireEvent("resized",this,newSize);},getSplitBar:function(){return this.split;},hide:function(){this.hideSplitter();Ext.SplitLayoutRegion.superclass.hide.call(this);},hideSplitter:function(){if(this.split){this.split.el.setLocation(-2000,-2000);this.split.el.hide();}},show:function(){if(this.split){this.split.el.show();}
-Ext.SplitLayoutRegion.superclass.show.call(this);},beforeSlide:function(){if(Ext.isGecko){this.bodyEl.clip();if(this.tabs)this.tabs.bodyEl.clip();if(this.activePanel){this.activePanel.getEl().clip();if(this.activePanel.beforeSlide){this.activePanel.beforeSlide();}}}},afterSlide:function(){if(Ext.isGecko){this.bodyEl.unclip();if(this.tabs)this.tabs.bodyEl.unclip();if(this.activePanel){this.activePanel.getEl().unclip();if(this.activePanel.afterSlide){this.activePanel.afterSlide();}}}},initAutoHide:function(){if(this.autoHide!==false){if(!this.autoHideHd){var st=new Ext.util.DelayedTask(this.slideIn,this);this.autoHideHd={"mouseout":function(e){if(!e.within(this.el,true)){st.delay(500);}},"mouseover":function(e){st.cancel();},scope:this};}
-this.el.on(this.autoHideHd);}},clearAutoHide:function(){if(this.autoHide!==false){this.el.un("mouseout",this.autoHideHd.mouseout);this.el.un("mouseover",this.autoHideHd.mouseover);}},clearMonitor:function(){Ext.get(document).un("click",this.slideInIf,this);},slideOut:function(){if(this.isSlid||this.el.hasActiveFx()){return;}
-this.isSlid=true;if(this.collapseBtn){this.collapseBtn.hide();}
-this.closeBtnState=this.closeBtn.getStyle('display');this.closeBtn.hide();if(this.stickBtn){this.stickBtn.show();}
-this.el.show();this.el.alignTo(this.collapsedEl,this.getCollapseAnchor());this.beforeSlide();this.el.setStyle("z-index",10001);this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.afterSlide();this.initAutoHide();Ext.get(document).on("click",this.slideInIf,this);this.fireEvent("slideshow",this);},scope:this,block:true});},afterSlideIn:function(){this.clearAutoHide();this.isSlid=false;this.clearMonitor();this.el.setStyle("z-index","");if(this.collapseBtn){this.collapseBtn.show();}
-this.closeBtn.setStyle('display',this.closeBtnState);if(this.stickBtn){this.stickBtn.hide();}
-this.fireEvent("slidehide",this);},slideIn:function(cb){if(!this.isSlid||this.el.hasActiveFx()){Ext.callback(cb);return;}
-this.isSlid=false;this.beforeSlide();this.el.slideOut(this.getSlideAnchor(),{callback:function(){this.el.setLeftTop(-10000,-10000);this.afterSlide();this.afterSlideIn();Ext.callback(cb);},scope:this,block:true});},slideInIf:function(e){if(!e.within(this.el)){this.slideIn();}},animateCollapse:function(){this.beforeSlide();this.el.setStyle("z-index",20000);var anchor=this.getSlideAnchor();this.el.slideOut(anchor,{callback:function(){this.el.setStyle("z-index","");this.collapsedEl.slideIn(anchor,{duration:.3});this.afterSlide();this.el.setLocation(-10000,-10000);this.el.hide();this.fireEvent("collapsed",this);},scope:this,block:true});},animateExpand:function(){this.beforeSlide();this.el.alignTo(this.collapsedEl,this.getCollapseAnchor(),this.getExpandAdj());this.el.setStyle("z-index",20000);this.collapsedEl.hide({duration:.1});this.el.slideIn(this.getSlideAnchor(),{callback:function(){this.el.setStyle("z-index","");this.afterSlide();if(this.split){this.split.el.show();}
-this.fireEvent("invalidated",this);this.fireEvent("expanded",this);},scope:this,block:true});},anchors:{"west":"left","east":"right","north":"top","south":"bottom"},sanchors:{"west":"l","east":"r","north":"t","south":"b"},canchors:{"west":"tl-tr","east":"tr-tl","north":"tl-bl","south":"bl-tl"},getAnchor:function(){return this.anchors[this.position];},getCollapseAnchor:function(){return this.canchors[this.position];},getSlideAnchor:function(){return this.sanchors[this.position];},getAlignAdj:function(){var cm=this.cmargins;switch(this.position){case"west":return[0,0];break;case"east":return[0,0];break;case"north":return[0,0];break;case"south":return[0,0];break;}},getExpandAdj:function(){var c=this.collapsedEl,cm=this.cmargins;switch(this.position){case"west":return[-(cm.right+c.getWidth()+cm.left),0];break;case"east":return[cm.right+c.getWidth()+cm.left,0];break;case"north":return[0,-(cm.top+cm.bottom+c.getHeight())];break;case"south":return[0,cm.top+cm.bottom+c.getHeight()];break;}}});
-
-Ext.CenterLayoutRegion=function(mgr,config){Ext.CenterLayoutRegion.superclass.constructor.call(this,mgr,config,"center");this.visible=true;this.minWidth=config.minWidth||20;this.minHeight=config.minHeight||20;};Ext.extend(Ext.CenterLayoutRegion,Ext.LayoutRegion,{hide:function(){},show:function(){},getMinWidth:function(){return this.minWidth;},getMinHeight:function(){return this.minHeight;}});Ext.NorthLayoutRegion=function(mgr,config){Ext.NorthLayoutRegion.superclass.constructor.call(this,mgr,config,"north","n-resize");if(this.split){this.split.placement=Ext.SplitBar.TOP;this.split.orientation=Ext.SplitBar.VERTICAL;this.split.el.addClass("x-layout-split-v");}
-var size=config.initialSize||config.height;if(typeof size!="undefined"){this.el.setHeight(size);}};Ext.extend(Ext.NorthLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.VERTICAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){box.height+=this.split.el.getHeight();}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){box.height-=this.split.el.getHeight();this.split.el.setLeft(box.x);this.split.el.setTop(box.y+box.height);this.split.el.setWidth(box.width);}
-if(this.collapsed){this.updateBody(box.width,null);}
-Ext.NorthLayoutRegion.superclass.updateBox.call(this,box);}});Ext.SouthLayoutRegion=function(mgr,config){Ext.SouthLayoutRegion.superclass.constructor.call(this,mgr,config,"south","s-resize");if(this.split){this.split.placement=Ext.SplitBar.BOTTOM;this.split.orientation=Ext.SplitBar.VERTICAL;this.split.el.addClass("x-layout-split-v");}
-var size=config.initialSize||config.height;if(typeof size!="undefined"){this.el.setHeight(size);}};Ext.extend(Ext.SouthLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.VERTICAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){var sh=this.split.el.getHeight();box.height+=sh;box.y-=sh;}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){var sh=this.split.el.getHeight();box.height-=sh;box.y+=sh;this.split.el.setLeft(box.x);this.split.el.setTop(box.y-sh);this.split.el.setWidth(box.width);}
-if(this.collapsed){this.updateBody(box.width,null);}
-Ext.SouthLayoutRegion.superclass.updateBox.call(this,box);}});Ext.EastLayoutRegion=function(mgr,config){Ext.EastLayoutRegion.superclass.constructor.call(this,mgr,config,"east","e-resize");if(this.split){this.split.placement=Ext.SplitBar.RIGHT;this.split.orientation=Ext.SplitBar.HORIZONTAL;this.split.el.addClass("x-layout-split-h");}
-var size=config.initialSize||config.width;if(typeof size!="undefined"){this.el.setWidth(size);}};Ext.extend(Ext.EastLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.HORIZONTAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){var sw=this.split.el.getWidth();box.width+=sw;box.x-=sw;}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){var sw=this.split.el.getWidth();box.width-=sw;this.split.el.setLeft(box.x);this.split.el.setTop(box.y);this.split.el.setHeight(box.height);box.x+=sw;}
-if(this.collapsed){this.updateBody(null,box.height);}
-Ext.EastLayoutRegion.superclass.updateBox.call(this,box);}});Ext.WestLayoutRegion=function(mgr,config){Ext.WestLayoutRegion.superclass.constructor.call(this,mgr,config,"west","w-resize");if(this.split){this.split.placement=Ext.SplitBar.LEFT;this.split.orientation=Ext.SplitBar.HORIZONTAL;this.split.el.addClass("x-layout-split-h");}
-var size=config.initialSize||config.width;if(typeof size!="undefined"){this.el.setWidth(size);}};Ext.extend(Ext.WestLayoutRegion,Ext.SplitLayoutRegion,{orientation:Ext.SplitBar.HORIZONTAL,getBox:function(){if(this.collapsed){return this.collapsedEl.getBox();}
-var box=this.el.getBox();if(this.split){box.width+=this.split.el.getWidth();}
-return box;},updateBox:function(box){if(this.split&&!this.collapsed){var sw=this.split.el.getWidth();box.width-=sw;this.split.el.setLeft(box.x+box.width);this.split.el.setTop(box.y);this.split.el.setHeight(box.height);}
-if(this.collapsed){this.updateBody(null,box.height);}
-Ext.WestLayoutRegion.superclass.updateBox.call(this,box);}});
-
-Ext.LayoutStateManager=function(layout){this.state={north:{},south:{},east:{},west:{}};};Ext.LayoutStateManager.prototype={init:function(layout,provider){this.provider=provider;var state=provider.get(layout.id+"-layout-state");if(state){var wasUpdating=layout.isUpdating();if(!wasUpdating){layout.beginUpdate();}
-for(var key in state){if(typeof state[key]!="function"){var rstate=state[key];var r=layout.getRegion(key);if(r&&rstate){if(rstate.size){r.resizeTo(rstate.size);}
-if(rstate.collapsed==true){r.collapse(true);}else{r.expand(null,true);}}}}
-if(!wasUpdating){layout.endUpdate();}
-this.state=state;}
-this.layout=layout;layout.on("regionresized",this.onRegionResized,this);layout.on("regioncollapsed",this.onRegionCollapsed,this);layout.on("regionexpanded",this.onRegionExpanded,this);},storeState:function(){this.provider.set(this.layout.id+"-layout-state",this.state);},onRegionResized:function(region,newSize){this.state[region.getPosition()].size=newSize;this.storeState();},onRegionCollapsed:function(region){this.state[region.getPosition()].collapsed=true;this.storeState();},onRegionExpanded:function(region){this.state[region.getPosition()].collapsed=false;this.storeState();}};
-
-Ext.ContentPanel=function(el,config,content){if(el.autoCreate){config=el;el=Ext.id();}
-this.el=Ext.get(el);if(!this.el&&config&&config.autoCreate){if(typeof config.autoCreate=="object"){if(!config.autoCreate.id){config.autoCreate.id=config.id||el;}
-this.el=Ext.DomHelper.append(document.body,config.autoCreate,true);}else{this.el=Ext.DomHelper.append(document.body,{tag:"div",cls:"x-layout-inactive-content",id:config.id||el},true);}}
-this.closable=false;this.loaded=false;this.active=false;if(typeof config=="string"){this.title=config;}else{Ext.apply(this,config);}
-if(this.resizeEl){this.resizeEl=Ext.get(this.resizeEl,true);}else{this.resizeEl=this.el;}
-this.addEvents({"activate":true,"deactivate":true,"resize":true});if(this.autoScroll){this.resizeEl.setStyle("overflow","auto");}
-content=content||this.content;if(content){this.setContent(content);}
-if(config&&config.url){this.setUrl(this.url,this.params,this.loadOnce);}
-Ext.ContentPanel.superclass.constructor.call(this);};Ext.extend(Ext.ContentPanel,Ext.util.Observable,{tabTip:'',setRegion:function(region){this.region=region;if(region){this.el.replaceClass("x-layout-inactive-content","x-layout-active-content");}else{this.el.replaceClass("x-layout-active-content","x-layout-inactive-content");}},getToolbar:function(){return this.toolbar;},setActiveState:function(active){this.active=active;if(!active){this.fireEvent("deactivate",this);}else{this.fireEvent("activate",this);}},setContent:function(content,loadScripts){this.el.update(content,loadScripts);},ignoreResize:function(w,h){if(this.lastSize&&this.lastSize.width==w&&this.lastSize.height==h){return true;}else{this.lastSize={width:w,height:h};return false;}},getUpdateManager:function(){return this.el.getUpdateManager();},load:function(){var um=this.el.getUpdateManager();um.update.apply(um,arguments);return this;},setUrl:function(url,params,loadOnce){if(this.refreshDelegate){this.removeListener("activate",this.refreshDelegate);}
-this.refreshDelegate=this._handleRefresh.createDelegate(this,[url,params,loadOnce]);this.on("activate",this.refreshDelegate);return this.el.getUpdateManager();},_handleRefresh:function(url,params,loadOnce){if(!loadOnce||!this.loaded){var updater=this.el.getUpdateManager();updater.update(url,params,this._setLoaded.createDelegate(this));}},_setLoaded:function(){this.loaded=true;},getId:function(){return this.el.id;},getEl:function(){return this.el;},adjustForComponents:function(width,height){if(this.resizeEl!=this.el){width-=this.el.getFrameWidth('lr');height-=this.el.getFrameWidth('tb');}
-if(this.toolbar){var te=this.toolbar.getEl();height-=te.getHeight();te.setWidth(width);}
-if(this.adjustments){width+=this.adjustments[0];height+=this.adjustments[1];}
-return{"width":width,"height":height};},setSize:function(width,height){if(this.fitToFrame&&!this.ignoreResize(width,height)){if(this.fitContainer&&this.resizeEl!=this.el){this.el.setSize(width,height);}
-var size=this.adjustForComponents(width,height);this.resizeEl.setSize(this.autoWidth?"auto":size.width,this.autoHeight?"auto":size.height);this.fireEvent('resize',this,size.width,size.height);}},getTitle:function(){return this.title;},setTitle:function(title){this.title=title;if(this.region){this.region.updatePanelTitle(this,title);}},isClosable:function(){return this.closable;},beforeSlide:function(){this.el.clip();this.resizeEl.clip();},afterSlide:function(){this.el.unclip();this.resizeEl.unclip();},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();}},destroy:function(){this.el.removeAllListeners();var tempEl=document.createElement("span");tempEl.appendChild(this.el.dom);tempEl.innerHTML="";this.el.remove();this.el=null;}});Ext.GridPanel=function(grid,config){this.wrapper=Ext.DomHelper.append(document.body,{tag:"div",cls:"x-layout-grid-wrapper x-layout-inactive-content"},true);this.wrapper.dom.appendChild(grid.getGridEl().dom);Ext.GridPanel.superclass.constructor.call(this,this.wrapper,config);if(this.toolbar){this.toolbar.el.insertBefore(this.wrapper.dom.firstChild);}
-grid.monitorWindowResize=false;grid.autoHeight=false;grid.autoWidth=false;this.grid=grid;this.grid.getGridEl().replaceClass("x-layout-inactive-content","x-layout-component-panel");};Ext.extend(Ext.GridPanel,Ext.ContentPanel,{getId:function(){return this.grid.id;},getGrid:function(){return this.grid;},setSize:function(width,height){if(!this.ignoreResize(width,height)){var grid=this.grid;var size=this.adjustForComponents(width,height);grid.getGridEl().setSize(size.width,size.height);grid.autoSize();}},beforeSlide:function(){this.grid.getView().scroller.clip();},afterSlide:function(){this.grid.getView().scroller.unclip();},destroy:function(){this.grid.destroy();delete this.grid;Ext.GridPanel.superclass.destroy.call(this);}});Ext.NestedLayoutPanel=function(layout,config){Ext.NestedLayoutPanel.superclass.constructor.call(this,layout.getEl(),config);layout.monitorWindowResize=false;this.layout=layout;this.layout.getEl().addClass("x-layout-nested-layout");};Ext.extend(Ext.NestedLayoutPanel,Ext.ContentPanel,{setSize:function(width,height){if(!this.ignoreResize(width,height)){var size=this.adjustForComponents(width,height);var el=this.layout.getEl();el.setSize(size.width,size.height);var touch=el.dom.offsetWidth;this.layout.layout();if(Ext.isIE&&!this.initialized){this.initialized=true;this.layout.layout();}}},getLayout:function(){return this.layout;}});Ext.ScrollPanel=function(el,config,content){config=config||{};config.fitToFrame=true;Ext.ScrollPanel.superclass.constructor.call(this,el,config,content);this.el.dom.style.overflow="hidden";var wrap=this.el.wrap({cls:"x-scroller x-layout-inactive-content"});this.el.removeClass("x-layout-inactive-content");this.el.on("mousewheel",this.onWheel,this);var up=wrap.createChild({cls:"x-scroller-up",html:"&#160;"},this.el.dom);var down=wrap.createChild({cls:"x-scroller-down",html:"&#160;"});up.unselectable();down.unselectable();up.on("click",this.scrollUp,this);down.on("click",this.scrollDown,this);up.addClassOnOver("x-scroller-btn-over");down.addClassOnOver("x-scroller-btn-over");up.addClassOnClick("x-scroller-btn-click");down.addClassOnClick("x-scroller-btn-click");this.adjustments=[0,-(up.getHeight()+down.getHeight())];this.resizeEl=this.el;this.el=wrap;this.up=up;this.down=down;};Ext.extend(Ext.ScrollPanel,Ext.ContentPanel,{increment:100,wheelIncrement:5,scrollUp:function(){this.resizeEl.scroll("up",this.increment,{callback:this.afterScroll,scope:this});},scrollDown:function(){this.resizeEl.scroll("down",this.increment,{callback:this.afterScroll,scope:this});},afterScroll:function(){var el=this.resizeEl;var t=el.dom.scrollTop,h=el.dom.scrollHeight,ch=el.dom.clientHeight;this.up[t==0?"addClass":"removeClass"]("x-scroller-btn-disabled");this.down[h-t<=ch?"addClass":"removeClass"]("x-scroller-btn-disabled");},setSize:function(){Ext.ScrollPanel.superclass.setSize.apply(this,arguments);this.afterScroll();},onWheel:function(e){var d=e.getWheelDelta();this.resizeEl.dom.scrollTop-=(d*this.wheelIncrement);this.afterScroll();e.stopEvent();},setContent:function(content,loadScripts){this.resizeEl.update(content,loadScripts);}});
-
-Ext.ReaderLayout=function(config,renderTo){var c=config||{size:{}};Ext.ReaderLayout.superclass.constructor.call(this,renderTo||document.body,{north:c.north!==false?Ext.apply({split:false,initialSize:32,titlebar:false},c.north):false,west:c.west!==false?Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:5,right:0,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}},c.west):false,east:c.east!==false?Ext.apply({split:true,initialSize:200,minSize:175,maxSize:400,titlebar:true,collapsible:true,animate:true,margins:{left:0,right:5,bottom:5,top:5},cmargins:{left:5,right:5,bottom:5,top:5}},c.east):false,center:Ext.apply({tabPosition:'top',autoScroll:false,closeOnTab:true,titlebar:false,margins:{left:c.west!==false?0:5,right:c.east!==false?0:5,bottom:5,top:2}},c.center)});this.el.addClass('x-reader');this.beginUpdate();var inner=new Ext.BorderLayout(Ext.get(document.body).createChild(),{south:c.preview!==false?Ext.apply({split:true,initialSize:200,minSize:100,autoScroll:true,collapsible:true,titlebar:true,cmargins:{top:5,left:0,right:0,bottom:0}},c.preview):false,center:Ext.apply({autoScroll:false,titlebar:false,minHeight:200},c.listView)});this.add('center',new Ext.NestedLayoutPanel(inner,Ext.apply({title:c.mainTitle||'',tabTip:''},c.innerPanelCfg)));this.endUpdate();this.regions.preview=inner.getRegion('south');this.regions.listView=inner.getRegion('center');};Ext.extend(Ext.ReaderLayout,Ext.BorderLayout);
diff --git a/lib/web/extjs/package/menu/menus.js b/lib/web/extjs/package/menu/menus.js
deleted file mode 100644
index 62849087ff8ff7d809f200d7416ec23ee9e7b97d..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/menu/menus.js
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.menu.Menu=function(config){Ext.apply(this,config);this.id=this.id||Ext.id();this.addEvents({beforeshow:true,beforehide:true,show:true,hide:true,click:true,mouseover:true,mouseout:true,itemclick:true});Ext.menu.MenuMgr.register(this);var mis=this.items;this.items=new Ext.util.MixedCollection();if(mis){this.add.apply(this,mis);}};Ext.extend(Ext.menu.Menu,Ext.util.Observable,{minWidth:120,shadow:"sides",subMenuAlign:"tl-tr?",defaultAlign:"tl-bl?",allowOtherMenus:false,hidden:true,render:function(){if(this.el){return;}
-var el=this.el=new Ext.Layer({cls:"x-menu",shadow:this.shadow,constrain:false,parentEl:this.parentEl||document.body,zindex:15000});this.keyNav=new Ext.menu.MenuNav(this);if(this.plain){el.addClass("x-menu-plain");}
-if(this.cls){el.addClass(this.cls);}
-this.focusEl=el.createChild({tag:"a",cls:"x-menu-focus",href:"#",onclick:"return false;",tabIndex:"-1"});var ul=el.createChild({tag:"ul",cls:"x-menu-list"});ul.on("click",this.onClick,this);ul.on("mouseover",this.onMouseOver,this);ul.on("mouseout",this.onMouseOut,this);this.items.each(function(item){var li=document.createElement("li");li.className="x-menu-list-item";ul.dom.appendChild(li);item.render(li,this);},this);this.ul=ul;this.autoWidth();},autoWidth:function(){var el=this.el,ul=this.ul;if(!el){return;}
-var w=this.width;if(w){el.setWidth(w);}else if(Ext.isIE){el.setWidth(this.minWidth);var t=el.dom.offsetWidth;el.setWidth(ul.getWidth()+el.getFrameWidth("lr"));}},delayAutoWidth:function(){if(this.rendered){if(!this.awTask){this.awTask=new Ext.util.DelayedTask(this.autoWidth,this);}
-this.awTask.delay(20);}},findTargetItem:function(e){var t=e.getTarget(".x-menu-list-item",this.ul,true);if(t&&t.menuItemId){return this.items.get(t.menuItemId);}},onClick:function(e){var t;if(t=this.findTargetItem(e)){t.onClick(e);this.fireEvent("click",this,t,e);}},setActiveItem:function(item,autoExpand){if(item!=this.activeItem){if(this.activeItem){this.activeItem.deactivate();}
-this.activeItem=item;item.activate(autoExpand);}else if(autoExpand){item.expandMenu();}},tryActivate:function(start,step){var items=this.items;for(var i=start,len=items.length;i>=0&&i<len;i+=step){var item=items.get(i);if(!item.disabled&&item.canActivate){this.setActiveItem(item,false);return item;}}
-return false;},onMouseOver:function(e){var t;if(t=this.findTargetItem(e)){if(t.canActivate&&!t.disabled){this.setActiveItem(t,true);}}
-this.fireEvent("mouseover",this,e,t);},onMouseOut:function(e){var t;if(t=this.findTargetItem(e)){if(t==this.activeItem&&t.shouldDeactivate(e)){this.activeItem.deactivate();delete this.activeItem;}}
-this.fireEvent("mouseout",this,e,t);},isVisible:function(){return this.el&&!this.hidden;},show:function(el,pos,parentMenu){this.parentMenu=parentMenu;if(!this.el){this.render();}
-this.fireEvent("beforeshow",this);this.showAt(this.el.getAlignToXY(el,pos||this.defaultAlign),parentMenu,false);},showAt:function(xy,parentMenu,_fireBefore){this.parentMenu=parentMenu;if(!this.el){this.render();}
-if(_fireBefore!==false){this.fireEvent("beforeshow",this);}
-this.el.setXY(xy);this.el.show();this.hidden=false;this.focus();this.fireEvent("show",this);},focus:function(){if(!this.hidden){this.doFocus.defer(50,this);}},doFocus:function(){if(!this.hidden){this.focusEl.focus();}},hide:function(deep){if(this.el&&this.isVisible()){this.fireEvent("beforehide",this);if(this.activeItem){this.activeItem.deactivate();this.activeItem=null;}
-this.el.hide();this.hidden=true;this.fireEvent("hide",this);}
-if(deep===true&&this.parentMenu){this.parentMenu.hide(true);}},add:function(){var a=arguments,l=a.length,item;for(var i=0;i<l;i++){var el=a[i];if(el.render){item=this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){item=this.addSeparator();}else{item=this.addText(el);}}else if(el.tagName||el.el){item=this.addElement(el);}else if(typeof el=="object"){item=this.addMenuItem(el);}}
-return item;},getEl:function(){if(!this.el){this.render();}
-return this.el;},addSeparator:function(){return this.addItem(new Ext.menu.Separator());},addElement:function(el){return this.addItem(new Ext.menu.BaseItem(el));},addItem:function(item){this.items.add(item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.appendChild(li);item.render(li,this);this.delayAutoWidth();}
-return item;},addMenuItem:function(config){if(!(config instanceof Ext.menu.Item)){if(typeof config.checked=="boolean"){config=new Ext.menu.CheckItem(config);}else{config=new Ext.menu.Item(config);}}
-return this.addItem(config);},addText:function(text){return this.addItem(new Ext.menu.TextItem(text));},insert:function(index,item){this.items.insert(index,item);if(this.ul){var li=document.createElement("li");li.className="x-menu-list-item";this.ul.dom.insertBefore(li,this.ul.dom.childNodes[index]);item.render(li,this);this.delayAutoWidth();}
-return item;},remove:function(item){this.items.removeKey(item.id);item.destroy();},removeAll:function(){var f;while(f=this.items.first()){this.remove(f);}}});Ext.menu.MenuNav=function(menu){Ext.menu.MenuNav.superclass.constructor.call(this,menu.el);this.scope=this.menu=menu;};Ext.extend(Ext.menu.MenuNav,Ext.KeyNav,{doRelay:function(e,h){var k=e.getKey();if(!this.menu.activeItem&&e.isNavKeyPress()&&k!=e.SPACE&&k!=e.RETURN){this.menu.tryActivate(0,1);return false;}
-return h.call(this.scope||this,e,this.menu);},up:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)-1,-1)){m.tryActivate(m.items.length-1,-1);}},down:function(e,m){if(!m.tryActivate(m.items.indexOf(m.activeItem)+1,1)){m.tryActivate(0,1);}},right:function(e,m){if(m.activeItem){m.activeItem.expandMenu(true);}},left:function(e,m){m.hide();if(m.parentMenu&&m.parentMenu.activeItem){m.parentMenu.activeItem.activate();}},enter:function(e,m){if(m.activeItem){e.stopPropagation();m.activeItem.onClick(e);m.fireEvent("click",this,m.activeItem);return true;}}});
-
-Ext.menu.MenuMgr=function(){var menus,active,groups={},attached=false,lastShow=new Date();function init(){menus={},active=new Ext.util.MixedCollection();Ext.get(document).addKeyListener(27,function(){if(active.length>0){hideAll();}});}
-function hideAll(){if(active.length>0){var c=active.clone();c.each(function(m){m.hide();});}}
-function onHide(m){active.remove(m);if(active.length<1){Ext.get(document).un("mousedown",onMouseDown);attached=false;}}
-function onShow(m){var last=active.last();lastShow=new Date();active.add(m);if(!attached){Ext.get(document).on("mousedown",onMouseDown);attached=true;}
-if(m.parentMenu){m.getEl().setZIndex(parseInt(m.parentMenu.getEl().getStyle("z-index"),10)+3);m.parentMenu.activeChild=m;}else if(last&&last.isVisible()){m.getEl().setZIndex(parseInt(last.getEl().getStyle("z-index"),10)+3);}}
-function onBeforeHide(m){if(m.activeChild){m.activeChild.hide();}
-if(m.autoHideTimer){clearTimeout(m.autoHideTimer);delete m.autoHideTimer;}}
-function onBeforeShow(m){var pm=m.parentMenu;if(!pm&&!m.allowOtherMenus){hideAll();}else if(pm&&pm.activeChild){pm.activeChild.hide();}}
-function onMouseDown(e){if(lastShow.getElapsed()>50&&active.length>0&&!e.getTarget(".x-menu")){hideAll();}}
-function onBeforeCheck(mi,state){if(state){var g=groups[mi.group];for(var i=0,l=g.length;i<l;i++){if(g[i]!=mi){g[i].setChecked(false);}}}}
-return{hideAll:function(){hideAll();},register:function(menu){if(!menus){init();}
-menus[menu.id]=menu;menu.on("beforehide",onBeforeHide);menu.on("hide",onHide);menu.on("beforeshow",onBeforeShow);menu.on("show",onShow);var g=menu.group;if(g&&menu.events["checkchange"]){if(!groups[g]){groups[g]=[];}
-groups[g].push(menu);menu.on("checkchange",onCheck);}},get:function(menu){if(typeof menu=="string"){return menus[menu];}else if(menu.events){return menu;}else if(typeof menu.length=='number'){return new Ext.menu.Menu({items:menu});}else{return new Ext.menu.Menu(menu);}},unregister:function(menu){delete menus[menu.id];menu.un("beforehide",onBeforeHide);menu.un("hide",onHide);menu.un("beforeshow",onBeforeShow);menu.un("show",onShow);var g=menu.group;if(g&&menu.events["checkchange"]){groups[g].remove(menu);menu.un("checkchange",onCheck);}},registerCheckable:function(menuItem){var g=menuItem.group;if(g){if(!groups[g]){groups[g]=[];}
-groups[g].push(menuItem);menuItem.on("beforecheckchange",onBeforeCheck);}},unregisterCheckable:function(menuItem){var g=menuItem.group;if(g){groups[g].remove(menuItem);menuItem.un("beforecheckchange",onBeforeCheck);}}};}();
-
-Ext.menu.BaseItem=function(config){Ext.menu.BaseItem.superclass.constructor.call(this,config);this.addEvents({click:true,activate:true,deactivate:true});if(this.handler){this.on("click",this.handler,this.scope,true);}};Ext.extend(Ext.menu.BaseItem,Ext.Component,{canActivate:false,activeClass:"x-menu-item-active",hideOnClick:true,hideDelay:100,ctype:"Ext.menu.BaseItem",actionMode:"container",render:function(container,parentMenu){this.parentMenu=parentMenu;Ext.menu.BaseItem.superclass.render.call(this,container);this.container.menuItemId=this.id;},onRender:function(container,position){this.el=Ext.get(this.el);container.dom.appendChild(this.el.dom);},onClick:function(e){if(!this.disabled&&this.fireEvent("click",this,e)!==false&&this.parentMenu.fireEvent("itemclick",this,e)!==false){this.handleClick(e);}else{e.stopEvent();}},activate:function(){if(this.disabled){return false;}
-var li=this.container;li.addClass(this.activeClass);this.region=li.getRegion().adjust(2,2,-2,-2);this.fireEvent("activate",this);return true;},deactivate:function(){this.container.removeClass(this.activeClass);this.fireEvent("deactivate",this);},shouldDeactivate:function(e){return!this.region||!this.region.contains(e.getPoint());},handleClick:function(e){if(this.hideOnClick){this.parentMenu.hide.defer(this.hideDelay,this.parentMenu,[true]);}},expandMenu:function(autoActivate){},hideMenu:function(){}});
-
-Ext.menu.TextItem=function(text){this.text=text;Ext.menu.TextItem.superclass.constructor.call(this);};Ext.extend(Ext.menu.TextItem,Ext.menu.BaseItem,{hideOnClick:false,itemCls:"x-menu-text",onRender:function(){var s=document.createElement("span");s.className=this.itemCls;s.innerHTML=this.text;this.el=s;Ext.menu.TextItem.superclass.onRender.apply(this,arguments);}});
-
-Ext.menu.Separator=function(config){Ext.menu.Separator.superclass.constructor.call(this,config);};Ext.extend(Ext.menu.Separator,Ext.menu.BaseItem,{itemCls:"x-menu-sep",hideOnClick:false,onRender:function(li){var s=document.createElement("span");s.className=this.itemCls;s.innerHTML="&#160;";this.el=s;li.addClass("x-menu-sep-li");Ext.menu.Separator.superclass.onRender.apply(this,arguments);}});
-
-Ext.menu.Item=function(config){Ext.menu.Item.superclass.constructor.call(this,config);if(this.menu){this.menu=Ext.menu.MenuMgr.get(this.menu);}};Ext.extend(Ext.menu.Item,Ext.menu.BaseItem,{itemCls:"x-menu-item",canActivate:true,ctype:"Ext.menu.Item",onRender:function(container,position){var el=document.createElement("a");el.hideFocus=true;el.unselectable="on";el.href=this.href||"#";if(this.hrefTarget){el.target=this.hrefTarget;}
-el.className=this.itemCls+(this.menu?" x-menu-item-arrow":"")+(this.cls?" "+this.cls:"");el.innerHTML=String.format('<img src="{0}" class="x-menu-item-icon {2}" />{1}',this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||'');this.el=el;Ext.menu.Item.superclass.onRender.call(this,container,position);},setText:function(text){this.text=text;if(this.rendered){this.el.update(String.format('<img src="{0}" class="x-menu-item-icon {2}">{1}',this.icon||Ext.BLANK_IMAGE_URL,this.text,this.iconCls||''));this.parentMenu.autoWidth();}},handleClick:function(e){if(!this.href){e.stopEvent();}
-Ext.menu.Item.superclass.handleClick.apply(this,arguments);},activate:function(autoExpand){if(Ext.menu.Item.superclass.activate.apply(this,arguments)){this.focus();if(autoExpand){this.expandMenu();}}
-return true;},shouldDeactivate:function(e){if(Ext.menu.Item.superclass.shouldDeactivate.call(this,e)){if(this.menu&&this.menu.isVisible()){return!this.menu.getEl().getRegion().contains(e.getPoint());}
-return true;}
-return false;},deactivate:function(){Ext.menu.Item.superclass.deactivate.apply(this,arguments);this.hideMenu();},expandMenu:function(autoActivate){if(!this.disabled&&this.menu){if(!this.menu.isVisible()){this.menu.show(this.container,this.parentMenu.subMenuAlign||"tl-tr?",this.parentMenu);}
-if(autoActivate){this.menu.tryActivate(0,1);}}},hideMenu:function(){if(this.menu&&this.menu.isVisible()){this.menu.hide();}}});
-
-Ext.menu.CheckItem=function(config){Ext.menu.CheckItem.superclass.constructor.call(this,config);this.addEvents({"beforecheckchange":true,"checkchange":true});if(this.checkHandler){this.on('checkchange',this.checkHandler,this.scope);}};Ext.extend(Ext.menu.CheckItem,Ext.menu.Item,{itemCls:"x-menu-item x-menu-check-item",groupClass:"x-menu-group-item",checked:false,ctype:"Ext.menu.CheckItem",onRender:function(c){Ext.menu.CheckItem.superclass.onRender.apply(this,arguments);if(this.group){this.el.addClass(this.groupClass);}
-Ext.menu.MenuMgr.registerCheckable(this);if(this.checked){this.checked=false;this.setChecked(true,true);}},destroy:function(){if(this.rendered){Ext.menu.MenuMgr.unregisterCheckable(this);}
-Ext.menu.CheckItem.superclass.destroy.apply(this,arguments);},setChecked:function(state,suppressEvent){if(this.checked!=state&&this.fireEvent("beforecheckchange",this,state)!==false){if(this.container){this.container[state?"addClass":"removeClass"]("x-menu-item-checked");}
-this.checked=state;if(suppressEvent!==true){this.fireEvent("checkchange",this,state);}}},handleClick:function(e){if(!this.disabled&&!(this.checked&&this.group)){this.setChecked(!this.checked);}
-Ext.menu.CheckItem.superclass.handleClick.apply(this,arguments);}});
-
-Ext.menu.Adapter=function(component,config){Ext.menu.Adapter.superclass.constructor.call(this,config);this.component=component;};Ext.extend(Ext.menu.Adapter,Ext.menu.BaseItem,{canActivate:true,onRender:function(container,position){this.component.render(container);this.el=this.component.getEl();},activate:function(){if(this.disabled){return false;}
-this.component.focus();this.fireEvent("activate",this);return true;},deactivate:function(){this.fireEvent("deactivate",this);},disable:function(){this.component.disable();Ext.menu.Adapter.superclass.disable.call(this);},enable:function(){this.component.enable();Ext.menu.Adapter.superclass.enable.call(this);}});
-
-Ext.menu.DateItem=function(config){Ext.menu.DateItem.superclass.constructor.call(this,new Ext.DatePicker(config),config);this.picker=this.component;this.addEvents({select:true});this.picker.on("render",function(picker){picker.getEl().swallowEvent("click");picker.container.addClass("x-menu-date-item");});this.picker.on("select",this.onSelect,this);};Ext.extend(Ext.menu.DateItem,Ext.menu.Adapter,{onSelect:function(picker,date){this.fireEvent("select",this,date,picker);Ext.menu.DateItem.superclass.handleClick.call(this);}});
-
-Ext.menu.ColorItem=function(config){Ext.menu.ColorItem.superclass.constructor.call(this,new Ext.ColorPalette(config),config);this.palette=this.component;this.relayEvents(this.palette,["select"]);if(this.selectHandler){this.on('select',this.selectHandler,this.scope);}};Ext.extend(Ext.menu.ColorItem,Ext.menu.Adapter);
-
-Ext.menu.DateMenu=function(config){Ext.menu.DateMenu.superclass.constructor.call(this,config);this.plain=true;var di=new Ext.menu.DateItem(config);this.add(di);this.picker=di.picker;this.relayEvents(di,["select"]);this.on('beforeshow',function(){if(this.picker){this.picker.hideMonthPicker(true);}},this);};Ext.extend(Ext.menu.DateMenu,Ext.menu.Menu,{cls:'x-date-menu'});
-
-Ext.menu.ColorMenu=function(config){Ext.menu.ColorMenu.superclass.constructor.call(this,config);this.plain=true;var ci=new Ext.menu.ColorItem(config);this.add(ci);this.palette=ci.palette;this.relayEvents(ci,["select"]);};Ext.extend(Ext.menu.ColorMenu,Ext.menu.Menu);
diff --git a/lib/web/extjs/package/qtips/qtips.js b/lib/web/extjs/package/qtips/qtips.js
deleted file mode 100644
index 808750220adefe670d347ade976a6b1d57904af2..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/qtips/qtips.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.QuickTips=function(){var el,tipBody,tipBodyText,tipTitle,tm,cfg,close,tagEls={},esc,removeCls=null,bdLeft,bdRight;var ce,bd,xy,dd;var visible=false,disabled=true,inited=false;var showProc=1,hideProc=1,dismissProc=1,locks=[];var onOver=function(e){if(disabled){return;}
-var t=e.getTarget();if(!t||t.nodeType!==1||t==document||t==document.body){return;}
-if(ce&&t==ce.el){clearTimeout(hideProc);return;}
-if(t&&tagEls[t.id]){tagEls[t.id].el=t;showProc=show.defer(tm.showDelay,tm,[tagEls[t.id]]);return;}
-var ttp,et=Ext.fly(t);var ns=cfg.namespace;if(tm.interceptTitles&&t.title){ttp=t.title;t.qtip=ttp;t.removeAttribute("title");e.preventDefault();}else{ttp=t.qtip||et.getAttributeNS(ns,cfg.attribute);}
-if(ttp){showProc=show.defer(tm.showDelay,tm,[{el:t,text:ttp,width:et.getAttributeNS(ns,cfg.width),autoHide:et.getAttributeNS(ns,cfg.hide)!="user",title:et.getAttributeNS(ns,cfg.title),cls:et.getAttributeNS(ns,cfg.cls)}]);}};var onOut=function(e){clearTimeout(showProc);var t=e.getTarget();if(t&&ce&&ce.el==t&&(tm.autoHide&&ce.autoHide!==false)){hideProc=setTimeout(hide,tm.hideDelay);}};var onMove=function(e){if(disabled){return;}
-xy=e.getXY();xy[1]+=18;if(tm.trackMouse&&ce){el.setXY(xy);}};var onDown=function(e){clearTimeout(showProc);clearTimeout(hideProc);if(!e.within(el)){if(tm.hideOnClick){hide();tm.disable();}}};var onUp=function(e){tm.enable();};var getPad=function(){return bdLeft.getPadding('l')+bdRight.getPadding('r');};var show=function(o){if(disabled){return;}
-clearTimeout(dismissProc);ce=o;if(removeCls){el.removeClass(removeCls);removeCls=null;}
-if(ce.cls){el.addClass(ce.cls);removeCls=ce.cls;}
-if(ce.title){tipTitle.update(ce.title);tipTitle.show();}else{tipTitle.update('');tipTitle.hide();}
-el.dom.style.width=tm.maxWidth+'px';tipBodyText.update(o.text);var p=getPad(),w=ce.width;if(!w){var td=tipBodyText.dom;var aw=Math.max(td.offsetWidth,td.clientWidth,td.scrollWidth);if(aw>tm.maxWidth){w=tm.maxWidth;}else if(aw<tm.minWidth){w=tm.minWidth;}else{w=aw;}}
-el.setWidth(parseInt(w,10)+p);if(ce.autoHide===false){close.setDisplayed(true);if(dd){dd.unlock();}}else{close.setDisplayed(false);if(dd){dd.lock();}}
-if(xy){el.avoidY=xy[1]-18;el.setXY(xy);}
-if(tm.animate){el.setOpacity(.1);el.setStyle("visibility","visible");el.fadeIn({callback:afterShow});}else{afterShow();}};var afterShow=function(){if(ce){el.show();esc.enable();if(tm.autoDismiss&&ce.autoHide!==false){dismissProc=setTimeout(hide,tm.autoDismissDelay);}}};var hide=function(noanim){clearTimeout(dismissProc);clearTimeout(hideProc);ce=null;if(el.isVisible()){esc.disable();if(noanim!==true&&tm.animate){el.fadeOut({callback:afterHide});}else{afterHide();}}};var afterHide=function(){el.hide();if(removeCls){el.removeClass(removeCls);removeCls=null;}};return{minWidth:40,maxWidth:300,interceptTitles:false,trackMouse:false,hideOnClick:true,showDelay:500,hideDelay:200,autoHide:true,autoDismiss:true,autoDismissDelay:5000,animate:false,init:function(){tm=Ext.QuickTips;cfg=tm.tagConfig;if(!inited){if(!Ext.isReady){Ext.onReady(Ext.QuickTips.init,Ext.QuickTips);return;}
-el=new Ext.Layer({cls:"x-tip",shadow:"drop",shim:true,constrain:true,shadowOffset:4});el.fxDefaults={stopFx:true};el.update('<div class="x-tip-top-left"><div class="x-tip-top-right"><div class="x-tip-top"></div></div></div><div class="x-tip-bd-left"><div class="x-tip-bd-right"><div class="x-tip-bd"><div class="x-tip-close"></div><h3></h3><div class="x-tip-bd-inner"></div><div class="x-clear"></div></div></div></div><div class="x-tip-ft-left"><div class="x-tip-ft-right"><div class="x-tip-ft"></div></div></div>');tipTitle=el.child('h3');tipTitle.enableDisplayMode("block");tipBody=el.child('div.x-tip-bd');tipBodyText=el.child('div.x-tip-bd-inner');bdLeft=el.child('div.x-tip-bd-left');bdRight=el.child('div.x-tip-bd-right');close=el.child('div.x-tip-close');close.enableDisplayMode("block");close.on("click",hide);var d=Ext.get(document);d.on("mousedown",onDown);d.on("mouseup",onUp);d.on("mouseover",onOver);d.on("mouseout",onOut);d.on("mousemove",onMove);esc=d.addKeyListener(27,hide);esc.disable();if(Ext.dd.DD){dd=el.initDD("default",null,{onDrag:function(){el.sync();}});dd.setHandleElId(tipTitle.id);dd.lock();}
-inited=true;}
-this.enable();},register:function(config){var cs=config instanceof Array?config:arguments;for(var i=0,len=cs.length;i<len;i++){var c=cs[i];var target=c.target;if(target){if(target instanceof Array){for(var j=0,jlen=target.length;j<jlen;j++){tagEls[target[j]]=c;}}else{tagEls[typeof target=='string'?target:Ext.id(target.id)]=c;}}}},unregister:function(el){delete tagEls[Ext.id(el)];},enable:function(){if(inited){locks.pop();if(locks.length<1){disabled=false;}}},disable:function(){disabled=true;clearTimeout(showProc);clearTimeout(hideProc);clearTimeout(dismissProc);if(ce){hide(true);}
-locks.push(1);},isEnabled:function(){return!disabled;},tagConfig:{namespace:"ext",attribute:"qtip",width:"width",target:"target",title:"qtitle",hide:"hide",cls:"qclass"}};}();Ext.QuickTips.tips=Ext.QuickTips.register;
diff --git a/lib/web/extjs/package/r/nesizable.js b/lib/web/extjs/package/r/nesizable.js
deleted file mode 100644
index b5c28d7091d3bfe77ae6acfd6f0c8c94eea1f9a5..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/r/nesizable.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Ext JS Library 1.0 Beta 2
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.Resizable=function(el,config){this.el=Ext.get(el);if(config&&config.wrap){config.resizeChild=this.el;this.el=this.el.wrap(typeof config.wrap=="object"?config.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=config.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(config.resizeChild.getPositioning());config.resizeChild.clearPositioning();if(!config.width||!config.height){var csize=config.resizeChild.getSize();this.el.setSize(csize.width,csize.height);}
-if(config.pinned&&!config.adjustments){config.adjustments="auto";}}
-this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"});this.proxy.unselectable();this.overlay=this.el.createProxy({tag:"div",cls:"x-resizable-overlay",html:"&#160;"});this.overlay.unselectable();this.overlay.enableDisplayMode("block");this.overlay.on("mousemove",this.onMouseMove,this);this.overlay.on("mouseup",this.onMouseUp,this);Ext.apply(this,config);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned");}
-var position=this.el.getStyle("position");if(position!="absolute"&&position!="fixed"){this.el.setStyle("position","relative");}
-if(!this.handles){this.handles='s,e,se';if(this.multiDirectional){this.handles+=',n,w';}}
-if(this.handles=="all"){this.handles="n s e w ne nw se sw";}
-var hs=this.handles.split(/\s*?[,;]\s*?| /);var ps=Ext.Resizable.positions;for(var i=0,len=hs.length;i<len;i++){if(hs[i]&&ps[hs[i]]){var pos=ps[hs[i]];this[pos]=new Ext.Resizable.Handle(this,pos,this.disableTrackOver,this.transparent);}}
-this.corner=this.southeast;if(this.handles.indexOf("n")!=-1||this.handles.indexOf("w")!=-1){this.updateBox=true;}
-this.activeHandle=null;if(this.resizeChild){if(typeof this.resizeChild=="boolean"){this.resizeChild=Ext.get(this.el.dom.firstChild,true);}else{this.resizeChild=Ext.get(this.resizeChild,true);}}
-if(this.adjustments=="auto"){var rc=this.resizeChild;var hw=this.west,he=this.east,hn=this.north,hs=this.south;if(rc&&(hw||hn)){rc.position("relative");rc.setLeft(hw?hw.el.getWidth():0);rc.setTop(hn?hn.el.getHeight():0);}
-this.adjustments=[(he?-he.el.getWidth():0)+(hw?-hw.el.getWidth():0),(hn?-hn.el.getHeight():0)+(hs?-hs.el.getHeight():0)-1];}
-if(this.draggable){this.dd=this.dynamic?this.el.initDD(null):this.el.initDDProxy(null,{dragElId:this.proxy.id});this.dd.setHandleElId(this.resizeChild?this.resizeChild.id:this.el.id);}
-this.events={"beforeresize":true,"resize":true};if(this.width!==null&&this.height!==null){this.resizeTo(this.width,this.height);}else{this.updateChildSize();}
-Ext.Resizable.superclass.constructor.call(this);};Ext.extend(Ext.Resizable,Ext.util.Observable,{resizeChild:false,adjustments:[0,0],minWidth:5,minHeight:5,maxWidth:10000,maxHeight:10000,enabled:true,animate:false,duration:.35,dynamic:false,handles:false,multiDirectional:false,disableTrackOver:false,easing:'easeOutStrong',widthIncrement:0,heightIncrement:0,pinned:false,width:null,height:null,preserveRatio:false,transparent:false,minX:0,minY:0,draggable:false,resizeTo:function(width,height){this.el.setSize(width,height);this.updateChildSize();this.fireEvent("resize",this,width,height,null);},startSizing:function(e){this.fireEvent("beforeresize",this,e);if(this.enabled){this.resizing=true;this.startBox=this.el.getBox();this.startPoint=e.getXY();this.offsets=[(this.startBox.x+this.startBox.width)-this.startPoint[0],(this.startBox.y+this.startBox.height)-this.startPoint[1]];this.proxy.setBox(this.startBox);this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();if(!this.dynamic){this.proxy.show();}}},onMouseDown:function(handle,e){if(this.enabled){e.stopEvent();this.activeHandle=handle;this.overlay.setStyle("cursor",handle.el.getStyle("cursor"));this.startSizing(e);}},onMouseUp:function(e){var size=this.resizeElement();this.resizing=false;this.handleOut();this.overlay.hide();this.fireEvent("resize",this,size.width,size.height,e);},updateChildSize:function(){if(this.resizeChild){var el=this.el;var child=this.resizeChild;var adj=this.adjustments;if(el.dom.offsetWidth){var b=el.getSize(true);child.setSize(b.width+adj[0],b.height+adj[1]);}
-if(Ext.isIE){setTimeout(function(){if(el.dom.offsetWidth){var b=el.getSize(true);child.setSize(b.width+adj[0],b.height+adj[1]);}},10);}}},snap:function(value,inc,min){if(!inc||!value)return value;var newValue=value;var m=value%inc;if(m>0){if(m>(inc/2)){newValue=value+(inc-m);}else{newValue=value-m;}}
-return Math.max(min,newValue);},resizeElement:function(){var box=this.proxy.getBox();if(this.updateBox){this.el.setBox(box,false,this.animate,this.duration,null,this.easing);}else{this.el.setSize(box.width,box.height,this.animate,this.duration,null,this.easing);}
-this.updateChildSize();this.proxy.hide();return box;},constrain:function(v,diff,m,mx){if(v-diff<m){diff=v-m;}else if(v-diff>mx){diff=mx-v;}
-return diff;},onMouseMove:function(e){if(this.enabled){try{var curSize=this.curSize||this.startBox;var x=this.startBox.x,y=this.startBox.y;var ox=x,oy=y;var w=curSize.width,h=curSize.height;var ow=w,oh=h;var mw=this.minWidth,mh=this.minHeight;var mxw=this.maxWidth,mxh=this.maxHeight;var wi=this.widthIncrement;var hi=this.heightIncrement;var eventXY=e.getXY();var diffX=-(this.startPoint[0]-Math.max(this.minX,eventXY[0]));var diffY=-(this.startPoint[1]-Math.max(this.minY,eventXY[1]));var pos=this.activeHandle.position;switch(pos){case"east":w+=diffX;w=Math.min(Math.max(mw,w),mxw);break;case"south":h+=diffY;h=Math.min(Math.max(mh,h),mxh);break;case"southeast":w+=diffX;h+=diffY;w=Math.min(Math.max(mw,w),mxw);h=Math.min(Math.max(mh,h),mxh);break;case"north":diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"west":diffX=this.constrain(w,diffX,mw,mxw);x+=diffX;w-=diffX;break;case"northeast":w+=diffX;w=Math.min(Math.max(mw,w),mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"northwest":diffX=this.constrain(w,diffX,mw,mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;x+=diffX;w-=diffX;break;case"southwest":diffX=this.constrain(w,diffX,mw,mxw);h+=diffY;h=Math.min(Math.max(mh,h),mxh);x+=diffX;w-=diffX;break;}
-var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;}
-w=sw;h=sh;}
-if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}}
-this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){this.proxy.remove();this.overlay.removeAllListeners();this.overlay.remove();var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){var h=this[ps[k]];h.el.removeAllListeners();h.el.remove();}}
-if(removeEl){this.el.update("");this.el.remove();}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;}
-this.position=pos;this.rz=rz;this.el=this.tpl.append(rz.el.dom,[this.position],true);this.el.unselectable();if(transparent){this.el.setOpacity(0);}
-this.el.on("mousedown",this.onMouseDown,this);if(!disableTrackOver){this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this);}};Ext.Resizable.Handle.prototype={afterResize:function(rz){},onMouseDown:function(e){this.rz.onMouseDown(this,e);},onMouseOver:function(e){this.rz.handleOver(this,e);},onMouseOut:function(e){this.rz.handleOut(this,e);}};
diff --git a/lib/web/extjs/package/resizable.js b/lib/web/extjs/package/resizable.js
deleted file mode 100644
index 75fd15e1e5d71d401b018d77627d6dc715825df5..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/resizable.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.Resizable=function(el,config){this.el=Ext.get(el);if(config&&config.wrap){config.resizeChild=this.el;this.el=this.el.wrap(typeof config.wrap=="object"?config.wrap:{cls:"xresizable-wrap"});this.el.id=this.el.dom.id=config.resizeChild.id+"-rzwrap";this.el.setStyle("overflow","hidden");this.el.setPositioning(config.resizeChild.getPositioning());config.resizeChild.clearPositioning();if(!config.width||!config.height){var csize=config.resizeChild.getSize();this.el.setSize(csize.width,csize.height);}
-if(config.pinned&&!config.adjustments){config.adjustments="auto";}}
-this.proxy=this.el.createProxy({tag:"div",cls:"x-resizable-proxy",id:this.el.id+"-rzproxy"});this.proxy.unselectable();this.proxy.enableDisplayMode('block');Ext.apply(this,config);if(this.pinned){this.disableTrackOver=true;this.el.addClass("x-resizable-pinned");}
-var position=this.el.getStyle("position");if(position!="absolute"&&position!="fixed"){this.el.setStyle("position","relative");}
-if(!this.handles){this.handles='s,e,se';if(this.multiDirectional){this.handles+=',n,w';}}
-if(this.handles=="all"){this.handles="n s e w ne nw se sw";}
-var hs=this.handles.split(/\s*?[,;]\s*?| /);var ps=Ext.Resizable.positions;for(var i=0,len=hs.length;i<len;i++){if(hs[i]&&ps[hs[i]]){var pos=ps[hs[i]];this[pos]=new Ext.Resizable.Handle(this,pos,this.disableTrackOver,this.transparent);}}
-this.corner=this.southeast;if(this.handles.indexOf("n")!=-1||this.handles.indexOf("w")!=-1){this.updateBox=true;}
-this.activeHandle=null;if(this.resizeChild){if(typeof this.resizeChild=="boolean"){this.resizeChild=Ext.get(this.el.dom.firstChild,true);}else{this.resizeChild=Ext.get(this.resizeChild,true);}}
-if(this.adjustments=="auto"){var rc=this.resizeChild;var hw=this.west,he=this.east,hn=this.north,hs=this.south;if(rc&&(hw||hn)){rc.position("relative");rc.setLeft(hw?hw.el.getWidth():0);rc.setTop(hn?hn.el.getHeight():0);}
-this.adjustments=[(he?-he.el.getWidth():0)+(hw?-hw.el.getWidth():0),(hn?-hn.el.getHeight():0)+(hs?-hs.el.getHeight():0)-1];}
-if(this.draggable){this.dd=this.dynamic?this.el.initDD(null):this.el.initDDProxy(null,{dragElId:this.proxy.id});this.dd.setHandleElId(this.resizeChild?this.resizeChild.id:this.el.id);}
-this.addEvents({"beforeresize":true,"resize":true});if(this.width!==null&&this.height!==null){this.resizeTo(this.width,this.height);}else{this.updateChildSize();}
-if(Ext.isIE){this.el.dom.style.zoom=1;}
-Ext.Resizable.superclass.constructor.call(this);};Ext.extend(Ext.Resizable,Ext.util.Observable,{resizeChild:false,adjustments:[0,0],minWidth:5,minHeight:5,maxWidth:10000,maxHeight:10000,enabled:true,animate:false,duration:.35,dynamic:false,handles:false,multiDirectional:false,disableTrackOver:false,easing:'easeOutStrong',widthIncrement:0,heightIncrement:0,pinned:false,width:null,height:null,preserveRatio:false,transparent:false,minX:0,minY:0,draggable:false,constrainTo:undefined,resizeRegion:undefined,resizeTo:function(width,height){this.el.setSize(width,height);this.updateChildSize();this.fireEvent("resize",this,width,height,null);},startSizing:function(e,handle){this.fireEvent("beforeresize",this,e);if(this.enabled){if(!this.overlay){this.overlay=this.el.createProxy({tag:"div",cls:"x-resizable-overlay",html:"&#160;"});this.overlay.unselectable();this.overlay.enableDisplayMode("block");this.overlay.on("mousemove",this.onMouseMove,this);this.overlay.on("mouseup",this.onMouseUp,this);}
-this.overlay.setStyle("cursor",handle.el.getStyle("cursor"));this.resizing=true;this.startBox=this.el.getBox();this.startPoint=e.getXY();this.offsets=[(this.startBox.x+this.startBox.width)-this.startPoint[0],(this.startBox.y+this.startBox.height)-this.startPoint[1]];this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();if(this.constrainTo){var ct=Ext.get(this.constrainTo);this.resizeRegion=ct.getRegion().adjust(ct.getFrameWidth('t'),ct.getFrameWidth('l'),-ct.getFrameWidth('b'),-ct.getFrameWidth('r'));}
-this.proxy.setStyle('visibility','hidden');this.proxy.show();this.proxy.setBox(this.startBox);if(!this.dynamic){this.proxy.setStyle('visibility','visible');}}},onMouseDown:function(handle,e){if(this.enabled){e.stopEvent();this.activeHandle=handle;this.startSizing(e,handle);}},onMouseUp:function(e){var size=this.resizeElement();this.resizing=false;this.handleOut();this.overlay.hide();this.proxy.hide();this.fireEvent("resize",this,size.width,size.height,e);},updateChildSize:function(){if(this.resizeChild){var el=this.el;var child=this.resizeChild;var adj=this.adjustments;if(el.dom.offsetWidth){var b=el.getSize(true);child.setSize(b.width+adj[0],b.height+adj[1]);}
-if(Ext.isIE){setTimeout(function(){if(el.dom.offsetWidth){var b=el.getSize(true);child.setSize(b.width+adj[0],b.height+adj[1]);}},10);}}},snap:function(value,inc,min){if(!inc||!value)return value;var newValue=value;var m=value%inc;if(m>0){if(m>(inc/2)){newValue=value+(inc-m);}else{newValue=value-m;}}
-return Math.max(min,newValue);},resizeElement:function(){var box=this.proxy.getBox();if(this.updateBox){this.el.setBox(box,false,this.animate,this.duration,null,this.easing);}else{this.el.setSize(box.width,box.height,this.animate,this.duration,null,this.easing);}
-this.updateChildSize();if(!this.dynamic){this.proxy.hide();}
-return box;},constrain:function(v,diff,m,mx){if(v-diff<m){diff=v-m;}else if(v-diff>mx){diff=mx-v;}
-return diff;},onMouseMove:function(e){if(this.enabled){try{if(this.resizeRegion&&!this.resizeRegion.contains(e.getPoint())){return;}
-var curSize=this.curSize||this.startBox;var x=this.startBox.x,y=this.startBox.y;var ox=x,oy=y;var w=curSize.width,h=curSize.height;var ow=w,oh=h;var mw=this.minWidth,mh=this.minHeight;var mxw=this.maxWidth,mxh=this.maxHeight;var wi=this.widthIncrement;var hi=this.heightIncrement;var eventXY=e.getXY();var diffX=-(this.startPoint[0]-Math.max(this.minX,eventXY[0]));var diffY=-(this.startPoint[1]-Math.max(this.minY,eventXY[1]));var pos=this.activeHandle.position;switch(pos){case"east":w+=diffX;w=Math.min(Math.max(mw,w),mxw);break;case"south":h+=diffY;h=Math.min(Math.max(mh,h),mxh);break;case"southeast":w+=diffX;h+=diffY;w=Math.min(Math.max(mw,w),mxw);h=Math.min(Math.max(mh,h),mxh);break;case"north":diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"west":diffX=this.constrain(w,diffX,mw,mxw);x+=diffX;w-=diffX;break;case"northeast":w+=diffX;w=Math.min(Math.max(mw,w),mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;break;case"northwest":diffX=this.constrain(w,diffX,mw,mxw);diffY=this.constrain(h,diffY,mh,mxh);y+=diffY;h-=diffY;x+=diffX;w-=diffX;break;case"southwest":diffX=this.constrain(w,diffX,mw,mxw);h+=diffY;h=Math.min(Math.max(mh,h),mxh);x+=diffX;w-=diffX;break;}
-var sw=this.snap(w,wi,mw);var sh=this.snap(h,hi,mh);if(sw!=w||sh!=h){switch(pos){case"northeast":y-=sh-h;break;case"north":y-=sh-h;break;case"southwest":x-=sw-w;break;case"west":x-=sw-w;break;case"northwest":x-=sw-w;y-=sh-h;break;}
-w=sw;h=sh;}
-if(this.preserveRatio){switch(pos){case"southeast":case"east":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);break;case"south":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"northeast":w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);break;case"north":var tw=w;w=ow*(h/oh);w=Math.min(Math.max(mw,w),mxw);h=oh*(w/ow);x+=(tw-w)/2;break;case"southwest":h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);var tw=w;w=ow*(h/oh);x+=tw-w;break;case"west":var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);y+=(th-h)/2;var tw=w;w=ow*(h/oh);x+=tw-w;break;case"northwest":var tw=w;var th=h;h=oh*(w/ow);h=Math.min(Math.max(mh,h),mxh);w=ow*(h/oh);y+=th-h;x+=tw-w;break;}}
-this.proxy.setBounds(x,y,w,h);if(this.dynamic){this.resizeElement();}}catch(e){}}},handleOver:function(){if(this.enabled){this.el.addClass("x-resizable-over");}},handleOut:function(){if(!this.resizing){this.el.removeClass("x-resizable-over");}},getEl:function(){return this.el;},getResizeChild:function(){return this.resizeChild;},destroy:function(removeEl){this.proxy.remove();if(this.overlay){this.overlay.removeAllListeners();this.overlay.remove();}
-var ps=Ext.Resizable.positions;for(var k in ps){if(typeof ps[k]!="function"&&this[ps[k]]){var h=this[ps[k]];h.el.removeAllListeners();h.el.remove();}}
-if(removeEl){this.el.update("");this.el.remove();}}});Ext.Resizable.positions={n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"};Ext.Resizable.Handle=function(rz,pos,disableTrackOver,transparent){if(!this.tpl){var tpl=Ext.DomHelper.createTemplate({tag:"div",cls:"x-resizable-handle x-resizable-handle-{0}"});tpl.compile();Ext.Resizable.Handle.prototype.tpl=tpl;}
-this.position=pos;this.rz=rz;this.el=this.tpl.append(rz.el.dom,[this.position],true);this.el.unselectable();if(transparent){this.el.setOpacity(0);}
-this.el.on("mousedown",this.onMouseDown,this);if(!disableTrackOver){this.el.on("mouseover",this.onMouseOver,this);this.el.on("mouseout",this.onMouseOut,this);}};Ext.Resizable.Handle.prototype={afterResize:function(rz){},onMouseDown:function(e){this.rz.onMouseDown(this,e);},onMouseOver:function(e){this.rz.handleOver(this,e);},onMouseOut:function(e){this.rz.handleOut(this,e);}};
diff --git a/lib/web/extjs/package/splitbar.js b/lib/web/extjs/package/splitbar.js
deleted file mode 100644
index c2cb495e2de5d6232e33980f82e5a6df1071813e..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/splitbar.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.SplitBar=function(dragElement,resizingElement,orientation,placement,existingProxy){this.el=Ext.get(dragElement,true);this.el.dom.unselectable="on";this.resizingEl=Ext.get(resizingElement,true);this.orientation=orientation||Ext.SplitBar.HORIZONTAL;this.minSize=0;this.maxSize=2000;this.animate=false;this.useShim=false;this.shim=null;if(!existingProxy){this.proxy=Ext.SplitBar.createProxy(this.orientation);}else{this.proxy=Ext.get(existingProxy).dom;}
-this.dd=new Ext.dd.DDProxy(this.el.dom.id,"XSplitBars",{dragElId:this.proxy.id});this.dd.b4StartDrag=this.onStartProxyDrag.createDelegate(this);this.dd.endDrag=this.onEndProxyDrag.createDelegate(this);this.dragSpecs={};this.adapter=new Ext.SplitBar.BasicLayoutAdapter();this.adapter.init(this);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.placement=placement||(this.el.getX()>this.resizingEl.getX()?Ext.SplitBar.LEFT:Ext.SplitBar.RIGHT);this.el.addClass("x-splitbar-h");}else{this.placement=placement||(this.el.getY()>this.resizingEl.getY()?Ext.SplitBar.TOP:Ext.SplitBar.BOTTOM);this.el.addClass("x-splitbar-v");}
-this.addEvents({"resize":true,"moved":true,"beforeresize":true,"beforeapply":true});Ext.SplitBar.superclass.constructor.call(this);};Ext.extend(Ext.SplitBar,Ext.util.Observable,{onStartProxyDrag:function(x,y){this.fireEvent("beforeresize",this);if(!this.overlay){var o=Ext.DomHelper.insertFirst(document.body,{cls:"x-drag-overlay",html:"&#160;"},true);o.unselectable();o.enableDisplayMode("block");Ext.SplitBar.prototype.overlay=o;}
-this.overlay.setSize(Ext.lib.Dom.getViewWidth(true),Ext.lib.Dom.getViewHeight(true));this.overlay.show();Ext.get(this.proxy).setDisplayed("block");var size=this.adapter.getElementSize(this);this.activeMinSize=this.getMinimumSize();;this.activeMaxSize=this.getMaximumSize();;var c1=size-this.activeMinSize;var c2=Math.max(this.activeMaxSize-size,0);if(this.orientation==Ext.SplitBar.HORIZONTAL){this.dd.resetConstraints();this.dd.setXConstraint(this.placement==Ext.SplitBar.LEFT?c1:c2,this.placement==Ext.SplitBar.LEFT?c2:c1);this.dd.setYConstraint(0,0);}else{this.dd.resetConstraints();this.dd.setXConstraint(0,0);this.dd.setYConstraint(this.placement==Ext.SplitBar.TOP?c1:c2,this.placement==Ext.SplitBar.TOP?c2:c1);}
-this.dragSpecs.startSize=size;this.dragSpecs.startPoint=[x,y];Ext.dd.DDProxy.prototype.b4StartDrag.call(this.dd,x,y);},onEndProxyDrag:function(e){Ext.get(this.proxy).setDisplayed(false);var endPoint=Ext.lib.Event.getXY(e);if(this.overlay){this.overlay.hide();}
-var newSize;if(this.orientation==Ext.SplitBar.HORIZONTAL){newSize=this.dragSpecs.startSize+
-(this.placement==Ext.SplitBar.LEFT?endPoint[0]-this.dragSpecs.startPoint[0]:this.dragSpecs.startPoint[0]-endPoint[0]);}else{newSize=this.dragSpecs.startSize+
-(this.placement==Ext.SplitBar.TOP?endPoint[1]-this.dragSpecs.startPoint[1]:this.dragSpecs.startPoint[1]-endPoint[1]);}
-newSize=Math.min(Math.max(newSize,this.activeMinSize),this.activeMaxSize);if(newSize!=this.dragSpecs.startSize){if(this.fireEvent('beforeapply',this,newSize)!==false){this.adapter.setElementSize(this,newSize);this.fireEvent("moved",this,newSize);this.fireEvent("resize",this,newSize);}}},getAdapter:function(){return this.adapter;},setAdapter:function(adapter){this.adapter=adapter;this.adapter.init(this);},getMinimumSize:function(){return this.minSize;},setMinimumSize:function(minSize){this.minSize=minSize;},getMaximumSize:function(){return this.maxSize;},setMaximumSize:function(maxSize){this.maxSize=maxSize;},setCurrentSize:function(size){var oldAnimate=this.animate;this.animate=false;this.adapter.setElementSize(this,size);this.animate=oldAnimate;},destroy:function(removeEl){if(this.shim){this.shim.remove();}
-this.dd.unreg();this.proxy.parentNode.removeChild(this.proxy);if(removeEl){this.el.remove();}}});Ext.SplitBar.createProxy=function(dir){var proxy=new Ext.Element(document.createElement("div"));proxy.unselectable();var cls='x-splitbar-proxy';proxy.addClass(cls+' '+(dir==Ext.SplitBar.HORIZONTAL?cls+'-h':cls+'-v'));document.body.appendChild(proxy.dom);return proxy.dom;};Ext.SplitBar.BasicLayoutAdapter=function(){};Ext.SplitBar.BasicLayoutAdapter.prototype={init:function(s){},getElementSize:function(s){if(s.orientation==Ext.SplitBar.HORIZONTAL){return s.resizingEl.getWidth();}else{return s.resizingEl.getHeight();}},setElementSize:function(s,newSize,onComplete){if(s.orientation==Ext.SplitBar.HORIZONTAL){if(!s.animate){s.resizingEl.setWidth(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setWidth(newSize,true,.1,onComplete,'easeOut');}}else{if(!s.animate){s.resizingEl.setHeight(newSize);if(onComplete){onComplete(s,newSize);}}else{s.resizingEl.setHeight(newSize,true,.1,onComplete,'easeOut');}}}};Ext.SplitBar.AbsoluteLayoutAdapter=function(container){this.basic=new Ext.SplitBar.BasicLayoutAdapter();this.container=Ext.get(container);};Ext.SplitBar.AbsoluteLayoutAdapter.prototype={init:function(s){this.basic.init(s);},getElementSize:function(s){return this.basic.getElementSize(s);},setElementSize:function(s,newSize,onComplete){this.basic.setElementSize(s,newSize,this.moveSplitter.createDelegate(this,[s]));},moveSplitter:function(s){var yes=Ext.SplitBar;switch(s.placement){case yes.LEFT:s.el.setX(s.resizingEl.getRight());break;case yes.RIGHT:s.el.setStyle("right",(this.container.getWidth()-s.resizingEl.getLeft())+"px");break;case yes.TOP:s.el.setY(s.resizingEl.getBottom());break;case yes.BOTTOM:s.el.setY(s.resizingEl.getTop()-s.el.getHeight());break;}}};Ext.SplitBar.VERTICAL=1;Ext.SplitBar.HORIZONTAL=2;Ext.SplitBar.LEFT=1;Ext.SplitBar.RIGHT=2;Ext.SplitBar.TOP=3;Ext.SplitBar.BOTTOM=4;
diff --git a/lib/web/extjs/package/tabs/tabs.js b/lib/web/extjs/package/tabs/tabs.js
deleted file mode 100644
index ecae6a4ea3a2920987e14de0ec44e556e0a30c21..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/tabs/tabs.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.TabPanel=function(container,config){this.el=Ext.get(container,true);if(config){if(typeof config=="boolean"){this.tabPosition=config?"bottom":"top";}else{Ext.apply(this,config);}}
-if(this.tabPosition=="bottom"){this.bodyEl=Ext.get(this.createBody(this.el.dom));this.el.addClass("x-tabs-bottom");}
-this.stripWrap=Ext.get(this.createStrip(this.el.dom),true);this.stripEl=Ext.get(this.createStripList(this.stripWrap.dom),true);this.stripBody=Ext.get(this.stripWrap.dom.firstChild.firstChild,true);if(Ext.isIE){Ext.fly(this.stripWrap.dom.firstChild).setStyle("overflow-x","hidden");}
-if(this.tabPosition!="bottom"){this.bodyEl=Ext.get(this.createBody(this.el.dom));this.el.addClass("x-tabs-top");}
-this.items=[];this.bodyEl.setStyle("position","relative");this.active=null;this.activateDelegate=this.activate.createDelegate(this);this.addEvents({"tabchange":true,"beforetabchange":true});Ext.EventManager.onWindowResize(this.onResize,this);this.cpad=this.el.getPadding("lr");this.hiddenCount=0;Ext.TabPanel.superclass.constructor.call(this);};Ext.extend(Ext.TabPanel,Ext.util.Observable,{tabPosition:"top",currentTabWidth:0,minTabWidth:40,maxTabWidth:250,preferredTabWidth:175,resizeTabs:false,monitorResize:true,addTab:function(id,text,content,closable){var item=new Ext.TabPanelItem(this,id,text,closable);this.addTabItem(item);if(content){item.setContent(content);}
-return item;},getTab:function(id){return this.items[id];},hideTab:function(id){var t=this.items[id];if(!t.isHidden()){t.setHidden(true);this.hiddenCount++;this.autoSizeTabs();}},unhideTab:function(id){var t=this.items[id];if(t.isHidden()){t.setHidden(false);this.hiddenCount--;this.autoSizeTabs();}},addTabItem:function(item){this.items[item.id]=item;this.items.push(item);if(this.resizeTabs){item.setWidth(this.currentTabWidth||this.preferredTabWidth);this.autoSizeTabs();}else{item.autoSize();}},removeTab:function(id){var items=this.items;var tab=items[id];if(!tab)return;var index=items.indexOf(tab);if(this.active==tab&&items.length>1){var newTab=this.getNextAvailable(index);if(newTab)newTab.activate();}
-this.stripEl.dom.removeChild(tab.pnode.dom);if(tab.bodyEl.dom.parentNode==this.bodyEl.dom){this.bodyEl.dom.removeChild(tab.bodyEl.dom);}
-items.splice(index,1);delete this.items[tab.id];tab.fireEvent("close",tab);tab.purgeListeners();this.autoSizeTabs();},getNextAvailable:function(start){var items=this.items;var index=start;while(index<items.length){var item=items[++index];if(item&&!item.isHidden()){return item;}}
-index=start;while(index>=0){var item=items[--index];if(item&&!item.isHidden()){return item;}}
-return null;},disableTab:function(id){var tab=this.items[id];if(tab&&this.active!=tab){tab.disable();}},enableTab:function(id){var tab=this.items[id];tab.enable();},activate:function(id){var tab=this.items[id];if(!tab){return null;}
-if(tab==this.active){return tab;}
-var e={};this.fireEvent("beforetabchange",this,e,tab);if(e.cancel!==true&&!tab.disabled){if(this.active){this.active.hide();}
-this.active=this.items[id];this.active.show();this.fireEvent("tabchange",this,this.active);}
-return tab;},getActiveTab:function(){return this.active;},syncHeight:function(targetHeight){var height=(targetHeight||this.el.getHeight())-this.el.getBorderWidth("tb")-this.el.getPadding("tb");var bm=this.bodyEl.getMargins();var newHeight=height-(this.stripWrap.getHeight()||0)-(bm.top+bm.bottom);this.bodyEl.setHeight(newHeight);return newHeight;},onResize:function(){if(this.monitorResize){this.autoSizeTabs();}},beginUpdate:function(){this.updating=true;},endUpdate:function(){this.updating=false;this.autoSizeTabs();},autoSizeTabs:function(){var count=this.items.length;var vcount=count-this.hiddenCount;if(!this.resizeTabs||count<1||vcount<1||this.updating)return;var w=Math.max(this.el.getWidth()-this.cpad,10);var availWidth=Math.floor(w/vcount);var b=this.stripBody;if(b.getWidth()>w){var tabs=this.items;this.setTabWidth(Math.max(availWidth,this.minTabWidth)-2);if(availWidth<this.minTabWidth){}}else{if(this.currentTabWidth<this.preferredTabWidth){this.setTabWidth(Math.min(availWidth,this.preferredTabWidth)-2);}}},getCount:function(){return this.items.length;},setTabWidth:function(width){this.currentTabWidth=width;for(var i=0,len=this.items.length;i<len;i++){if(!this.items[i].isHidden())this.items[i].setWidth(width);}},destroy:function(removeEl){Ext.EventManager.removeResizeListener(this.onResize,this);for(var i=0,len=this.items.length;i<len;i++){this.items[i].purgeListeners();}
-if(removeEl===true){this.el.update("");this.el.remove();}}});Ext.TabPanelItem=function(tabPanel,id,text,closable){this.tabPanel=tabPanel;this.id=id;this.disabled=false;this.text=text;this.loaded=false;this.closable=closable;this.bodyEl=Ext.get(tabPanel.createItemBody(tabPanel.bodyEl.dom,id));this.bodyEl.setVisibilityMode(Ext.Element.VISIBILITY);this.bodyEl.setStyle("display","block");this.bodyEl.setStyle("zoom","1");this.hideAction();var els=tabPanel.createStripElements(tabPanel.stripEl.dom,text,closable);this.el=Ext.get(els.el,true);this.inner=Ext.get(els.inner,true);this.textEl=Ext.get(this.el.dom.firstChild.firstChild.firstChild,true);this.pnode=Ext.get(els.el.parentNode,true);this.el.on("mousedown",this.onTabMouseDown,this);this.el.on("click",this.onTabClick,this);if(closable){var c=Ext.get(els.close,true);c.dom.title=this.closeText;c.addClassOnOver("close-over");c.on("click",this.closeClick,this);}
-this.addEvents({"activate":true,"beforeclose":true,"close":true,"deactivate":true});this.hidden=false;Ext.TabPanelItem.superclass.constructor.call(this);};Ext.extend(Ext.TabPanelItem,Ext.util.Observable,{purgeListeners:function(){Ext.util.Observable.prototype.purgeListeners.call(this);this.el.removeAllListeners();},show:function(){this.pnode.addClass("on");this.showAction();if(Ext.isOpera){this.tabPanel.stripWrap.repaint();}
-this.fireEvent("activate",this.tabPanel,this);},isActive:function(){return this.tabPanel.getActiveTab()==this;},hide:function(){this.pnode.removeClass("on");this.hideAction();this.fireEvent("deactivate",this.tabPanel,this);},hideAction:function(){this.bodyEl.hide();this.bodyEl.setStyle("position","absolute");this.bodyEl.setLeft("-20000px");this.bodyEl.setTop("-20000px");},showAction:function(){this.bodyEl.setStyle("position","relative");this.bodyEl.setTop("");this.bodyEl.setLeft("");this.bodyEl.show();},setTooltip:function(text){if(Ext.QuickTips&&Ext.QuickTips.isEnabled()){this.textEl.dom.qtip=text;this.textEl.dom.removeAttribute('title');}else{this.textEl.dom.title=text;}},onTabClick:function(e){e.preventDefault();this.tabPanel.activate(this.id);},onTabMouseDown:function(e){e.preventDefault();this.tabPanel.activate(this.id);},getWidth:function(){return this.inner.getWidth();},setWidth:function(width){var iwidth=width-this.pnode.getPadding("lr");this.inner.setWidth(iwidth);this.textEl.setWidth(iwidth-this.inner.getPadding("lr"));this.pnode.setWidth(width);},setHidden:function(hidden){this.hidden=hidden;this.pnode.setStyle("display",hidden?"none":"");},isHidden:function(){return this.hidden;},getText:function(){return this.text;},autoSize:function(){this.textEl.setWidth(1);this.setWidth(this.textEl.dom.scrollWidth+this.pnode.getPadding("lr")+this.inner.getPadding("lr"));},setText:function(text){this.text=text;this.textEl.update(text);this.setTooltip(text);if(!this.tabPanel.resizeTabs){this.autoSize();}},activate:function(){this.tabPanel.activate(this.id);},disable:function(){if(this.tabPanel.active!=this){this.disabled=true;this.pnode.addClass("disabled");}},enable:function(){this.disabled=false;this.pnode.removeClass("disabled");},setContent:function(content,loadScripts){this.bodyEl.update(content,loadScripts);},getUpdateManager:function(){return this.bodyEl.getUpdateManager();},setUrl:function(url,params,loadOnce){if(this.refreshDelegate){this.un('activate',this.refreshDelegate);}
-this.refreshDelegate=this._handleRefresh.createDelegate(this,[url,params,loadOnce]);this.on("activate",this.refreshDelegate);return this.bodyEl.getUpdateManager();},_handleRefresh:function(url,params,loadOnce){if(!loadOnce||!this.loaded){var updater=this.bodyEl.getUpdateManager();updater.update(url,params,this._setLoaded.createDelegate(this));}},refresh:function(){if(this.refreshDelegate){this.loaded=false;this.refreshDelegate();}},_setLoaded:function(){this.loaded=true;},closeClick:function(e){var o={};e.stopEvent();this.fireEvent("beforeclose",this,o);if(o.cancel!==true){this.tabPanel.removeTab(this.id);}},closeText:"Close this tab"});Ext.TabPanel.prototype.createStrip=function(container){var strip=document.createElement("div");strip.className="x-tabs-wrap";container.appendChild(strip);return strip;};Ext.TabPanel.prototype.createStripList=function(strip){strip.innerHTML='<div class="x-tabs-strip-wrap"><table class="x-tabs-strip" cellspacing="0" cellpadding="0" border="0"><tbody><tr></tr></tbody></table></div>';return strip.firstChild.firstChild.firstChild.firstChild;};Ext.TabPanel.prototype.createBody=function(container){var body=document.createElement("div");Ext.id(body,"tab-body");Ext.fly(body).addClass("x-tabs-body");container.appendChild(body);return body;};Ext.TabPanel.prototype.createItemBody=function(bodyEl,id){var body=Ext.getDom(id);if(!body){body=document.createElement("div");body.id=id;}
-Ext.fly(body).addClass("x-tabs-item-body");bodyEl.insertBefore(body,bodyEl.firstChild);return body;};Ext.TabPanel.prototype.createStripElements=function(stripEl,text,closable){var td=document.createElement("td");stripEl.appendChild(td);if(closable){td.className="x-tabs-closable";if(!this.closeTpl){this.closeTpl=new Ext.Template('<a href="#" class="x-tabs-right"><span class="x-tabs-left"><em class="x-tabs-inner">'+'<span unselectable="on"'+(this.disableTooltips?'':' title="{text}"')+' class="x-tabs-text">{text}</span>'+'<div unselectable="on" class="close-icon">&#160;</div></em></span></a>');}
-var el=this.closeTpl.overwrite(td,{"text":text});var close=el.getElementsByTagName("div")[0];var inner=el.getElementsByTagName("em")[0];return{"el":el,"close":close,"inner":inner};}else{if(!this.tabTpl){this.tabTpl=new Ext.Template('<a href="#" class="x-tabs-right"><span class="x-tabs-left"><em class="x-tabs-inner">'+'<span unselectable="on"'+(this.disableTooltips?'':' title="{text}"')+' class="x-tabs-text">{text}</span></em></span></a>');}
-var el=this.tabTpl.overwrite(td,{"text":text});var inner=el.getElementsByTagName("em")[0];return{"el":el,"inner":inner};}};
diff --git a/lib/web/extjs/package/toolbar/toolbar.js b/lib/web/extjs/package/toolbar/toolbar.js
deleted file mode 100644
index 4bec4eb28dfcfd116472d002475c4fdfa29b5e01..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/toolbar/toolbar.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.Toolbar=function(container,buttons,config){if(container instanceof Array){buttons=container;config=buttons;container=null;}
-Ext.apply(this,config);this.buttons=buttons;if(container){this.render(container);}};Ext.Toolbar.prototype={render:function(ct){this.el=Ext.get(ct);if(this.cls){this.el.addClass(this.cls);}
-this.el.update('<div class="x-toolbar x-small-editor"><table cellspacing="0"><tr></tr></table></div>');this.tr=this.el.child("tr",true);var autoId=0;this.items=new Ext.util.MixedCollection(false,function(o){return o.id||("item"+(++autoId));});if(this.buttons){this.add.apply(this,this.buttons);delete this.buttons;}},add:function(){var a=arguments,l=a.length;for(var i=0;i<l;i++){var el=a[i];if(el.applyTo){this.addField(el);}else if(el.render){this.addItem(el);}else if(typeof el=="string"){if(el=="separator"||el=="-"){this.addSeparator();}else if(el==" "){this.addSpacer();}else if(el=="->"){this.addFill();}else{this.addText(el);}}else if(el.tagName){this.addElement(el);}else if(typeof el=="object"){this.addButton(el);}}},getEl:function(){return this.el;},addSeparator:function(){return this.addItem(new Ext.Toolbar.Separator());},addSpacer:function(){return this.addItem(new Ext.Toolbar.Spacer());},addFill:function(){return this.addItem(new Ext.Toolbar.Fill());},addElement:function(el){return this.addItem(new Ext.Toolbar.Item(el));},addItem:function(item){var td=this.nextBlock();item.render(td);this.items.add(item);return item;},addButton:function(config){if(config instanceof Array){var buttons=[];for(var i=0,len=config.length;i<len;i++){buttons.push(this.addButton(config[i]));}
-return buttons;}
-var b=config;if(!(config instanceof Ext.Toolbar.Button)){b=new Ext.Toolbar.Button(config);}
-var td=this.nextBlock();b.render(td);this.items.add(b);return b;},addText:function(text){return this.addItem(new Ext.Toolbar.TextItem(text));},insertButton:function(index,item){if(item instanceof Array){var buttons=[];for(var i=0,len=item.length;i<len;i++){buttons.push(this.insertButton(index+i,item[i]));}
-return buttons;}
-if(!(item instanceof Ext.Toolbar.Button)){item=new Ext.Toolbar.Button(item);}
-var td=document.createElement("td");this.tr.insertBefore(td,this.tr.childNodes[index]);item.render(td);this.items.insert(index,item);return item;},addDom:function(config,returnEl){var td=this.nextBlock();Ext.DomHelper.overwrite(td,config);var ti=new Ext.Toolbar.Item(td.firstChild);ti.render(td);this.items.add(ti);return ti;},addField:function(field){var td=this.nextBlock();field.render(td);var ti=new Ext.Toolbar.Item(td.firstChild);ti.render(td);this.items.add(ti);return ti;},nextBlock:function(){var td=document.createElement("td");this.tr.appendChild(td);return td;},destroy:function(){if(this.items){Ext.destroy.apply(Ext,this.items.items);}
-Ext.Element.uncache(this.el,this.tr);}};Ext.Toolbar.Item=function(el){this.el=Ext.getDom(el);this.id=Ext.id(this.el);this.hidden=false;};Ext.Toolbar.Item.prototype={getEl:function(){return this.el;},render:function(td){this.td=td;td.appendChild(this.el);},destroy:function(){this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},setVisible:function(visible){if(visible){this.show();}else{this.hide();}},focus:function(){Ext.fly(this.el).focus();},disable:function(){Ext.fly(this.td).addClass("x-item-disabled");this.disabled=true;this.el.disabled=true;},enable:function(){Ext.fly(this.td).removeClass("x-item-disabled");this.disabled=false;this.el.disabled=false;}};Ext.Toolbar.Separator=function(){var s=document.createElement("span");s.className="ytb-sep";Ext.Toolbar.Separator.superclass.constructor.call(this,s);};Ext.extend(Ext.Toolbar.Separator,Ext.Toolbar.Item,{enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.Toolbar.Spacer=function(){var s=document.createElement("div");s.className="ytb-spacer";Ext.Toolbar.Spacer.superclass.constructor.call(this,s);};Ext.extend(Ext.Toolbar.Spacer,Ext.Toolbar.Item,{enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.Toolbar.Fill=Ext.extend(Ext.Toolbar.Spacer,{render:function(td){td.style.width='100%';Ext.Toolbar.Fill.superclass.render.call(this,td);}});Ext.Toolbar.TextItem=function(text){var s=document.createElement("span");s.className="ytb-text";s.innerHTML=text;Ext.Toolbar.TextItem.superclass.constructor.call(this,s);};Ext.extend(Ext.Toolbar.TextItem,Ext.Toolbar.Item,{enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn});Ext.Toolbar.Button=function(config){Ext.Toolbar.Button.superclass.constructor.call(this,null,config);};Ext.extend(Ext.Toolbar.Button,Ext.Button,{render:function(td){this.td=td;Ext.Toolbar.Button.superclass.render.call(this,td);},destroy:function(){Ext.Toolbar.Button.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";},disable:function(){Ext.fly(this.td).addClass("x-item-disabled");this.disabled=true;},enable:function(){Ext.fly(this.td).removeClass("x-item-disabled");this.disabled=false;}});Ext.ToolbarButton=Ext.Toolbar.Button;Ext.Toolbar.MenuButton=function(config){Ext.Toolbar.MenuButton.superclass.constructor.call(this,null,config);};Ext.extend(Ext.Toolbar.MenuButton,Ext.MenuButton,{render:function(td){this.td=td;Ext.Toolbar.MenuButton.superclass.render.call(this,td);},destroy:function(){Ext.Toolbar.MenuButton.superclass.destroy.call(this);this.td.parentNode.removeChild(this.td);},show:function(){this.hidden=false;this.td.style.display="";},hide:function(){this.hidden=true;this.td.style.display="none";}});
-
-Ext.PagingToolbar=function(el,ds,config){Ext.PagingToolbar.superclass.constructor.call(this,el,null,config);this.ds=ds;this.cursor=0;this.renderButtons(this.el);this.bind(ds);};Ext.extend(Ext.PagingToolbar,Ext.Toolbar,{pageSize:20,displayMsg:'Displaying {0} - {1} of {2}',emptyMsg:'No data to display',beforePageText:"Page",afterPageText:"of {0}",firstText:"First Page",prevText:"Previous Page",nextText:"Next Page",lastText:"Last Page",refreshText:"Refresh",renderButtons:function(el){Ext.PagingToolbar.superclass.render.call(this,el);this.first=this.addButton({tooltip:this.firstText,cls:"x-btn-icon x-grid-page-first",disabled:true,handler:this.onClick.createDelegate(this,["first"])});this.prev=this.addButton({tooltip:this.prevText,cls:"x-btn-icon x-grid-page-prev",disabled:true,handler:this.onClick.createDelegate(this,["prev"])});this.addSeparator();this.add(this.beforePageText);this.field=Ext.get(this.addDom({tag:"input",type:"text",size:"3",value:"1",cls:"x-grid-page-number"}).el);this.field.on("keydown",this.onPagingKeydown,this);this.field.on("focus",function(){this.dom.select();});this.afterTextEl=this.addText(String.format(this.afterPageText,1));this.field.setHeight(18);this.addSeparator();this.next=this.addButton({tooltip:this.nextText,cls:"x-btn-icon x-grid-page-next",disabled:true,handler:this.onClick.createDelegate(this,["next"])});this.last=this.addButton({tooltip:this.lastText,cls:"x-btn-icon x-grid-page-last",disabled:true,handler:this.onClick.createDelegate(this,["last"])});this.addSeparator();this.loading=this.addButton({tooltip:this.refreshText,cls:"x-btn-icon x-grid-loading",disabled:true,handler:this.onClick.createDelegate(this,["refresh"])});if(this.displayInfo){this.displayEl=Ext.fly(this.el.dom.firstChild).createChild({cls:'x-paging-info'});}},updateInfo:function(){if(this.displayEl){var count=this.ds.getCount();var msg=count==0?this.emptyMsg:String.format(this.displayMsg,this.cursor+1,this.cursor+count,this.ds.getTotalCount());this.displayEl.update(msg);}},onLoad:function(ds,r,o){this.cursor=o.params?o.params.start:0;var d=this.getPageData(),ap=d.activePage,ps=d.pages;this.afterTextEl.el.innerHTML=String.format(this.afterPageText,d.pages);this.field.dom.value=ap;this.first.setDisabled(ap==1);this.prev.setDisabled(ap==1);this.next.setDisabled(ap==ps);this.last.setDisabled(ap==ps);this.loading.enable();this.updateInfo();},getPageData:function(){var total=this.ds.getTotalCount();return{total:total,activePage:Math.ceil((this.cursor+this.pageSize)/this.pageSize),pages:total<this.pageSize?1:Math.ceil(total/this.pageSize)};},onLoadError:function(){this.loading.enable();},onPagingKeydown:function(e){var k=e.getKey();var d=this.getPageData();if(k==e.RETURN){var v=this.field.dom.value,pageNum;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.dom.value=d.activePage;return;}
-pageNum=Math.min(Math.max(1,pageNum),d.pages)-1;this.ds.load({params:{start:pageNum*this.pageSize,limit:this.pageSize}});e.stopEvent();}
-else if(k==e.HOME||(k==e.UP&&e.ctrlKey)||(k==e.PAGEUP&&e.ctrlKey)||(k==e.RIGHT&&e.ctrlKey)||k==e.END||(k==e.DOWN&&e.ctrlKey)||(k==e.LEFT&&e.ctrlKey)||(k==e.PAGEDOWN&&e.ctrlKey))
-{var pageNum=(k==e.HOME||(k==e.DOWN&&e.ctrlKey)||(k==e.LEFT&&e.ctrlKey)||(k==e.PAGEDOWN&&e.ctrlKey))?1:d.pages;this.field.dom.value=pageNum;this.ds.load({params:{start:(pageNum-1)*this.pageSize,limit:this.pageSize}});e.stopEvent();}
-else if(k==e.UP||k==e.RIGHT||k==e.PAGEUP||k==e.DOWN||k==e.LEFT||k==e.PAGEDOWN)
-{var v=this.field.dom.value,pageNum;var increment=(e.shiftKey)?10:1;if(k==e.DOWN||k==e.LEFT||k==e.PAGEDOWN)
-increment*=-1;if(!v||isNaN(pageNum=parseInt(v,10))){this.field.dom.value=d.activePage;return;}
-else if(parseInt(v,10)+increment>=1&parseInt(v,10)+increment<=d.pages)
-{this.field.dom.value=parseInt(v,10)+increment;pageNum=Math.min(Math.max(1,pageNum+increment),d.pages)-1;this.ds.load({params:{start:pageNum*this.pageSize,limit:this.pageSize}});}
-e.stopEvent();}},beforeLoad:function(){if(this.loading){this.loading.disable();}},onClick:function(which){var ds=this.ds;switch(which){case"first":ds.load({params:{start:0,limit:this.pageSize}});break;case"prev":ds.load({params:{start:Math.max(0,this.cursor-this.pageSize),limit:this.pageSize}});break;case"next":ds.load({params:{start:this.cursor+this.pageSize,limit:this.pageSize}});break;case"last":var total=ds.getTotalCount();var extra=total%this.pageSize;var lastStart=extra?(total-extra):total-this.pageSize;ds.load({params:{start:lastStart,limit:this.pageSize}});break;case"refresh":ds.load({params:{start:this.cursor,limit:this.pageSize}});break;}},unbind:function(ds){ds.un("beforeload",this.beforeLoad,this);ds.un("load",this.onLoad,this);ds.un("loadexception",this.onLoadError,this);this.ds=undefined;},bind:function(ds){ds.on("beforeload",this.beforeLoad,this);ds.on("load",this.onLoad,this);ds.on("loadexception",this.onLoadError,this);this.ds=ds;}});
diff --git a/lib/web/extjs/package/tree/tree.js b/lib/web/extjs/package/tree/tree.js
deleted file mode 100644
index 2c2a470b72cebccb2008ab325a5d914ff99f852f..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/tree/tree.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.data.Tree=function(root){this.nodeHash={};this.root=null;if(root){this.setRootNode(root);}
-this.addEvents({"append":true,"remove":true,"move":true,"insert":true,"beforeappend":true,"beforeremove":true,"beforemove":true,"beforeinsert":true});Ext.data.Tree.superclass.constructor.call(this);};Ext.extend(Ext.data.Tree,Ext.util.Observable,{pathSeparator:"/",getRootNode:function(){return this.root;},setRootNode:function(node){this.root=node;node.ownerTree=this;node.isRoot=true;this.registerNode(node);return node;},getNodeById:function(id){return this.nodeHash[id];},registerNode:function(node){this.nodeHash[node.id]=node;},unregisterNode:function(node){delete this.nodeHash[node.id];},toString:function(){return"[Tree"+(this.id?" "+this.id:"")+"]";}});Ext.data.Node=function(attributes){this.attributes=attributes||{};this.leaf=this.attributes.leaf;this.id=this.attributes.id;if(!this.id){this.id=Ext.id(null,"ynode-");this.attributes.id=this.id;}
-this.childNodes=[];if(!this.childNodes.indexOf){this.childNodes.indexOf=function(o){for(var i=0,len=this.length;i<len;i++){if(this[i]==o)return i;}
-return-1;};}
-this.parentNode=null;this.firstChild=null;this.lastChild=null;this.previousSibling=null;this.nextSibling=null;this.addEvents({"append":true,"remove":true,"move":true,"insert":true,"beforeappend":true,"beforeremove":true,"beforemove":true,"beforeinsert":true});this.listeners=this.attributes.listeners;Ext.data.Node.superclass.constructor.call(this);};Ext.extend(Ext.data.Node,Ext.util.Observable,{fireEvent:function(evtName){if(Ext.data.Node.superclass.fireEvent.apply(this,arguments)===false){return false;}
-var ot=this.getOwnerTree();if(ot){if(ot.proxyNodeEvent.apply(ot,arguments)===false){return false;}}
-return true;},isLeaf:function(){return this.leaf===true;},setFirstChild:function(node){this.firstChild=node;},setLastChild:function(node){this.lastChild=node;},isLast:function(){return(!this.parentNode?true:this.parentNode.lastChild==this);},isFirst:function(){return(!this.parentNode?true:this.parentNode.firstChild==this);},hasChildNodes:function(){return!this.isLeaf()&&this.childNodes.length>0;},appendChild:function(node){var multi=false;if(node instanceof Array){multi=node;}else if(arguments.length>1){multi=arguments;}
-if(multi){for(var i=0,len=multi.length;i<len;i++){this.appendChild(multi[i]);}}else{if(this.fireEvent("beforeappend",this.ownerTree,this,node)===false){return false;}
-var index=this.childNodes.length;var oldParent=node.parentNode;if(oldParent){if(node.fireEvent("beforemove",node.getOwnerTree(),node,oldParent,this,index)===false){return false;}
-oldParent.removeChild(node);}
-index=this.childNodes.length;if(index==0){this.setFirstChild(node);}
-this.childNodes.push(node);node.parentNode=this;var ps=this.childNodes[index-1];if(ps){node.previousSibling=ps;ps.nextSibling=node;}else{node.previousSibling=null;}
-node.nextSibling=null;this.setLastChild(node);node.setOwnerTree(this.getOwnerTree());this.fireEvent("append",this.ownerTree,this,node,index);if(oldParent){node.fireEvent("move",this.ownerTree,node,oldParent,this,index);}
-return node;}},removeChild:function(node){var index=this.childNodes.indexOf(node);if(index==-1){return false;}
-if(this.fireEvent("beforeremove",this.ownerTree,this,node)===false){return false;}
-this.childNodes.splice(index,1);if(node.previousSibling){node.previousSibling.nextSibling=node.nextSibling;}
-if(node.nextSibling){node.nextSibling.previousSibling=node.previousSibling;}
-if(this.firstChild==node){this.setFirstChild(node.nextSibling);}
-if(this.lastChild==node){this.setLastChild(node.previousSibling);}
-node.setOwnerTree(null);node.parentNode=null;node.previousSibling=null;node.nextSibling=null;this.fireEvent("remove",this.ownerTree,this,node);return node;},insertBefore:function(node,refNode){if(!refNode){return this.appendChild(node);}
-if(node==refNode){return false;}
-if(this.fireEvent("beforeinsert",this.ownerTree,this,node,refNode)===false){return false;}
-var index=this.childNodes.indexOf(refNode);var oldParent=node.parentNode;var refIndex=index;if(oldParent==this&&this.childNodes.indexOf(node)<index){refIndex--;}
-if(oldParent){if(node.fireEvent("beforemove",node.getOwnerTree(),node,oldParent,this,index,refNode)===false){return false;}
-oldParent.removeChild(node);}
-if(refIndex==0){this.setFirstChild(node);}
-this.childNodes.splice(refIndex,0,node);node.parentNode=this;var ps=this.childNodes[refIndex-1];if(ps){node.previousSibling=ps;ps.nextSibling=node;}else{node.previousSibling=null;}
-node.nextSibling=refNode;refNode.previousSibling=node;node.setOwnerTree(this.getOwnerTree());this.fireEvent("insert",this.ownerTree,this,node,refNode);if(oldParent){node.fireEvent("move",this.ownerTree,node,oldParent,this,refIndex,refNode);}
-return node;},item:function(index){return this.childNodes[index];},replaceChild:function(newChild,oldChild){this.insertBefore(newChild,oldChild);this.removeChild(oldChild);return oldChild;},indexOf:function(child){return this.childNodes.indexOf(child);},getOwnerTree:function(){if(!this.ownerTree){var p=this;while(p){if(p.ownerTree){this.ownerTree=p.ownerTree;break;}
-p=p.parentNode;}}
-return this.ownerTree;},getDepth:function(){var depth=0;var p=this;while(p.parentNode){++depth;p=p.parentNode;}
-return depth;},setOwnerTree:function(tree){if(tree!=this.ownerTree){if(this.ownerTree){this.ownerTree.unregisterNode(this);}
-this.ownerTree=tree;var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].setOwnerTree(tree);}
-if(tree){tree.registerNode(this);}}},getPath:function(attr){attr=attr||"id";var p=this.parentNode;var b=[this.attributes[attr]];while(p){b.unshift(p.attributes[attr]);p=p.parentNode;}
-var sep=this.getOwnerTree().pathSeparator;return sep+b.join(sep);},bubble:function(fn,scope,args){var p=this;while(p){if(fn.call(scope||p,args||p)===false){break;}
-p=p.parentNode;}},cascade:function(fn,scope,args){if(fn.call(scope||this,args||this)!==false){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].cascade(fn,scope,args);}}},eachChild:function(fn,scope,args){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){if(fn.call(scope||this,args||cs[i])===false){break;}}},findChild:function(attribute,value){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){if(cs[i].attributes[attribute]==value){return cs[i];}}
-return null;},findChildBy:function(fn,scope){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){if(fn.call(scope||cs[i],cs[i])===true){return cs[i];}}
-return null;},sort:function(fn,scope){var cs=this.childNodes;var len=cs.length;if(len>0){var sortFn=scope?function(){fn.apply(scope,arguments);}:fn;cs.sort(sortFn);for(var i=0;i<len;i++){var n=cs[i];n.previousSibling=cs[i-1];n.nextSibling=cs[i+1];if(i==0){this.setFirstChild(n);}
-if(i==len-1){this.setLastChild(n);}}}},contains:function(node){return node.isAncestor(this);},isAncestor:function(node){var p=this.parentNode;while(p){if(p==node){return true;}
-p=p.parentNode;}
-return false;},toString:function(){return"[Node"+(this.id?" "+this.id:"")+"]";}});
-
-Ext.tree.TreePanel=function(el,config){Ext.apply(this,config);Ext.tree.TreePanel.superclass.constructor.call(this);this.el=Ext.get(el);this.el.addClass('x-tree');this.id=this.el.id;this.addEvents({"beforeload":true,"load":true,"textchange":true,"beforeexpand":true,"beforecollapse":true,"expand":true,"disabledchange":true,"collapse":true,"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"beforechildrenrendered":true,"startdrag":true,"enddrag":true,"dragdrop":true,"beforenodedrop":true,"nodedrop":true,"nodedragover":true});if(this.singleExpand){this.on("beforeexpand",this.restrictExpand,this);}};Ext.extend(Ext.tree.TreePanel,Ext.data.Tree,{rootVisible:true,animate:Ext.enableFx,lines:true,enableDD:false,hlDrop:Ext.enableFx,proxyNodeEvent:function(){this.fireEvent.apply(this,arguments);},restrictExpand:function(node){var p=node.parentNode;if(p){if(p.expandedChild&&p.expandedChild.parentNode==p){p.expandedChild.collapse();}
-p.expandedChild=node;}},setRootNode:function(node){Ext.tree.TreePanel.superclass.setRootNode.call(this,node);if(!this.rootVisible){node.ui=new Ext.tree.RootTreeNodeUI(node);}
-return node;},getEl:function(){return this.el;},getLoader:function(){return this.loader;},expandAll:function(){this.root.expand(true);},collapseAll:function(){this.root.collapse(true);},getSelectionModel:function(){if(!this.selModel){this.selModel=new Ext.tree.DefaultSelectionModel();}
-return this.selModel;},expandPath:function(path,attr,callback){attr=attr||"id";var keys=path.split(this.pathSeparator);var curNode=this.root;if(curNode.attributes[attr]!=keys[1]){if(callback){callback(false,null);}
-return;}
-var index=1;var f=function(){if(++index==keys.length){if(callback){callback(true,curNode);}
-return;}
-var c=curNode.findChild(attr,keys[index]);if(!c){if(callback){callback(false,curNode);}
-return;}
-curNode=c;c.expand(false,false,f);};curNode.expand(false,false,f);},selectPath:function(path,attr,callback){attr=attr||"id";var keys=path.split(this.pathSeparator);var v=keys.pop();if(keys.length>0){var f=function(success,node){if(success&&node){var n=node.findChild(attr,v);if(n){n.select();if(callback){callback(true,n);}}}else{if(callback){callback(false,n);}}};this.expandPath(keys.join(this.pathSeparator),attr,f);}else{this.root.select();if(callback){callback(true,this.root);}}},getTreeEl:function(){return this.el;},render:function(){this.innerCt=this.el.createChild({tag:"ul",cls:"x-tree-root-ct "+
-(this.lines?"x-tree-lines":"x-tree-no-lines")});if(this.containerScroll){Ext.dd.ScrollManager.register(this.el);}
-if((this.enableDD||this.enableDrop)&&!this.dropZone){this.dropZone=new Ext.tree.TreeDropZone(this,this.dropConfig||{ddGroup:this.ddGroup||"TreeDD",appendOnly:this.ddAppendOnly===true});}
-if((this.enableDD||this.enableDrag)&&!this.dragZone){this.dragZone=new Ext.tree.TreeDragZone(this,this.dragConfig||{ddGroup:this.ddGroup||"TreeDD",scroll:this.ddScroll});}
-this.getSelectionModel().init(this);this.root.render();if(!this.rootVisible){this.root.renderChildren();}
-return this;}});
-
-Ext.tree.DefaultSelectionModel=function(){this.selNode=null;this.addEvents({"selectionchange":true,"beforeselect":true});};Ext.extend(Ext.tree.DefaultSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){this.select(node);},select:function(node){var last=this.selNode;if(last!=node&&this.fireEvent('beforeselect',this,node,last)!==false){if(last){last.ui.onSelectedChange(false);}
-this.selNode=node;node.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,node,last);}
-return node;},unselect:function(node){if(this.selNode==node){this.clearSelections();}},clearSelections:function(){var n=this.selNode;if(n){n.ui.onSelectedChange(false);this.selNode=null;this.fireEvent("selectionchange",this,null);}
-return n;},getSelectedNode:function(){return this.selNode;},isSelected:function(node){return this.selNode==node;},selectPrevious:function(){var s=this.selNode||this.lastSelNode;if(!s){return null;}
-var ps=s.previousSibling;if(ps){if(!ps.isExpanded()||ps.childNodes.length<1){return this.select(ps);}else{var lc=ps.lastChild;while(lc&&lc.isExpanded()&&lc.childNodes.length>0){lc=lc.lastChild;}
-return this.select(lc);}}else if(s.parentNode&&(this.tree.rootVisible||!s.parentNode.isRoot)){return this.select(s.parentNode);}
-return null;},selectNext:function(){var s=this.selNode||this.lastSelNode;if(!s){return null;}
-if(s.firstChild&&s.isExpanded()){return this.select(s.firstChild);}else if(s.nextSibling){return this.select(s.nextSibling);}else if(s.parentNode){var newS=null;s.parentNode.bubble(function(){if(this.nextSibling){newS=this.getOwnerTree().selModel.select(this.nextSibling);return false;}});return newS;}
-return null;},onKeyDown:function(e){var s=this.selNode||this.lastSelNode;var sm=this;if(!s){return;}
-var k=e.getKey();switch(k){case e.DOWN:e.stopEvent();this.selectNext();break;case e.UP:e.stopEvent();this.selectPrevious();break;case e.RIGHT:e.preventDefault();if(s.hasChildNodes()){if(!s.isExpanded()){s.expand();}else if(s.firstChild){this.select(s.firstChild,e);}}
-break;case e.LEFT:e.preventDefault();if(s.hasChildNodes()&&s.isExpanded()){s.collapse();}else if(s.parentNode&&(this.tree.rootVisible||s.parentNode!=this.tree.getRootNode())){this.select(s.parentNode,e);}
-break;};}});Ext.tree.MultiSelectionModel=function(){this.selNodes=[];this.selMap={};this.addEvents({"selectionchange":true});};Ext.extend(Ext.tree.MultiSelectionModel,Ext.util.Observable,{init:function(tree){this.tree=tree;tree.getTreeEl().on("keydown",this.onKeyDown,this);tree.on("click",this.onNodeClick,this);},onNodeClick:function(node,e){this.select(node,e,e.ctrlKey);},select:function(node,e,keepExisting){if(keepExisting!==true){this.clearSelections(true);}
-if(this.isSelected(node)){this.lastSelNode=node;return node;}
-this.selNodes.push(node);this.selMap[node.id]=node;this.lastSelNode=node;node.ui.onSelectedChange(true);this.fireEvent("selectionchange",this,this.selNodes);return node;},unselect:function(node){if(this.selMap[node.id]){node.ui.onSelectedChange(false);var sn=this.selNodes;var index=-1;if(sn.indexOf){index=sn.indexOf(node);}else{for(var i=0,len=sn.length;i<len;i++){if(sn[i]==node){index=i;break;}}}
-if(index!=-1){this.selNodes.splice(index,1);}
-delete this.selMap[node.id];this.fireEvent("selectionchange",this,this.selNodes);}},clearSelections:function(suppressEvent){var sn=this.selNodes;if(sn.length>0){for(var i=0,len=sn.length;i<len;i++){sn[i].ui.onSelectedChange(false);}
-this.selNodes=[];this.selMap={};if(suppressEvent!==true){this.fireEvent("selectionchange",this,this.selNodes);}}},isSelected:function(node){return this.selMap[node.id]?true:false;},getSelectedNodes:function(){return this.selNodes;},onKeyDown:Ext.tree.DefaultSelectionModel.prototype.onKeyDown,selectNext:Ext.tree.DefaultSelectionModel.prototype.selectNext,selectPrevious:Ext.tree.DefaultSelectionModel.prototype.selectPrevious});
-
-Ext.tree.TreeNode=function(attributes){attributes=attributes||{};if(typeof attributes=="string"){attributes={text:attributes};}
-this.childrenRendered=false;this.rendered=false;Ext.tree.TreeNode.superclass.constructor.call(this,attributes);this.expanded=attributes.expanded===true;this.isTarget=attributes.isTarget!==false;this.draggable=attributes.draggable!==false&&attributes.allowDrag!==false;this.allowChildren=attributes.allowChildren!==false&&attributes.allowDrop!==false;this.text=attributes.text;this.disabled=attributes.disabled===true;this.addEvents({"textchange":true,"beforeexpand":true,"beforecollapse":true,"expand":true,"disabledchange":true,"collapse":true,"beforeclick":true,"click":true,"dblclick":true,"contextmenu":true,"beforechildrenrendered":true});var uiClass=this.attributes.uiProvider||Ext.tree.TreeNodeUI;this.ui=new uiClass(this);};Ext.extend(Ext.tree.TreeNode,Ext.data.Node,{preventHScroll:true,isExpanded:function(){return this.expanded;},getUI:function(){return this.ui;},setFirstChild:function(node){var of=this.firstChild;Ext.tree.TreeNode.superclass.setFirstChild.call(this,node);if(this.childrenRendered&&of&&node!=of){of.renderIndent(true,true);}
-if(this.rendered){this.renderIndent(true,true);}},setLastChild:function(node){var ol=this.lastChild;Ext.tree.TreeNode.superclass.setLastChild.call(this,node);if(this.childrenRendered&&ol&&node!=ol){ol.renderIndent(true,true);}
-if(this.rendered){this.renderIndent(true,true);}},appendChild:function(){var node=Ext.tree.TreeNode.superclass.appendChild.apply(this,arguments);if(node&&this.childrenRendered){node.render();}
-this.ui.updateExpandIcon();return node;},removeChild:function(node){this.ownerTree.getSelectionModel().unselect(node);Ext.tree.TreeNode.superclass.removeChild.apply(this,arguments);if(this.childrenRendered){node.ui.remove();}
-if(this.childNodes.length<1){this.collapse(false,false);}else{this.ui.updateExpandIcon();}
-return node;},insertBefore:function(node,refNode){var newNode=Ext.tree.TreeNode.superclass.insertBefore.apply(this,arguments);if(newNode&&refNode&&this.childrenRendered){node.render();}
-this.ui.updateExpandIcon();return newNode;},setText:function(text){var oldText=this.text;this.text=text;this.attributes.text=text;if(this.rendered){this.ui.onTextChange(this,text,oldText);}
-this.fireEvent("textchange",this,text,oldText);},select:function(){this.getOwnerTree().getSelectionModel().select(this);},unselect:function(){this.getOwnerTree().getSelectionModel().unselect(this);},isSelected:function(){return this.getOwnerTree().getSelectionModel().isSelected(this);},expand:function(deep,anim,callback){if(!this.expanded){if(this.fireEvent("beforeexpand",this,deep,anim)===false){return;}
-if(!this.childrenRendered){this.renderChildren();}
-this.expanded=true;if(!this.isHiddenRoot()&&(this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animExpand(function(){this.fireEvent("expand",this);if(typeof callback=="function"){callback(this);}
-if(deep===true){this.expandChildNodes(true);}}.createDelegate(this));return;}else{this.ui.expand();this.fireEvent("expand",this);if(typeof callback=="function"){callback(this);}}}else{if(typeof callback=="function"){callback(this);}}
-if(deep===true){this.expandChildNodes(true);}},isHiddenRoot:function(){return this.isRoot&&!this.getOwnerTree().rootVisible;},collapse:function(deep,anim){if(this.expanded&&!this.isHiddenRoot()){if(this.fireEvent("beforecollapse",this,deep,anim)===false){return;}
-this.expanded=false;if((this.getOwnerTree().animate&&anim!==false)||anim){this.ui.animCollapse(function(){this.fireEvent("collapse",this);if(deep===true){this.collapseChildNodes(true);}}.createDelegate(this));return;}else{this.ui.collapse();this.fireEvent("collapse",this);}}
-if(deep===true){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(true,false);}}},delayedExpand:function(delay){if(!this.expandProcId){this.expandProcId=this.expand.defer(delay,this);}},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);}
-this.expandProcId=false;},toggle:function(){if(this.expanded){this.collapse();}else{this.expand();}},ensureVisible:function(callback){var tree=this.getOwnerTree();tree.expandPath(this.getPath(),false,function(){tree.getTreeEl().scrollChildIntoView(this.ui.anchor);Ext.callback(callback);}.createDelegate(this));},expandChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].expand(deep);}},collapseChildNodes:function(deep){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].collapse(deep);}},disable:function(){this.disabled=true;this.unselect();if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,true);}
-this.fireEvent("disabledchange",this,true);},enable:function(){this.disabled=false;if(this.rendered&&this.ui.onDisableChange){this.ui.onDisableChange(this,false);}
-this.fireEvent("disabledchange",this,false);},renderChildren:function(suppressEvent){if(suppressEvent!==false){this.fireEvent("beforechildrenrendered",this);}
-var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}
-this.childrenRendered=true;},sort:function(fn,scope){Ext.tree.TreeNode.superclass.sort.apply(this,arguments);if(this.childrenRendered){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].render(true);}}},render:function(bulkRender){this.ui.render(bulkRender);if(!this.rendered){this.rendered=true;if(this.expanded){this.expanded=false;this.expand(false,false);}}},renderIndent:function(deep,refresh){if(refresh){this.ui.childIndent=null;}
-this.ui.renderIndent();if(deep===true&&this.childrenRendered){var cs=this.childNodes;for(var i=0,len=cs.length;i<len;i++){cs[i].renderIndent(true,refresh);}}}});
-
-Ext.tree.AsyncTreeNode=function(config){this.loaded=false;this.loading=false;Ext.tree.AsyncTreeNode.superclass.constructor.apply(this,arguments);this.addEvents({'beforeload':true,'load':true});};Ext.extend(Ext.tree.AsyncTreeNode,Ext.tree.TreeNode,{expand:function(deep,anim,callback){if(this.loading){var timer;var f=function(){if(!this.loading){clearInterval(timer);this.expand(deep,anim,callback);}}.createDelegate(this);timer=setInterval(f,200);return;}
-if(!this.loaded){if(this.fireEvent("beforeload",this)===false){return;}
-this.loading=true;this.ui.beforeLoad(this);var loader=this.loader||this.attributes.loader||this.getOwnerTree().getLoader();if(loader){loader.load(this,this.loadComplete.createDelegate(this,[deep,anim,callback]));return;}}
-Ext.tree.AsyncTreeNode.superclass.expand.call(this,deep,anim,callback);},isLoading:function(){return this.loading;},loadComplete:function(deep,anim,callback){this.loading=false;this.loaded=true;this.ui.afterLoad(this);this.fireEvent("load",this);this.expand(deep,anim,callback);},isLoaded:function(){return this.loaded;},hasChildNodes:function(){if(!this.isLeaf()&&!this.loaded){return true;}else{return Ext.tree.AsyncTreeNode.superclass.hasChildNodes.call(this);}},reload:function(callback){this.collapse(false,false);while(this.firstChild){this.removeChild(this.firstChild);}
-this.childrenRendered=false;this.loaded=false;if(this.isHiddenRoot()){this.expanded=false;}
-this.expand(false,false,callback);}});
-
-Ext.tree.TreeNodeUI=function(node){this.node=node;this.rendered=false;this.animating=false;this.emptyIcon=Ext.BLANK_IMAGE_URL;};Ext.tree.TreeNodeUI.prototype={removeChild:function(node){if(this.rendered){this.ctNode.removeChild(node.ui.getEl());}},beforeLoad:function(){this.addClass("x-tree-node-loading");},afterLoad:function(){this.removeClass("x-tree-node-loading");},onTextChange:function(node,text,oldText){if(this.rendered){this.textNode.innerHTML=text;}},onDisableChange:function(node,state){this.disabled=state;if(state){this.addClass("x-tree-node-disabled");}else{this.removeClass("x-tree-node-disabled");}},onSelectedChange:function(state){if(state){this.focus();this.addClass("x-tree-selected");}else{this.removeClass("x-tree-selected");}},onMove:function(tree,node,oldParent,newParent,index,refNode){this.childIndent=null;if(this.rendered){var targetNode=newParent.ui.getContainer();if(!targetNode){this.holder=document.createElement("div");this.holder.appendChild(this.wrap);return;}
-var insertBefore=refNode?refNode.ui.getEl():null;if(insertBefore){targetNode.insertBefore(this.wrap,insertBefore);}else{targetNode.appendChild(this.wrap);}
-this.node.renderIndent(true);}},addClass:function(cls){if(this.elNode){Ext.fly(this.elNode).addClass(cls);}},removeClass:function(cls){if(this.elNode){Ext.fly(this.elNode).removeClass(cls);}},remove:function(){if(this.rendered){this.holder=document.createElement("div");this.holder.appendChild(this.wrap);}},fireEvent:function(){return this.node.fireEvent.apply(this.node,arguments);},initEvents:function(){this.node.on("move",this.onMove,this);var E=Ext.EventManager;var a=this.anchor;var el=Ext.fly(a);if(Ext.isOpera){el.setStyle("text-decoration","none");}
-el.on("click",this.onClick,this);el.on("dblclick",this.onDblClick,this);el.on("contextmenu",this.onContextMenu,this);var icon=Ext.fly(this.iconNode);icon.on("click",this.onClick,this);icon.on("dblclick",this.onDblClick,this);icon.on("contextmenu",this.onContextMenu,this);E.on(this.ecNode,"click",this.ecClick,this,true);if(this.node.disabled){this.addClass("x-tree-node-disabled");}
-if(this.node.hidden){this.addClass("x-tree-node-disabled");}
-var ot=this.node.getOwnerTree();var dd=ot.enableDD||ot.enableDrag||ot.enableDrop;if(dd&&(!this.node.isRoot||ot.rootVisible)){Ext.dd.Registry.register(this.elNode,{node:this.node,handles:[this.iconNode,this.textNode],isHandle:false});}},hide:function(){if(this.rendered){this.wrap.style.display="none";}},show:function(){if(this.rendered){this.wrap.style.display="";}},onContextMenu:function(e){e.preventDefault();this.focus();this.fireEvent("contextmenu",this.node,e);},onClick:function(e){if(this.dropping){return;}
-if(this.fireEvent("beforeclick",this.node,e)!==false){if(!this.disabled&&this.node.attributes.href){this.fireEvent("click",this.node,e);return;}
-e.preventDefault();if(this.disabled){return;}
-if(this.node.attributes.singleClickExpand&&!this.animating&&this.node.hasChildNodes()){this.node.toggle();}
-this.fireEvent("click",this.node,e);}else{e.stopEvent();}},onDblClick:function(e){e.preventDefault();if(this.disabled){return;}
-if(!this.animating&&this.node.hasChildNodes()){this.node.toggle();}
-this.fireEvent("dblclick",this.node,e);},ecClick:function(e){if(!this.animating&&this.node.hasChildNodes()){this.node.toggle();}},startDrop:function(){this.dropping=true;},endDrop:function(){setTimeout(function(){this.dropping=false;}.createDelegate(this),50);},expand:function(){this.updateExpandIcon();this.ctNode.style.display="";},focus:function(){if(!this.node.preventHScroll){try{this.anchor.focus();}catch(e){}}else if(!Ext.isIE){try{var noscroll=this.node.getOwnerTree().getTreeEl().dom;var l=noscroll.scrollLeft;this.anchor.focus();noscroll.scrollLeft=l;}catch(e){}}},blur:function(){try{this.anchor.blur();}catch(e){}},animExpand:function(callback){var ct=Ext.get(this.ctNode);ct.stopFx();if(!this.node.hasChildNodes()){this.updateExpandIcon();this.ctNode.style.display="";Ext.callback(callback);return;}
-this.animating=true;this.updateExpandIcon();ct.slideIn('t',{callback:function(){this.animating=false;Ext.callback(callback);},scope:this,duration:this.node.ownerTree.duration||.25});},highlight:function(){var tree=this.node.getOwnerTree();Ext.fly(this.wrap).highlight(tree.hlColor||"C3DAF9",{endColor:tree.hlBaseColor});},collapse:function(){this.updateExpandIcon();this.ctNode.style.display="none";},animCollapse:function(callback){var ct=Ext.get(this.ctNode);ct.enableDisplayMode('block');ct.stopFx();this.animating=true;this.updateExpandIcon();ct.slideOut('t',{callback:function(){this.animating=false;Ext.callback(callback);},scope:this,duration:this.node.ownerTree.duration||.25});},getContainer:function(){return this.ctNode;},getEl:function(){return this.wrap;},appendDDGhost:function(ghostNode){ghostNode.appendChild(this.elNode.cloneNode(true));},getDDRepairXY:function(){return Ext.lib.Dom.getXY(this.iconNode);},onRender:function(){this.render();},render:function(bulkRender){var n=this.node,a=n.attributes;var targetNode=n.parentNode?n.parentNode.ui.getContainer():n.ownerTree.innerCt.dom;if(!this.rendered){this.rendered=true;this.renderElements(n,a,targetNode,bulkRender);if(a.qtip){if(this.textNode.setAttributeNS){this.textNode.setAttributeNS("ext","qtip",a.qtip);if(a.qtipTitle){this.textNode.setAttributeNS("ext","qtitle",a.qtipTitle);}}else{this.textNode.setAttribute("ext:qtip",a.qtip);if(a.qtipTitle){this.textNode.setAttribute("ext:qtitle",a.qtipTitle);}}}else if(a.qtipCfg){a.qtipCfg.target=Ext.id(this.textNode);Ext.QuickTips.register(a.qtipCfg);}
-this.initEvents();if(!this.node.expanded){this.updateExpandIcon();}}else{if(bulkRender===true){targetNode.appendChild(this.wrap);}}},renderElements:function(n,a,targetNode,bulkRender){this.indentMarkup=n.parentNode?n.parentNode.ui.getChildIndent():'';var buf=['<li class="x-tree-node"><div class="x-tree-node-el ',a.cls,'">','<span class="x-tree-node-indent">',this.indentMarkup,"</span>",'<img src="',this.emptyIcon,'" class="x-tree-ec-icon">','<img src="',a.icon||this.emptyIcon,'" class="x-tree-node-icon',(a.icon?" x-tree-node-inline-icon":""),(a.iconCls?" "+a.iconCls:""),'" unselectable="on">','<a hidefocus="on" href="',a.href?a.href:"#",'" tabIndex="1" ',a.hrefTarget?' target="'+a.hrefTarget+'"':"",'><span unselectable="on">',n.text,"</span></a></div>",'<ul class="x-tree-node-ct" style="display:none;"></ul>',"</li>"];if(bulkRender!==true&&n.nextSibling&&n.nextSibling.ui.getEl()){this.wrap=Ext.DomHelper.insertHtml("beforeBegin",n.nextSibling.ui.getEl(),buf.join(""));}else{this.wrap=Ext.DomHelper.insertHtml("beforeEnd",targetNode,buf.join(""));}
-this.elNode=this.wrap.childNodes[0];this.ctNode=this.wrap.childNodes[1];var cs=this.elNode.childNodes;this.indentNode=cs[0];this.ecNode=cs[1];this.iconNode=cs[2];this.anchor=cs[3];this.textNode=cs[3].firstChild;},getAnchor:function(){return this.anchor;},getTextEl:function(){return this.textNode;},getIconEl:function(){return this.iconNode;},updateExpandIcon:function(){if(this.rendered){var n=this.node,c1,c2;var cls=n.isLast()?"x-tree-elbow-end":"x-tree-elbow";var hasChild=n.hasChildNodes();if(hasChild){if(n.expanded){cls+="-minus";c1="x-tree-node-collapsed";c2="x-tree-node-expanded";}else{cls+="-plus";c1="x-tree-node-expanded";c2="x-tree-node-collapsed";}
-if(this.wasLeaf){this.removeClass("x-tree-node-leaf");this.wasLeaf=false;}
-if(this.c1!=c1||this.c2!=c2){Ext.fly(this.elNode).replaceClass(c1,c2);this.c1=c1;this.c2=c2;}}else{if(!this.wasLeaf){Ext.fly(this.elNode).replaceClass("x-tree-node-expanded","x-tree-node-leaf");delete this.c1;delete this.c2;this.wasLeaf=true;}}
-var ecc="x-tree-ec-icon "+cls;if(this.ecc!=ecc){this.ecNode.className=ecc;this.ecc=ecc;}}},getChildIndent:function(){if(!this.childIndent){var buf=[];var p=this.node;while(p){if(!p.isRoot||(p.isRoot&&p.ownerTree.rootVisible)){if(!p.isLast()){buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-elbow-line">');}else{buf.unshift('<img src="'+this.emptyIcon+'" class="x-tree-icon">');}}
-p=p.parentNode;}
-this.childIndent=buf.join("");}
-return this.childIndent;},renderIndent:function(){if(this.rendered){var indent="";var p=this.node.parentNode;if(p){indent=p.ui.getChildIndent();}
-if(this.indentMarkup!=indent){this.indentNode.innerHTML=indent;this.indentMarkup=indent;}
-this.updateExpandIcon();}}};Ext.tree.RootTreeNodeUI=function(){Ext.tree.RootTreeNodeUI.superclass.constructor.apply(this,arguments);};Ext.extend(Ext.tree.RootTreeNodeUI,Ext.tree.TreeNodeUI,{render:function(){if(!this.rendered){var targetNode=this.node.ownerTree.innerCt.dom;this.node.expanded=true;targetNode.innerHTML='<div class="x-tree-root-node"></div>';this.wrap=this.ctNode=targetNode.firstChild;}},collapse:function(){},expand:function(){}});
-
-Ext.tree.TreeLoader=function(config){this.baseParams={};this.requestMethod="POST";Ext.apply(this,config);this.addEvents({"beforeload":true,"load":true,"loadexception":true});Ext.tree.TreeLoader.superclass.constructor.call(this);};Ext.extend(Ext.tree.TreeLoader,Ext.util.Observable,{uiProviders:{},clearOnLoad:true,load:function(node,callback){if(this.clearOnLoad){while(node.firstChild){node.removeChild(node.firstChild);}}
-if(node.attributes.children){var cs=node.attributes.children;for(var i=0,len=cs.length;i<len;i++){node.appendChild(this.createNode(cs[i]));}
-if(typeof callback=="function"){callback();}}else if(this.dataUrl){this.requestData(node,callback);}},getParams:function(node){var buf=[],bp=this.baseParams;for(var key in bp){if(typeof bp[key]!="function"){buf.push(encodeURIComponent(key),"=",encodeURIComponent(bp[key]),"&");}}
-buf.push("node=",encodeURIComponent(node.id));return buf.join("");},requestData:function(node,callback){if(this.fireEvent("beforeload",this,node,callback)!==false){var params=this.getParams(node);var cb={success:this.handleResponse,failure:this.handleFailure,scope:this,argument:{callback:callback,node:node}};this.transId=Ext.lib.Ajax.request(this.requestMethod,this.dataUrl,cb,params);}else{if(typeof callback=="function"){callback();}}},isLoading:function(){return this.transId?true:false;},abort:function(){if(this.isLoading()){Ext.lib.Ajax.abort(this.transId);}},createNode:function(attr){if(this.applyLoader!==false){attr.loader=this;}
-if(typeof attr.uiProvider=='string'){attr.uiProvider=this.uiProviders[attr.uiProvider]||eval(attr.uiProvider);}
-return(attr.leaf?new Ext.tree.TreeNode(attr):new Ext.tree.AsyncTreeNode(attr));},processResponse:function(response,node,callback){var json=response.responseText;try{var o=eval("("+json+")");for(var i=0,len=o.length;i<len;i++){var n=this.createNode(o[i]);if(n){node.appendChild(n);}}
-if(typeof callback=="function"){callback(this,node);}}catch(e){this.handleFailure(response);}},handleResponse:function(response){this.transId=false;var a=response.argument;this.processResponse(response,a.node,a.callback);this.fireEvent("load",this,a.node,response);},handleFailure:function(response){this.transId=false;var a=response.argument;this.fireEvent("loadexception",this,a.node,response);if(typeof a.callback=="function"){a.callback(this,a.node);}}});
-
-Ext.tree.TreeFilter=function(tree,config){this.tree=tree;this.filtered={};Ext.apply(this,config,{clearBlank:false,reverse:false,autoClear:false,remove:false});};Ext.tree.TreeFilter.prototype={filter:function(value,attr,startNode){attr=attr||"text";var f;if(typeof value=="string"){var vlen=value.length;if(vlen==0&&this.clearBlank){this.clearFilter();return;}
-value=value.toLowerCase();f=function(n){return n.attributes[attr].substr(0,vlen).toLowerCase()==value;};}else if(value.exec){f=function(n){return value.test(n.attributes[attr]);};}else{throw'Illegal filter type, must be string or regex';}
-this.filterBy(f,null,startNode);},filterBy:function(fn,scope,startNode){startNode=startNode||this.tree.root;if(this.autoClear){this.clearFilter();}
-var af=this.filtered,rv=this.reverse;var f=function(n){if(n==startNode){return true;}
-if(af[n.id]){return false;}
-var m=fn.call(scope||n,n);if(!m||rv){af[n.id]=n;n.ui.hide();return false;}
-return true;};startNode.cascade(f);if(this.remove){for(var id in af){if(typeof id!="function"){var n=af[id];if(n&&n.parentNode){n.parentNode.removeChild(n);}}}}},clear:function(){var t=this.tree;var af=this.filtered;for(var id in af){if(typeof id!="function"){var n=af[id];if(n){n.ui.show();}}}
-this.filtered={};}};
-
-Ext.tree.TreeSorter=function(tree,config){Ext.apply(this,config);tree.on("beforechildrenrendered",this.doSort,this);tree.on("append",this.updateSort,this);tree.on("insert",this.updateSort,this);var dsc=this.dir&&this.dir.toLowerCase()=="desc";var p=this.property||"text";var sortType=this.sortType;var fs=this.folderSort;var cs=this.caseSensitive===true;var leafAttr=this.leafAttr||'leaf';this.sortFn=function(n1,n2){if(fs){if(n1.attributes[leafAttr]&&!n2.attributes[leafAttr]){return 1;}
-if(!n1.attributes[leafAttr]&&n2.attributes[leafAttr]){return-1;}}
-var v1=sortType?sortType(n1):(cs?n1[p]:n1[p].toUpperCase());var v2=sortType?sortType(n2):(cs?n2[p]:n2[p].toUpperCase());if(v1<v2){return dsc?+1:-1;}else if(v1>v2){return dsc?-1:+1;}else{return 0;}};};Ext.tree.TreeSorter.prototype={doSort:function(node){node.sort(this.sortFn);},compareNodes:function(n1,n2){return(n1.text.toUpperCase()>n2.text.toUpperCase()?1:-1);},updateSort:function(tree,node){if(node.childrenRendered){this.doSort.defer(1,this,[node]);}}};
-
-if(Ext.dd.DropZone){Ext.tree.TreeDropZone=function(tree,config){this.allowParentInsert=false;this.allowContainerDrop=false;this.appendOnly=false;Ext.tree.TreeDropZone.superclass.constructor.call(this,tree.innerCt,config);this.tree=tree;this.lastInsertClass="x-tree-no-status";this.dragOverData={};};Ext.extend(Ext.tree.TreeDropZone,Ext.dd.DropZone,{ddGroup:"TreeDD",expandDelay:1000,expandNode:function(node){if(node.hasChildNodes()&&!node.isExpanded()){node.expand(false,null,this.triggerCacheRefresh.createDelegate(this));}},queueExpand:function(node){this.expandProcId=this.expandNode.defer(this.expandDelay,this,[node]);},cancelExpand:function(){if(this.expandProcId){clearTimeout(this.expandProcId);this.expandProcId=false;}},isValidDropPoint:function(n,pt,dd,e,data){if(!n||!data){return false;}
-var targetNode=n.node;var dropNode=data.node;if(!(targetNode&&targetNode.isTarget&&pt)){return false;}
-if(pt=="append"&&targetNode.allowChildren===false){return false;}
-if((pt=="above"||pt=="below")&&(targetNode.parentNode&&targetNode.parentNode.allowChildren===false)){return false;}
-if(dropNode&&(targetNode==dropNode||dropNode.contains(targetNode))){return false;}
-var overEvent=this.dragOverData;overEvent.tree=this.tree;overEvent.target=targetNode;overEvent.data=data;overEvent.point=pt;overEvent.source=dd;overEvent.rawEvent=e;overEvent.dropNode=dropNode;overEvent.cancel=false;var result=this.tree.fireEvent("nodedragover",overEvent);return overEvent.cancel===false&&result!==false;},getDropPoint:function(e,n,dd){var tn=n.node;if(tn.isRoot){return tn.allowChildren!==false?"append":false;}
-var dragEl=n.ddel;var t=Ext.lib.Dom.getY(dragEl),b=t+dragEl.offsetHeight;var y=Ext.lib.Event.getPageY(e);var noAppend=tn.allowChildren===false||tn.isLeaf();if(this.appendOnly||tn.parentNode.allowChildren===false){return noAppend?false:"append";}
-var noBelow=false;if(!this.allowParentInsert){noBelow=tn.hasChildNodes()&&tn.isExpanded();}
-var q=(b-t)/(noAppend?2:3);if(y>=t&&y<(t+q)){return"above";}else if(!noBelow&&(noAppend||y>=b-q&&y<=b)){return"below";}else{return"append";}},onNodeEnter:function(n,dd,e,data){this.cancelExpand();},onNodeOver:function(n,dd,e,data){var pt=this.getDropPoint(e,n,dd);var node=n.node;if(!this.expandProcId&&pt=="append"&&node.hasChildNodes()&&!n.node.isExpanded()){this.queueExpand(node);}else if(pt!="append"){this.cancelExpand();}
-var returnCls=this.dropNotAllowed;if(this.isValidDropPoint(n,pt,dd,e,data)){if(pt){var el=n.ddel;var cls;if(pt=="above"){returnCls=n.node.isFirst()?"x-tree-drop-ok-above":"x-tree-drop-ok-between";cls="x-tree-drag-insert-above";}else if(pt=="below"){returnCls=n.node.isLast()?"x-tree-drop-ok-below":"x-tree-drop-ok-between";cls="x-tree-drag-insert-below";}else{returnCls="x-tree-drop-ok-append";cls="x-tree-drag-append";}
-if(this.lastInsertClass!=cls){Ext.fly(el).replaceClass(this.lastInsertClass,cls);this.lastInsertClass=cls;}}}
-return returnCls;},onNodeOut:function(n,dd,e,data){this.cancelExpand();this.removeDropIndicators(n);},onNodeDrop:function(n,dd,e,data){var point=this.getDropPoint(e,n,dd);var targetNode=n.node;targetNode.ui.startDrop();if(!this.isValidDropPoint(n,point,dd,e,data)){targetNode.ui.endDrop();return false;}
-var dropNode=data.node||(dd.getTreeNode?dd.getTreeNode(data,targetNode,point,e):null);var dropEvent={tree:this.tree,target:targetNode,data:data,point:point,source:dd,rawEvent:e,dropNode:dropNode,cancel:!dropNode};var retval=this.tree.fireEvent("beforenodedrop",dropEvent);if(retval===false||dropEvent.cancel===true||!dropEvent.dropNode){targetNode.ui.endDrop();return false;}
-targetNode=dropEvent.target;if(point=="append"&&!targetNode.isExpanded()){targetNode.expand(false,null,function(){this.completeDrop(dropEvent);}.createDelegate(this));}else{this.completeDrop(dropEvent);}
-return true;},completeDrop:function(de){var ns=de.dropNode,p=de.point,t=de.target;if(!(ns instanceof Array)){ns=[ns];}
-var n;for(var i=0,len=ns.length;i<len;i++){n=ns[i];if(p=="above"){t.parentNode.insertBefore(n,t);}else if(p=="below"){t.parentNode.insertBefore(n,t.nextSibling);}else{t.appendChild(n);}}
-n.ui.focus();if(this.tree.hlDrop){n.ui.highlight();}
-t.ui.endDrop();this.tree.fireEvent("nodedrop",de);},afterNodeMoved:function(dd,data,e,targetNode,dropNode){if(this.tree.hlDrop){dropNode.ui.focus();dropNode.ui.highlight();}
-this.tree.fireEvent("nodedrop",this.tree,targetNode,data,dd,e);},getTree:function(){return this.tree;},removeDropIndicators:function(n){if(n&&n.ddel){var el=n.ddel;Ext.fly(el).removeClass(["x-tree-drag-insert-above","x-tree-drag-insert-below","x-tree-drag-append"]);this.lastInsertClass="_noclass";}},beforeDragDrop:function(target,e,id){this.cancelExpand();return true;},afterRepair:function(data){if(data&&Ext.enableFx){data.node.ui.highlight();}
-this.hideProxy();}});}
-
-if(Ext.dd.DragZone){Ext.tree.TreeDragZone=function(tree,config){Ext.tree.TreeDragZone.superclass.constructor.call(this,tree.getTreeEl(),config);this.tree=tree;};Ext.extend(Ext.tree.TreeDragZone,Ext.dd.DragZone,{ddGroup:"TreeDD",onBeforeDrag:function(data,e){var n=data.node;return n&&n.draggable&&!n.disabled;},onInitDrag:function(e){var data=this.dragData;this.tree.getSelectionModel().select(data.node);this.proxy.update("");data.node.ui.appendDDGhost(this.proxy.ghost.dom);this.tree.fireEvent("startdrag",this.tree,data.node,e);},getRepairXY:function(e,data){return data.node.ui.getDDRepairXY();},onEndDrag:function(data,e){this.tree.fireEvent("enddrag",this.tree,data.node,e);},onValidDrop:function(dd,e,id){this.tree.fireEvent("dragdrop",this.tree,this.dragData.node,dd,e);this.hideProxy();},beforeInvalidDrop:function(e,id){var sm=this.tree.getSelectionModel();sm.clearSelections();sm.select(this.dragData.node);}});}
-
-Ext.tree.TreeEditor=function(tree,config){config=config||{};var field=config.events?config:new Ext.form.TextField(config);Ext.tree.TreeEditor.superclass.constructor.call(this,field);this.tree=tree;tree.on('beforeclick',this.beforeNodeClick,this);tree.getTreeEl().on('mousedown',this.hide,this);this.on('complete',this.updateNode,this);this.on('beforestartedit',this.fitToTree,this);this.on('startedit',this.bindScroll,this,{delay:10});this.on('specialkey',this.onSpecialKey,this);};Ext.extend(Ext.tree.TreeEditor,Ext.Editor,{alignment:"l-l",autoSize:false,hideEl:false,cls:"x-small-editor x-tree-editor",shim:false,shadow:"frame",maxWidth:250,fitToTree:function(ed,el){var td=this.tree.getTreeEl().dom,nd=el.dom;if(td.scrollLeft>nd.offsetLeft){td.scrollLeft=nd.offsetLeft;}
-var w=Math.min(this.maxWidth,(td.clientWidth>20?td.clientWidth:td.offsetWidth)-Math.max(0,nd.offsetLeft-td.scrollLeft)-5);this.setSize(w,'');},triggerEdit:function(node){this.completeEdit();this.editNode=node;this.startEdit(node.ui.textNode,node.text);},bindScroll:function(){this.tree.getTreeEl().on('scroll',this.cancelEdit,this);},beforeNodeClick:function(node){if(this.tree.getSelectionModel().isSelected(node)){this.triggerEdit(node);return false;}},updateNode:function(ed,value){this.tree.getTreeEl().un('scroll',this.cancelEdit,this);this.editNode.setText(value);},onSpecialKey:function(field,e){var k=e.getKey();if(k==e.ESC){e.stopEvent();this.cancelEdit();}else if(k==e.ENTER&&!e.hasModifier()){e.stopEvent();this.completeEdit();}}});
diff --git a/lib/web/extjs/package/util.js b/lib/web/extjs/package/util.js
deleted file mode 100644
index 9e60e10f2100606ffe137b5e31d34f2bdd3468ba..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/util.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.util.DelayedTask=function(fn,scope,args){var id=null,d,t;var call=function(){var now=new Date().getTime();if(now-t>=d){clearInterval(id);id=null;fn.apply(scope,args||[]);}};this.delay=function(delay,newFn,newScope,newArgs){if(id&&delay!=d){this.cancel();}
-d=delay;t=new Date().getTime();fn=newFn||fn;scope=newScope||scope;args=newArgs||args;if(!id){id=setInterval(call,d);}};this.cancel=function(){if(id){clearInterval(id);id=null;}};};
-
-Ext.util.MixedCollection=function(allowFunctions,keyFn){this.items=[];this.map={};this.keys=[];this.length=0;this.addEvents({"clear":true,"add":true,"replace":true,"remove":true,"sort":true});this.allowFunctions=allowFunctions===true;if(keyFn){this.getKey=keyFn;}
-Ext.util.MixedCollection.superclass.constructor.call(this);};Ext.extend(Ext.util.MixedCollection,Ext.util.Observable,{allowFunctions:false,add:function(key,o){if(arguments.length==1){o=arguments[0];key=this.getKey(o);}
-if(typeof key=="undefined"||key===null){this.length++;this.items.push(o);this.keys.push(null);}else{var old=this.map[key];if(old){return this.replace(key,o);}
-this.length++;this.items.push(o);this.map[key]=o;this.keys.push(key);}
-this.fireEvent("add",this.length-1,o,key);return o;},getKey:function(o){return o.id;},replace:function(key,o){if(arguments.length==1){o=arguments[0];key=this.getKey(o);}
-var old=this.item(key);if(typeof key=="undefined"||key===null||typeof old=="undefined"){return this.add(key,o);}
-var index=this.indexOfKey(key);this.items[index]=o;this.map[key]=o;this.fireEvent("replace",key,old,o);return o;},addAll:function(objs){if(arguments.length>1||objs instanceof Array){var args=arguments.length>1?arguments:objs;for(var i=0,len=args.length;i<len;i++){this.add(args[i]);}}else{for(var key in objs){if(this.allowFunctions||typeof objs[key]!="function"){this.add(objs[key],key);}}}},each:function(fn,scope){var items=[].concat(this.items);for(var i=0,len=items.length;i<len;i++){if(fn.call(scope||items[i],items[i],i,len)===false){break;}}},eachKey:function(fn,scope){for(var i=0,len=this.keys.length;i<len;i++){fn.call(scope||window,this.keys[i],this.items[i],i,len);}},find:function(fn,scope){for(var i=0,len=this.items.length;i<len;i++){if(fn.call(scope||window,this.items[i],this.keys[i])){return this.items[i];}}
-return null;},insert:function(index,key,o){if(arguments.length==2){o=arguments[1];key=this.getKey(o);}
-if(index>=this.length){return this.add(key,o);}
-this.length++;this.items.splice(index,0,o);if(typeof key!="undefined"&&key!=null){this.map[key]=o;}
-this.keys.splice(index,0,key);this.fireEvent("add",index,o,key);return o;},remove:function(o){return this.removeAt(this.indexOf(o));},removeAt:function(index){if(index<this.length&&index>=0){this.length--;var o=this.items[index];this.items.splice(index,1);var key=this.keys[index];if(typeof key!="undefined"){delete this.map[key];}
-this.keys.splice(index,1);this.fireEvent("remove",o,key);}},removeKey:function(key){return this.removeAt(this.indexOfKey(key));},getCount:function(){return this.length;},indexOf:function(o){if(!this.items.indexOf){for(var i=0,len=this.items.length;i<len;i++){if(this.items[i]==o)return i;}
-return-1;}else{return this.items.indexOf(o);}},indexOfKey:function(key){if(!this.keys.indexOf){for(var i=0,len=this.keys.length;i<len;i++){if(this.keys[i]==key)return i;}
-return-1;}else{return this.keys.indexOf(key);}},item:function(key){var item=typeof this.map[key]!="undefined"?this.map[key]:this.items[key];return typeof item!='function'||this.allowFunctions?item:null;},itemAt:function(index){return this.items[index];},key:function(key){return this.map[key];},contains:function(o){return this.indexOf(o)!=-1;},containsKey:function(key){return typeof this.map[key]!="undefined";},clear:function(){this.length=0;this.items=[];this.keys=[];this.map={};this.fireEvent("clear");},first:function(){return this.items[0];},last:function(){return this.items[this.length-1];},_sort:function(property,dir,fn){var dsc=String(dir).toUpperCase()=="DESC"?-1:1;fn=fn||function(a,b){return a-b;};var c=[],k=this.keys,items=this.items;for(var i=0,len=items.length;i<len;i++){c[c.length]={key:k[i],value:items[i],index:i};}
-c.sort(function(a,b){var v=fn(a[property],b[property])*dsc;if(v==0){v=(a.index<b.index?-1:1);}
-return v;});for(var i=0,len=c.length;i<len;i++){items[i]=c[i].value;k[i]=c[i].key;}
-this.fireEvent("sort",this);},sort:function(dir,fn){this._sort("value",dir,fn);},keySort:function(dir,fn){this._sort("key",dir,fn||function(a,b){return String(a).toUpperCase()-String(b).toUpperCase();});},getRange:function(start,end){var items=this.items;if(items.length<1){return[];}
-start=start||0;end=Math.min(typeof end=="undefined"?this.length-1:end,this.length-1);var r=[];if(start<=end){for(var i=start;i<=end;i++){r[r.length]=items[i];}}else{for(var i=start;i>=end;i--){r[r.length]=items[i];}}
-return r;},filter:function(property,value){if(!value.exec){value=String(value);if(value.length==0){return this.clone();}
-value=new RegExp("^"+Ext.escapeRe(value),"i");}
-return this.filterBy(function(o){return o&&value.test(o[property]);});},filterBy:function(fn,scope){var r=new Ext.util.MixedCollection();r.getKey=this.getKey;var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){if(fn.call(scope||this,it[i],k[i])){r.add(k[i],it[i]);}}
-return r;},clone:function(){var r=new Ext.util.MixedCollection();var k=this.keys,it=this.items;for(var i=0,len=it.length;i<len;i++){r.add(k[i],it[i]);}
-r.getKey=this.getKey;return r;}});Ext.util.MixedCollection.prototype.get=Ext.util.MixedCollection.prototype.item;
-
-Ext.util.JSON=new(function(){var useHasOwn={}.hasOwnProperty?true:false;var pad=function(n){return n<10?"0"+n:n;};var m={"\b":'\\b',"\t":'\\t',"\n":'\\n',"\f":'\\f',"\r":'\\r','"':'\\"',"\\":'\\\\'};var encodeString=function(s){if(/["\\\x00-\x1f]/.test(s)){return'"'+s.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
-c=b.charCodeAt();return"\\u00"+
-Math.floor(c/16).toString(16)+
-(c%16).toString(16);})+'"';}
-return'"'+s+'"';};var encodeArray=function(o){var a=["["],b,i,l=o.length,v;for(i=0;i<l;i+=1){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(',');}
-a.push(v===null?"null":Ext.util.JSON.encode(v));b=true;}}
-a.push("]");return a.join("");};var encodeDate=function(o){return'"'+o.getFullYear()+"-"+
-pad(o.getMonth()+1)+"-"+
-pad(o.getDate())+"T"+
-pad(o.getHours())+":"+
-pad(o.getMinutes())+":"+
-pad(o.getSeconds())+'"';};this.encode=function(o){if(typeof o=="undefined"||o===null){return"null";}else if(o instanceof Array){return encodeArray(o);}else if(o instanceof Date){return encodeDate(o);}else if(typeof o=="string"){return encodeString(o);}else if(typeof o=="number"){return isFinite(o)?String(o):"null";}else if(typeof o=="boolean"){return String(o);}else{var a=["{"],b,i,v;for(i in o){if(!useHasOwn||o.hasOwnProperty(i)){v=o[i];switch(typeof v){case"undefined":case"function":case"unknown":break;default:if(b){a.push(',');}
-a.push(this.encode(i),":",v===null?"null":this.encode(v));b=true;}}}
-a.push("}");return a.join("");}};this.decode=function(json){return eval("("+json+')');};})();Ext.encode=Ext.util.JSON.encode;Ext.decode=Ext.util.JSON.decode;
-
-Ext.util.Format=function(){var trimRe=/^\s+|\s+$/g;return{ellipsis:function(value,len){if(value&&value.length>len){return value.substr(0,len-3)+"...";}
-return value;},undef:function(value){return typeof value!="undefined"?value:"";},htmlEncode:function(value){return!value?value:String(value).replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;");},trim:function(value){return String(value).replace(trimRe,"");},substr:function(value,start,length){return String(value).substr(start,length);},lowercase:function(value){return String(value).toLowerCase();},uppercase:function(value){return String(value).toUpperCase();},capitalize:function(value){return!value?value:value.charAt(0).toUpperCase()+value.substr(1).toLowerCase();},call:function(value,fn){if(arguments.length>2){var args=Array.prototype.slice.call(arguments,2);args.unshift(value);return eval(fn).apply(window,args);}else{return eval(fn).call(window,value);}},usMoney:function(v){v=(Math.round((v-0)*100))/100;v=(v==Math.floor(v))?v+".00":((v*10==Math.floor(v*10))?v+"0":v);return"$"+v;},date:function(v,format){if(!v){return"";}
-if(!(v instanceof Date)){v=new Date(Date.parse(v));}
-return v.dateFormat(format||"m/d/Y");},dateRenderer:function(format){return function(v){return Ext.util.Format.date(v,format);};},stripTagsRE:/<\/?[^>]+>/gi,stripTags:function(v){return!v?v:String(v).replace(this.stripTagsRE,"");}};}();
-
-Ext.util.CSS=function(){var rules=null;var doc=document;var camelRe=/(-[a-z])/gi;var camelFn=function(m,a){return a.charAt(1).toUpperCase();};return{createStyleSheet:function(cssText){var ss;if(Ext.isIE){ss=doc.createStyleSheet();ss.cssText=cssText;}else{var head=doc.getElementsByTagName("head")[0];var rules=doc.createElement("style");rules.setAttribute("type","text/css");try{rules.appendChild(doc.createTextNode(cssText));}catch(e){rules.cssText=cssText;}
-head.appendChild(rules);ss=rules.styleSheet?rules.styleSheet:(rules.sheet||doc.styleSheets[doc.styleSheets.length-1]);}
-this.cacheStyleSheet(ss);return ss;},removeStyleSheet:function(id){var existing=doc.getElementById(id);if(existing){existing.parentNode.removeChild(existing);}},swapStyleSheet:function(id,url){this.removeStyleSheet(id);var ss=doc.createElement("link");ss.setAttribute("rel","stylesheet");ss.setAttribute("type","text/css");ss.setAttribute("id",id);ss.setAttribute("href",url);doc.getElementsByTagName("head")[0].appendChild(ss);},refreshCache:function(){return this.getRules(true);},cacheStyleSheet:function(ss){if(!rules){rules={};}
-try{var ssRules=ss.cssRules||ss.rules;for(var j=ssRules.length-1;j>=0;--j){rules[ssRules[j].selectorText]=ssRules[j];}}catch(e){}},getRules:function(refreshCache){if(rules==null||refreshCache){rules={};var ds=doc.styleSheets;for(var i=0,len=ds.length;i<len;i++){try{this.cacheStyleSheet(ds[i]);}catch(e){}}}
-return rules;},getRule:function(selector,refreshCache){var rs=this.getRules(refreshCache);if(!(selector instanceof Array)){return rs[selector];}
-for(var i=0;i<selector.length;i++){if(rs[selector[i]]){return rs[selector[i]];}}
-return null;},updateRule:function(selector,property,value){if(!(selector instanceof Array)){var rule=this.getRule(selector);if(rule){rule.style[property.replace(camelRe,camelFn)]=value;return true;}}else{for(var i=0;i<selector.length;i++){if(this.updateRule(selector[i],property,value)){return true;}}}
-return false;}};}();
-
-Ext.util.ClickRepeater=function(el,config)
-{this.el=Ext.get(el);this.el.unselectable();Ext.apply(this,config);this.addEvents({"mousedown":true,"click":true,"mouseup":true});this.el.on("mousedown",this.handleMouseDown,this);if(this.preventDefault||this.stopDefault){this.el.on("click",function(e){if(this.preventDefault){e.preventDefault();}
-if(this.stopDefault){e.stopEvent();}},this);}
-if(this.handler){this.on("click",this.handler,this.scope||this);}
-Ext.util.ClickRepeater.superclass.constructor.call(this);};Ext.extend(Ext.util.ClickRepeater,Ext.util.Observable,{interval:20,delay:250,preventDefault:true,stopDefault:false,timer:0,docEl:Ext.get(document),handleMouseDown:function(){clearTimeout(this.timer);this.el.blur();if(this.pressClass){this.el.addClass(this.pressClass);}
-this.mousedownTime=new Date();this.docEl.on("mouseup",this.handleMouseUp,this);this.el.on("mouseout",this.handleMouseOut,this);this.fireEvent("mousedown",this);this.fireEvent("click",this);this.timer=this.click.defer(this.delay||this.interval,this);},click:function(){this.fireEvent("click",this);this.timer=this.click.defer(this.getInterval(),this);},getInterval:function(){if(!this.accelerate){return this.interval;}
-var pressTime=this.mousedownTime.getElapsed();if(pressTime<500){return 400;}else if(pressTime<1700){return 320;}else if(pressTime<2600){return 250;}else if(pressTime<3500){return 180;}else if(pressTime<4400){return 140;}else if(pressTime<5300){return 80;}else if(pressTime<6200){return 50;}else{return 10;}},handleMouseOut:function(){clearTimeout(this.timer);if(this.pressClass){this.el.removeClass(this.pressClass);}
-this.el.on("mouseover",this.handleMouseReturn,this);},handleMouseReturn:function(){this.el.un("mouseover",this.handleMouseReturn);if(this.pressClass){this.el.addClass(this.pressClass);}
-this.click();},handleMouseUp:function(){clearTimeout(this.timer);this.el.un("mouseover",this.handleMouseReturn);this.el.un("mouseout",this.handleMouseOut);this.docEl.un("mouseup",this.handleMouseUp);this.el.removeClass(this.pressClass);this.fireEvent("mouseup",this);}});
-
-Ext.KeyNav=function(el,config){this.el=Ext.get(el);Ext.apply(this,config);if(!this.disabled){this.disabled=true;this.enable();}};Ext.KeyNav.prototype={disabled:false,defaultEventAction:"stopEvent",prepareEvent:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(Ext.isSafari&&h&&k>=37&&k<=40){e.stopEvent();}},relay:function(e){var k=e.getKey();var h=this.keyToHandler[k];if(h&&this[h]){if(this.doRelay(e,this[h],h)!==true){e[this.defaultEventAction]();}}},doRelay:function(e,h,hname){return h.call(this.scope||this,e);},enter:false,left:false,right:false,up:false,down:false,tab:false,esc:false,pageUp:false,pageDown:false,del:false,home:false,end:false,keyToHandler:{37:"left",39:"right",38:"up",40:"down",33:"pageUp",34:"pageDown",46:"del",36:"home",35:"end",13:"enter",27:"esc",9:"tab"},enable:function(){if(this.disabled){if(Ext.isIE){this.el.on("keydown",this.relay,this);}else{this.el.on("keydown",this.prepareEvent,this);this.el.on("keypress",this.relay,this);}
-this.disabled=false;}},disable:function(){if(!this.disabled){if(Ext.isIE){this.el.un("keydown",this.relay);}else{this.el.un("keydown",this.prepareEvent);this.el.un("keypress",this.relay);}
-this.disabled=true;}}};
-
-Ext.KeyMap=function(el,config,eventName){this.el=Ext.get(el);this.eventName=eventName||"keydown";this.bindings=[];if(config instanceof Array){for(var i=0,len=config.length;i<len;i++){this.addBinding(config[i]);}}else{this.addBinding(config);}
-this.keyDownDelegate=Ext.EventManager.wrap(this.handleKeyDown,this,true);this.enable();};Ext.KeyMap.prototype={stopEvent:false,addBinding:function(config){var keyCode=config.key,shift=config.shift,ctrl=config.ctrl,alt=config.alt,fn=config.fn,scope=config.scope;if(typeof keyCode=="string"){var ks=[];var keyString=keyCode.toUpperCase();for(var j=0,len=keyString.length;j<len;j++){ks.push(keyString.charCodeAt(j));}
-keyCode=ks;}
-var keyArray=keyCode instanceof Array;var handler=function(e){if((!shift||e.shiftKey)&&(!ctrl||e.ctrlKey)&&(!alt||e.altKey)){var k=e.getKey();if(keyArray){for(var i=0,len=keyCode.length;i<len;i++){if(keyCode[i]==k){if(this.stopEvent){e.stopEvent();}
-fn.call(scope||window,k,e);return;}}}else{if(k==keyCode){if(this.stopEvent){e.stopEvent();}
-fn.call(scope||window,k,e);}}}};this.bindings.push(handler);},handleKeyDown:function(e){if(this.enabled){var b=this.bindings;for(var i=0,len=b.length;i<len;i++){b[i].call(this,e);}}},isEnabled:function(){return this.enabled;},enable:function(){if(!this.enabled){this.el.on(this.eventName,this.keyDownDelegate);this.enabled=true;}},disable:function(){if(this.enabled){this.el.removeListener(this.eventName,this.keyDownDelegate);this.enabled=false;}}};
-
-Ext.util.TextMetrics=function(){var shared;return{measure:function(el,text,fixedWidth){if(!shared){shared=Ext.util.TextMetrics.Instance(el,fixedWidth);}
-shared.bind(el);shared.setFixedWidth(fixedWidth||'auto');return shared.getSize(text);},createInstance:function(el,fixedWidth){return Ext.util.TextMetrics.Instance(el,fixedWidth);}};}();Ext.util.TextMetrics.Instance=function(bindTo,fixedWidth){var ml=new Ext.Element(document.createElement('div'));document.body.appendChild(ml.dom);ml.position('absolute');ml.setLeftTop(-1000,-1000);ml.hide();if(fixedWidth){ml.setWidth(fixedWidth);}
-var instance={getSize:function(text){ml.update(text);var s=ml.getSize();ml.update('');return s;},bind:function(el){ml.setStyle(Ext.fly(el).getStyles('font-size','font-style','font-weight','font-family','line-height'));},setFixedWidth:function(width){ml.setWidth(width);},getWidth:function(text){ml.dom.style.width='auto';return this.getSize(text).width;},getHeight:function(text){return this.getSize(text).height;}};instance.bind(bindTo);return instance;};Ext.Element.measureText=Ext.util.TextMetrics.measure;
diff --git a/lib/web/extjs/package/widget-core.js b/lib/web/extjs/package/widget-core.js
deleted file mode 100644
index dce45eee0d779680ff524aae0276445f99e59c96..0000000000000000000000000000000000000000
--- a/lib/web/extjs/package/widget-core.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-Ext.ComponentMgr=function(){var all=new Ext.util.MixedCollection();return{register:function(c){all.add(c);},unregister:function(c){all.remove(c);},get:function(id){return all.get(id);},onAvailable:function(id,fn,scope){all.on("add",function(index,o){if(o.id==id){fn.call(scope||o,o);all.un("add",fn,scope);}});}};}();Ext.Component=function(config){config=config||{};if(config.tagName||config.dom||typeof config=="string"){config={el:config,id:config.id||config};}
-this.initialConfig=config;Ext.apply(this,config);this.addEvents({disable:true,enable:true,beforeshow:true,show:true,beforehide:true,hide:true,beforerender:true,render:true,beforedestroy:true,destroy:true});if(!this.id){this.id="ext-comp-"+(++Ext.Component.AUTO_ID);}
-Ext.ComponentMgr.register(this);Ext.Component.superclass.constructor.call(this);this.initComponent();if(this.renderTo){this.render(this.renderTo);delete this.renderTo;}};Ext.Component.AUTO_ID=1000;Ext.extend(Ext.Component,Ext.util.Observable,{hidden:false,disabled:false,disabledClass:"x-item-disabled",rendered:false,allowDomMove:true,ctype:"Ext.Component",actionMode:"el",getActionEl:function(){return this[this.actionMode];},hideMode:'display',initComponent:Ext.emptyFn,render:function(container,position){if(!this.rendered&&this.fireEvent("beforerender",this)!==false){if(!container&&this.el){this.el=Ext.get(this.el);container=this.el.dom.parentNode;this.allowDomMove=false;}
-this.container=Ext.get(container);this.rendered=true;if(position!==undefined){if(typeof position=='number'){position=this.container.dom.childNodes[position];}else{position=Ext.getDom(position);}}
-this.onRender(this.container,position||null);if(this.cls){this.el.addClass(this.cls);delete this.cls;}
-if(this.style){this.el.applyStyles(this.style);delete this.style;}
-this.fireEvent("render",this);this.afterRender(this.container);if(this.hidden){this.hide();}
-if(this.disabled){this.disable();}}
-return this;},onRender:function(ct,position){if(this.el){this.el=Ext.get(this.el);if(this.allowDomMove!==false){ct.dom.insertBefore(this.el.dom,position);}}},getAutoCreate:function(){var cfg=typeof this.autoCreate=="object"?this.autoCreate:Ext.apply({},this.defaultAutoCreate);if(this.id&&!cfg.id){cfg.id=this.id;}
-return cfg;},afterRender:Ext.emptyFn,destroy:function(){if(this.fireEvent("beforedestroy",this)!==false){this.purgeListeners();this.beforeDestroy();if(this.rendered){this.el.removeAllListeners();this.el.remove();if(this.actionMode=="container"){this.container.remove();}}
-this.onDestroy();Ext.ComponentMgr.unregister(this);this.fireEvent("destroy",this);}},beforeDestroy:function(){},onDestroy:function(){},getEl:function(){return this.el;},getId:function(){return this.id;},focus:function(selectText){if(this.rendered){this.el.focus();if(selectText===true){this.el.dom.select();}}
-return this;},blur:function(){if(this.rendered){this.el.blur();}
-return this;},disable:function(){if(this.rendered){this.onDisable();}
-this.disabled=true;this.fireEvent("disable",this);return this;},onDisable:function(){this.getActionEl().addClass(this.disabledClass);this.el.dom.disabled=true;},enable:function(){if(this.rendered){this.onEnable();}
-this.disabled=false;this.fireEvent("enable",this);return this;},onEnable:function(){this.getActionEl().removeClass(this.disabledClass);this.el.dom.disabled=false;},setDisabled:function(disabled){this[disabled?"disable":"enable"]();},show:function(){if(this.fireEvent("beforeshow",this)!==false){this.hidden=false;if(this.rendered){this.onShow();}
-this.fireEvent("show",this);}
-return this;},onShow:function(){var ae=this.getActionEl();if(this.hideMode=='visibility'){ae.dom.style.visibility="visible";}else if(this.hideMode=='offsets'){ae.removeClass('x-hidden');}else{ae.dom.style.display="";}},hide:function(){if(this.fireEvent("beforehide",this)!==false){this.hidden=true;if(this.rendered){this.onHide();}
-this.fireEvent("hide",this);}
-return this;},onHide:function(){var ae=this.getActionEl();if(this.hideMode=='visibility'){ae.dom.style.visibility="hidden";}else if(this.hideMode=='offsets'){ae.addClass('x-hidden');}else{ae.dom.style.display="none";}},setVisible:function(visible){if(visible){this.show();}else{this.hide();}
-return this;},isVisible:function(){return this.getActionEl().isVisible();},cloneConfig:function(overrides){overrides=overrides||{};var id=overrides.id||Ext.id();var cfg=Ext.applyIf(overrides,this.initialConfig);cfg.id=id;return new this.__extcls(cfg);}});
-
-(function(){Ext.Layer=function(config,existingEl){config=config||{};var dh=Ext.DomHelper;var cp=config.parentEl,pel=cp?Ext.getDom(cp):document.body;if(existingEl){this.dom=Ext.getDom(existingEl);}
-if(!this.dom){var o=config.dh||{tag:"div",cls:"x-layer"};this.dom=dh.append(pel,o);}
-if(config.cls){this.addClass(config.cls);}
-this.constrain=config.constrain!==false;this.visibilityMode=Ext.Element.VISIBILITY;if(config.id){this.id=this.dom.id=config.id;}else{this.id=Ext.id(this.dom);}
-this.zindex=config.zindex||this.getZIndex();this.position("absolute",this.zindex);if(config.shadow){this.shadowOffset=config.shadowOffset||4;this.shadow=new Ext.Shadow({offset:this.shadowOffset,mode:config.shadow});}else{this.shadowOffset=0;}
-this.useShim=config.shim!==false&&Ext.useShims;this.useDisplay=config.useDisplay;this.hide();};var supr=Ext.Element.prototype;var shims=[];Ext.extend(Ext.Layer,Ext.Element,{getZIndex:function(){return this.zindex||parseInt(this.getStyle("z-index"),10)||11000;},getShim:function(){if(!this.useShim){return null;}
-if(this.shim){return this.shim;}
-var shim=shims.shift();if(!shim){shim=this.createShim();shim.enableDisplayMode('block');shim.dom.style.display='none';shim.dom.style.visibility='visible';}
-var pn=this.dom.parentNode;if(shim.dom.parentNode!=pn){pn.insertBefore(shim.dom,this.dom);}
-shim.setStyle('z-index',this.getZIndex()-2);this.shim=shim;return shim;},hideShim:function(){if(this.shim){this.shim.setDisplayed(false);shims.push(this.shim);delete this.shim;}},disableShadow:function(){if(this.shadow){this.shadowDisabled=true;this.shadow.hide();this.lastShadowOffset=this.shadowOffset;this.shadowOffset=0;}},enableShadow:function(show){if(this.shadow){this.shadowDisabled=false;this.shadowOffset=this.lastShadowOffset;delete this.lastShadowOffset;if(show){this.sync(true);}}},sync:function(doShow){var sw=this.shadow;if(!this.updating&&this.isVisible()&&(sw||this.useShim)){var sh=this.getShim();var w=this.getWidth(),h=this.getHeight();var l=this.getLeft(true),t=this.getTop(true);if(sw&&!this.shadowDisabled){if(doShow&&!sw.isVisible()){sw.show(this);}else{sw.realign(l,t,w,h);}
-if(sh){if(doShow){sh.show();}
-var a=sw.adjusts,s=sh.dom.style;s.left=(Math.min(l,l+a.l))+"px";s.top=(Math.min(t,t+a.t))+"px";s.width=(w+a.w)+"px";s.height=(h+a.h)+"px";}}else if(sh){if(doShow){sh.show();}
-sh.setSize(w,h);sh.setLeftTop(l,t);}}},destroy:function(){this.hideShim();if(this.shadow){this.shadow.hide();}
-this.removeAllListeners();var pn=this.dom.parentNode;if(pn){pn.removeChild(this.dom);}
-Ext.Element.uncache(this.id);},remove:function(){this.destroy();},beginUpdate:function(){this.updating=true;},endUpdate:function(){this.updating=false;this.sync(true);},hideUnders:function(negOffset){if(this.shadow){this.shadow.hide();}
-this.hideShim();},constrainXY:function(){if(this.constrain){var vw=Ext.lib.Dom.getViewWidth(),vh=Ext.lib.Dom.getViewHeight();var s=Ext.get(document).getScroll();var xy=this.getXY();var x=xy[0],y=xy[1];var w=this.dom.offsetWidth+this.shadowOffset,h=this.dom.offsetHeight+this.shadowOffset;var moved=false;if((x+w)>vw+s.left){x=vw-w-this.shadowOffset;moved=true;}
-if((y+h)>vh+s.top){y=vh-h-this.shadowOffset;moved=true;}
-if(x<s.left){x=s.left;moved=true;}
-if(y<s.top){y=s.top;moved=true;}
-if(moved){if(this.avoidY){var ay=this.avoidY;if(y<=ay&&(y+h)>=ay){y=ay-h-5;}}
-xy=[x,y];this.storeXY(xy);supr.setXY.call(this,xy);this.sync();}}},isVisible:function(){return this.visible;},showAction:function(){this.visible=true;if(this.useDisplay===true){this.setDisplayed("");}else if(this.lastXY){supr.setXY.call(this,this.lastXY);}else if(this.lastLT){supr.setLeftTop.call(this,this.lastLT[0],this.lastLT[1]);}},hideAction:function(){this.visible=false;if(this.useDisplay===true){this.setDisplayed(false);}else{this.setLeftTop(-10000,-10000);}},setVisible:function(v,a,d,c,e){if(v){this.showAction();}
-if(a&&v){var cb=function(){this.sync(true);if(c){c();}}.createDelegate(this);supr.setVisible.call(this,true,true,d,cb,e);}else{if(!v){this.hideUnders(true);}
-var cb=c;if(a){cb=function(){this.hideAction();if(c){c();}}.createDelegate(this);}
-supr.setVisible.call(this,v,a,d,cb,e);if(v){this.sync(true);}else if(!a){this.hideAction();}}},storeXY:function(xy){delete this.lastLT;this.lastXY=xy;},storeLeftTop:function(left,top){delete this.lastXY;this.lastLT=[left,top];},beforeFx:function(){this.beforeAction();return Ext.Layer.superclass.beforeFx.apply(this,arguments);},afterFx:function(){Ext.Layer.superclass.afterFx.apply(this,arguments);this.sync(this.isVisible());},beforeAction:function(){if(!this.updating&&this.shadow){this.shadow.hide();}},setLeft:function(left){this.storeLeftTop(left,this.getTop(true));supr.setLeft.apply(this,arguments);this.sync();},setTop:function(top){this.storeLeftTop(this.getLeft(true),top);supr.setTop.apply(this,arguments);this.sync();},setLeftTop:function(left,top){this.storeLeftTop(left,top);supr.setLeftTop.apply(this,arguments);this.sync();},setXY:function(xy,a,d,c,e){this.fixDisplay();this.beforeAction();this.storeXY(xy);var cb=this.createCB(c);supr.setXY.call(this,xy,a,d,cb,e);if(!a){cb();}},createCB:function(c){var el=this;return function(){el.constrainXY();el.sync(true);if(c){c();}};},setX:function(x,a,d,c,e){this.setXY([x,this.getY()],a,d,c,e);},setY:function(y,a,d,c,e){this.setXY([this.getX(),y],a,d,c,e);},setSize:function(w,h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setSize.call(this,w,h,a,d,cb,e);if(!a){cb();}},setWidth:function(w,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setWidth.call(this,w,a,d,cb,e);if(!a){cb();}},setHeight:function(h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);supr.setHeight.call(this,h,a,d,cb,e);if(!a){cb();}},setBounds:function(x,y,w,h,a,d,c,e){this.beforeAction();var cb=this.createCB(c);if(!a){this.storeXY([x,y]);supr.setXY.call(this,[x,y]);supr.setSize.call(this,w,h,a,d,cb,e);cb();}else{supr.setBounds.call(this,x,y,w,h,a,d,cb,e);}
-return this;},setZIndex:function(zindex){this.zindex=zindex;this.setStyle("z-index",zindex+2);if(this.shadow){this.shadow.setZIndex(zindex+1);}
-if(this.shim){this.shim.setStyle("z-index",zindex);}}});})();
-
-Ext.Shadow=function(config){Ext.apply(this,config);if(typeof this.mode!="string"){this.mode=this.defaultMode;}
-var o=this.offset,a={h:0};var rad=Math.floor(this.offset/2);switch(this.mode.toLowerCase()){case"drop":a.w=0;a.l=a.t=o;a.t-=1;if(Ext.isIE){a.l-=this.offset+rad;a.t-=this.offset+rad;a.w-=rad;a.h-=rad;a.t+=1;}
-break;case"sides":a.w=(o*2);a.l=-o;a.t=o-1;if(Ext.isIE){a.l-=(this.offset-rad);a.t-=this.offset+rad;a.l+=1;a.w-=(this.offset-rad)*2;a.w-=rad+1;a.h-=1;}
-break;case"frame":a.w=a.h=(o*2);a.l=a.t=-o;a.t+=1;a.h-=2;if(Ext.isIE){a.l-=(this.offset-rad);a.t-=(this.offset-rad);a.l+=1;a.w-=(this.offset+rad+1);a.h-=(this.offset+rad);a.h+=1;}
-break;};this.adjusts=a;};Ext.Shadow.prototype={offset:4,defaultMode:"drop",show:function(target){target=Ext.get(target);if(!this.el){this.el=Ext.Shadow.Pool.pull();if(this.el.dom.nextSibling!=target.dom){this.el.insertBefore(target);}}
-this.el.setStyle("z-index",this.zIndex||parseInt(target.getStyle("z-index"),10)-1);if(Ext.isIE){this.el.dom.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity=50) progid:DXImageTransform.Microsoft.Blur(pixelradius="+(this.offset)+")";}
-this.realign(target.getLeft(true),target.getTop(true),target.getWidth(),target.getHeight());this.el.dom.style.display="block";},isVisible:function(){return this.el?true:false;},realign:function(l,t,w,h){if(!this.el){return;}
-var a=this.adjusts,d=this.el.dom,s=d.style;var iea=0;s.left=(l+a.l)+"px";s.top=(t+a.t)+"px";var sw=(w+a.w),sh=(h+a.h),sws=sw+"px",shs=sh+"px";if(s.width!=sws||s.height!=shs){s.width=sws;s.height=shs;if(!Ext.isIE){var cn=d.childNodes;var sww=Math.max(0,(sw-12))+"px";cn[0].childNodes[1].style.width=sww;cn[1].childNodes[1].style.width=sww;cn[2].childNodes[1].style.width=sww;cn[1].style.height=Math.max(0,(sh-12))+"px";}}},hide:function(){if(this.el){this.el.dom.style.display="none";Ext.Shadow.Pool.push(this.el);delete this.el;}},setZIndex:function(z){this.zIndex=z;if(this.el){this.el.setStyle("z-index",z);}}};Ext.Shadow.Pool=function(){var p=[];var markup=Ext.isIE?'<div class="x-ie-shadow"></div>':'<div class="x-shadow"><div class="xst"><div class="xstl"></div><div class="xstc"></div><div class="xstr"></div></div><div class="xsc"><div class="xsml"></div><div class="xsmc"></div><div class="xsmr"></div></div><div class="xsb"><div class="xsbl"></div><div class="xsbc"></div><div class="xsbr"></div></div></div>';return{pull:function(){var sh=p.shift();if(!sh){sh=Ext.get(Ext.DomHelper.insertHtml("beforeBegin",document.body.firstChild,markup));sh.autoBoxAdjust=false;}
-return sh;},push:function(sh){p.push(sh);}};}();
diff --git a/lib/web/extjs/resources/css/basic-dialog.css b/lib/web/extjs/resources/css/basic-dialog.css
deleted file mode 100644
index 8a7e793e3d8246c9b50804e6b503d8b7a51df9d0..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/basic-dialog.css
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-dlg-proxy {
-	background-image: url(../images/default/gradient-bg.gif);
-	background-color:#c3daf9;
-	border:1px solid #6593cf;
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:0;top:0;
-}
-.x-dlg-shadow{
-	background:#aaaaaa;
-	position:absolute;
-	left:0;top:0;
-}
-.x-dlg-focus{
-	-moz-outline:0 none;
-	outline:0 none;
-	width:0;
-	height:0;
-	overflow:hidden;
-	position:absolute;
-	top:0;
-	left:0;
-}
-.x-dlg-mask{
-	z-index:10000;   
-   display:none;
-   position:absolute;
-   top:0;
-   left:0;
-   -moz-opacity: 0.5;
-   opacity:.50;
-   filter: alpha(opacity=50);
-   background-color:#CCC;
-}
-body.x-body-masked select {
-	visibility:hidden;
-}
-body.x-body-masked .x-dlg select {
-	visibility:visible;
-}
-.x-dlg{
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:300;top:0;
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:navy;
-	color:#FFF;
-	font:bold 12px "sans serif", tahoma, verdana, helvetica;
-	overflow:hidden;
-	padding:5px;
-    white-space: nowrap;
-}
-.x-dlg .x-dlg-hd-left {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	padding-left:3px;
-	margin:0;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	padding-right:3px;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:url(../images/default/layout/gradient-bg.gif);
-	border:1px solid #6593cf;
-	border-top:0 none;
-	padding:10px;
-	position:absolute;
-	top:24px;left:0;
-	z-index:1;
-	overflow:hidden;
-}
-.x-dlg-collapsed .x-resizable-handle{
-    display:none;
-}
-.x-dlg .x-dlg-bd{
-	overflow:hidden;
-}
-.x-dlg .x-dlg-ft{
-	overflow:hidden;
-	padding:5px;
-	padding-bottom:0;
-}
-
-.x-dlg .x-tabs-body{
-	background:white;
-	overflow:auto;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:1px solid #6593cf;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #6593cf;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .inner-tab{
-	margin:5px;
-}
-.x-dlg .x-dlg-ft .x-btn{
-	margin-right:5px;
-	float:right;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns td {
-	border:0;
-	padding:0;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-center{
-	text-align:center; /*ie*/
-}
-.x-dlg .x-dlg-ft .x-dlg-btns-center table{
-	margin:0 auto; /*everyone else*/
-}
-
-
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-right{
-	background-position:0 -84px;
-}
-.x-dlg .x-dlg-ft .x-dlg-btns .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-
-.x-dlg-draggable .x-dlg-hd{
-	cursor:move;
-}
-.x-dlg-closable .x-dlg-hd{
-	padding-right:22px;
-}
-.x-dlg-toolbox {
-    position:absolute;
-	top:4px;
-	right:4px;
-	z-index:6;
-    width:40px;
-    cursor:default;
-    height:15px;
-    background:transparent;
-}
-.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
-    float:right;
-    height:15px;
-	width:15px;
-	margin:0;
-    margin-left:2px;
-    padding:0;
-	line-height:1px;
-	font-size:1px;
-	background-repeat:no-repeat;
-	cursor:pointer;
-	visibility:inherit;
-}
-.x-dlg .x-dlg-close {
-    background-image:url(../images/default/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/default/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/default/basic-dialog/expand.gif);
-}
-.x-dlg .x-dlg-close-over, .x-dlg .x-dlg-collapse-over {
-    
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/default/basic-dialog/e-handle.gif);
-	border:0;
-	background-position:right;
-	margin-right:0;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/default/sizer/s-handle-dark.gif);
-	border:0;
-	height:6px;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/default/basic-dialog/e-handle.gif);
-	border:0;
-	background-position:1px;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-northeast, .xtheme-gray .x-dlg div.x-resizable-handle-northeast{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-northwest, .xtheme-gray .x-dlg div.x-resizable-handle-northwest{
-	background-image:url(../images/default/s.gif);
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/default/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/default/sizer/sw-handle-dark.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-
-#x-msg-box .x-dlg-ft .x-btn{
-	float:none;
-	clear:none;
-	margin:0 3px;
-}
-
-#x-msg-box .x-dlg-bd {
-	padding:5px;
-	overflow:hidden !important;
-	font:normal 13px verdana,tahoma,sans-serif;
-}
-#x-msg-box .ext-mb-input {
-	margin-top:4px;
-	width:95%;
-}
-#x-msg-box .ext-mb-textarea {
-	margin-top:4px;
-	font:normal 13px verdana,tahoma,sans-serif;
-}
-#x-msg-box .ext-mb-progress-wrap {
-	margin-top:4px;
-	border:1px solid #6593cf;
-}
-#x-msg-box .ext-mb-progress {
-	height:18px;
-	background: #e0e8f3 url(../images/default/qtip/bg.gif) repeat-x;
-}
-#x-msg-box .ext-mb-progress-bar {
-	height:18px;
-	overflow:hidden;
-	width:0;
-	background:#8BB8F3;
-	border-top:1px solid #B2D0F7;
-	border-bottom:1px solid #65A1EF;
-	border-right:1px solid #65A1EF;
-}
-
-#x-msg-box .x-msg-box-wait {
-	background: transparent url(../images/default/grid/loading.gif) no-repeat left;
-    display:block;
-    width:300px;
-    padding-left:18px;
-    line-height:18px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/box.css b/lib/web/extjs/resources/css/box.css
deleted file mode 100644
index 08cc343075e88ad3f119a9a2a5933f922423d856..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/box.css
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/*
- Creates rounded, raised boxes like on the Ext website - the markup isn't pretty:
-  <div class="x-box-blue">
-        <div class="x-box-tl"><div class="x-box-tr"><div class="x-box-tc"></div></div></div>
-        <div class="x-box-ml"><div class="x-box-mr"><div class="x-box-mc">
-            <h3>YOUR TITLE HERE (optional)</h3>
-            <div>YOUR CONTENT HERE</div>
-        </div></div></div>
-        <div class="x-box-bl"><div class="x-box-br"><div class="x-box-bc"></div></div></div>
-    </div>
- */
-
-.x-box-tl {
-	background: transparent url(../images/default/box/corners.gif) no-repeat 0 0;
-    zoom:1;
-}
-
-.x-box-tc {
-	height: 8px;
-	background: transparent url(../images/default/box/tb.gif) repeat-x 0 0;
-	overflow: hidden;
-}
-
-.x-box-tr {
-	background: transparent url(../images/default/box/corners.gif) no-repeat right -8px;
-}
-
-.x-box-ml {
-	background: transparent url(../images/default/box/l.gif) repeat-y 0;
-	padding-left: 4px;
-	overflow: hidden;
-    zoom:1;
-}
-
-.x-box-mc {
-	background: #eee url(../images/default/box/tb.gif) repeat-x 0 -16px;
-	padding: 4px 10px;
-	font-family: "Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;
-	color: #393939;
-	font-size: 12px;
-}
-
-.x-box-mc h3 {
-	font-size: 14px;
-	font-weight: bold;
-	margin: 0 0 4 0;
-    zoom:1;
-}
-
-.x-box-mr {
-	background: transparent url(../images/default/box/r.gif) repeat-y right;
-	padding-right: 4px;
-	overflow: hidden;
-}
-
-.x-box-bl {
-	background: transparent url(../images/default/box/corners.gif) no-repeat 0 -16px;
-    zoom:1;
-}
-
-.x-box-bc {
-	background: transparent url(../images/default/box/tb.gif) repeat-x 0 -8px;
-	height: 8px;
-	overflow: hidden;
-}
-
-.x-box-br {
-	background: transparent url(../images/default/box/corners.gif) no-repeat right -24px;
-}
-
-.x-box-tl, .x-box-bl {
-	padding-left: 8px;
-	overflow: hidden;
-}
-
-.x-box-tr, .x-box-br {
-	padding-right: 8px;
-	overflow: hidden;
-}
-
-.x-box-blue .x-box-bl, .x-box-blue .x-box-br, .x-box-blue .x-box-tl, .x-box-blue .x-box-tr {
-	background-image: url(../images/default/box/corners-blue.gif);
-}
-
-.x-box-blue .x-box-bc, .x-box-blue .x-box-mc, .x-box-blue .x-box-tc {
-	background-image: url(../images/default/box/tb-blue.gif);
-}
-
-.x-box-blue .x-box-mc {
-	background-color: #c3daf9;
-}
-
-.x-box-blue .x-box-mc h3 {
-	color: #17385b;
-}
-
-.x-box-blue .x-box-ml {
-	background-image: url(../images/default/box/l-blue.gif);
-}
-
-.x-box-blue .x-box-mr {
-	background-image: url(../images/default/box/r-blue.gif);
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/button.css b/lib/web/extjs/resources/css/button.css
deleted file mode 100644
index 8a0485215e92c28185bbccbd3ed69973e4011a5c..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/button.css
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-btn{
-	font:normal 11px tahoma, verdana, helvetica;
-	cursor:pointer;
-	white-space: nowrap;
-}
-.x-btn button{
-    border:0 none;
-    background:transparent;
-    font:normal 11px tahoma,verdana,helvetica;
-    padding-left:3px;
-    padding-right:3px;
-    cursor:pointer;
-    margin:0;
-    overflow:visible;
-    width:auto;
-    -moz-outline:0 none;
-    outline:0 none;
-}
-* html .ext-ie .x-btn button {
-    width:1px;
-}
-.ext-gecko .x-btn button {
-    padding-left:0;
-    padding-right:0;
-}
-.ext-ie .x-btn button {
-    padding-top:2px;
-}
-/*
- Predefined css class for buttons with only icon. Add this class (x-btn-icon) and a class with a background-image
- to your button for a button with just an icon.
- e.g.
- .my-class .x-btn-text { background-image: url(foo.gif); }
- */
- 
-.x-btn-icon .x-btn-center .x-btn-text{
-	background-position: center;
-	background-repeat: no-repeat;
-	height: 16px;
-	width: 16px;
-	cursor:pointer;
-	white-space: nowrap;
-    padding:0;
-}
-.x-btn-icon .x-btn-center{
-	padding:1px;
-}
-.x-btn em {
-    font-style:normal;
-    font-weight:normal;
-}
-/*
- Button class for icon and text. Add this class (x-btn-text-icon) and a class with a background-image
- to your button for both text and icon. 
-*/
-
-.x-btn-text-icon .x-btn-center .x-btn-text{
-	background-position: 0 2px;
-	background-repeat: no-repeat;
-	padding-left:18px;
-	padding-top:3px;
-	padding-bottom:3px;
-    padding-right:0;
-}
-
-.x-btn-left, .x-btn-right{
-	font-size:1px;
-    line-height:1px;
-}
-.x-btn-left{
-	width:3px;
-	height:21px;
-	background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 0;
-}
-.x-btn-right{
-	width:3px;
-	height:21px;
-	background:url(../images/default/basic-dialog/btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-btn-left i, .x-btn-right i{
-	display:block;
-    width:3px;
-    overflow:hidden;
-    font-size:1px;
-    line-height:1px;
-}
-.x-btn-center{
-	background:url(../images/default/basic-dialog/btn-sprite.gif) repeat-x 0 -42px;
-	vertical-align: middle;
-	text-align:center;
-	padding:0 5px;
-	cursor:pointer;
-	white-space:nowrap;
-}
-.x-btn-over .x-btn-left{
-	background-position:0 -63px;
-}
-.x-btn-over .x-btn-right{
-	background-position:0 -84px;
-}
-.x-btn-over .x-btn-center{
-	background-position:0 -105px;
-}
-.x-btn-click .x-btn-center, .x-btn-menu-active .x-btn-center{
-	background-position:0 -126px;
-}
-.x-btn-disabled *{
-	color:gray !important;
-	cursor:default !important;
-}
-.x-btn-menu-text-wrap .x-btn-center {
-	padding:0 3px;
-}
-.ext-gecko .x-btn-menu-text-wrap .x-btn-center {
-	padding:0 1px;
-}
-.x-btn-menu-arrow-wrap .x-btn-center {
-    padding:0;
-}
-.x-btn-menu-arrow-wrap .x-btn-center button {
-	width:12px !important;
-    height:21px;
-    padding:0 !important;
-    display:block;
-    background:transparent url(../images/default/basic-dialog/btn-arrow.gif) no-repeat left 3px;
-}
-.x-btn-with-menu  .x-btn-center {
-    padding-right:2px !important;
-}
-.x-btn-with-menu  .x-btn-center em {
-    display:block;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat right 0;
-	padding-right:10px;
-}
-
-.x-btn-text-icon .x-btn-with-menu .x-btn-center em {
-    display:block;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat right 3px;
-	padding-right:10px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/combo.css b/lib/web/extjs/resources/css/combo.css
deleted file mode 100644
index c4ba95e42a6f91009c01cdfe9076f921aab60f81..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/combo.css
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-combo-list {
-    border:1px solid #98c0f4;
-    background:#ddecfe;
-    zoom:1;
-    overflow:hidden;
-}
-.x-combo-list-inner {
-    overflow:auto;
-    background:white;
-    position:relative; /* for calculating scroll offsets */
-    zoom:1;
-    overflow-x:hidden;
-}
-.x-combo-list-hd {
-    font:bold 11px tahoma, arial, helvetica, sans-serif;
-    color:#15428b;
-    background-image: url(../images/default/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #98c0f4;
-    padding:3px;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #98c0f4;
-}
-.x-combo-list-item {
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    padding:2px;
-    border:1px solid #fff;
-    white-space: nowrap;
-    overflow:hidden;
-    text-overflow: ellipsis;
-}
-.x-combo-list .x-combo-selected{
-	background-color: #c3daf9 !important;
-    cursor:pointer;
-    border:1px solid #336699;
-}
-.x-combo-noedit{
-    cursor:pointer;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/core.css b/lib/web/extjs/resources/css/core.css
deleted file mode 100644
index d15fa051476efd1bba0c8d0b5c0a541959828ad6..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/core.css
+++ /dev/null
@@ -1,292 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- *
- * http://www.extjs.com/license
- */
-
-.ext-el-mask {
-    z-index: 20000;
-    position: absolute;
-    top: 0;
-    left: 0;
-    -moz-opacity: 0.5;
-    opacity: .50;
-    filter: alpha(opacity=50);
-    background-color: #CCC;
-    width: 100%;
-    height: 100%;
-    zoom: 1;
-}
-.ext-el-mask-msg {
-    z-index: 20001;
-    position: absolute;
-    top: 0;
-    left: 0;
-    border:1px solid #6593cf;
-    background: #c3daf9 url(../images/default/box/tb-blue.gif) repeat-x 0 -16px;
-    padding:2px;
-}
-.ext-el-mask-msg div {
-    padding:5px 10px 5px 10px;
-    background: #eee;
-    border:1px solid #a3bad9;
-    color:#333;
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    cursor:wait;
-}
-
-.ext-shim {
-    position:absolute;
-    visibility:hidden;
-    left:0;
-    top:0;
-    overflow:hidden;
-}
-.ext-ie .ext-shim {
-    filter: alpha(opacity=0);
-}
-
-.x-mask-loading div {
-    padding:5px 10px 5px 25px;
-    background: #eee url('../images/default/grid/loading.gif') no-repeat 5px 5px;
-    line-height: 16px;
-}
-
-/* class for hiding elements without using display:none */
-.x-hidden {
-    position:absolute;
-    left:-2000px;
-    top:-2000px;
-    visibility:hidden;
-}
-
-.x-masked {
-    overflow: hidden !important;
-}
-
-.x-masked select, .x-masked object, .x-masked embed {
-    visibility: hidden;
-}
-
-.x-layer {
-    visibility: hidden;
-}
-
-.x-unselectable, .x-unselectable * {
-    -moz-user-select: none;
-    -khtml-user-select: none;
-}
-
-.x-repaint {
-    zoom: 1;
-    background-color: transparent;
-    -moz-outline: none;
-}
-
-.x-item-disabled {
-    color: gray;
-    cursor: default;
-    opacity: .6;
-    -moz-opacity: .6;
-    filter: alpha(opacity=60);
-}
-
-.x-item-disabled * {
-    color: gray;
-    cursor: default !important;
-}
-
-.x-splitbar-proxy {
-    position: absolute;
-    visibility: hidden;
-    z-index: 20001;
-    background: #aaa;
-    zoom: 1;
-    line-height: 1px;
-    font-size: 1px;
-    overflow: hidden;
-}
-
-.x-splitbar-h, .x-splitbar-proxy-h {
-    cursor: e-resize;
-    cursor: col-resize;
-}
-
-.x-splitbar-v, .x-splitbar-proxy-v {
-    cursor: s-resize;
-    cursor: row-resize;
-}
-
-.x-color-palette {
-    width: 150px;
-    height: 92px;
-    cursor: pointer;
-}
-
-.x-color-palette a {
-    border: 1px solid #fff;
-    float: left;
-    padding: 2px;
-    text-decoration: none;
-    -moz-outline: 0 none;
-    outline: 0 none;
-    cursor: pointer;
-}
-
-.x-color-palette a:hover, .x-color-palette a.x-color-palette-sel {
-    border: 1px solid #8BB8F3;
-    background: #deecfd;
-}
-
-.x-color-palette em {
-    display: block;
-    border: 1px solid #ACA899;
-}
-
-.x-color-palette em span {
-    cursor: pointer;
-    display: block;
-    height: 10px;
-    line-height: 10px;
-    width: 10px;
-}
-
-.x-ie-shadow {
-    display: none;
-    position: absolute;
-    overflow: hidden;
-    left:0;
-    top:0;
-    background:#777;
-    zoom:1;
-}
-
-.x-shadow {
-    display: none;
-    position: absolute;
-    overflow: hidden;
-    left:0;
-    top:0;
-}
-
-.x-shadow * {
-    overflow: hidden;
-}
-
-.x-shadow * {
-    padding: 0;
-    border: 0;
-    margin: 0;
-    clear: none;
-    zoom: 1;
-}
-
-/* top  bottom */
-.x-shadow .xstc, .x-shadow .xsbc {
-    height: 6px;
-    float: left;
-}
-
-/* corners */
-.x-shadow .xstl, .x-shadow .xstr, .x-shadow .xsbl, .x-shadow .xsbr {
-    width: 6px;
-    height: 6px;
-    float: left;
-}
-
-/* sides */
-.x-shadow .xsc {
-    width: 100%;
-}
-
-.x-shadow .xsml, .x-shadow .xsmr {
-    width: 6px;
-    float: left;
-    height: 100%;
-}
-
-.x-shadow .xsmc {
-    float: left;
-    height: 100%;
-    background: transparent url(../images/default/shadow-c.png);
-}
-
-.x-shadow .xst, .x-shadow .xsb {
-    height: 6px;
-    overflow: hidden;
-    width: 100%;
-}
-
-.x-shadow .xsml {
-    background: transparent url(../images/default/shadow-lr.png) repeat-y 0 0;
-}
-
-.x-shadow .xsmr {
-    background: transparent url(../images/default/shadow-lr.png) repeat-y -6px 0;
-}
-
-.x-shadow .xstl {
-    background: transparent url(../images/default/shadow.png) no-repeat 0 0;
-}
-
-.x-shadow .xstc {
-    background: transparent url(../images/default/shadow.png) repeat-x 0 -30px;
-}
-
-.x-shadow .xstr {
-    background: transparent url(../images/default/shadow.png) repeat-x 0 -18px;
-}
-
-.x-shadow .xsbl {
-    background: transparent url(../images/default/shadow.png) no-repeat 0 -12px;
-}
-
-.x-shadow .xsbc {
-    background: transparent url(../images/default/shadow.png) repeat-x 0 -36px;
-}
-
-.x-shadow .xsbr {
-    background: transparent url(../images/default/shadow.png) repeat-x 0 -6px;
-}
-
-.loading-indicator {
-    font-size: 11px;
-    background-image: url('../images/default/grid/loading.gif');
-    background-repeat: no-repeat;
-    background-position: left;
-    padding-left: 20px;
-    line-height: 16px;
-    margin: 3px;
-}
-
-.x-text-resize {
-    position: absolute;
-    left: -1000px;
-    top: -1000px;
-    visibility: hidden;
-    zoom: 1;
-}
-
-.x-drag-overlay {
-    width: 100%;
-    height: 100%;
-    display: none;
-    position: absolute;
-    left: 0;
-    top: 0;
-    background: white;
-    z-index: 20000;
-    -moz-opacity: 0;
-    opacity: 0;
-    filter: alpha(opacity=0);
-}
-
-.x-clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
diff --git a/lib/web/extjs/resources/css/date-picker.css b/lib/web/extjs/resources/css/date-picker.css
deleted file mode 100644
index 3dddabb8ba530881af271542b1659bc1b3f8c713..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/date-picker.css
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-date-picker {
-    border: 1px solid #1b376c;
-    border-top:0 none;
-    background:#fff;
-	 position:relative;
-}
-.x-date-picker a {
-    -moz-outline:0 none;
-    outline:0 none;
-}
-.x-date-inner, .x-date-inner td, .x-date-inner th{
-    border-collapse:separate;
-}
-.x-date-middle,.x-date-left,.x-date-right {
-	background: url(../images/default/basic-dialog/hd-sprite.gif) repeat-x 0 -83px;
-	color:#FFF;
-	font:bold 11px "sans serif", tahoma, verdana, helvetica;
-	overflow:hidden;
-}
-
-.x-date-middle .x-btn-left,.x-date-middle .x-btn-center,.x-date-middle .x-btn-right{
-	background:transparent !important;
-    vertical-align:middle;
-}
-.x-date-middle .x-btn .x-btn-text {
-    color:#fff;
-}
-.x-date-middle .x-btn-with-menu  .x-btn-center em {
-    background:transparent url(../images/default/toolbar/btn-arrow-light.gif) no-repeat right 0;
-}
-.x-date-right, .x-date-left {
-    width:18px;
-}
-.x-date-right{
-    text-align:right;
-}
-.x-date-middle {
-    padding-top:2px;padding-bottom:2px;
-}
-.x-date-right a, .x-date-left a{
-    display:block;
-    width:16px;
-	height:16px;
-	background-position: center;
-	background-repeat: no-repeat;
-	cursor:pointer;
-    -moz-opacity: 0.6;
-    opacity:.6;
-    filter: alpha(opacity=60);
-}
-.x-date-right a:hover, .x-date-left a:hover{
-    -moz-opacity: 1;
-    opacity:1;
-    filter: alpha(opacity=100);
-}
-.x-date-right a {
-    background-image: url(../images/default/shared/right-btn.gif);
-    margin-right:2px;
-    text-decoration:none !important;
-}
-.x-date-left a{
-	background-image: url(../images/default/shared/left-btn.gif);
-    margin-left:2px;
-    text-decoration:none !important;
-}
-table.x-date-inner {
-    width:100%;
-    table-layout:fixed;
-}
-.x-date-inner th {
-    width:25px;
-}
-.x-date-inner th {
-    background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-    text-align:right !important;
-	border-bottom: 1px solid #a3bad9;
-    font:normal 10px arial, helvetica,tahoma,sans-serif;
-	color:#233d6d;
-	cursor:default;
-    padding:0;
-    border-collapse:separate;
-}
-.x-date-inner th span {
-    display:block;
-    padding:2px;
-    padding-right:7px;
-}
-.x-date-inner td {
-    border: 1px solid #fff;
-	text-align:right;
-    padding:0;
-}
-.x-date-inner a {
-    padding:2px 5px;
-    display:block;
-    font:normal 11px arial, helvetica,tahoma,sans-serif;
-	text-decoration:none;
-    color:black;
-    text-align:right;
-    zoom:1;
-}
-.x-date-inner .x-date-active{
-	cursor:pointer;
-	color:black;
-}
-.x-date-inner .x-date-selected a{
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-	border:1px solid #8db2e3;
-   padding:1px 4px;
-}
-.x-date-inner .x-date-today a{
-	border: 1px solid darkred;
-    padding:1px 4px;
-}
-.x-date-inner .x-date-selected span{
-    font-weight:bold;
-}
-.x-date-inner .x-date-prevday a,.x-date-inner .x-date-nextday a {
-	color:#aaaaaa;
-    text-decoration:none !important;
-}
-.x-date-bottom {
-    padding:4px;
-    border-top: 1px solid #a3bad9;
-    background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-}
-
-.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
-    text-decoration:none !important;
-    color:black;
-    background: #ddecfe;
-}
-
-.x-date-inner .x-date-disabled a {
-	cursor:default;
-	background:#eeeeee;
-	color:#bbbbbb;
-}
-.x-date-mmenu{
-    background:#eeeeee !important;
-}
-.x-date-mmenu .x-menu-item {
-	font-size:10px;
-	padding:1px 24px 1px 4px;
-	white-space: nowrap;
-	color:#000;
-}
-.x-date-mmenu .x-menu-item .x-menu-item-icon {
-    width:10px;height:10px;margin-right:5px;
-    background-position:center -4px !important;
-}
-
-.x-date-mp {
-	position:absolute;
-	left:0;
-	top:0;
-	background:white;
-	display:none;
-}
-.x-date-mp td {
-    padding:2px;
-	font:normal 11px arial, helvetica,tahoma,sans-serif;
-}
-td.x-date-mp-month,td.x-date-mp-year,td.x-date-mp-ybtn {
-   border: 0 none;
-	text-align:center;
-	vertical-align: middle;
-	width:25%;
-}
-.x-date-mp-ok {
-	margin-right:3px;
-}
-.x-date-mp-btns button {
-	text-decoration:none;
-	text-align:center;
-	text-decoration:none !important;
-	background:#083772;
-	color:white;
-	border:1px solid;
-	border-color: #3366cc #000055 #000055 #3366cc;
-	padding:1px 3px 1px;
-	font:normal 11px arial, helvetica,tahoma,sans-serif;
-	cursor:pointer;
-}
-.x-date-mp-btns {
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-}
-.x-date-mp-btns td {
-	border-top: 1px solid #c5d2df;
-   text-align:center;
-}
-td.x-date-mp-month a,td.x-date-mp-year a {
-	display:block;
-	padding:2px 4px;
-	text-decoration:none;
-	text-align:center;
-	color:#15428b;
-}
-
-td.x-date-mp-month a:hover,td.x-date-mp-year a:hover {
-	color:#15428b;
-	text-decoration:none;
-	cursor:pointer;
-	background: #ddecfe;
-}
-
-td.x-date-mp-sel a {
-	padding:1px 3px;
-	background: #dfecfb url(../images/default/shared/glass-bg.gif) repeat-x left top;
-	border:1px solid #8db2e3;
-}
-.x-date-mp-ybtn a {
-    overflow:hidden;
-    width:15px;
-    height:15px;
-    cursor:pointer;
-    background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;
-    display:block;
-    margin:0 auto;
-}
-.x-date-mp-ybtn a.x-date-mp-next {
-    background-position:0 -120px;
-}
-.x-date-mp-ybtn a.x-date-mp-next:hover {
-    background-position:-15px -120px;
-}
-.x-date-mp-ybtn a.x-date-mp-prev {
-    background-position:0 -105px;
-}
-.x-date-mp-ybtn a.x-date-mp-prev:hover {
-    background-position:-15px -105px;
-}
-.x-date-mp-ybtn {
-   text-align:center;
-}
-td.x-date-mp-sep {
-   border-right:1px solid #c5d2df;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/dd.css b/lib/web/extjs/resources/css/dd.css
deleted file mode 100644
index 42ae991ddaa4f453883dfb046da5e3e25d03d68d..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/dd.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-dd-drag-proxy{
-	position:absolute;
-	left:0;top:0;
-	visibility:hidden;
-	z-index:15000;
-}
-.x-dd-drag-ghost{
-	color: black;
-	font: normal 11px arial, helvetica, sans-serif;
-	-moz-opacity: 0.85;
-   opacity:.85;
-   filter: alpha(opacity=85);
-	border-top:1px solid #dddddd;
-	border-left:1px solid #dddddd;
-	border-right:1px solid #bbbbbb;
-	border-bottom:1px solid #bbbbbb;
-	padding:3px;
-	padding-left:20px;
-	background-color:white;
-	white-space:nowrap;
-}
-.x-dd-drag-repair .x-dd-drag-ghost{
-	-moz-opacity: 0.4;
-   opacity:.4;
-   filter: alpha(opacity=40);
-	border:0 none;
-	padding:0;
-	background-color:transparent;
-}
-.x-dd-drag-repair .x-dd-drop-icon{
-	visibility:hidden;
-}
-.x-dd-drop-icon{
-  position:absolute;
-	top:3px;
-	left:3px;
-	display:block;
-	width:16px;
-	height:16px;
-	background-color:transparent;
-	background-position: center;
-	background-repeat: no-repeat;
-	z-index:1;
-}
-.x-dd-drop-nodrop .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-no.gif);
-}
-.x-dd-drop-ok .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-yes.gif);
-}
-.x-dd-drop-ok-add .x-dd-drop-icon{
-  background-image: url(../images/default/dd/drop-add.gif);
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/debug.css b/lib/web/extjs/resources/css/debug.css
deleted file mode 100644
index 8bb464f0330468178f321dca1dadf30f3b09f776..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/debug.css
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-#x-debug-browser .x-tree .x-tree-node a span {
-    color:#222297;
-    font-size:12px;
-    padding-top:2px;
-    font-family:"courier","courier new";
-    line-height:18px;
-}
-#x-debug-browser .x-tree a i {
-    color:#FF4545;
-    font-style:normal;
-}
-#x-debug-browser .x-tree a em {
-    color:#999;
-}
-#x-debug-browser .x-tree .x-tree-node .x-tree-selected a span{
-    background:#c3daf9;
-}
-#x-debug-browser pre, .x-debug-browser pre xmp {
-    font:normal 11px tahoma, arial, helvetica, sans-serif !important;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word;
-}
-#x-debug-browser pre {
-    display:block;
-    padding:5px !important;
-    border-bottom:1px solid #eeeeee !important;
-}
-#x-debug-browser pre xmp {
-    padding:0 !important;
-    margin:0 !important;
-}
-#x-debug-console .x-layout-panel-center, #x-debug-inspector .x-layout-panel-center {
-      border-right:1px solid #98c0f4;
-}
-#x-debug-console textarea {
-    border: 0 none;
-    font-size:12px;
-    font-family:"courier","courier new";
-    padding-top:4px;
-    padding-left:4px;
-}
-.x-debug-frame {
-    background:#eeeeee;
-    border:1px dashed #aaaaaa;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/editor.css b/lib/web/extjs/resources/css/editor.css
deleted file mode 100644
index 301ee10c751a4b4cd8df7ecb6c390e558e0030a2..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/editor.css
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-html-editor-wrap {
-    border:1px solid #a9bfd3;
-    background:white;
-}
-.x-html-editor-tb .x-btn-text {
-    background:transparent url(../images/default/editor/tb-sprite.gif) no-repeat;
-}
-.x-html-editor-tb .x-edit-bold .x-btn-text {
-    background-position:0 0;
-}
-.x-html-editor-tb .x-edit-italic .x-btn-text {
-    background-position:-16px 0;
-}
-.x-html-editor-tb .x-edit-underline .x-btn-text {
-    background-position:-32px 0;
-}
-.x-html-editor-tb .x-edit-forecolor .x-btn-text {
-    background-position:-160px 0;
-}
-.x-html-editor-tb .x-edit-backcolor .x-btn-text {
-    background-position:-176px 0;
-}
-.x-html-editor-tb .x-edit-justifyleft .x-btn-text {
-    background-position:-112px 0;
-}
-.x-html-editor-tb .x-edit-justifycenter .x-btn-text {
-    background-position:-128px 0;
-}
-.x-html-editor-tb .x-edit-justifyright .x-btn-text {
-    background-position:-144px 0;
-}
-.x-html-editor-tb .x-edit-insertorderedlist .x-btn-text {
-    background-position:-80px 0;
-}
-.x-html-editor-tb .x-edit-insertunorderedlist .x-btn-text {
-    background-position:-96px 0;
-}
-.x-html-editor-tb .x-edit-increasefontsize .x-btn-text {
-    background-position:-48px 0;
-}
-.x-html-editor-tb .x-edit-decreasefontsize .x-btn-text {
-    background-position:-64px 0;
-}
-.x-html-editor-tb .x-edit-sourceedit .x-btn-text {
-    background-position:-192px 0;
-}
-
-.x-html-editor-tip .x-tip-bd .x-tip-bd-inner {
-    padding:5px;
-    padding-bottom:1px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/form.css b/lib/web/extjs/resources/css/form.css
deleted file mode 100644
index 1db9d2b1b2e1bf48cbc94b961263eccbd3ebd51e..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/form.css
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/* all fields */
-.x-form-field{
-    margin: 0 0 0 0;
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-}
-
-/* ---- text fields ---- */
-.x-form-text, textarea.x-form-field{
-    padding: 1px 3px;
-    background:#fff url(../images/default/form/text-bg.gif) repeat-x 0 0;
-    border: 1px solid #B5B8C8;
-}
-.x-form-text {
-    height:22px;
-    line-height:18px;
-    vertical-align:middle;
-}
-.ext-ie .x-form-text {
-    margin-top:-1px; /* ie bogus margin bug */
-    margin-bottom:-1px;
-    height:22px; /* ie quirks */
-    line-height:18px;
-}
-.ext-strict .x-form-text {
-    height:18px;
-}
-.ext-safari .x-form-text {
-    height:20px; /* safari always same size */
-}
-.ext-gecko .x-form-text {
-    padding-top:2px; /* FF won't center the text vertically */
-    padding-bottom:0;
-}
-/* select boxes */
-
-.x-form-select-one {
-    height:20px;
-    line-height:18px;
-    vertical-align:middle;
-    background-color:#fff; /* opera */
-    border: 1px solid #B5B8C8;
-}
-
-/* multi select boxes */
-
-/* --- TODO --- */
-
-/* checkboxes */
-
-/* --- TODO --- */
-
-/* radios */
-
-/* --- TODO --- */
-
-
-/* wrapped fields and triggers */
-
-.x-form-field-wrap {
-    position:relative;
-    zoom:1;
-    white-space: nowrap;
-}
-
-.x-editor .x-form-check-wrap {
-    background:#fff;
-}
-.x-form-field-wrap .x-form-trigger{
-    width:17px;
-    height:21px;
-    border:0;
-    background:transparent url(../images/default/form/trigger.gif) no-repeat 0 0;
-    cursor:pointer;
-    border-bottom: 1px solid #B5B8C8;
-    position:absolute;
-    top:0;
-}
-.ext-safari .x-form-field-wrap .x-form-trigger{
-    height:19px; /* safari doesn't allow height adjustments to the fields, so adjust trigger */
-}
-
-.x-form-field-wrap .x-form-clear-trigger{
-    background-image: url(../images/default/form/clear-trigger.gif);
-    cursor:pointer;
-}
-.x-form-field-wrap .x-form-search-trigger{
-    background-image: url(../images/default/form/search-trigger.gif);
-    cursor:pointer;
-}
-.ext-safari .x-form-field-wrap .x-form-trigger{
-    right:0;
-}
-.x-form-field-wrap .x-form-twin-triggers{
-    
-}
-.x-form-field-wrap .x-form-twin-triggers .x-form-trigger{
-    position:static;
-    top:auto;
-    vertical-align:top;
-}
-
-
-.x-form-field-wrap .x-form-trigger-over{
-    background-position:-17px 0;
-}
-.x-form-field-wrap .x-form-trigger-click{
-    background-position:-34px 0;
-}
-
-.x-trigger-wrap-focus .x-form-trigger{
-    background-position:-51px 0;
-}
-.x-trigger-wrap-focus .x-form-trigger-over{
-    background-position:-68px 0;
-}
-.x-trigger-wrap-focus .x-form-trigger-click{
-    background-position:-85px 0;
-}
-.x-trigger-wrap-focus .x-form-trigger{
-    border-bottom: 1px solid #7eadd9;
-}
-
-.x-item-disabled .x-form-trigger-over{
-    background-position:0 0 !important;
-    border-bottom: 1px solid #B5B8C8;
-}
-.x-item-disabled .x-form-trigger-click{
-    background-position:0 0 !important;
-    border-bottom: 1px solid #B5B8C8;
-}
-
-/* field focus style */
-.x-form-focus, textarea.x-form-focus{
-	border: 1px solid #7eadd9;
-}
-
-/* invalid fields */
-.x-form-invalid, textarea.x-form-invalid{
-	background:#fff url(../images/default/grid/invalid_line.gif) repeat-x bottom;
-	border: 1px solid #dd7870;
-}
-.ext-safari .x-form-invalid{
-	background-color:#ffeeee;
-	border: 1px solid #ff7870;
-}
-
-/* editors */
-
-.x-editor {
-    visibility:hidden;
-    padding:0;
-    margin:0;
-}
-.x-form-check-wrap {
-    line-height:18px;
-}
-.ext-ie .x-form-check-wrap input {
-    width:15px;
-    height:15px;
-}
-.x-editor .x-form-check-wrap {
-    padding:3px;
-}
-.x-editor .x-form-checkbox {
-    height:13px;
-    border: 0 none;
-}
-/* If you override the default field font above, you would need to change this font as well */
-.x-form-grow-sizer {
-	font:normal 12px tahoma, arial, helvetica, sans-serif;
-    left: -10000px;
-	padding: 8px 3px;
-    position: absolute;
-    visibility:hidden;
-    top: -10000px;
-	white-space: pre-wrap;
-    white-space: -moz-pre-wrap;
-    white-space: -pre-wrap;
-    white-space: -o-pre-wrap;
-    word-wrap: break-word;
-    zoom:1;
-}
-.x-form-grow-sizer p {
-    margin:0 !important;
-    border:0 none !important;
-    padding:0 !important;
-}
-/* Form Items CSS */
-
-.x-form-item {
-    font:normal 12px tahoma, arial, helvetica, sans-serif;
-    display:block;
-    margin-bottom:4px;
-}
-
-.x-form-item label {
-    display:block;
-    float:left;
-    width:100px;
-    padding:3px;
-    padding-left:0;
-    clear:left;
-    z-index:2;
-    position:relative;
-}
-
-.x-form-element {
-    padding-left:105px;
-    position:relative;
-}
-
-.x-form-invalid-msg {
-    color:#ee0000;
-    padding:2px;
-    padding-left:18px;
-    font:normal 11px tahoma, arial, helvetica, sans-serif;
-    background: transparent url(../images/default/shared/warning.gif) no-repeat 0 2px;
-    line-height:16px;
-    width:200px;
-}
-
-.x-form-label-right label {
-   text-align:right;
-}
-
-.x-form-label-top .x-form-item label {
-    width:auto;
-    float:none;
-    clear:none;
-    display:inline;
-    margin-bottom:4px;
-    position:static;
-}
-.x-form-label-top .x-form-element {
-    padding-left:0;
-    padding-top:4px;
-}
-.x-form-label-top .x-form-item {
-    padding-bottom:4px;
-}
-.x-form fieldset {
-    border:1px solid #B5B8C8;
-    padding:10px 10px 5px 10px;
-    margin-bottom:10px;
-}
-.x-form fieldset legend {
-    font:bold 11px tahoma, arial, helvetica, sans-serif;
-    color:#15428b;
-}
-.ext-ie .x-form fieldset legend {
-    margin-bottom:10px;
-}
-.ext-ie .x-form fieldset {
-    padding-top: 0;
-}
-.x-form-empty-field {
-    color:gray;
-}
-/* Editor small font for grid, toolbar and tree */
-.x-small-editor .x-form-field {
-    font:normal 11px arial, tahoma, helvetica, sans-serif;
-}
-.x-small-editor .x-form-text {
-    height:20px;
-    line-height:16px;
-    vertical-align:middle;
-}
-.ext-ie .x-small-editor .x-form-text {
-    margin-top:-1px !important; /* ie bogus margin bug */
-    margin-bottom:-1px !important;
-    height:20px !important; /* ie quirks */
-    line-height:16px !important;
-}
-.ext-strict .x-small-editor .x-form-text {
-    height:16px !important;
-}
-.ext-safari .x-small-editor .x-form-field {
-    /* safari text field will not size so needs bigger font */
-    font:normal 12px arial, tahoma, helvetica, sans-serif;
-}
-.ext-ie .x-small-editor .x-form-text {
-    height:20px;
-    line-height:16px;
-}
-.ext-border-box .x-small-editor .x-form-text {
-    height:20px;
-}
-
-.x-small-editor .x-form-select-one {
-    height:20px;
-    line-height:16px;
-    vertical-align:middle;
-}
-.x-small-editor .x-form-num-field {
-    text-align:right;
-}
-.x-small-editor .x-form-field-wrap .x-form-trigger{
-    height:19px;
-}
-
-
-.x-form-clear {
-    clear:both;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-.x-form-clear-left {
-    clear:left;
-    height:0;
-    overflow:hidden;
-    line-height:0;
-    font-size:0;
-}
-
-.x-form-cb-label {
-    width:'auto' !important;
-    float:none !important;
-    clear:none !important;
-    display:inline !important;
-    margin-left:4px;
-}
-
-.x-form-column {
-    float:left;
-    padding:0;
-    margin:0;
-    width:48%;
-    overflow:hidden;
-    zoom:1;
-}
-
-/* buttons */
-.x-form .x-form-btns-ct .x-btn{
-	float:right;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns td {
-	border:0;
-	padding:0;
-}
-.x-form .x-form-btns-ct .x-form-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-form .x-form-btns-ct .x-form-btns-center{
-	text-align:center; /*ie*/
-}
-.x-form .x-form-btns-ct .x-form-btns-center table{
-	margin:0 auto; /*everyone else*/
-}
-.x-form .x-form-btns-ct table td.x-form-btn-td{
-	padding:3px;
-}
-
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-form .x-form-btns-ct .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-form .x-form-btns-ct .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-form .x-form-btns-ct .x-btn-click  .x-btn-right{
-	background-position:0 -84px;
-}
-.x-form .x-form-btns-ct .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
-.x-form-invalid-icon {
-    width:16px;
-    height:18px;
-    visibility:hidden;
-    position:absolute;
-    left:0;
-    top:0;
-    display:block;
-    background:transparent url(../images/default/form/exclamation.gif) no-repeat 0 2px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/grid.css b/lib/web/extjs/resources/css/grid.css
deleted file mode 100644
index f3cc2c16c2677506dba65d023fab8a919216c7c1..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/grid.css
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/* Grid2 styles */
-.x-grid {
-	position:relative;
-	overflow:hidden;
-    background-color:#fff;
-}
-.x-grid-scroller {
-	overflow:auto;
-}
-.x-grid-viewport, .x-grid-locked{
-	position:absolute;
-	left:0; top: 0;
-	z-index:2;
-	overflow:hidden;
-	visibility:hidden;
-}
-.x-grid-cell-inner, .x-grid-hd-inner{
-	overflow:hidden;
-	-o-text-overflow: ellipsis;
-	text-overflow: ellipsis;
-}
-.x-grid-hd-row td, .x-grid-row td{
-	font:normal 11px arial, tahoma, helvetica, sans-serif;
-    line-height:13px;
-    white-space: nowrap;
-	vertical-align: top;
-	-moz-outline: none;
-	-moz-user-focus: normal;
-}
-.x-grid-hd-row td {
-    line-height:14px;
-}
-.x-grid-col {
-	border-right: 1px solid #ebebeb;
-	border-bottom: 1px solid #ebebeb;
-}
-/* Locked styles */
-
-.x-grid-locked .x-grid-body td {
-	background-color: #FBFDFF;
-	border-right: 1px solid #deecfd;
-	border-bottom: 1px solid #deecfd !important;
-}
-.x-grid-locked .x-grid-body td .x-grid-cell-inner {
-	border-top:0 none;
-}
-.x-grid-locked .x-grid-row-alt td{
-	background-color: #F5FAFE;
-}
-
-.x-grid-locked .x-grid-header table{
-    border-right:1px solid transparent;
-}
-.x-grid-locked .x-grid-body table{
-    border-right:1px solid #c3daf9;
-}
-
-.x-grid-locked .x-grid-body td .x-grid-cell-inner {
-	
-}
-.x-grid-row {
-	cursor: default;
-}
-.x-grid-row-alt{
-	background-color:#f1f1f1;
-}
-.x-grid-row-over td{
-	background-color:#d9e8fb;
-}
-.x-grid-resize-proxy {
-	width:3px;
-	background-color:#cccccc;
-	cursor: e-resize;
-	cursor: col-resize;
-	position:absolute;
-	top:0;
-	height:100px;
-	overflow:hidden;
-	visibility:hidden;
-	border:0 none;
-	z-index:7;
-}
-.x-grid-focus {
-	position:absolute;
-	top:0;
-	-moz-outline:0 none;
-    outline:0 none;
-    -moz-user-select: normal;
-    -khtml-user-select: normal;
-}
-
-/* header styles */
-.x-grid-header{
-	background: #ebeadb url(../images/default/grid/grid-hrow.gif) repeat-x;
-	overflow:hidden;
-	position:relative;
-	cursor:default;
-	width:100%;
-}
-.x-grid-hd-row{
-	height:22px;
-}
-.x-grid-hd {
-	padding-right:1px;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #c3daf9;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background: #fafafa url(../images/default/grid/grid-hrow.gif) repeat-x 0 1px;
-	padding-bottom:1px;
-    border-bottom: 1px solid #b3cae9;
-}
-.x-grid-sort-icon{
-	background-repeat: no-repeat;
-	display: none;
-	height: 4px;
-	width: 13px;
-	margin-left:3px;
-	vertical-align: middle;
-}
-.x-grid-header .sort-asc .x-grid-sort-icon {
-	background-image: url(../images/default/grid/sort_asc.gif);
-	display: inline;
-}
-.x-grid-header .sort-desc .x-grid-sort-icon {
-	background-image: url(../images/default/grid/sort_desc.gif);
-	display: inline;
-}
-
-/* Body Styles */
-.x-grid-body {
-	overflow:hidden;
-	position:relative;
-	width:100%;
-	zoom:1;
-}
-
-.x-grid-cell-text,.x-grid-hd-text {
-	display: block;
-	padding: 3px 5px 3px 5px;
-	-moz-user-select: none;
-	-khtml-user-select: none;
-	color:black;
-}
-.x-grid-hd-text {
-    padding-top:4px;
-}
-.x-grid-split {
-	background-image: url(../images/default/grid/grid-split.gif);
-	background-position: center;
-	background-repeat: no-repeat;
-	cursor: e-resize;
-	cursor: col-resize;
-	display: block;
-	font-size: 1px;
-	height: 16px;
-	overflow: hidden;
-	position: absolute;
-	top: 2px;
-	width: 6px;
-	z-index: 3;
-}
-
-.x-grid-hd-text {
-	color:#15428b;
-}
-/* Column Reorder DD */
-.x-dd-drag-proxy .x-grid-hd-inner{
-	background: #ebeadb url(../images/default/grid/grid-hrow.gif) repeat-x;
-	height:22px;
-	width:120px;
-}
-
-.col-move-top, .col-move-bottom{
-	width:9px;
-	height:9px;
-	position:absolute;
-	top:0;
-	line-height:1px;
-	font-size:1px;
-	overflow:hidden;
-	visibility:hidden;
-	z-index:20000;
-}
-.col-move-top{
-	background:transparent url(../images/default/grid/col-move-top.gif) no-repeat left top;
-}
-.col-move-bottom{
-	background:transparent url(../images/default/grid/col-move-bottom.gif) no-repeat left top;
-}
-
-/* Selection Styles */
-.x-grid-row-selected td, .x-grid-locked .x-grid-row-selected td{
-	background-color: #316ac5 !important;
-	color: white;
-}
-.x-grid-row-selected span, .x-grid-row-selected b, .x-grid-row-selected div, .x-grid-row-selected strong, .x-grid-row-selected i{
-	color: white !important;
-}
-.x-grid-row-selected .x-grid-cell-text{
-	color: white;
-}
-.x-grid-cell-selected{
-	background-color: #316ac5 !important;
-	color: white;
-}
-.x-grid-cell-selected span{
-	color: white !important;
-}
-.x-grid-cell-selected .x-grid-cell-text{
-	color: white;
-}
-
-.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
-    background: #ebeadb url(../images/default/grid/grid-hrow.gif) repeat-x 0 bottom !important;
-    vertical-align:middle !important;
-    color:black;
-    padding:0;
-    border-top:1px solid white;
-    border-bottom:none !important;
-    border-right:1px solid #6fa0df !important;
-    text-align:center;
-}
-.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
-    padding:0 4px;
-    color:#15428b !important;
-    text-align:center;
-}
-
-/* dirty cells */
-.x-grid-dirty-cell {
-    background: transparent url(../images/default/grid/dirty.gif) no-repeat 0 0;
-}
-
-/* Grid Toolbars */
-.x-grid-topbar, .x-grid-bottombar{
-	font:normal 11px arial, tahoma, helvetica, sans-serif;
-    overflow:hidden;
-	display:none;
-	zoom:1;
-    position:relative;
-}
-.x-grid-topbar .x-toolbar{
-	border-right:0 none;
-}
-.x-grid-bottombar .x-toolbar{
-	border-right:0 none;
-	border-bottom:0 none;
-	border-top:1px solid #a9bfd3;
-}
-/* Props Grid Styles */
-.x-props-grid .x-grid-cell-selected .x-grid-cell-text{
-	 background-color: #316ac5 !important;
-}
-.x-props-grid .x-grid-col-value .x-grid-cell-text{
-	background-color: white;
-}
-.x-props-grid .x-grid-col-name{
-	 background-color: #c3daf9;
-}
-.x-props-grid .x-grid-col-name .x-grid-cell-text{
-	background-color: white;
-    margin-left:10px;
-}
-.x-props-grid .x-grid-split-value {
-    visibility:hidden;
-}
-
-/* header menu */
-.xg-hmenu-sort-asc .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-asc.gif);
-}
-.xg-hmenu-sort-desc .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-desc.gif);
-}
-.xg-hmenu-lock .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-lock.gif);
-}
-.xg-hmenu-unlock .x-menu-item-icon{
-	background-image: url(../images/default/grid/hmenu-unlock.gif);
-}
-
-/* dd */
-.x-dd-drag-ghost .x-grid-dd-wrap {
-    padding:1px 3px 3px 1px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/layout.css b/lib/web/extjs/resources/css/layout.css
deleted file mode 100644
index 1dc6565b69d308e3f11a8c29e5366a959f4234c6..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/layout.css
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-layout-container{
-    width:100%;
-    height:100%;
-    overflow:hidden;
-	 background-color:#c3daf9;
-}
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-.x-layout-collapsed{
-    position:absolute;
-    left:-10000px;
-    top:-10000px;
-    visibility:hidden;
-    background-color:#c3daf9;
-    width:20px;
-    height:20px;
-    overflow:hidden;
-	border:1px solid #98c0f4;
-	z-index:20;
-}
-.ext-border-box .x-layout-collapsed{
-    width:22px;
-    height:22px;
-}
-.x-layout-collapsed-over{
-    cursor:pointer;
-	 background-color:#d9e8fb;
-}
-.x-layout-collapsed-west .x-layout-collapsed-tools, .x-layout-collapsed-east .x-layout-collapsed-tools{
-	position:absolute;
-    top:0;
-    left:0;
-    width:20px;
-    height:20px;
-}
-.x-layout-collapsed-north .x-layout-collapsed-tools, .x-layout-collapsed-south .x-layout-collapsed-tools{
-	position:absolute;
-    top:0;
-    right:0;
-    width:20px;
-    height:20px;
-}
-.x-layout-collapsed .x-layout-tools-button{
-    margin:0;
-}
-.x-layout-collapsed .x-layout-tools-button-inner{
-    width:16px;
-    height:16px;
-}
-.x-layout-inactive-content{
-    position:absolute;
-    left:-10000px;
-    top:-10000px;
-    visibility:hidden;
-}
-.x-layout-active-content{
-    visibility:visible;
-}
-.x-layout-panel{
-    position:absolute;border:1px solid #98c0f4;overflow:hidden;background-color:white;
-}
-.x-layout-panel-east, .x-layout-panel-west {
-    z-index:10;
-}
-.x-layout-panel-north, .x-layout-panel-south {
-    z-index:11;
-}
-.x-layout-collapsed-north, .x-layout-collapsed-south, .x-layout-collapsed-east, .x-layout-collapsed-west {
-    z-index:12;
-}
-.x-layout-panel-body{
-    overflow:hidden;
-}
-.x-layout-grid-wrapper{
-
-}
-.x-layout-split{
-    position:absolute;
-    height:5px;
-    width:5px;
-    line-height:1px;
-    font-size:1px;
-    z-index:3;
-    background-color:#c3daf9;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/default/layout/panel-title-light-bg.gif);
-    color: black;
-    border-bottom:1px solid #98c0f4;
-    position:relative;
-}
-.x-layout-panel-hd-text{
-    font:normal 11px tahoma, verdana, helvetica;
-    padding: 4px;
-    padding-left: 4px;
-    display:block;
-	 white-space:nowrap;
-}
-.x-layout-panel-hd-tools{
-    position:absolute;
-    right:0;
-    top:0;
-    text-align:right;
-    padding-top:2px;
-    padding-right:2px;
-    width:60px;
-}
-.x-layout-tools-button{
-    z-index:6;
-    padding:2px;
-    cursor:pointer;
-    float:right;
-}
-.x-layout-tools-button-over{
-    padding:1px;
-    border:1px solid #98c0f4;
-    background-color:white;
-}
-.x-layout-tools-button-inner{
-    height:12px;
-    width:12px;
-    line-height:1px;
-    font-size:1px;
-    background-repeat:no-repeat;
-    background-position:center;
-}
-.x-layout-close{
-    background-image:url(../images/default/layout/panel-close.gif);
-}
-.x-layout-stick{
-    background-image:url(../images/default/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/default/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/default/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/default/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/default/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background-image:url(../images/default/sizer/e-handle.gif);
-    background-position: left;
-}
-.x-layout-split-v{
-    background-image:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-layout-panel .x-tabs-wrap{
-    background:url(../images/default/layout/gradient-bg.gif);
-}
-.x-layout-panel .x-tabs-body {
-    background-color:white;
-    overflow:auto;height:100%;
-}
-.x-layout-component-panel, .x-layout-nested-layout {
-	position:relative;
-   padding:0;
-	overflow:hidden;
-	width:200px;
-	height:200px;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #98c0f4;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #98c0f4;
-}
-
-.x-layout-panel-dragover {
-	border: 2px solid #6593cf;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/default/layout/gradient-bg.gif);
-	background-color:#c3daf9;
-	border:1px dashed #6593cf;
-	z-index:10001;
-	overflow:hidden;
-	position:absolute;
-	left:0;top:0;
-}
-.x-layout-slider {
-	z-index:15;
-	overflow:hidden;
-	position:absolute;
-}
-
-.x-scroller-up, .x-scroller-down {
-	background-color:#c3daf9;
-	border: 1px solid #6593cf;
-	border-top-color: #fff;
-	border-left-color: #fff;
-	border-right:0 none;
-	cursor:pointer;
-	overflow:hidden;
-	line-height:16px;
-}
-.x-scroller-down {
-	border-bottom: 0 none;
-	border-top: 1px solid #6593cf;
-}
-.x-scroller-btn-over {
-	background-color: #d9e8f8;
-}
-.x-scroller-btn-click {
-	background-color: #AECEF7;
-}
-.x-scroller-btn-disabled {
-	cursor:default;
-	background-color: #c3daf9;
-	-moz-opacity: 0.3;
-   opacity:.30;
-   filter: alpha(opacity=30);
-}
-
-/* Reader Layout */
-
-.x-reader .x-layout-panel-north {
-    border:0 none;
-}
-.x-reader .x-layout-panel-center{
-    border:0 none;
-}
-.x-reader .x-layout-nested-layout .x-layout-panel-center{
-    border:1px solid #99bbe8;
-    border-top:0 none;
-}
-.x-reader .x-layout-nested-layout .x-layout-panel-south{
-    border:1px solid #99bbe8;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/menu.css b/lib/web/extjs/resources/css/menu.css
deleted file mode 100644
index 14b451468a005ef6461741cbabc5060100cf0d40..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/menu.css
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-menu {
-	border:1px solid #718bb7;
-    z-index: 15000;
-	background: #fff url(../images/default/menu/menu.gif) repeat-y;
-}
-.ext-ie .x-menu {
-    zoom:1;
-    overflow:hidden;
-}
-.x-menu-list{
-    border:1px solid #fff;
-}
-.x-menu li{
-	line-height:100%;
-}
-.x-menu li.x-menu-sep-li{
-	font-size:1px;
-	line-height:1px;
-}
-.x-menu-list-item{
-	font:normal 11px tahoma,arial, sans-serif;
-    white-space: nowrap;
-    -moz-user-select: none;
-	-khtml-user-select: none;
-	display:block;
-	padding:1px;
-}
-.x-menu-item-arrow{
-	background:transparent url(../images/default/menu/menu-parent.gif) no-repeat right;
-}
-.x-menu-sep {
-	display:block;
-	font-size:1px;
-	line-height:1px;
-	background:#c3daf9;
-	margin: 3px 3px 3px 32px;
-}
-.x-menu-focus {
-	position:absolute;
-	left:0;
-	top:-5px;
-	width:0;
-	height:0;
-    line-height:1px;
-}
-.x-menu-item {
-	display:block;
-	line-height:14px;
-	padding:3px 21px 3px 3px;
-	white-space: nowrap;
-	text-decoration:none;
-	color:#233d6d;
-	-moz-outline: 0 none;
-	outline: 0 none;
-	cursor:pointer;
-}
-.x-menu-item-active {
-	color:#233d6d;
-	background:#c3daf9;
-	border:1px solid #8BB8F3;
-	padding:0;
-}
-.x-menu-item-icon {
-	border: 0 none;
-	height: 16px;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-	margin: 0 11px 0 0;
-    background-position:center;
-}
-
-.x-menu-check-item .x-menu-item-icon{
-	background: transparent url(../images/default/menu/unchecked.gif) no-repeat center;
-}
-
-.x-menu-item-checked .x-menu-item-icon{
-	background-image:url(../images/default/menu/checked.gif);
-}
-.x-menu-group-item .x-menu-item-icon{
-	background: transparent;
-}
-
-.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
-    background: transparent url(../images/default/menu/group-checked.gif) no-repeat center;
-}
-
-.x-menu-plain {
-	background:#fff;
-}
-.x-menu-date-item{
-	padding:0;
-}
-
-.x-menu .x-color-palette, .x-menu .x-date-picker{
-    margin-left:32px;
-	margin-right:4px;
-}
-.x-menu .x-date-picker{
-    border:1px solid #a3bad9;
-    margin-top:2px;
-    margin-bottom:2px;
-}
-.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
-	margin:0;
-    border:0 none;
-}
-.x-date-menu {
-   padding:0 !important;
-}
diff --git a/lib/web/extjs/resources/css/panel.css b/lib/web/extjs/resources/css/panel.css
deleted file mode 100644
index 1058401fa37292c8f956c2149b204d7e1fc3fd78..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/panel.css
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-panel-header {
-    overflow:hidden;
-    zoom:1;
-    color:#15428b;
-	font:bold 11px tahoma,arial,verdana,sans-serif;
-    padding:5px 3px 4px 5px;
-    border:1px solid #99bbe8;
-    background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 -1px;
-}
-
-.x-panel-body {
-    border:1px solid #99bbe8;
-    border-top:0 none;
-    overflow:hidden;
-    background:white;
-}
-.x-panel-body-noheader {
-    border-top:1px solid #99bbe8;
-}
-
-.x-panel-header {
-    overflow:hidden;
-    zoom:1;
-}
-.x-panel-tl .x-panel-header {
-    color:#15428b;
-	 font:bold 11px tahoma,arial,verdana,sans-serif;
-    padding:5px 0 4px 0;
-    border:0 none;
-    background:transparent;
-}
-.x-panel-tl .x-panel-icon, .x-window-tl .x-panel-icon {
-    padding-left:20px !important;
-    background-repeat:no-repeat;
-    background-position:0 4px;
-    zoom:1;
-}
-.x-panel-inline-icon {
-    width:16px;
-	 height:16px;
-    background-repeat:no-repeat;
-    background-position:0 0;
-	 vertical-align:middle;
-	 margin-right:4px;
-	 margin-top:-1px;
-	 margin-bottom:-1px;
-}
-.x-panel-tc {
-	background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 0;
-	overflow:hidden;
-}
-.x-panel-tl {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat 0 0;
-	padding-left:6px;
-    zoom:1;
-    border-bottom:1px solid #99bbe8;
-}
-.x-panel-tr {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat right 0;
-	padding-right:6px;
-}
-.x-panel-bc {
-	background: transparent url(../images/default/panel/white-top-bottom.gif) repeat-x 0 bottom;
-    zoom:1;
-}
-.x-panel-bc .x-panel-footer {
-    padding-bottom:1px;
-    zoom:1;
-}
-
-.x-panel-nofooter .x-panel-bc {
-	height:1px;
-}
-.x-panel-bl {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat 0 bottom;
-	padding-left:1px;
-    zoom:1;
-}
-.x-panel-br {
-	background: transparent url(../images/default/panel/white-corners-sprite.gif) no-repeat right bottom;
-	padding-right:1px;
-    zoom:1;
-}
-.x-panel-mc {
-    border:0 none;
-    padding:0;
-    margin:0;
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-    background:white;
-}
-.x-panel-mc .x-panel-body {
-    background:transparent;
-    border:0 none;
-}
-.x-panel-ml {
-	background: #fff url(../images/default/panel/white-left-right.gif) repeat-y 0 0;
-	padding-left:1px;
-    zoom:1;
-}
-.x-panel-mr {
-	background: transparent url(../images/default/panel/white-left-right.gif) repeat-y right 0;
-	padding-right:1px;
-    zoom:1;
-}
-.x-panel-blue .x-panel-tl, .x-panel-blue .x-panel-tr, .x-panel-blue .x-panel-bl, .x-panel-blue .x-panel-br {
-    background-image:url(../images/default/panel/corners-sprite.gif);
-}
-.x-panel-blue .x-panel-tc, .x-panel-blue .x-panel-bc {
-    background-image:url(../images/default/panel/top-bottom.gif);
-}
-.x-panel-blue .x-panel-ml, .x-panel-blue .x-panel-mr {
-	background-image:url(../images/default/panel/left-right.gif);
-}
-.x-panel-blue .x-panel-mc{
-    padding-top:6px;
-    background:#dfe8f6;
-}
-
-.x-panel-blue .x-panel-tl {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-tr {
-	padding-right:6px;
-}
-.x-panel-blue .x-panel-bc .x-panel-footer {
-    padding-bottom:6px;
-}
-.x-panel-blue .x-panel-nofooter .x-panel-bc {
-	height:6px;
-}
-.x-panel-blue .x-panel-bl {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-br {
-	padding-right:6px;
-}
-
-.x-panel-blue .x-panel-ml {
-	padding-left:6px;
-}
-.x-panel-blue .x-panel-mr {
-	padding-right:6px;
-}
-
-.x-panel-bwrap {
-    overflow:hidden;
-}
-.x-panel-body {
-    overflow:hidden;
-}
-
-.x-panel-collapsed .x-resizable-handle{
-    display:none;
-}
-
-/* Tools */
-.x-tool {
-    overflow:hidden;
-    width:15px;
-    height:15px;
-    float:right;
-    cursor:pointer;
-    background:transparent url(../images/default/panel/tool-sprites.gif) no-repeat;
-    margin-left:2px;
-}
-
-
-/* expand / collapse tools */
-.x-tool-toggle {
-    background-position:0 -60px;
-}
-.x-tool-toggle-over {
-    background-position:-15px -60px;
-}
-.x-panel-collapsed .x-tool-toggle {
-    background-position:0 -75px;
-}
-.x-panel-collapsed .x-tool-toggle-over {
-    background-position:-15px -75px;
-}
-
-.x-tool-close {
-    background-position:0 -0;
-}
-.x-tool-close-over {
-    background-position:-15px 0;
-}
-
-.x-tool-minimize {
-    background-position:0 -15px;
-}
-.x-tool-minimize-over {
-    background-position:-15px -15px;
-}
-
-.x-tool-maximize {
-    background-position:0 -30px;
-}
-.x-tool-maximize-over {
-    background-position:-15px -30px;
-}
-
-.x-tool-restore {
-    background-position:0 -45px;
-}
-.x-tool-restore-over {
-    background-position:-15px -45px;
-}
-
-.x-tool-gear {
-    background-position:0 -90px;
-}
-.x-tool-gear-over {
-    background-position:-15px -90px;
-}
-
-.x-tool-pin {
-    background-position:0 -135px;
-}
-.x-tool-pin-over {
-    background-position:-15px -135px;
-}
-.x-tool-unpin {
-    background-position:0 -150px;
-}
-.x-tool-unpin-over {
-    background-position:-15px -150px;
-}
-.x-tool-right {
-    background-position:0 -165px;
-}
-.x-tool-right-over {
-    background-position:-15px -165px;
-}
-.x-tool-left {
-    background-position:0 -180px;
-}
-.x-tool-left-over {
-    background-position:-15px -180px;
-}
-.x-tool-up {
-    background-position:0 -210px;
-}
-.x-tool-up-over {
-    background-position:-15px -210px;
-}
-.x-tool-down {
-    background-position:0 -195px;
-}
-.x-tool-down-over {
-    background-position:-15px -195px;
-}
-.x-tool-refresh {
-    background-position:0 -225px;
-}
-.x-tool-refresh-over {
-    background-position:-15px -225px;
-}
-/* Ghosting */
-.x-panel-ghost {
-    background:#cbddf3;
-    z-index:12000;
-    overflow:hidden;
-    position:absolute;
-    left:0;top:0;
-    opacity:.65;
-    -moz-opacity:.65;
-    filter:alpha(opacity=65);
-}
-
-.x-panel-ghost ul {
-    margin:0;
-    padding:0;
-    overflow:hidden;
-    font-size:0;
-    line-height:0;
-    border:1px solid #84a0c4;
-    border-top:0 none;
-    display:block;
-}
-
-.x-panel-ghost * {
-    cursor:move !important;
-}
-
-
-/* Buttons */
-
-.x-panel-btns-ct {
-    padding:5px;
-}
-
-.x-panel-btns-ct .x-btn{
-	float:right;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns td {
-	border:0;
-	padding:0;
-}
-.x-panel-btns-ct .x-panel-btns-right table{
-	float:right;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns-left table{
-	float:left;
-	clear:none;
-}
-.x-panel-btns-ct .x-panel-btns-center{
-	text-align:center; /*ie*/
-}
-.x-panel-btns-ct .x-panel-btns-center table{
-	margin:0 auto; /*everyone else*/
-}
-.x-panel-btns-ct table td.x-panel-btn-td{
-	padding:3px;
-}
-
-.x-panel-btns-ct .x-btn-focus .x-btn-left{
-	background-position:0 -147px;
-}
-.x-panel-btns-ct .x-btn-focus .x-btn-right{
-	background-position:0 -168px;
-}
-.x-panel-btns-ct .x-btn-focus .x-btn-center{
-	background-position:0 -189px;
-}
-
-.x-panel-btns-ct .x-btn-over .x-btn-left{
-	background-position:0 -63px;
-}
-.x-panel-btns-ct .x-btn-over .x-btn-right{
-	background-position:0 -84px;
-}
-.x-panel-btns-ct .x-btn-over .x-btn-center{
-	background-position:0 -105px;
-}
-
-.x-panel-btns-ct .x-btn-click .x-btn-center{
-	background-position:0 -126px;
-}
-.x-panel-btns-ct .x-btn-click  .x-btn-right{
-	background-position:0 -84px;
-}
-.x-panel-btns-ct .x-btn-click .x-btn-left{
-	background-position:0 -63px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/qtips.css b/lib/web/extjs/resources/css/qtips.css
deleted file mode 100644
index 3576bedaeeffcce777a64df4bc712bcfeadd7d1c..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/qtips.css
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-tip{
-	position: absolute;
-	top: 0;
-    left:0;
-    visibility: hidden;
-	z-index: 20000;
-    border:0 none;
-}
-.x-tip .x-tip-close{
-	background-image: url(../images/default/qtip/close.gif);
-	height: 15px;
-	float:right;
-	width: 15px;
-    margin:0 0 2px 2px;
-    cursor:pointer;
-    display:none;
-}
-.x-tip .x-tip-top {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -12px;
-	height:6px;
-    overflow:hidden;
-}
-.x-tip .x-tip-top-left {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 0;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-top-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right 0;
-	padding-right:6px;
-    zoom:1;
-}
-.x-tip .x-tip-ft {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -18px;
-	height:6px;
-    overflow:hidden;
-}
-.x-tip .x-tip-ft-left {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -6px;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-ft-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -6px;
-	padding-right:6px;
-    zoom:1;
-}
-.x-tip .x-tip-bd {
-    border:0 none;
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-}
-.x-tip .x-tip-bd-left {
-	background: #fff url(../images/default/qtip/tip-sprite.gif) no-repeat 0 -24px;
-	padding-left:6px;
-    zoom:1;
-}
-.x-tip .x-tip-bd-right {
-	background: transparent url(../images/default/qtip/tip-sprite.gif) no-repeat right -24px;
-	padding-right:6px;
-    zoom:1;
-}
-
-.x-tip h3 {
-    font: bold 11px tahoma,arial,helvetica,sans-serif;
-    margin:0;
-    padding:2px 0;
-    color:#444;
-}
-.x-tip .x-tip-bd-inner {
-    font: normal 11px tahoma,arial,helvetica,sans-serif;
-    margin:0 !important;
-    line-height:14px;
-    color:#444;
-    padding:0;
-    float:left;
-}
-
-
-.x-form-invalid-tip {
-}
-
-.x-form-invalid-tip .x-tip-top {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-top-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-top-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-ft-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd-left {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd-right {
-	background-image: url(../images/default/form/error-tip-corners.gif);
-}
-.x-form-invalid-tip .x-tip-bd .x-tip-bd-inner {
-    padding-left:24px;
-    background:transparent url(../images/default/form/exclamation.gif) no-repeat 2px 2px;
-}
-.x-form-invalid-tip .x-tip-bd-inner {
-    padding:2px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/reset-min.css b/lib/web/extjs/resources/css/reset-min.css
deleted file mode 100644
index a64bb8c354ee89a1cbfdb02da68d0ed6896763f6..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/reset-min.css
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td{margin:0;padding:0;}img,body,html{border:0;}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal;}ol,ul {list-style:none;}caption,th {text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;}q:before,q:after{content:'';}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/resizable.css b/lib/web/extjs/resources/css/resizable.css
deleted file mode 100644
index f4741f669c4bc5ca012ecb6361c56880ff751db6..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/resizable.css
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-resizable-handle {
-    position:absolute;
-    z-index:100;
-    /* ie needs these */
-    font-size:1px;
-    line-height:6px;
-    overflow:hidden;
-	 background:white;
-	 filter:alpha(opacity=0);
-	 opacity:0;
-	 zoom:1;
-}
-.x-resizable-handle-east{
-    width:6px;
-    cursor:e-resize;
-    right:0;
-    top:0;
-    height:100%;
-}
-.ext-ie .x-resizable-handle-east {
-      margin-right:-1px; /*IE rounding error*/
-}
-.x-resizable-handle-south{
-    width:100%;
-    cursor:s-resize;
-    left:0;
-    bottom:0;
-    height:6px;
-}
-.ext-ie .x-resizable-handle-south {
-     margin-bottom:-1px; /*IE rounding error*/
-}
-.x-resizable-handle-west{
-    width:6px;
-    cursor:w-resize;
-    left:0;
-    top:0;
-    height:100%;
-}
-.x-resizable-handle-north{
-    width:100%;
-    cursor:n-resize;
-    left:0;
-    top:0;
-    height:6px;
-}
-.x-resizable-handle-southeast{
-    width:6px;
-    cursor:se-resize;
-    right:0;
-    bottom:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-northwest{
-    width:6px;
-    cursor:nw-resize;
-    left:0;
-    top:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-northeast{
-    width:6px;
-    cursor:ne-resize;
-    right:0;
-    top:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-handle-southwest{
-    width:6px;
-    cursor:sw-resize;
-    left:0;
-    bottom:0;
-    height:6px;
-    z-index:101;
-}
-.x-resizable-over .x-resizable-handle, .x-resizable-pinned .x-resizable-handle{
-    filter:alpha(opacity=100);
-	 opacity:1;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/default/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-west, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/default/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-north, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/default/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/default/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest, .x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/default/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast, .x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/default/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest, .x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/default/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #6593cf;
-    position:absolute;
-    overflow:hidden;
-    display:none;
-	 left:0;top:0;
-    z-index:50000;
-}
-.x-resizable-overlay{
-    width:100%;
-	 height:100%;
-	 display:none;
-	 position:absolute;
-	 left:0;
-	 top:0;
-	 background:white;
-	 z-index:200000;
-	 -moz-opacity: 0;
-    opacity:0;
-    filter: alpha(opacity=0);
-}
diff --git a/lib/web/extjs/resources/css/tabs.css b/lib/web/extjs/resources/css/tabs.css
deleted file mode 100644
index bb229354513895622b5e09182404fad67a6e89cd..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/tabs.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-tabs-wrap {
-	border-bottom:1px solid #6593cf;
-	padding-top:2px;
-}
-.x-tabs-strip-wrap{
-	width:100%;	
-}
-.x-tabs-wrap table{
-	position:relative;
-	top:0; left:0;
-}
-.x-tabs-strip td{
-	padding:0;
-	padding-left:2px;
-}
-.x-tabs-strip a, .x-tabs-strip span, .x-tabs-strip em {
-	display:block;
-}
-.x-tabs-strip a {
-	text-decoration:none !important;
-	-moz-outline: none;
-	outline: none;
-	cursor:pointer;
-}
-.x-tabs-strip .x-tabs-text {
-	font:bold 11px tahoma,arial,helvetica;
-	color:#666;
-	overflow:hidden;
-	white-space: nowrap;
-	cursor:pointer;
-	text-overflow: ellipsis;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#083772;
-}
-.x-tabs-strip .disabled .x-tabs-text {
-	cursor:default;
-	color:#aaaaaa;
-}
-.x-tabs-strip .x-tabs-inner {
-	 padding:4px 10px;	
-}
-
-.x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-.x-tabs-strip .x-tabs-right {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-strip .x-tabs-left {
-	 background: url(../images/default/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-
-.x-tabs-strip  a {
-	position:relative;
-	top:1px; left:0;
-}
-.x-tabs-strip .on a {
-	position:relative;
-}
-.x-tabs-strip .on .x-tabs-inner {
-	padding-bottom:5px;
-}
-/** closable tabs */
-.x-tabs-strip .x-tabs-closable .x-tabs-inner{
-	padding-right:22px;
-	position:relative;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	line-height: 1px;
-	font-size:1px;
-	background-image:url(../images/default/layout/tab-close.gif);
-	display:block;
-	position:absolute;
-	right:5px;top:4px;
-	width:11px;height:11px;
-	cursor:pointer;
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/default/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/default/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #6593cf;
-    border-top:0 none;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-top:1px solid #6593cf;
-	border-bottom:0 none;
-	padding-top:0;
-	padding-bottom:2px;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	 background: url(../images/default/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	 background: url(../images/default/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/default/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/default/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip  a {
-	position:relative;
-	top:0; left:0;
-}
-.x-tabs-bottom .x-tabs-strip .on a {
-	margin-top:-1px;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-inner {
-	padding-top:5px;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #6593cf;
-    border-bottom:0 none;
-}
-
diff --git a/lib/web/extjs/resources/css/toolbar.css b/lib/web/extjs/resources/css/toolbar.css
deleted file mode 100644
index b8530b8bb7efc9ca9dc737eecdf5c88aba0feba1..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/toolbar.css
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-toolbar{
-	border-top: 1px solid #eaf0f7;
-    border-bottom: 1px solid #a9bfd3;
-    display: block;
-	padding:2px;
-    background:#d0def0 url(../images/default/layout/panel-title-light-bg.gif) repeat-x;
-    position:relative;
-}
-.x-toolbar .x-item-disabled .x-btn-icon {
-    opacity: .35;
-    -moz-opacity: .35;
-    filter: alpha(opacity=35);
-}
-.x-toolbar td {
-	vertical-align:middle;
-}
-.mso .x-toolbar, .x-grid-mso .x-toolbar{
-	border: 0 none;
-	background: url(../images/default/grid/mso-hd.gif);
-}
-.x-toolbar td, .x-toolbar span, .x-toolbar input, .x-toolbar div, .x-toolbar select, .x-toolbar label{
-	white-space: nowrap;
-    font:normal 11px tahoma, arial, helvetica, sans-serif;
-}
-.x-toolbar .x-item-disabled {
-	color:gray;
-	cursor:default;
-	opacity:.6;
-	-moz-opacity:.6;
-	filter:alpha(opacity=60);
-}
-.x-toolbar .x-item-disabled * {
-	color:gray;
-	cursor:default;
-}
-.x-toolbar .x-btn-left{
-	background:none;
-}
-.x-toolbar .x-btn-right{
-	background:none;
-}
-.x-toolbar .x-btn-center{
-	background:none;
-	padding:0 0;
-}
-
-.x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
-	padding-right:2px;
-}
-.ext-gecko .x-toolbar .x-btn-menu-text-wrap .x-btn-center button{
-	padding-right:0;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button{
-	padding:0 2px;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
-    width:12px;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
-    width:12px;
-    background:transparent url(../images/default/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
-	background-position: 0 -47px;
-}
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/default/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-.x-toolbar .x-btn-with-menu .x-btn-center em{
-	padding-right:8px;
-}
-
-.x-toolbar .ytb-text{
-   padding:2px;
-}
-.x-toolbar .ytb-sep {
-	background-image: url(../images/default/grid/grid-split.gif);
-	background-position: center;
-	background-repeat: no-repeat;
-	display: block;
-	font-size: 1px;
-	height: 16px;
-	width:4px;
-	overflow: hidden;
-	cursor:default;
-	margin: 0 2px 0;
-	border:0;
-}
-.x-toolbar .ytb-spacer {
-    width:2px;
-}
-.mso .x-toolbar .ytb-sep, .x-grid-mso .x-toolbar .ytb-sep{
-	background-image: url(../images/default/grid/grid-blue-split.gif);
-}
-
-/* IE refuses to respect the negative margins in the toolbar */
-.ext-ie .x-toolbar .x-form-field-wrap {
-	padding-bottom:1px;
-}
-.ext-ie .x-toolbar .x-form-field-wrap .x-form-trigger {
-	top:1px;
-}
-.ext-ie .x-toolbar .x-form-field-wrap .x-form-twin-triggers img {
-	margin-top:1px;
-}
-
-/* Paging Toolbar */
-
-.x-grid-page-number{
-	width:24px;
-	height:14px;
-}
-.x-grid-page-first .x-btn-text{
-	background-image: url(../images/default/grid/page-first.gif);
-}
-.x-grid-loading .x-btn-text{
-	background-image: url(../images/default/grid/done.gif);
-}
-.x-grid-page-last .x-btn-text{
-	background-image: url(../images/default/grid/page-last.gif);
-}
-.x-grid-page-next .x-btn-text{
-	background-image: url(../images/default/grid/page-next.gif);
-}
-.x-grid-page-prev .x-btn-text{
-	background-image: url(../images/default/grid/page-prev.gif);
-}
-.x-item-disabled .x-grid-loading .x-btn-text{
-	background-image: url(../images/default/grid/loading.gif);
-}
-.x-item-disabled .x-grid-page-first .x-btn-text{
-	background-image: url(../images/default/grid/page-first-disabled.gif);
-}
-.x-item-disabled .x-grid-page-last .x-btn-text{
-	background-image: url(../images/default/grid/page-last-disabled.gif);
-}
-.x-item-disabled .x-grid-page-next .x-btn-text{
-	background-image: url(../images/default/grid/page-next-disabled.gif);
-}
-.x-item-disabled .x-grid-page-prev .x-btn-text{
-	background-image: url(../images/default/grid/page-prev-disabled.gif);
-}
-.x-paging-info {
-    position:absolute;
-    top:8px;
-    right: 8px;
-    color:#15428b;
-}
diff --git a/lib/web/extjs/resources/css/tree.css b/lib/web/extjs/resources/css/tree.css
deleted file mode 100644
index 47c4dc264f47a51a8181555eb187bf1a83e1c1cd..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/tree.css
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Ext JS Library 1.1 Beta 1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.x-tree-icon, .x-tree-ec-icon, .x-tree-elbow-line, .x-tree-elbow, .x-tree-elbow-end, .x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
-	border: 0 none;
-	height: 18px;
-	margin: 0;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-    background-repeat: no-repeat;
-}
-.x-tree-node-collapsed .x-tree-node-icon, .x-tree-node-expanded .x-tree-node-icon, .x-tree-node-leaf .x-tree-node-icon{
-	border: 0 none;
-	height: 18px;
-	margin: 0;
-	padding: 0;
-	vertical-align: middle;
-	width: 16px;
-	background-position:center;
-    background-repeat: no-repeat;
-}
-
-/* some default icons for leaf/folder */
-.x-tree-node-collapsed .x-tree-node-icon{
-	background-image:url(../images/default/tree/folder.gif);
-}
-.x-tree-node-expanded .x-tree-node-icon{
-	background-image:url(../images/default/tree/folder-open.gif);
-}
-.x-tree-node-leaf .x-tree-node-icon{
-	background-image:url(../images/default/tree/leaf.gif);
-}
-
-.x-tree-noicon .x-tree-node-icon{
-	width:0; height:0;
-}
-/* loading icon */
-.x-tree-node-loading .x-tree-node-icon{
-	background-image:url(../images/default/tree/loading.gif) !important;
-}
-.x-tree-node-loading a span{
-	 font-style: italic;
-	 color:#444444;
-}
-
-/* Line styles */
-.x-tree-lines .x-tree-elbow{
-	background-image:url(../images/default/tree/elbow.gif);
-}
-.x-tree-lines .x-tree-elbow-plus{
-	background-image:url(../images/default/tree/elbow-plus.gif);
-}
-.x-tree-lines .x-tree-elbow-minus{
-	background-image:url(../images/default/tree/elbow-minus.gif);
-}
-.x-tree-lines .x-tree-elbow-end{
-	background-image:url(../images/default/tree/elbow-end.gif);
-}
-.x-tree-lines .x-tree-elbow-end-plus{
-	background-image:url(../images/default/tree/elbow-end-plus.gif);
-}
-.x-tree-lines .x-tree-elbow-end-minus{
-	background-image:url(../images/default/tree/elbow-end-minus.gif);
-}
-.x-tree-lines .x-tree-elbow-line{
-	background-image:url(../images/default/tree/elbow-line.gif);
-}
-
-/* No line styles */
-.x-tree-no-lines .x-tree-elbow{
-	background:transparent;
-}
-.x-tree-no-lines .x-tree-elbow-plus{
-	background-image:url(../images/default/tree/elbow-plus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-minus{
-	background-image:url(../images/default/tree/elbow-minus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-end{
-	background:transparent;
-}
-.x-tree-no-lines .x-tree-elbow-end-plus{
-	background-image:url(../images/default/tree/elbow-end-plus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-end-minus{
-	background-image:url(../images/default/tree/elbow-end-minus-nl.gif);
-}
-.x-tree-no-lines .x-tree-elbow-line{
-	background:transparent;
-}
-
-.x-tree-elbow-plus, .x-tree-elbow-minus, .x-tree-elbow-end-plus, .x-tree-elbow-end-minus{
-	cursor:pointer;
-}
-.ext-ie ul.x-tree-node-ct{
-    font-size:0;
-    line-height:0;
-}
-.x-tree-node{
-	color: black;
-	font: normal 11px arial, tahoma, helvetica, sans-serif;
-	white-space: nowrap;
-}
-.x-tree-node a, .x-dd-drag-ghost a{
-	text-decoration:none;
-	color:black;
-	-khtml-user-select:none;
-	-moz-user-select:none;
-    -kthml-user-focus:normal;
-    -moz-user-focus:normal;
-    -moz-outline: 0 none;
-    outline:0 none;
-}
-.x-tree-node a span, .x-dd-drag-ghost a span{
-	text-decoration:none;
-	color:black;
-	padding:1px 3px 1px 2px;
-}
-.x-tree-node .x-tree-node-disabled a span{
-	color:gray !important;
-}
-.x-tree-node .x-tree-node-disabled .x-tree-node-icon{
-	-moz-opacity: 0.5;
-   opacity:.5;
-   filter: alpha(opacity=50);
-}
-.x-tree-node .x-tree-node-inline-icon{
-	background:transparent;
-}
-.x-tree-node a:hover, .x-dd-drag-ghost a:hover{
-	text-decoration:none;
-}
-.x-tree-node div.x-tree-drag-insert-below{
- 	 border-bottom:1px dotted #3366cc;
-}
-.x-tree-node div.x-tree-drag-insert-above{
-	 border-top:1px dotted #3366cc;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below{
- 	 border-bottom:0 none;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above{
-	 border-top:0 none;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-below a{
- 	 border-bottom:2px solid #3366cc;
-}
-.x-tree-dd-underline .x-tree-node div.x-tree-drag-insert-above a{
-	 border-top:2px solid #3366cc;
-}
-.x-tree-node .x-tree-drag-append a span{
-	 background:#dddddd;
-	 border:1px dotted gray;
-}
-.x-tree-node .x-tree-selected a span{
-	background:#3366cc;
-	color:white;
-}
-.x-dd-drag-ghost .x-tree-node-indent, .x-dd-drag-ghost .x-tree-ec-icon{
-	display:none !important;
-}
-.x-tree-drop-ok-append .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-add.gif);
-}
-.x-tree-drop-ok-above .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-over.gif);
-}
-.x-tree-drop-ok-below .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-under.gif);
-}
-.x-tree-drop-ok-between .x-dd-drop-icon{
-  background-image: url(../images/default/tree/drop-between.gif);
-}
diff --git a/lib/web/extjs/resources/css/ytheme-aero.css b/lib/web/extjs/resources/css/ytheme-aero.css
deleted file mode 100644
index 7e4da4814e6ebafb97572c685810c94f1a8217cb..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/ytheme-aero.css
+++ /dev/null
@@ -1,582 +0,0 @@
-/*
- * Ext JS Library 1.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-/* menus */
-
-.x-menu {
-	border:1px solid;
-    border-color: #96b9e6 #8BB8F3 #8BB8F3 #96b9e6;
-    z-index: 15000;
-	zoom:1;
-    background:#c3daf9;
-    padding:2px;
-    
-}
-.x-menu-list{
-    background: #fafafa;
-    border:1px solid #fff;
-    border-color:#a3bad9;
-}
-.x-menu-item-icon {
-	margin-right:8px;
-}
-.x-menu-sep {
-    margin-left:3px;
-}
-.x-menu-item-active {
-	color:#233d6d;
-	background:#c3daf9;
-	border:1px solid #fff;
-	padding:0;
-}
-
-.x-date-mmenu .x-menu-list{
-    padding:0;
-}
-.x-date-mmenu .x-menu-list{
-    border:0 none;
-}
-
-.x-menu .x-color-palette, .x-menu .x-date-picker{
-    margin-left:26px;
-}
-.x-menu-plain .x-color-palette, .x-menu-plain .x-date-picker{
-	margin:0;
-    border:0 none;
-}
-/**
-* Tabs
-*/
-.x-tabs-wrap, .x-layout-panel .x-tabs-top .x-tabs-wrap {
-   background:#deecfd;
-	border:1px solid #8db2e3;
-	padding-bottom:2px;
-	padding-top:0;
-}
-.x-tabs-strip-wrap{
-	padding-top:1px;
-	background:#cedff5 url(../images/aero/tabs/tab-strip-bg.gif) repeat-x bottom;
-	border-bottom:1px solid #8db2e3;
-}
-.x-tabs-strip .x-tabs-text {
-	color:#15428b;
-	font:bold 11px tahoma,arial,verdana,sans-serif;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#15428b;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-left,.x-tabs-top .x-tabs-strip .on a:hover .x-tabs-left{
-	 background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-.x-tabs-top .x-tabs-strip .x-tabs-right {
-	 background:transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-top .x-tabs-strip .x-tabs-left {
-	background:transparent url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-.x-tabs-top .x-tabs-body {
-	border:1px solid #8db2e3;
-	border-top:0 none;
-}
-.x-tabs-bottom .x-tabs-wrap, .x-layout-panel .x-tabs-bottom .x-tabs-wrap {
-   background:#deecfd;
-	border:1px solid #8db2e3;
-	padding-top:2px;
-	padding-bottom:0;
-}
-.x-tabs-bottom .x-tabs-strip-wrap{
-	padding-top:0;
-	padding-bottom:1px;
-	background:#cedff5 url(../images/aero/tabs/tab-strip-btm-bg.gif) repeat-x top;
-	border-top:1px solid #8db2e3;
-	border-bottom:0 none;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	background:transparent url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	background:transparent url(../images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right,.x-tabs-bottom .x-tabs-strip .on a:hover {
-	 background: url(../images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left,.x-tabs-bottom .x-tabs-strip .on a:hover .x-tabs-left {
-	 background: url(../images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-body {
-	border:1px solid #8db2e3;
-	border-bottom:0 none;
-}
-/*
-* Basic-Dialog 
-*/
-.x-dlg-proxy {
-	background:#C7DFFC;
-	border:1px solid #A5CCF9;
-}
-.x-dlg-shadow{
-	background:#cccccc;
-   opacity:.3;
-   -moz-opacity:.3;
-   filter: alpha(opacity=30);
-}
-.x-dlg {
-	background:transparent;
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/aero/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:#aabaca;
-	color:#15428b;
-	zoom:1;
-	padding-top:7px;
-}
-.x-dlg .x-dlg-hd-left {
-	opacity:.85;
-    -moz-opacity:.85;
-    filter:alpha(opacity=80);
-	background: url(../images/aero/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	zoom:1;
-}
-.x-dlg-modal .x-dlg-hd-left {
-	opacity:.75;
-    -moz-opacity:.75;
-    filter:alpha(opacity=70);
-}
-
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/aero/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	zoom:1;
-}
-.x-dlg .x-dlg-dlg-body{
-	padding:0 0 0;
-	position:absolute;
-	top:24px;left:0;
-	z-index:1;
-	border:0 none;
-	background:transparent;
-}
-.x-dlg .x-dlg-bd{
-	background:#fff;
-	border:1px solid #96b9e6;
-}
-.x-dlg .x-dlg-ft{
-	border:0 none;
-	background:transparent;
-	padding-bottom:8px;
-}
-.x-dlg .x-dlg-bg{
-	filter:alpha(opacity=80);
-	opacity:.85; 
-	-moz-opacity:.85; 
-	zoom:1;
-}
-.x-dlg-modal .x-dlg-bg {
-	opacity:.75;
-    -moz-opacity:.75;
-    filter:alpha(opacity=70);
-}
-.x-dlg .x-dlg-bg-center {
-	padding: 2px 7px 7px 7px;
-	background:transparent url(../images/aero/basic-dialog/bg-center.gif) repeat-x bottom;
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-left{
-	padding-left:7px;
-	background:transparent url(../images/aero/basic-dialog/bg-left.gif) no-repeat bottom left;
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-right{
-	padding-right:7px;
-	background:transparent url(../images/aero/basic-dialog/bg-right.gif) no-repeat bottom right;
-	zoom:1;
-}
-.x-dlg-auto-tabs .x-dlg-dlg-body, .x-dlg-auto-layout .x-dlg-dlg-body{
-	background:transparent;
-	border:0 none;
-}
-.x-dlg-auto-tabs .x-dlg-bd, .x-dlg-auto-layout .x-dlg-bd{
-	background:#fff;
-	border:1px solid #e9f3f5;
-}
-.x-dlg-auto-tabs .x-tabs-top .x-tabs-body,.x-dlg-auto-tabs .x-tabs-bottom .x-tabs-body{
-    border-color:#8db2e3;
-}
-.x-dlg-auto-tabs .x-tabs-top .x-tabs-wrap,.x-dlg-auto-tabs .x-tabs-bottom .x-tabs-wrap{
-    border-color:#8db2e3;
-}
-.x-dlg .x-dlg-toolbox {
-    width:50px;
-    height:20px;
-    right:5px;
-    top:5px;
-}
-.x-dlg .x-dlg-close, .x-dlg .x-dlg-collapse {
-	width:21px;
-	height:20px;
-    margin:0;
-}
-.x-dlg .x-dlg-close {
-    background-image:url(../images/aero/basic-dialog/aero-close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/aero/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed {
-    border-bottom:1px solid #96b9e6;
-}
-.x-dlg .x-dlg-close-over {
-	background-image:url(../images/aero/basic-dialog/aero-close-over.gif);
-}
-.x-dlg .x-dlg-collapse-over {
-	background-image:url(../images/aero/basic-dialog/collapse-over.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/aero/basic-dialog/expand.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse-over {
-    background-image:url(../images/aero/basic-dialog/expand-over.gif);
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/aero/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/aero/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/aero/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/aero/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width:9px;
-	height:9px;
-	border:0;
-	right:2px;
-	bottom:2px;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/aero/s.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/aero/s.gif);
-	border:0 none;
-}
-
-#x-msg-box .x-dlg-bd{
-	background:#CFE0F5;
-	border:0 none;
-}
-body.x-masked #x-msg-box .x-dlg-bd, body.x-body-masked #x-msg-box .x-dlg-bd{
-	background:#c4d2e3;
-	border:0 none;
-}
-/* BorderLayout */
-
-.x-layout-container{
-    background:#deecfd;
-}
-.x-layout-collapsed{
-    background-color:#deecfd;
-	 border:1px solid #99bbe8;
-}
-.x-layout-collapsed-over{
-	 background-color:#F5F9FE;
-}
-.x-layout-panel{
-    border:1px solid #99bbe8;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-split{
-    background-color:#deecfd;
-}
-.x-layout-panel-hd{
-    background: #ebeadb url(../images/aero/grid/grid-hrow.gif) repeat-x;
-    border-bottom:1px solid #99bbe8;
-}
-.x-layout-panel-hd-text {
-	color:#15428b;
-	font:bold 11px tahoma,arial,verdana,sans-serif;
-}
-
-.x-layout-split-h{
-    background:#deecfd;
-}
-.x-layout-split-v{
-    background:#deecfd;
-}
-.x-layout-panel .x-tabs-top .x-tabs-wrap{
-    border:0 none;
-	 border-bottom:1px solid #8db2e3;
-}
-.x-layout-panel .x-tabs-bottom .x-tabs-wrap{
-    border:0 none;
-	 border-top:1px solid #8db2e3;
-}
-
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #99bbe8;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #99bbe8;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #99bbe8;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #99bbe8;
-}
-.x-layout-panel-dragover {
-	border: 2px solid #99bbe8;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/aero/layout/gradient-bg.gif);
-	background-color:#f3f2e7;
-	border:1px dashed #99bbe8;
-}
-
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-/** Resizable */
-
-.x-resizable-proxy{
-    border: 1px dashed #3b5a82;
-}
-
-/* grid */
-.x-grid-hd-text {
-	color:#15428b;
-    font-weight:bold;
-}
-.x-grid-locked .x-grid-body td {
-	background: #FBFDFF;
-	border-right: 1px solid #deecfd;
-	border-bottom: 1px solid #deecfd !important;
-}
-.x-grid-locked .x-grid-body td .x-grid-cell-inner {
-	border-top:0 none;
-}
-.x-grid-locked .x-grid-row-alt td{
-	background: #F5FAFE;
-}
-.x-grid-locked .x-grid-row-selected td{
-	color: #fff !important;
-	background-color: #316ac5 !important;
-}
-.x-grid-hd{
-	border-bottom:0;
-	background:none;
-}
-.x-grid-hd-row{
-	height:auto;
-}
-.x-grid-hd-over {
-	border-bottom:0 none;
-}
-.x-grid-hd-over .x-grid-hd-body{
-	background:none;
-	border-bottom:0 none;
-}
-.x-grid-hd-over .x-grid-hd-body{
-	background-color: transparent;
-	border-bottom:0;
-}
-.x-grid-split {
-	background-image: url(../images/aero/grid/grid-blue-split.gif);
-}
-.x-grid-header{
-	background: url(../images/aero/grid/grid-hrow.gif);
-	border:0 none;
-	border-bottom:1px solid #6f99cf;
-}
-.x-grid-row-alt{
-	background-color: #f5f5f5;
-}
-.x-grid-row-over td, .x-grid-locked .x-grid-row-over td{
-	background-color:#d9e8fb;
-}
-.x-grid-col {
-	border-right: 1px solid #eee;
-	border-bottom: 1px solid #eee;
-}
-.x-grid-header .x-grid-hd-inner {
-	padding-bottom: 1px;
-}
-.x-grid-header  .x-grid-hd-text {
-	padding-bottom: 3px;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #316ac5;
-	padding-bottom: 0;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background: #d5e4f5;
-	border-bottom: 1px solid #fff;
-	padding-bottom: 2px;
-}
-.x-grid-header .sort-asc .x-grid-hd-inner, .x-grid-header .sort-desc .x-grid-hd-inner {
-	border-bottom: 1px solid #316ac5;
-	padding-bottom: 0;
-}
-.x-grid-header .sort-asc  .x-grid-hd-text, .x-grid-header .sort-desc .x-grid-hd-text {
-	border-bottom: 0 none;
-	padding-bottom: 3px;
-}
-.x-grid-header .sort-asc .x-grid-sort-icon {
-	background-image: url(../images/aero/grid/sort_asc.gif);
-}
-.x-grid-header .sort-desc .x-grid-sort-icon {
-	background-image: url(../images/aero/grid/sort_desc.gif);
-}
-.x-dd-drag-proxy .x-grid-hd-inner{
-	background: #ebeadb url(../images/aero/grid/grid-hrow.gif) repeat-x;
-	height:22px;
-	width:120px;
-}
-
-
-.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
-    background: #ebeadb url(../images/aero/grid/grid-hrow.gif) repeat-x 0 0 !important;
-    vertical-align:middle !important;
-    color:black;
-    padding:0;
-    border-top:1px solid white;
-    border-bottom:1px solid #6f99cf !important;
-    border-right:1px solid #6f99cf !important;
-    text-align:center;
-}
-.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
-    padding:0 4px;
-    color:#15428b !important;
-    text-align:center;
-}
-
-/** Toolbar */
-.x-toolbar{
-	padding:2px 2px 2px 2px;
-    background:#d0def0 url(../images/default/toolbar/tb-bg.gif) repeat-x;
-}
-
-.x-toolbar .ytb-sep{
-	background-image: url(../images/aero/grid/grid-blue-split.gif);
-}
-
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/aero/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/aero/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-
-
-
-/*************** TABS 2 *****************/
-
-
-/**
-* Tabs
-*/
-.x-tab-panel-header, .x-tab-panel-footer {
-    background:#deecfd;
-	border:1px solid #8db2e3;
-}
-.x-tab-panel-header {
-    background:#deecfd;
-	border:1px solid #8db2e3;
-	padding-bottom:2px;
-}
-.x-tab-panel-footer {
-    background:#deecfd;
-	border:1px solid #8db2e3;
-	padding-top:2px;
-}
-
-.x-tab-strip-top{
-	padding-top:1px;
-	background:#cedff5 url(../images/aero/tabs/tab-strip-bg.gif) repeat-x bottom;
-	border-bottom:1px solid #8db2e3;
-}
-.x-tab-strip-bottom{
-	padding-bottom:1px;
-	background:#cedff5 url(../images/aero/tabs/tab-strip-btm-bg.gif) repeat-x top;
-	border-top:1px solid #8db2e3;
-	border-bottom:0 none;
-}
-
-.x-tab-strip .x-tab-strip-text {
-	color:#15428b;
-	font:bold 11px tahoma,arial,verdana,sans-serif;
-}
-.x-tab-strip .x-tab-strip-active .x-tab-text {
-	cursor:default;
-	color:#15428b;
-}
-
-.x-tab-strip-top .x-tab-strip-active .x-tab-right {
-	 background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tab-strip-top .x-tab-strip-active .x-tab-left {
-	 background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-.x-tab-strip-top .x-tab-right {
-	 background: url(../images/aero/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tab-strip-top .x-tab-left {
-	 background: url(../images/aero/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-
-
-.x-tab-strip-bottom .x-tab-right {
-	 background: url(../images/aero/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tab-strip-bottom .x-tab-left {
-	 background: url(../images/aero/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-right {
-	 background: url(../images/aero/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tab-strip-bottom .x-tab-strip-active .x-tab-left {
-	 background: url(../images/aero/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tab-panel-body-top {
-	border:1px solid #8db2e3;
-	border-top:0 none;
-}
-
-.x-tab-panel-body-bottom {
-	border:1px solid #8db2e3;
-	border-bottom:0 none;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/ytheme-galdaka.css b/lib/web/extjs/resources/css/ytheme-galdaka.css
deleted file mode 100644
index dd0227e0701f8f5c567143ba027b3468ae69c2fc..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/ytheme-galdaka.css
+++ /dev/null
@@ -1,533 +0,0 @@
-/*****************************************/
-/*galdaka theme - by Jose Alfonso Dacosta*/
-/*****************************************/
-
-/*TABS*/
-.x-tabs-wrap {
-	border-bottom:1px solid #848284;
-}
-.x-tabs-strip .x-tabs-text {
-	font:bold 10px tahoma,arial,helvetica;
-}
-.x-tabs-strip .on .x-tabs-text {
-	color:#393939;
-}
-.x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/galdaka/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/galdaka/tabs/tab-sprite.gif) no-repeat 0 -100px;
-}
-.x-tabs-strip .x-tabs-right {
-	 background: url(../images/galdaka/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-strip .x-tabs-left {
-	 background: url(../images/galdaka/tabs/tab-sprite.gif) no-repeat 0 -150px;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-    background-image:url(../images/galdaka/layout/tab-close.gif);
-}
-.x-tabs-strip .on .close-icon{
-    background-image:url(../images/galdaka/layout/tab-close.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-    background-image:url(../images/galdaka/layout/tab-close-on.gif);
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	 background: url(../images/galdaka/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	 background: url(../images/galdaka/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/galdaka/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/galdaka/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-body {
-	border-bottom: 0px;
-	border-left: 0px;
-	border-right: 0px;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-top:1px solid #848284;
-}
-
-/*TOOLBAR*/
-.x-toolbar{
-	background-color: #f2f2f3;
-	background: url(../images/galdaka/toolbar/fondoToolbar.gif);
-	background-repeat: repeat-x;
-	border: 0px solid #c0c0c0;
-	height: 20px;
-}
-.x-toolbar .x-tb-button-over{
-   background:#c3d3ed url(../images/galdaka/toolbar/btn-over-bg.gif) repeat-x;
-	border:1px solid #7A7A7A;
-	padding:1px 2px;
-}
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/galdaka/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/galdaka/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/galdaka/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/galdaka/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/galdaka/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/galdaka/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-.x-toolbar .x-btn-menu-arrow-wrap .x-btn-center button {
-    background:transparent url(../images/galdaka/toolbar/btn-arrow.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-text-icon .x-btn-menu-arrow-wrap .x-btn-center button {
-    background:transparent url(../images/galdaka/toolbar/btn-arrow.gif) no-repeat 0 3px;
-}
-
-/*PAGING TOOLBAR*/
-.x-grid-page-first .x-btn-text{
-	background-image: url(../images/galdaka/grid/page-first.gif);
-}
-.x-grid-page-last .x-btn-text{
-	background-image: url(../images/galdaka/grid/page-last.gif);
-}
-.x-grid-page-next .x-btn-text{
-	background-image: url(../images/galdaka/grid/page-next.gif);
-}
-.x-grid-page-prev .x-btn-text{
-	background-image: url(../images/galdaka/grid/page-prev.gif);
-}
-.x-paging-info {
-    color:#000000;
-}
-
-/*GRID*/
-.x-grid-col{
-	border-right: 1px solid #f1efe2;
-	border-bottom: 1px solid #f1efe2;
-}
-.x-grid-row-alt{
-	background: #fffbff;
-}
-.x-grid-row-over td{
-	background: #f1f1f1;
-}
-.x-grid-header{
-	background: #ebeadb url(../images/galdaka/grid/fondoCabeceraHover.gif) repeat-x;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #cccccc;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background: #fafafa url(../images/galdaka/grid/grid-hrow.gif) repeat-x 0 1px;
-    border-bottom: 1px solid #c0c0c0;
-}
-.x-grid-hd-text {
-	color: black;
-}
-.x-dd-drag-proxy .x-grid-hd-inner{
-	background: #ebeadb url(../images/galdaka/grid/grid-hrow.gif) repeat-x;
-}
-.col-move-top{
-	background:transparent url(../images/galdaka/grid/col-move-top.gif) no-repeat left top;
-}
-.col-move-bottom{
-	background:transparent url(../images/galdaka/grid/col-move-bottom.gif) no-repeat left top;
-}
-.x-grid-row-selected td, .x-grid-locked .x-grid-row-selected td{
-	background-color: #e4dce4 !important;
-}
-.x-grid-row-selected span, .x-grid-row-selected b, .x-grid-row-selected div, .x-grid-row-selected strong, .x-grid-row-selected i{
-	color: black !important;
-}
-.x-grid-row-selected .x-grid-cell-text{
-	color: black;
-}
-.x-grid-cell-selected{
-	background-color: #e4dce4 !important;
-	color: black;
-}
-.x-grid-cell-selected span{
-	color: black !important;
-}
-.x-grid-cell-selected .x-grid-cell-text{
-	color: black;
-}
-.x-grid-bottombar .x-toolbar{
-	border-top:1px solid #c0c0c0;
-}
-
-/*RESIZEABLE*/
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/galdaka/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/galdaka/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/galdaka/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/galdaka/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/galdaka/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/galdaka/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/galdaka/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/galdaka/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #615e55;
-}
-
-/*LAYOUT*/
-.x-layout-container{
-    background-color:#f6f1f3;
-}
-.x-layout-collapsed{
-    background-color:#f6f1f3;
-    border:1px solid #c0c0c0;
-}
-.x-layout-collapsed-over{
-    background-color:#e7e3e5;
-}
-.x-layout-panel{
-    border:1px solid #c0c0c0;
-}
-.x-layout-split{
-    background-color:#f6f1f3;
-}
-.x-layout-panel-hd{
-	background-image: url(../images/galdaka/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #c0c0c0;
-}
-.x-layout-tools-button-over{
-    border:1px solid #c0c0c0;
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #c0c0c0;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #c0c0c0;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #c0c0c0;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #c0c0c0;
-}
-.x-layout-split-h{
-    background-image:url(../images/galdaka/layout/e-handle.gif);
-}
-.x-layout-split-v{
-    background-image:url(../images/galdaka/layout/s-handle.gif);
-}
-.x-layout-panel .x-tabs-wrap{
-    background:url(../images/galdaka/layout/gradient-bg.gif);
-}
-.x-layout-close{
-    background-image:url(../images/galdaka/layout/panel-close.gif);
-}
-.x-layout-stick{
-    background-image:url(../images/galdaka/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/galdaka/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/galdaka/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/galdaka/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/galdaka/layout/ns-expand.gif);
-}
-/*DIALOG*/
-.x-dlg-proxy {
-	background-image: url(../images/galdaka/basic-dialog/gradient-bg.gif);
-	background-color:#EAE8D5;
-	border:1px solid #b3b6b0;
-}
-.x-dlg-shadow{
-	background:#aaaaaa;
-}
-.x-dlg-proxy .tabset{
-    background:url(../images/galdaka/basic-dialog/gradient-bg.gif);
-}
-
-.x-dlg .x-dlg-hd {
-	background: url(../images/galdaka/basic-dialog/hd-sprite.gif) repeat-x 0px -82px;
-	background-color:#333333;
-}
-.x-dlg .x-dlg-hd-left {
-	background: url(../images/galdaka/basic-dialog/hd-sprite.gif) no-repeat 0px -41px;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/galdaka/basic-dialog/hd-sprite.gif) no-repeat right 0px;
-}
-.x-dlg .x-dlg-close {
-	width:19px;
-	height:19px;
-	top:-2px;
-	right:5px;
-	opacity:.85;-moz-opacity:.85;filter:alpha(opacity=80);
-	background-image:url(../images/galdaka/basic-dialog/close.gif);
-	zoom:1;
-}
-.x-dlg .x-dlg-close-over {
-	background-image:url(../images/galdaka/basic-dialog/close-over.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/galdaka/basic-dialog/collapse.gif);
-}
-.x-dlg .x-dlg-collapse-over {
-	background-image:url(../images/galdaka/basic-dialog/collapse-over.gif);
-}
-.x-dlg-collapsed {
-    border-bottom:1px solid #96b9e6;
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(.../images/galdaka/basic-dialog/expand.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse-over {
-    background-image:url(../images/galdaka/basic-dialog/expand-over.gif);
-}
-
-.x-dlg .x-dlg-dlg-body{
-	background:#efefec;
-	border:1px solid #b3b6b0;
-	border-top:0px none;
-}
-.x-dlg .x-tabs-top .x-ui-ext-tabbody{
-	border:1px solid #b3b6b0;
-	border-top:0px none;
-}
-.x-dlg .x-tabs-bottom .x-ui-ext-tabbody{
-	border:1px solid #b3b6b0;
-	border-bottom:0px none;
-}
-.x-dlg .x-layout-container  .x-ui-ext-tabbody{
-	border:0px none;
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/galdaka/basic-dialog/e-handle.gif);
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/galdaka/basic-dialog/s-handle.gif);
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/galdaka/basic-dialog/e-handle.gif);
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/galdaka/basic-dialog/se-handle.gif);
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/galdaka/basic-dialog/sw-handle.gif);
-}
-
-/*TREE*/
-.x-tree-node .x-tree-selected a span{
-	background: #a8a6a6;
-}
-
-/*MENU*/
-.x-menu {
-    border-color: #cecece #c0c0c0 #c0c0c0 #cecece;
-	background: #fff url(../images/galdaka/menu/menu.gif) repeat-y;
-}
-.x-menu-list-item{
-	font:normal 11px Arial, Verdana, Helvetica, sans-serif,tahoma,"Lucida Sans Unicode",arial, sans-serif;
-}
-.x-menu-sep {
-	background:#bdbdbd;
-}
-.x-menu-item {
-	color:#000000;
-}
-.x-menu-item-active {
-	background:#f1f1f1;
-	border:1px solid #dcdcdc;
-}
-.x-menu-item-arrow{
-	background:transparent url(../images/galdaka/menu/menu-parent.gif) no-repeat right;
-}
-.x-menu-check-item .x-menu-item-icon{
-	background: transparent url(../images/galdaka/menu/unchecked.gif) no-repeat center;
-}
-.x-menu-item-checked .x-menu-item-icon{
-	background-image:url(../images/galdaka/menu/checked.gif);
-}
-.x-menu-group-item .x-menu-item-icon{
-	background: transparent;
-}
-.x-menu-item-checked .x-menu-group-item .x-menu-item-icon{
-    background: transparent url(../images/galdaka/menu/group-checked.gif) no-repeat center;
-}
-
-/*DATE-PICKER*/
-.x-date-middle,.x-date-left,.x-date-right {
-	background: url(../images/galdaka/basic-dialog/hd-sprite.gif) repeat-x 0 -83px;
-	font: bold 11px arial, verdana, "sans serif", tahoma, helvetica;
-}
-.x-date-right a {
-    background-image: url(../images/galdaka/shared/right-btn.gif);
-}
-.x-date-left a{
-	background-image: url(../images/galdaka/shared/left-btn.gif);
-}
-.x-date-inner th {
-    background: #848484;
-	color: #FFFFFF;
-}
-.x-date-inner .x-date-selected a{
-	background: #f6f6f6;
-	border: 1px solid #5e5e5e;
-}
-.x-date-inner .x-date-today a{
-	border: 1px solid #dedede;
-}
-.x-date-bottom {
-    border-top: 1px solid #848484;
-    background: #e7e7e7;
-}
-.x-date-inner a:hover, .x-date-inner .x-date-disabled a:hover{
-    background: #F0F0F0;
-}
-
-/*FORM*/
-.x-form-field{
-    font:normal 11px arial, verdana, tahoma, arial, helvetica, sans-serif;
-}
-.x-form-field-wrap .x-form-trigger{
-	right: 0px;
-}
-.x-form-field-wrap .x-form-trigger{
-    background:transparent url(../images/galdaka/form/trigger.gif) no-repeat 0 0;
-}
-.x-form-field-wrap .x-form-date-trigger{
-    background:transparent url(../images/galdaka/form/date-trigger.gif) no-repeat 0 0;
-}
-.x-form-focus{
-	border: 1px solid #000000;
-}
-.x-form-item {
-    font:normal 11px arial, verdana, tahoma, arial, helvetica, sans-serif;
-	color: #808594;
-}
-.x-form fieldset {
-    border:1px solid #dedede;
-}
-.x-form fieldset legend {
-    font: bold 11px verdana, tahoma, arial, helvetica, sans-serif;
-    color: #606060;
-}
-
-/*COMBOBOX*/
-.x-combo-list {
-    border:1px solid #b5b8c8;
-}
-.x-combo-list-item {
-    font:normal 11px arial, tahoma, arial, helvetica, sans-serif;
-}
-.x-combo-list .x-combo-selected{
-	background-color: #e7e7e7 !important;
-    border:1px solid #5e5e5e;
-}
-
-/*BOX*/
-.x-box-blue .x-box-mc {
-	background-color: #e7e7e7;
-}
-
-/*MASK*/
-.ext-el-mask-msg {
-    border:1px solid #5e5e5e;
-    background: #eeeeee url(../images/default/box/tb.gif) repeat-x 0 -16px;
-}
-.ext-el-mask-msg div {
-    border:1px solid #ccc;
-    font:bold 10px verdana, arial, tahoma, helvetica, sans-serif;
-}
-
-/*LOADING MASK GRANDE (GEN�RICO PARA FORMULARIOS)*/
-#class .loading-indicator{
-    font-size: 11px;
-    height:15px;
-}
-.loading-indicator {
-     background-color: white;
-     background-image: none;
-     padding-left:20px;
-     height:15px;
-     text-align:left;
-}
-#loading{
-    position:absolute;
-    left:45%;
-    top:40%;
-    border:1px solid #979797;
-    padding:2px;
-    background:#c6c6c6;
-    width:130px;
-    text-align:center;
-    z-index:20001;
-}
-#loading .loading-indicator{
-    border:1px solid #dedede;
-    color:#000000;
-    font: bold 10px verdana, tahoma,arial,helvetica;
-    padding:5px;
-    margin:0;
-}
-
-/*QTIP GENERAL*/
-.x-tip .x-tip-top {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat 0 -12px;
-}
-.x-tip .x-tip-top-left {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat 0 0;
-}
-.x-tip .x-tip-top-right {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat right 0;
-}
-.x-tip .x-tip-ft {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat 0 -18px;
-}
-.x-tip .x-tip-ft-left {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat 0 -6px;
-}
-.x-tip .x-tip-ft-right {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat right -6px;
-}
-.x-tip .x-tip-bd {
-    font: normal 11px arial, tahoma,arial,helvetica,sans-serif;
-}
-.x-tip .x-tip-bd-left {
-	background: #fff url(../images/galdaka/qtip/tip-sprite.gif) no-repeat 0 -24px;
-}
-.x-tip .x-tip-bd-right {
-	background: transparent url(../images/galdaka/qtip/tip-sprite.gif) no-repeat right -24px;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/ytheme-gray.css b/lib/web/extjs/resources/css/ytheme-gray.css
deleted file mode 100644
index 1af230a8fc1933bfc02e77c2700bf8cdf959340a..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/ytheme-gray.css
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Ext JS Library 1.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-
-.ext-el-mask-msg {
-    border:1px solid #aaa;
-    background: #ddd url(../images/default/box/tb.gif) repeat-x 0 -16px;
-}
-.ext-el-mask-msg div {
-    border:1px solid #ccc;
-}
-
-/*
- Menu
- */
-.x-menu {
-	border-color: #999 #999 #999 #999;
-    background-image:url(../images/gray/menu/menu.gif);
-}
-.x-menu-item-arrow{
-	background-image:url(../images/gray/menu/menu-parent.gif);
-}
-.x-menu-item {
-	color:#222;
-}
-.x-menu-item-active {
-	background:#ddd;
-    border:1px solid #aaa;
-}
-.x-menu-sep {
-	background:#aaa;
-}
-
-/* grid */
-.x-grid-header{
-	background: #ebeadb url(../images/gray/grid/grid-hrow.gif) repeat-x;
-	overflow:hidden;
-	position:relative;
-	cursor:default;
-	width:100%;
-}
-.x-grid-hd-row{
-	height:22px;
-}
-.x-grid-hd {
-	padding-right:1px;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #fcc247;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background: #faf9f4;
-    padding-bottom:1px;
-    border-bottom: 1px solid #f9a900;
-}
-
-.x-grid-hd-text {
-	color:#000000;
-}
-
-.x-grid-col {
-	border-right: 1px solid #f1efe2;
-	border-bottom: 1px solid #f1efe2;
-}
-.x-grid-row-alt{
-	background:#fcfaf6;
-}
-.x-grid-row-over td{
-	background:#f1f1f1;
-}
-
-
-.x-grid-locked .x-grid-body td {
-	background: #f0efe4;
-	border-right: 1px solid #D6D2C2;
-	border-bottom: 1px solid #D6D2C2 !important;
-}
-
-.x-grid-locked .x-grid-header table{
-    border-right:1px solid transparent;
-}
-.x-grid-locked .x-grid-body table{
-    border-right:1px solid #c6c2b2;
-}
-
-.x-grid-bottombar .x-toolbar{
-	border-right:0 none;
-	border-bottom:0 none;
-	border-top:1px solid #f1efe2;
-}
-
-.x-props-grid .x-grid-col-name{
-	 background-color: #f1efe2;
-}
-
-
-
-.x-grid-locked td.x-grid-row-marker, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker{
-    background: #ebeadb url(../images/gray/grid/grid-hrow.gif) repeat-x 0 bottom !important;
-    vertical-align:middle !important;
-    color:black;
-    padding:0;
-    border-top:1px solid white;
-    border-bottom:none !important;
-    border-right:1px solid #d6d2c2 !important;
-    text-align:center;
-}
-.x-grid-locked td.x-grid-row-marker div, .x-grid-locked .x-grid-row-selected td.x-grid-row-marker div{
-    padding:0 4px;
-    color:black !important;
-    text-align:center;
-}
-
-/**
-* Basic-Dialog 
-*/
-.x-dlg-proxy {
-	background-image: url(../images/gray/layout/gradient-bg.gif);
-	background-color:#EAE8D5;
-	border:1px solid #b3b6b0;
-}
-.x-dlg-shadow{
-	background:#aaaaaa;
-}
-.x-dlg-proxy .tabset{
-    background:url(../images/gray/layout/gradient-bg.gif);
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/gray/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:#333333;
-}
-.x-dlg .x-dlg-hd-left {
-	background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/gray/basic-dialog/hd-sprite.gif) no-repeat right 0;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:#efefec;
-	border:1px solid #b3b6b0;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:1px solid #b3b6b0;
-	border-top:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #b3b6b0;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .x-dlg-close {
-	background-image:url(../images/gray/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/gray/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/gray/basic-dialog/expand.gif);
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/gray/basic-dialog/e-handle.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/gray/basic-dialog/s-handle.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/gray/basic-dialog/e-handle.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/gray/basic-dialog/se-handle.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/gray/sizer/sw-handle-dark.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/gray/s.gif);
-	border:0 none;
-}
-
-/** 
-* Tabs
-*/
-.x-tabs-wrap {
-	border-bottom:1px solid #aca899;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#333333;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -100px;
-}
-.x-tabs-top .x-tabs-strip .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-top .x-tabs-strip .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-sprite.gif) no-repeat 0px -150px;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	background-image:url(../images/gray/layout/tab-close.gif);
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/gray/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/gray/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #aca899;
-    border-top:0 none;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-bottom:0 none;
-	padding-top:0;
-	border-top:1px solid #aca899;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/gray/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/gray/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #aca899;
-    border-bottom:0 none;
-}
-
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-/* QuickTips */
-
-.x-tip .x-tip-top {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-left {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-right {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-left {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-right {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-left {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-right {
-	background-image: url(../images/gray/qtip/tip-sprite.gif);
-}
-
-/* BorderLayout */
-
-.x-layout-container{
-    background-color:#f3f2e7;
-}
-.x-layout-collapsed{
-    background-color:#f3f2e7;
-	 border:1px solid #aca899;
-}
-.x-layout-collapsed-over{
-	 background-color:#fbfbef;
-}
-.x-layout-panel{
-    border:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-split{
-    background-color:#f3f2e7;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/gray/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #aca899;
-}
-.x-layout-tools-button-over{
-    border:1px solid #aca899;
-}
-.x-layout-close{
-    background-image:url(../images/gray/layout/panel-close.gif);
-}
-.x-layout-stick{
-    background-image:url(../images/gray/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/gray/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/gray/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/gray/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/gray/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background-image:url(../images/gray/sizer/e-handle-dark.gif);
-}
-.x-layout-split-v{
-    background-image:url(../images/gray/sizer/s-handle-dark.gif);
-}
-.x-layout-panel .x-tabs-wrap{
-    background:url(../images/gray/layout/gradient-bg.gif);
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #aca899;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #aca899;
-}
-.x-layout-panel-dragover {
-	border: 2px solid #aca899;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/gray/layout/gradient-bg.gif);
-	background-color:#f3f2e7;
-	border:1px dashed #aca899;
-}
-/** Resizable */
-
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/gray/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/gray/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/gray/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/gray/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/gray/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/gray/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/gray/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/gray/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #615e55;
-}
-
-/** Toolbar */
-.x-toolbar{
-	border:0 none;
-	background: #efefe3 url(../images/gray/toolbar/gray-bg.gif) repeat-x;
-	padding:3px;
-}
-.x-toolbar .x-btn-over .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/gray/toolbar/tb-btn-sprite.gif) no-repeat 0 0;
-}
-.x-toolbar .x-btn-over .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/gray/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/gray/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-.x-toolbar .x-btn-over .x-btn-menu-arrow-wrap .x-btn-center button {
-	background-position: 0 -47px;
-}
-.x-paging-info {
-    color:#222222;
-}
-
-/* combo box */
-.x-combo-list {
-    border:1px solid #999;
-    background:#dddddd;
-}
-.x-combo-list-hd {
-    color:#222;
-    background-image: url(../images/gray/layout/panel-title-light-bg.gif);
-    border-bottom:1px solid #aca899;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #aaa;
-}
-.x-combo-list .x-combo-selected{
-	background:#ddd !important;
-    border:1px solid #aaa;
-}
\ No newline at end of file
diff --git a/lib/web/extjs/resources/css/ytheme-vista.css b/lib/web/extjs/resources/css/ytheme-vista.css
deleted file mode 100644
index 7c604952dd5f412008a5ec4f707fb35b8e383965..0000000000000000000000000000000000000000
--- a/lib/web/extjs/resources/css/ytheme-vista.css
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
- * Ext JS Library 1.0
- * Copyright(c) 2006-2007, Ext JS, LLC.
- * licensing@extjs.com
- * 
- * http://www.extjs.com/license
- */
-
-.ext-el-mask-msg {
-    border:1px solid #aaa;
-    background: #ddd url(../images/default/box/tb.gif) repeat-x 0 -16px;
-}
-.ext-el-mask-msg div {
-    border:1px solid #ccc;
-}
-/*
- Menu
- */
-.x-menu {
-	border-color: #999 #999 #999 #999;
-    background-image:url(../images/gray/menu/menu.gif);
-}
-.x-menu-item-arrow{
-	background-image:url(../images/gray/menu/menu-parent.gif);
-}
-.x-menu-item {
-	color:#222;
-}
-.x-menu-item-active {
-	background:#ddd;
-    border:1px solid #aaa;
-}
-.x-menu-sep {
-	background:#aaa;
-}
-/** 
-* Tabs
-*/
-.x-tabs-wrap {
-	background:#4f4f4f;
-	border-bottom:1px solid #b3b6b0;
-}
-.x-tabs-strip .x-tabs-text {
-	color:white;
-	font-weight:normal;
-}
-.x-tabs-strip .on .x-tabs-text {
-	cursor:default;
-	color:#333333;
-}
-.x-tabs-top .x-tabs-strip a.x-tabs-right {
-	background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat right -50px;
-}
-.x-tabs-top .x-tabs-strip a .x-tabs-left{
-	background:transparent url(../images/vista/tabs/tab-sprite.gif) no-repeat 0px -150px;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/vista/tabs/tab-sprite.gif) no-repeat right 0;
-}
-.x-tabs-top .x-tabs-strip .on .x-tabs-left{
-	 background: url(../images/vista/tabs/tab-sprite.gif) no-repeat 0px -100px;
-}
-.x-tabs-strip .x-tabs-closable .close-icon{
-	background-image:url(../images/vista/layout/tab-close.gif);
-}
-.x-tabs-strip .on .close-icon{
-	background-image:url(../images/vista/layout/tab-close-on.gif);
-}
-.x-tabs-strip .x-tabs-closable .close-over{
-	background-image:url(../images/vista/layout/tab-close-on.gif);
-}
-.x-tabs-body {
-    border:1px solid #b3b6b0;
-    border-top:0 none;
-}
-
-.x-tabs-bottom .x-tabs-strip {
-	background:#4f4f4f;
-}
-.x-tabs-bottom .x-tabs-strip a.x-tabs-right {
-	background:transparent url(../images/vista/tabs/tab-btm-inactive-right-bg.gif) no-repeat bottom right;
-}
-.x-tabs-bottom .x-tabs-strip a .x-tabs-left{
-	background:transparent url(../images/vista/tabs/tab-btm-inactive-left-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-wrap {
-	border-bottom:0 none;
-	padding-top:0;
-	border-top:1px solid #b3b6b0;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-right {
-	 background: url(../images/vista/tabs/tab-btm-right-bg.gif) no-repeat bottom left;
-}
-.x-tabs-bottom .x-tabs-strip .on .x-tabs-left {
-	 background: url(../images/vista/tabs/tab-btm-left-bg.gif) no-repeat bottom right;
-}
-
-.x-tabs-bottom .x-tabs-body {
-    border:1px solid #b3b6b0;
-    border-bottom:0 none;
-}
-/**
-* Basic-Dialog 
-*/
-.x-dlg-proxy {
-	background:#d3d6d0;
-	border:2px solid #b3b6b0;
-}
-.x-dlg-shadow{
-	background:#cccccc;
-   opacity:.3;
-   -moz-opacity:.3;
-   filter: alpha(opacity=30);
-}
-.x-dlg .x-dlg-hd {
-	background: url(../images/vista/basic-dialog/hd-sprite.gif) repeat-x 0 -82px;
-	background-color:#333333;
-	zoom:1;
-}
-.x-dlg .x-dlg-hd-left {
-	opacity:.95;-moz-opacity:.95;filter:alpha(opacity=90);
-	background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat 0 -41px;
-	zoom:1;
-}
-.x-dlg .x-dlg-hd-right {
-	background: url(../images/vista/basic-dialog/hd-sprite.gif) no-repeat right 0;
-	zoom:1;
-}
-.x-dlg .x-dlg-dlg-body{
-	background:#fff;
-	border:0 none;
-	border-top:0 none;
-	padding:0 0px 0px;
-	position:absolute;
-	top:24px;left:0;
-	z-index:1;
-}
-.x-dlg-auto-tabs .x-dlg-dlg-body{
-	background:transparent;
-}
-.x-dlg-auto-tabs .x-tabs-top .x-tabs-wrap{
-	background:transparent;
-}
-.x-dlg .x-dlg-ft{
-	border-top:1px solid #b3b6b0;
-	background:#F0F0F0;
-	padding-bottom:8px;
-}
-.x-dlg .x-dlg-bg{
-	opacity:.90;-moz-opacity:.90;filter:alpha(opacity=85);
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-left,.x-dlg .x-dlg-bg-center,.x-dlg .x-dlg-bg-right{
-}
-.x-dlg .x-dlg-bg-center {
-	padding: 0px 4px 4px 4px;
-	background:transparent url(../images/vista/basic-dialog/bg-center.gif) repeat-x bottom;
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-left{
-	padding-left:4px;
-	background:transparent url(../images/vista/basic-dialog/bg-left.gif) no-repeat bottom left;
-	zoom:1;
-}
-.x-dlg .x-dlg-bg-right{
-	padding-right:4px;
-	background:transparent url(../images/vista/basic-dialog/bg-right.gif) no-repeat bottom right;
-	zoom:1;
-}
-.x-dlg .x-tabs-top .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .x-tabs-bottom .x-tabs-body{
-	border:1px solid #b3b6b0;
-	border-bottom:0 none;
-}
-.x-dlg .x-layout-container  .x-tabs-body{
-	border:0 none;
-}
-.x-dlg .x-dlg-close {
-    background-image:url(../images/vista/basic-dialog/close.gif);
-}
-.x-dlg .x-dlg-collapse {
-    background-image:url(../images/vista/basic-dialog/collapse.gif);
-}
-.x-dlg-collapsed .x-dlg-collapse {
-    background-image:url(../images/vista/basic-dialog/expand.gif);
-}
-.x-dlg div.x-resizable-handle-east{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-south{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-west{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-.x-dlg div.x-resizable-handle-southeast{
-	background-image:url(../images/vista/s.gif);
-	background-position: bottom right;
-	width:8px;
-	height:8px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-southwest{
-	background-image:url(../images/vista/s.gif);
-	background-position: top right;
-	margin-left:1px;
-	margin-bottom:1px;
-	border:0;
-}
-.x-dlg div.x-resizable-handle-north{
-	background-image:url(../images/vista/s.gif);
-	border:0 none;
-}
-
-/* QuickTips */
-
-.x-tip .x-tip-top {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-left {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-top-right {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-left {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-ft-right {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-left {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-.x-tip .x-tip-bd-right {
-	background-image: url(../images/vista/qtip/tip-sprite.gif);
-}
-
-.x-tip .x-tip-bd-inner {
-    padding:2px;
-}
-
-/* BorderLayout */
-.x-layout-container{
-    background:#4f4f4f;
-}
-.x-layout-collapsed{
-    background-color:#9f9f9f;
-	 border:1px solid #4c535c;
-}
-.x-layout-collapsed-over{
-	 background-color:#bfbfbf;
-}
-.x-layout-panel{
-    border:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel {
-	  border:0 none;
-}
-.x-layout-split{
-    background-color:#f3f2e7;
-}
-.x-layout-panel-hd{
-    background-image: url(../images/vista/layout/panel-title-bg.gif);
-    border-bottom:1px solid #b5bac1;
-    color:white;
-}
-.x-layout-panel-hd-text{
-	color:white;
-}
-.x-layout-tools-button-over{
-    border:1px solid #4c535c;
-	 background:#9f9f9f url(../images/vista/layout/panel-title-bg.gif) repeat-x;
-}
-.x-layout-close{
-    background-image:url(../images/vista/layout/tab-close.gif);
-}
-
-.x-layout-stick{
-    background-image:url(../images/vista/layout/stick.gif);
-}
-.x-layout-collapse-west,.x-layout-expand-east{
-    background-image:url(../images/vista/layout/collapse.gif);
-}
-.x-layout-expand-west,.x-layout-collapse-east{
-    background-image:url(../images/vista/layout/expand.gif);
-}
-.x-layout-collapse-north,.x-layout-expand-south{
-    background-image:url(../images/vista/layout/ns-collapse.gif);
-}
-.x-layout-expand-north,.x-layout-collapse-south{
-    background-image:url(../images/vista/layout/ns-expand.gif);
-}
-.x-layout-split-h{
-    background:#9f9f9f;
-}
-.x-layout-split-v{
-    background:#9f9f9f;
-}
-.x-layout-panel .x-tabs-wrap{
-    background:#4f4f4f;
-}
-.x-layout-nested-layout .x-layout-panel-north {
-	  border-bottom:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel-south {
-	  border-top:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel-east {
-	  border-left:1px solid #4c535c;
-}
-.x-layout-nested-layout .x-layout-panel-west {
-	  border-right:1px solid #4c535c;
-}
-.x-layout-panel-dragover {
-	border: 2px solid #4c535c;
-}
-.x-layout-panel-proxy {
-	background-image: url(../images/vista/layout/gradient-bg.gif);
-	background-color:#f3f2e7;
-	border:1px dashed #4c535c;
-}
-
-.x-layout-container .x-layout-tabs-body{
-	border:0 none;
-}
-/** Resizable */
-
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-east{
-    background:url(../images/vista/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-east, .x-resizable-pinned .x-resizable-handle-west{
-    background:url(../images/vista/sizer/e-handle.gif);
-	 background-position: left;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-south{
-    background:url(../images/vista/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-south, .x-resizable-pinned .x-resizable-handle-north{
-    background:url(../images/vista/sizer/s-handle.gif);
-    background-position: top;
-}
-.x-resizable-over .x-resizable-handle-southeast, .x-resizable-pinned .x-resizable-handle-southeast{
-    background:url(../images/vista/sizer/se-handle.gif);
-    background-position: top left;
-}
-.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{
-    background:url(../images/vista/sizer/nw-handle.gif);
-    background-position:bottom right;
-}
-.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{
-    background:url(../images/vista/sizer/ne-handle.gif);
-    background-position: bottom left;
-}
-.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{
-    background:url(../images/vista/sizer/sw-handle.gif);
-    background-position: top right;
-}
-.x-resizable-proxy{
-    border: 1px dashed #615e55;
-}
-
-/** Toolbar */
-.x-toolbar{
-	border:0 none;
-	background: #efefe3 url(../images/vista/toolbar/gray-bg.gif) repeat-x;
-	padding:3px;
-}
-.x-toolbar .ytb-button-over{
-	border:1px solid transparent;
-	border-bottom:1px solid #bbbbbb;
-	border-top:1px solid #eeeeee;
-	background:#9f9f9f url(../images/vista/grid/grid-vista-hd.gif) repeat-x;
-}
-
-.x-paging-info {
-    color:#000;
-}
-/* grid */
-.x-grid-topbar .x-toolbar{
-	border:0;
-	border-bottom:1px solid #555;
-}
-.x-grid-bottombar .x-toolbar{
-	border:0;
-	border-top:1px solid #555;
-}
-.x-grid-locked .x-grid-body td {
-	background: #fafafa;
-	border-right: 1px solid #e1e1e1;
-	border-bottom: 1px solid #e1e1e1 !important;
-}
-.x-grid-locked .x-grid-body td .x-grid-cell-inner {
-	border-top:0 none;
-}
-.x-grid-locked .x-grid-row-alt td{
-	background: #f1f1f1;
-}
-.x-grid-locked .x-grid-row-selected td{
-	color: #fff !important;
-	background-color: #316ac5 !important;
-}
-.x-grid-hd{
-	border-bottom:0;
-	background:none;
-}
-.x-grid-hd-row{
-	height:auto;
-}
-.x-grid-split {
-	background-image: url(../images/vista/grid/grid-split.gif);
-}
-.x-grid-header{
-	background: url(../images/vista/grid/grid-vista-hd.gif);
-	border:0 none;
-    border-bottom:1px solid #555;
-}
-.x-grid-row-alt{
-	background-color: #f5f5f5;
-}
-.x-grid-row-over td{
-	background-color:#eeeeee;
-}
-.x-grid-col {
-	border-right: 1px solid #eee;
-	border-bottom: 1px solid #eee;
-}
-.x-grid-header .x-grid-hd-inner {
-	padding-bottom: 1px;
-}
-.x-grid-header  .x-grid-hd-text {
-	padding-bottom: 3px;
-    color:#333333;
-}
-.x-grid-hd-over .x-grid-hd-inner {
-	border-bottom: 1px solid #555;
-	padding-bottom: 0;
-}
-.x-grid-hd-over .x-grid-hd-text {
-	background-color: #fafafa;
-	border-bottom: 1px solid #555;
-	padding-bottom: 2px;
-}
-.x-grid-header .sort-asc .x-grid-hd-inner, .x-grid-header .sort-desc .x-grid-hd-inner {
-	border-bottom: 1px solid #555;
-	padding-bottom: 0;
-}
-.x-grid-header .sort-asc  .x-grid-hd-text, .x-grid-header .sort-desc .x-grid-hd-text {
-	border-bottom: 1px solid #3b5a82;
-	padding-bottom: 2px;
-}
-.x-dd-drag-proxy .x-grid-hd-inner{
-	background: url(../images/vista/grid/grid-vista-hd.gif) repeat-x;
-	height:22px;
-	width:120px;
-}
-.x-props-grid .x-grid-col-name{
-	 background-color: #eee;
-}
-/* toolbar */
-.x-toolbar .ytb-sep{
-	background-image: url(../images/vista/grid/grid-split.gif);
-}
-
-.x-toolbar .x-btn-over .x-btn-left{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 0px;
-}
-.x-toolbar .x-btn-over .x-btn-right{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -21px;
-}
-.x-toolbar .x-btn-over .x-btn-center{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) repeat-x 0 -42px;
-}
-
-.x-toolbar .x-btn-click .x-btn-left, .x-toolbar .x-btn-pressed .x-btn-left, .x-toolbar .x-btn-menu-active .x-btn-left{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -63px;
-}
-.x-toolbar .x-btn-click .x-btn-right, .x-toolbar .x-btn-pressed .x-btn-right, .x-toolbar .x-btn-menu-active .x-btn-right{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) no-repeat 0 -84px;
-}
-.x-toolbar .x-btn-click .x-btn-center, .x-toolbar .x-btn-pressed .x-btn-center, .x-toolbar .x-btn-menu-active .x-btn-center{
-	background:url(../images/vista/toolbar/tb-btn-sprite.gif) repeat-x 0 -105px;
-}
-
-/* combo box */
-.x-combo-list {
-    border:1px solid #999;
-    background:#dddddd;
-}
-.x-combo-list-hd {
-    background-image: url(../images/vista/layout/panel-title-bg.gif);
-    border-bottom:1px solid #b5bac1;
-    color:white;
-}
-.x-resizable-pinned .x-combo-list-inner {
-    border-bottom:1px solid #aaa;
-}
-.x-combo-list .x-combo-selected{
-	background:#ddd !important;
-    border:1px solid #aaa;
-}
\ No newline at end of file
diff --git a/lib/web/jquery/jquery.js b/lib/web/jquery.js
similarity index 100%
rename from lib/web/jquery/jquery.js
rename to lib/web/jquery.js
diff --git a/lib/web/jquery/autocomplete/autocomplete.css b/lib/web/jquery/autocomplete/autocomplete.css
deleted file mode 100644
index 4000a35a15c352984f83fadfa13a8d8e730b846a..0000000000000000000000000000000000000000
--- a/lib/web/jquery/autocomplete/autocomplete.css
+++ /dev/null
@@ -1,5 +0,0 @@
-.autocomplete-suggestions { border: 1px solid #999; background: #FFF; cursor: default; overflow: auto; -webkit-box-shadow: 1px 4px 3px rgba(50, 50, 50, 0.64); -moz-box-shadow: 1px 4px 3px rgba(50, 50, 50, 0.64); box-shadow: 1px 4px 3px rgba(50, 50, 50, 0.64); }
-.autocomplete-suggestion { padding: 2px 5px; white-space: nowrap; overflow: hidden; }
-.autocomplete-no-suggestion { padding: 2px 5px;}
-.autocomplete-selected { background: #F0F0F0; }
-.autocomplete-suggestions strong { font-weight: normal; color: #3399FF; }
\ No newline at end of file
diff --git a/lib/web/jquery/autocomplete/jquery.autocomplete.js b/lib/web/jquery/autocomplete/jquery.autocomplete.js
deleted file mode 100644
index 07fa5ca10200e95b83878c3d516fbf6f77f76819..0000000000000000000000000000000000000000
--- a/lib/web/jquery/autocomplete/jquery.autocomplete.js
+++ /dev/null
@@ -1,915 +0,0 @@
-/**
-*  Ajax Autocomplete for jQuery, version 1.2.11
-*  (c) 2014 Tomas Kirda
-*
-*  Ajax Autocomplete for jQuery is freely distributable under the terms of an MIT-style license.
-*  For details, see the web site: https://github.com/devbridge/jQuery-Autocomplete
-*
-*/
-
-/*jslint  browser: true, white: true, plusplus: true */
-/*global define, window, document, jQuery, exports */
-
-// Expose plugin as an AMD module if AMD loader is present:
-(function (factory) {
-    'use strict';
-    if (typeof define === 'function' && define.amd) {
-        // AMD. Register as an anonymous module.
-        define(['jquery'], factory);
-    } else if (typeof exports === 'object' && typeof require === 'function') {
-        // Browserify
-        factory(require('jquery'));
-    } else {
-        // Browser globals
-        factory(jQuery);
-    }
-}(function ($) {
-    'use strict';
-
-    var
-        utils = (function () {
-            return {
-                escapeRegExChars: function (value) {
-                    return value.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
-                },
-                createNode: function (containerClass) {
-                    var div = document.createElement('div');
-                    div.className = containerClass;
-                    div.style.position = 'absolute';
-                    div.style.display = 'none';
-                    return div;
-                }
-            };
-        }()),
-
-        keys = {
-            ESC: 27,
-            TAB: 9,
-            RETURN: 13,
-            LEFT: 37,
-            UP: 38,
-            RIGHT: 39,
-            DOWN: 40
-        };
-
-    function Autocomplete(el, options) {
-        var noop = function () { },
-            that = this,
-            defaults = {
-                ajaxSettings: {},
-                autoSelectFirst: false,
-                appendTo: document.body,
-                serviceUrl: null,
-                lookup: null,
-                onSelect: null,
-                width: 'auto',
-                minChars: 1,
-                maxHeight: 300,
-                deferRequestBy: 0,
-                params: {},
-                formatResult: Autocomplete.formatResult,
-                delimiter: null,
-                zIndex: 9999,
-                type: 'GET',
-                noCache: false,
-                onSearchStart: noop,
-                onSearchComplete: noop,
-                onSearchError: noop,
-                containerClass: 'autocomplete-suggestions',
-                tabDisabled: false,
-                dataType: 'text',
-                currentRequest: null,
-                triggerSelectOnValidInput: true,
-                preventBadQueries: true,
-                lookupFilter: function (suggestion, originalQuery, queryLowerCase) {
-                    return suggestion.value.toLowerCase().indexOf(queryLowerCase) !== -1;
-                },
-                paramName: 'query',
-                transformResult: function (response) {
-                    return typeof response === 'string' ? $.parseJSON(response) : response;
-                },
-                showNoSuggestionNotice: false,
-                noSuggestionNotice: 'No results',
-                orientation: 'bottom',
-                forceFixPosition: false
-            };
-
-        // Shared variables:
-        that.element = el;
-        that.el = $(el);
-        that.suggestions = [];
-        that.badQueries = [];
-        that.selectedIndex = -1;
-        that.currentValue = that.element.value;
-        that.intervalId = 0;
-        that.cachedResponse = {};
-        that.onChangeInterval = null;
-        that.onChange = null;
-        that.isLocal = false;
-        that.suggestionsContainer = null;
-        that.noSuggestionsContainer = null;
-        that.options = $.extend({}, defaults, options);
-        that.classes = {
-            selected: 'autocomplete-selected',
-            suggestion: 'autocomplete-suggestion'
-        };
-        that.hint = null;
-        that.hintValue = '';
-        that.selection = null;
-
-        // Initialize and set options:
-        that.initialize();
-        that.setOptions(options);
-    }
-
-    Autocomplete.utils = utils;
-
-    $.Autocomplete = Autocomplete;
-
-    Autocomplete.formatResult = function (suggestion, currentValue) {
-        var pattern = '(' + utils.escapeRegExChars(currentValue) + ')';
-
-        return suggestion.value.replace(new RegExp(pattern, 'gi'), '<strong>$1<\/strong>');
-    };
-
-    Autocomplete.prototype = {
-
-        killerFn: null,
-
-        initialize: function () {
-            var that = this,
-                suggestionSelector = '.' + that.classes.suggestion,
-                selected = that.classes.selected,
-                options = that.options,
-                container;
-
-            // Remove autocomplete attribute to prevent native suggestions:
-            that.element.setAttribute('autocomplete', 'off');
-
-            that.killerFn = function (e) {
-                if ($(e.target).closest('.' + that.options.containerClass).length === 0) {
-                    that.killSuggestions();
-                    that.disableKillerFn();
-                }
-            };
-
-            // html() deals with many types: htmlString or Element or Array or jQuery
-            that.noSuggestionsContainer = $('<div class="autocomplete-no-suggestion"></div>')
-                                          .html(this.options.noSuggestionNotice).get(0);
-
-            that.suggestionsContainer = Autocomplete.utils.createNode(options.containerClass);
-
-            container = $(that.suggestionsContainer);
-
-            container.appendTo(options.appendTo);
-
-            // Only set width if it was provided:
-            if (options.width !== 'auto') {
-                container.width(options.width);
-            }
-
-            // Listen for mouse over event on suggestions list:
-            container.on('mouseover.autocomplete', suggestionSelector, function () {
-                that.activate($(this).data('index'));
-            });
-
-            // Deselect active element when mouse leaves suggestions container:
-            container.on('mouseout.autocomplete', function () {
-                that.selectedIndex = -1;
-                container.children('.' + selected).removeClass(selected);
-            });
-
-            // Listen for click event on suggestions list:
-            container.on('click.autocomplete', suggestionSelector, function () {
-                that.select($(this).data('index'));
-            });
-
-            that.fixPositionCapture = function () {
-                if (that.visible) {
-                    that.fixPosition();
-                }
-            };
-
-            $(window).on('resize.autocomplete', that.fixPositionCapture);
-
-            that.el.on('keydown.autocomplete', function (e) { that.onKeyPress(e); });
-            that.el.on('keyup.autocomplete', function (e) { that.onKeyUp(e); });
-            that.el.on('blur.autocomplete', function () { that.onBlur(); });
-            that.el.on('focus.autocomplete', function () { that.onFocus(); });
-            that.el.on('change.autocomplete', function (e) { that.onKeyUp(e); });
-        },
-
-        onFocus: function () {
-            var that = this;
-            that.fixPosition();
-            if (that.options.minChars <= that.el.val().length) {
-                that.onValueChange();
-            }
-        },
-
-        onBlur: function () {
-            this.enableKillerFn();
-        },
-
-        setOptions: function (suppliedOptions) {
-            var that = this,
-                options = that.options;
-
-            $.extend(options, suppliedOptions);
-
-            that.isLocal = $.isArray(options.lookup);
-
-            if (that.isLocal) {
-                options.lookup = that.verifySuggestionsFormat(options.lookup);
-            }
-
-            options.orientation = that.validateOrientation(options.orientation, 'bottom');
-
-            // Adjust height, width and z-index:
-            $(that.suggestionsContainer).css({
-                'max-height': options.maxHeight + 'px',
-                'width': options.width + 'px',
-                'z-index': options.zIndex
-            });
-        },
-
-
-        clearCache: function () {
-            this.cachedResponse = {};
-            this.badQueries = [];
-        },
-
-        clear: function () {
-            this.clearCache();
-            this.currentValue = '';
-            this.suggestions = [];
-        },
-
-        disable: function () {
-            var that = this;
-            that.disabled = true;
-            if (that.currentRequest) {
-                that.currentRequest.abort();
-            }
-        },
-
-        enable: function () {
-            this.disabled = false;
-        },
-
-        fixPosition: function () {
-            // Use only when container has already its content
-
-            var that = this,
-                $container = $(that.suggestionsContainer),
-                containerParent = $container.parent().get(0);
-            // Fix position automatically when appended to body.
-            // In other cases force parameter must be given.
-            if (containerParent !== document.body && !that.options.forceFixPosition)
-                return;
-
-            // Choose orientation
-            var orientation = that.options.orientation,
-                containerHeight = $container.outerHeight(),
-                height = that.el.outerHeight(),
-                offset = that.el.offset(),
-                styles = { 'top': offset.top, 'left': offset.left };
-
-            if (orientation == 'auto') {
-                var viewPortHeight = $(window).height(),
-                    scrollTop = $(window).scrollTop(),
-                    topOverflow = -scrollTop + offset.top - containerHeight,
-                    bottomOverflow = scrollTop + viewPortHeight - (offset.top + height + containerHeight);
-
-                orientation = (Math.max(topOverflow, bottomOverflow) === topOverflow)
-                                ? 'top'
-                                : 'bottom';
-            }
-
-            if (orientation === 'top') {
-                styles.top += -containerHeight;
-            } else {
-                styles.top += height;
-            }
-
-            // If container is not positioned to body,
-            // correct its position using offset parent offset
-            if(containerParent !== document.body) {
-                var opacity = $container.css('opacity'),
-                    parentOffsetDiff;
-
-                    if (!that.visible){
-                        $container.css('opacity', 0).show();
-                    }
-
-                parentOffsetDiff = $container.offsetParent().offset();
-                styles.top -= parentOffsetDiff.top;
-                styles.left -= parentOffsetDiff.left;
-
-                if (!that.visible){
-                    $container.css('opacity', opacity).hide();
-                }
-            }
-
-            // -2px to account for suggestions border.
-            if (that.options.width === 'auto') {
-                styles.width = (that.el.outerWidth() - 2) + 'px';
-            }
-
-            $container.css(styles);
-        },
-
-        enableKillerFn: function () {
-            var that = this;
-            $(document).on('click.autocomplete', that.killerFn);
-        },
-
-        disableKillerFn: function () {
-            var that = this;
-            $(document).off('click.autocomplete', that.killerFn);
-        },
-
-        killSuggestions: function () {
-            var that = this;
-            that.stopKillSuggestions();
-            that.intervalId = window.setInterval(function () {
-                that.hide();
-                that.stopKillSuggestions();
-            }, 50);
-        },
-
-        stopKillSuggestions: function () {
-            window.clearInterval(this.intervalId);
-        },
-
-        isCursorAtEnd: function () {
-            var that = this,
-                valLength = that.el.val().length,
-                selectionStart = that.element.selectionStart,
-                range;
-
-            if (typeof selectionStart === 'number') {
-                return selectionStart === valLength;
-            }
-            if (document.selection) {
-                range = document.selection.createRange();
-                range.moveStart('character', -valLength);
-                return valLength === range.text.length;
-            }
-            return true;
-        },
-
-        onKeyPress: function (e) {
-            var that = this;
-
-            // If suggestions are hidden and user presses arrow down, display suggestions:
-            if (!that.disabled && !that.visible && e.which === keys.DOWN && that.currentValue) {
-                that.suggest();
-                return;
-            }
-
-            if (that.disabled || !that.visible) {
-                return;
-            }
-
-            switch (e.which) {
-                case keys.ESC:
-                    that.el.val(that.currentValue);
-                    that.hide();
-                    break;
-                case keys.RIGHT:
-                    if (that.hint && that.options.onHint && that.isCursorAtEnd()) {
-                        that.selectHint();
-                        break;
-                    }
-                    return;
-                case keys.TAB:
-                    if (that.hint && that.options.onHint) {
-                        that.selectHint();
-                        return;
-                    }
-                    // Fall through to RETURN
-                case keys.RETURN:
-                    if (that.selectedIndex === -1) {
-                        that.hide();
-                        return;
-                    }
-                    that.select(that.selectedIndex);
-                    if (e.which === keys.TAB && that.options.tabDisabled === false) {
-                        return;
-                    }
-                    break;
-                case keys.UP:
-                    that.moveUp();
-                    break;
-                case keys.DOWN:
-                    that.moveDown();
-                    break;
-                default:
-                    return;
-            }
-
-            // Cancel event if function did not return:
-            e.stopImmediatePropagation();
-            e.preventDefault();
-        },
-
-        onKeyUp: function (e) {
-            var that = this;
-
-            if (that.disabled) {
-                return;
-            }
-
-            switch (e.which) {
-                case keys.UP:
-                case keys.DOWN:
-                    return;
-            }
-
-            clearInterval(that.onChangeInterval);
-
-            if (that.currentValue !== that.el.val()) {
-                that.findBestHint();
-                if (that.options.deferRequestBy > 0) {
-                    // Defer lookup in case when value changes very quickly:
-                    that.onChangeInterval = setInterval(function () {
-                        that.onValueChange();
-                    }, that.options.deferRequestBy);
-                } else {
-                    that.onValueChange();
-                }
-            }
-        },
-
-        onValueChange: function () {
-            var that = this,
-                options = that.options,
-                value = that.el.val(),
-                query = that.getQuery(value),
-                index;
-
-            if (that.selection && that.currentValue !== query) {
-                that.selection = null;
-                (options.onInvalidateSelection || $.noop).call(that.element);
-            }
-
-            clearInterval(that.onChangeInterval);
-            that.currentValue = value;
-            that.selectedIndex = -1;
-
-            // Check existing suggestion for the match before proceeding:
-            if (options.triggerSelectOnValidInput) {
-                index = that.findSuggestionIndex(query);
-                if (index !== -1) {
-                    that.select(index);
-                    return;
-                }
-            }
-
-            if (query.length < options.minChars) {
-                that.hide();
-            } else {
-                that.getSuggestions(query);
-            }
-        },
-
-        findSuggestionIndex: function (query) {
-            var that = this,
-                index = -1,
-                queryLowerCase = query.toLowerCase();
-
-            $.each(that.suggestions, function (i, suggestion) {
-                if (suggestion.value.toLowerCase() === queryLowerCase) {
-                    index = i;
-                    return false;
-                }
-            });
-
-            return index;
-        },
-
-        getQuery: function (value) {
-            var delimiter = this.options.delimiter,
-                parts;
-
-            if (!delimiter) {
-                return value;
-            }
-            parts = value.split(delimiter);
-            return $.trim(parts[parts.length - 1]);
-        },
-
-        getSuggestionsLocal: function (query) {
-            var that = this,
-                options = that.options,
-                queryLowerCase = query.toLowerCase(),
-                filter = options.lookupFilter,
-                limit = parseInt(options.lookupLimit, 10),
-                data;
-
-            data = {
-                suggestions: $.grep(options.lookup, function (suggestion) {
-                    return filter(suggestion, query, queryLowerCase);
-                })
-            };
-
-            if (limit && data.suggestions.length > limit) {
-                data.suggestions = data.suggestions.slice(0, limit);
-            }
-
-            return data;
-        },
-
-        getSuggestions: function (q) {
-            var response,
-                that = this,
-                options = that.options,
-                serviceUrl = options.serviceUrl,
-                params,
-                cacheKey,
-                ajaxSettings;
-
-            options.params[options.paramName] = q;
-            params = options.ignoreParams ? null : options.params;
-
-            if (that.isLocal) {
-                response = that.getSuggestionsLocal(q);
-            } else {
-                if ($.isFunction(serviceUrl)) {
-                    serviceUrl = serviceUrl.call(that.element, q);
-                }
-                cacheKey = serviceUrl + '?' + $.param(params || {});
-                response = that.cachedResponse[cacheKey];
-            }
-
-            if (response && $.isArray(response.suggestions)) {
-                that.suggestions = response.suggestions;
-                that.suggest();
-            } else if (!that.isBadQuery(q)) {
-                if (options.onSearchStart.call(that.element, options.params) === false) {
-                    return;
-                }
-                if (that.currentRequest) {
-                    that.currentRequest.abort();
-                }
-
-                ajaxSettings = {
-                    url: serviceUrl,
-                    data: params,
-                    type: options.type,
-                    dataType: options.dataType
-                };
-
-                $.extend(ajaxSettings, options.ajaxSettings);
-
-                that.currentRequest = $.ajax(ajaxSettings).done(function (data) {
-                    var result;
-                    that.currentRequest = null;
-                    result = options.transformResult(data);
-                    that.processResponse(result, q, cacheKey);
-                    options.onSearchComplete.call(that.element, q, result.suggestions);
-                }).fail(function (jqXHR, textStatus, errorThrown) {
-                    options.onSearchError.call(that.element, q, jqXHR, textStatus, errorThrown);
-                });
-            }
-        },
-
-        isBadQuery: function (q) {
-            if (!this.options.preventBadQueries){
-                return false;
-            }
-
-            var badQueries = this.badQueries,
-                i = badQueries.length;
-
-            while (i--) {
-                if (q.indexOf(badQueries[i]) === 0) {
-                    return true;
-                }
-            }
-
-            return false;
-        },
-
-        hide: function () {
-            var that = this;
-            that.visible = false;
-            that.selectedIndex = -1;
-            $(that.suggestionsContainer).hide();
-            that.signalHint(null);
-        },
-
-        show: function () {
-            this.visible = true;
-            $(this.suggestionsContainer).show();
-        },
-
-        toggle: function () {
-            this.visible ? this.hide() : this.show();
-        },
-
-        suggest: function () {
-            if (this.suggestions.length === 0) {
-                this.options.showNoSuggestionNotice ? this.noSuggestions() : this.hide();               
-                return;
-            }
-
-            var that = this,
-                options = that.options,
-                formatResult = options.formatResult,
-                value = that.getQuery(that.currentValue),
-                className = that.classes.suggestion,
-                classSelected = that.classes.selected,
-                container = $(that.suggestionsContainer),
-                noSuggestionsContainer = $(that.noSuggestionsContainer),
-                beforeRender = options.beforeRender,
-                html = '',
-                index;
-
-            if (options.triggerSelectOnValidInput) {
-                index = that.findSuggestionIndex(value);
-                if (index !== -1) {
-                    that.select(index);
-                    return;
-                }
-            }
-
-            // Build suggestions inner HTML:
-            $.each(that.suggestions, function (i, suggestion) {
-                html += '<div class="' + className + '" data-index="' + i + '">' + formatResult(suggestion, value) + '</div>';
-            });
-
-            this.adjustContainerWidth();      
-
-            noSuggestionsContainer.detach();
-            container.html(html);
-
-            // Select first value by default:
-            if (options.autoSelectFirst) {
-                that.selectedIndex = 0;
-                container.children().first().addClass(classSelected);
-            }
-
-            if ($.isFunction(beforeRender)) {
-                beforeRender.call(that.element, container);
-            }
-
-            that.fixPosition();
-
-            container.show();
-            that.visible = true;
-
-            that.findBestHint();
-        },
-
-        noSuggestions: function() {
-             var that = this,
-                 container = $(that.suggestionsContainer),
-                 noSuggestionsContainer = $(that.noSuggestionsContainer);
-
-            this.adjustContainerWidth();
-
-            // Some explicit steps. Be careful here as it easy to get
-            // noSuggestionsContainer removed from DOM if not detached properly.
-            noSuggestionsContainer.detach();
-            container.empty(); // clean suggestions if any
-            container.append(noSuggestionsContainer);
-
-            that.fixPosition();
-
-            container.show();
-            that.visible = true;
-        },
-
-        adjustContainerWidth: function() {
-            var that = this,
-                options = that.options,
-                width,
-                container = $(that.suggestionsContainer);
-
-            // If width is auto, adjust width before displaying suggestions,
-            // because if instance was created before input had width, it will be zero.
-            // Also it adjusts if input width has changed.
-            // -2px to account for suggestions border.
-            if (options.width === 'auto') {
-                width = that.el.outerWidth() - 2;
-                container.width(width > 0 ? width : 300);
-            }
-        },
-
-        findBestHint: function () {
-            var that = this,
-                value = that.el.val().toLowerCase(),
-                bestMatch = null;
-
-            if (!value) {
-                return;
-            }
-
-            $.each(that.suggestions, function (i, suggestion) {
-                var foundMatch = suggestion.value.toLowerCase().indexOf(value) === 0;
-                if (foundMatch) {
-                    bestMatch = suggestion;
-                }
-                return !foundMatch;
-            });
-
-            that.signalHint(bestMatch);
-        },
-
-        signalHint: function (suggestion) {
-            var hintValue = '',
-                that = this;
-            if (suggestion) {
-                hintValue = that.currentValue + suggestion.value.substr(that.currentValue.length);
-            }
-            if (that.hintValue !== hintValue) {
-                that.hintValue = hintValue;
-                that.hint = suggestion;
-                (this.options.onHint || $.noop)(hintValue);
-            }
-        },
-
-        verifySuggestionsFormat: function (suggestions) {
-            // If suggestions is string array, convert them to supported format:
-            if (suggestions.length && typeof suggestions[0] === 'string') {
-                return $.map(suggestions, function (value) {
-                    return { value: value, data: null };
-                });
-            }
-
-            return suggestions;
-        },
-
-        validateOrientation: function(orientation, fallback) {
-            orientation = $.trim(orientation || '').toLowerCase();
-
-            if($.inArray(orientation, ['auto', 'bottom', 'top']) === -1){
-                orientation = fallback;
-            }
-
-            return orientation;
-        },
-
-        processResponse: function (result, originalQuery, cacheKey) {
-            var that = this,
-                options = that.options;
-
-            result.suggestions = that.verifySuggestionsFormat(result.suggestions);
-
-            // Cache results if cache is not disabled:
-            if (!options.noCache) {
-                that.cachedResponse[cacheKey] = result;
-                if (options.preventBadQueries && result.suggestions.length === 0) {
-                    that.badQueries.push(originalQuery);
-                }
-            }
-
-            // Return if originalQuery is not matching current query:
-            if (originalQuery !== that.getQuery(that.currentValue)) {
-                return;
-            }
-
-            that.suggestions = result.suggestions;
-            that.suggest();
-        },
-
-        activate: function (index) {
-            var that = this,
-                activeItem,
-                selected = that.classes.selected,
-                container = $(that.suggestionsContainer),
-                children = container.children();
-
-            container.children('.' + selected).removeClass(selected);
-
-            that.selectedIndex = index;
-
-            if (that.selectedIndex !== -1 && children.length > that.selectedIndex) {
-                activeItem = children.get(that.selectedIndex);
-                $(activeItem).addClass(selected);
-                return activeItem;
-            }
-
-            return null;
-        },
-
-        selectHint: function () {
-            var that = this,
-                i = $.inArray(that.hint, that.suggestions);
-
-            that.select(i);
-        },
-
-        select: function (i) {
-            var that = this;
-            that.hide();
-            that.onSelect(i);
-        },
-
-        moveUp: function () {
-            var that = this;
-
-            if (that.selectedIndex === -1) {
-                return;
-            }
-
-            if (that.selectedIndex === 0) {
-                $(that.suggestionsContainer).children().first().removeClass(that.classes.selected);
-                that.selectedIndex = -1;
-                that.el.val(that.currentValue);
-                that.findBestHint();
-                return;
-            }
-
-            that.adjustScroll(that.selectedIndex - 1);
-        },
-
-        moveDown: function () {
-            var that = this;
-
-            if (that.selectedIndex === (that.suggestions.length - 1)) {
-                return;
-            }
-
-            that.adjustScroll(that.selectedIndex + 1);
-        },
-
-        adjustScroll: function (index) {
-            var that = this,
-                activeItem = that.activate(index),
-                offsetTop,
-                upperBound,
-                lowerBound,
-                heightDelta = 25;
-
-            if (!activeItem) {
-                return;
-            }
-
-            offsetTop = activeItem.offsetTop;
-            upperBound = $(that.suggestionsContainer).scrollTop();
-            lowerBound = upperBound + that.options.maxHeight - heightDelta;
-
-            if (offsetTop < upperBound) {
-                $(that.suggestionsContainer).scrollTop(offsetTop);
-            } else if (offsetTop > lowerBound) {
-                $(that.suggestionsContainer).scrollTop(offsetTop - that.options.maxHeight + heightDelta);
-            }
-
-            that.el.val(that.getValue(that.suggestions[index].value));
-            that.signalHint(null);
-        },
-
-        onSelect: function (index) {
-            var that = this,
-                onSelectCallback = that.options.onSelect,
-                suggestion = that.suggestions[index];
-
-            that.currentValue = that.getValue(suggestion.value);
-
-            if (that.currentValue !== that.el.val()) {
-                that.el.val(that.currentValue);
-            }
-
-            that.signalHint(null);
-            that.suggestions = [];
-            that.selection = suggestion;
-
-            if ($.isFunction(onSelectCallback)) {
-                onSelectCallback.call(that.element, suggestion);
-            }
-        },
-
-        getValue: function (value) {
-            var that = this,
-                delimiter = that.options.delimiter,
-                currentValue,
-                parts;
-
-            if (!delimiter) {
-                return value;
-            }
-
-            currentValue = that.currentValue;
-            parts = currentValue.split(delimiter);
-
-            if (parts.length === 1) {
-                return value;
-            }
-
-            return currentValue.substr(0, currentValue.length - parts[parts.length - 1].length) + value;
-        },
-
-        dispose: function () {
-            var that = this;
-            that.el.off('.autocomplete').removeData('autocomplete');
-            that.disableKillerFn();
-            $(window).off('resize.autocomplete', that.fixPositionCapture);
-            $(that.suggestionsContainer).remove();
-        }
-    };
-
-    return Autocomplete;
-}));
\ No newline at end of file
diff --git a/lib/web/jquery/farbtastic/css/farbtastic.css b/lib/web/jquery/farbtastic/css/farbtastic.css
deleted file mode 100644
index 901b467bbfdf9023d9459bc32f7b8d5b81dec44d..0000000000000000000000000000000000000000
--- a/lib/web/jquery/farbtastic/css/farbtastic.css
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-    Farbtastic
--------------------------------------- */
-.farbtastic {
-    display: none;
-    position: relative;
-    right: -120px;
-    top: -50px;
-    z-index: 1;
-}
-
-.farbtastic * {
-    position: absolute;
-    cursor: crosshair;
-}
-
-.farbtastic, .farbtastic .wheel {
-    width: 195px;
-    height: 195px;
-}
-
-.farbtastic .color, .farbtastic .overlay {
-    top: 47px;
-    left: 47px;
-    width: 101px;
-    height: 101px;
-}
-
-.farbtastic .wheel {
-    background: url(../images/wheel.png) no-repeat;
-    width: 195px;
-    height: 195px;
-}
-
-.farbtastic .overlay {
-    background: url(../images/mask.png) no-repeat;
-}
-
-.farbtastic .marker {
-    width: 17px;
-    height: 17px;
-    margin: -8px 0 0 -8px;
-    overflow: hidden;
-    background: url(../images/marker.png) no-repeat;
-}
diff --git a/lib/web/jquery/farbtastic/images/marker.png b/lib/web/jquery/farbtastic/images/marker.png
deleted file mode 100644
index 3929bbb51dd950802bb9bf12a397d1ac1e140610..0000000000000000000000000000000000000000
Binary files a/lib/web/jquery/farbtastic/images/marker.png and /dev/null differ
diff --git a/lib/web/jquery/farbtastic/images/mask.png b/lib/web/jquery/farbtastic/images/mask.png
deleted file mode 100644
index b0a4d406fb645fc8d7e6891ffd85d11b3e181030..0000000000000000000000000000000000000000
Binary files a/lib/web/jquery/farbtastic/images/mask.png and /dev/null differ
diff --git a/lib/web/jquery/farbtastic/images/wheel.png b/lib/web/jquery/farbtastic/images/wheel.png
deleted file mode 100644
index 97b343d98c744561e1acb8f98d2b1a24a5bc0da2..0000000000000000000000000000000000000000
Binary files a/lib/web/jquery/farbtastic/images/wheel.png and /dev/null differ
diff --git a/lib/web/jquery/farbtastic/jquery.farbtastic.js b/lib/web/jquery/farbtastic/jquery.farbtastic.js
deleted file mode 100644
index c6a5b4524988c0c46337fe0601a430affb7856eb..0000000000000000000000000000000000000000
--- a/lib/web/jquery/farbtastic/jquery.farbtastic.js
+++ /dev/null
@@ -1,351 +0,0 @@
-/**
- * Farbtastic Color Picker 1.2
- * © 2008 Steven Wittens
- *
- * 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
- */
-
-define([
-  "jquery"
-], function(jQuery){
-
-jQuery.fn.farbtastic = function (callback) {
-  jQuery.farbtastic(this, callback);
-  return this;
-};
-
-jQuery.farbtastic = function (container, callback) {
-  var container = jQuery(container).get(0);
-  return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback));
-}
-
-jQuery._farbtastic = function (container, callback) {
-  // Store farbtastic object
-  var fb = this;
-
-  // Insert markup
-  jQuery(container).html('<div class="farbtastic"><div class="color"></div><div class="wheel"></div><div class="overlay"></div><div class="h-marker marker"></div><div class="sl-marker marker"></div></div>');
-  var e = jQuery('.farbtastic', container);
-  fb.wheel = jQuery('.wheel', container).get(0);
-  // Dimensions
-  fb.radius = 84;
-  fb.square = 100;
-  fb.width = 194;
-
-  // Fix background PNGs in IE6
-  if (navigator.appVersion.match(/MSIE [0-6]\./)) {
-    jQuery('*', e).each(function () {
-      if (this.currentStyle.backgroundImage != 'none') {
-        var image = this.currentStyle.backgroundImage;
-        image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
-        jQuery(this).css({
-          'backgroundImage': 'none',
-          'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
-        });
-      }
-    });
-  }
-
-  /**
-   * Link to the given element(s) or callback.
-   */
-  fb.linkTo = function (callback) {
-    // Unbind previous nodes
-    if (typeof fb.callback == 'object') {
-      jQuery(fb.callback).unbind('keyup', fb.updateValue);
-    }
-
-    // Reset color
-    fb.color = null;
-
-    // Bind callback or elements
-    if (typeof callback == 'function') {
-      fb.callback = callback;
-    }
-    else if (typeof callback == 'object' || typeof callback == 'string') {
-      fb.callback = jQuery(callback);
-      fb.callback.bind('keyup', fb.updateValue);
-      if (fb.callback.get(0).value) {
-        fb.setColor(fb.callback.get(0).value);
-      }
-    }
-    return this;
-  }
-  fb.updateValue = function (event) {
-    if (this.value && this.value != fb.color) {
-      fb.setColor(this.value);
-    }
-  }
-
-  /**
-   * Change color with HTML syntax #123456
-   */
-  fb.setColor = function (color) {
-    var unpack = fb.unpack(color);
-    if (fb.color != color && unpack) {
-      fb.color = color;
-      fb.rgb = unpack;
-      fb.hsl = fb.RGBToHSL(fb.rgb);
-      fb.updateDisplay();
-    }
-    return this;
-  }
-
-  /**
-   * Change color with HSL triplet [0..1, 0..1, 0..1]
-   */
-  fb.setHSL = function (hsl) {
-    fb.hsl = hsl;
-    fb.rgb = fb.HSLToRGB(hsl);
-    fb.color = fb.pack(fb.rgb);
-    fb.updateDisplay();
-    return this;
-  }
-
-  /////////////////////////////////////////////////////
-
-  /**
-   * Retrieve the coordinates of the given event relative to the center
-   * of the widget.
-   */
-  fb.widgetCoords = function (event) {
-    var x, y;
-    var el = event.target || event.srcElement;
-    var reference = fb.wheel;
-
-    if (typeof event.offsetX != 'undefined') {
-      // Use offset coordinates and find common offsetParent
-      var pos = { x: event.offsetX, y: event.offsetY };
-
-      // Send the coordinates upwards through the offsetParent chain.
-      var e = el;
-      while (e) {
-        e.mouseX = pos.x;
-        e.mouseY = pos.y;
-        pos.x += e.offsetLeft;
-        pos.y += e.offsetTop;
-        e = e.offsetParent;
-      }
-
-      // Look for the coordinates starting from the wheel widget.
-      var e = reference;
-      var offset = { x: 0, y: 0 }
-      while (e) {
-        if (typeof e.mouseX != 'undefined') {
-          x = e.mouseX - offset.x;
-          y = e.mouseY - offset.y;
-          break;
-        }
-        offset.x += e.offsetLeft;
-        offset.y += e.offsetTop;
-        e = e.offsetParent;
-      }
-
-      // Reset stored coordinates
-      e = el;
-      while (e) {
-        e.mouseX = undefined;
-        e.mouseY = undefined;
-        e = e.offsetParent;
-      }
-    }
-    else {
-      // Use absolute coordinates
-      var pos = fb.absolutePosition(reference);
-      x = (event.pageX || 0*(event.clientX + jQuery('html').get(0).scrollLeft)) - pos.x;
-      y = (event.pageY || 0*(event.clientY + jQuery('html').get(0).scrollTop)) - pos.y;
-    }
-    // Subtract distance to middle
-    return { x: x - fb.width / 2, y: y - fb.width / 2 };
-  }
-
-  /**
-   * Mousedown handler
-   */
-  fb.mousedown = function (event) {
-    // Capture mouse
-    if (!document.dragging) {
-      jQuery(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup);
-      document.dragging = true;
-    }
-
-    // Check which area is being dragged
-    var pos = fb.widgetCoords(event);
-    fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
-
-    // Process
-    fb.mousemove(event);
-    return false;
-  }
-
-  /**
-   * Mousemove handler
-   */
-  fb.mousemove = function (event) {
-    // Get coordinates relative to color picker center
-    var pos = fb.widgetCoords(event);
-
-    // Set new HSL parameters
-    if (fb.circleDrag) {
-      var hue = Math.atan2(pos.x, -pos.y) / 6.28;
-      if (hue < 0) hue += 1;
-      fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
-    }
-    else {
-      var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
-      var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
-      fb.setHSL([fb.hsl[0], sat, lum]);
-    }
-    return false;
-  }
-
-  /**
-   * Mouseup handler
-   */
-  fb.mouseup = function () {
-    // Uncapture mouse
-    jQuery(document).unbind('mousemove', fb.mousemove);
-    jQuery(document).unbind('mouseup', fb.mouseup);
-    document.dragging = false;
-  }
-
-  /**
-   * Update the markers and styles
-   */
-  fb.updateDisplay = function () {
-    // Markers
-    var angle = fb.hsl[0] * 6.28;
-    jQuery('.h-marker', e).css({
-      left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
-      top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
-    });
-
-    jQuery('.sl-marker', e).css({
-      left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
-      top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
-    });
-
-    // Saturation/Luminance gradient
-    jQuery('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));
-
-    // Linked elements or callback
-    if (typeof fb.callback == 'object') {
-      // Set background/foreground color
-      jQuery(fb.callback).css({
-        backgroundColor: fb.color,
-        color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
-      });
-
-      // Change linked value
-      jQuery(fb.callback).each(function() {
-        if (this.value && this.value != fb.color) {
-          this.value = fb.color;
-        }
-      });
-    }
-    else if (typeof fb.callback == 'function') {
-      fb.callback.call(fb, fb.color);
-    }
-  }
-
-  /**
-   * Get absolute position of element
-   */
-  fb.absolutePosition = function (el) {
-    var r = { x: el.offsetLeft, y: el.offsetTop };
-    // Resolve relative to offsetParent
-    if (el.offsetParent) {
-      var tmp = fb.absolutePosition(el.offsetParent);
-      r.x += tmp.x;
-      r.y += tmp.y;
-    }
-    return r;
-  };
-
-  /* Various color utility functions */
-  fb.pack = function (rgb) {
-    var r = Math.round(rgb[0] * 255);
-    var g = Math.round(rgb[1] * 255);
-    var b = Math.round(rgb[2] * 255);
-    return '#' + (r < 16 ? '0' : '') + r.toString(16) +
-           (g < 16 ? '0' : '') + g.toString(16) +
-           (b < 16 ? '0' : '') + b.toString(16);
-  }
-
-  fb.unpack = function (color) {
-    if (color.length == 7) {
-      return [parseInt('0x' + color.substring(1, 3)) / 255,
-        parseInt('0x' + color.substring(3, 5)) / 255,
-        parseInt('0x' + color.substring(5, 7)) / 255];
-    }
-    else if (color.length == 4) {
-      return [parseInt('0x' + color.substring(1, 2)) / 15,
-        parseInt('0x' + color.substring(2, 3)) / 15,
-        parseInt('0x' + color.substring(3, 4)) / 15];
-    }
-  }
-
-  fb.HSLToRGB = function (hsl) {
-    var m1, m2, r, g, b;
-    var h = hsl[0], s = hsl[1], l = hsl[2];
-    m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
-    m1 = l * 2 - m2;
-    return [this.hueToRGB(m1, m2, h+0.33333),
-        this.hueToRGB(m1, m2, h),
-        this.hueToRGB(m1, m2, h-0.33333)];
-  }
-
-  fb.hueToRGB = function (m1, m2, h) {
-    h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
-    if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
-    if (h * 2 < 1) return m2;
-    if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
-    return m1;
-  }
-
-  fb.RGBToHSL = function (rgb) {
-    var min, max, delta, h, s, l;
-    var r = rgb[0], g = rgb[1], b = rgb[2];
-    min = Math.min(r, Math.min(g, b));
-    max = Math.max(r, Math.max(g, b));
-    delta = max - min;
-    l = (min + max) / 2;
-    s = 0;
-    if (l > 0 && l < 1) {
-      s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
-    }
-    h = 0;
-    if (delta > 0) {
-      if (max == r && max != g) h += (g - b) / delta;
-      if (max == g && max != b) h += (2 + (b - r) / delta);
-      if (max == b && max != r) h += (4 + (r - g) / delta);
-      h /= 6;
-    }
-    return [h, s, l];
-  }
-
-  // Install mousedown handler (the others are set on the document on-demand)
-  jQuery('*', e).mousedown(fb.mousedown);
-
-    // Init color
-  fb.setColor('#000000');
-
-  // Set linked elements/callback
-  if (callback) {
-    fb.linkTo(callback);
-  }
-}
-
-});
\ No newline at end of file
diff --git a/lib/web/jquery/fileUploader/bootstrap.js b/lib/web/jquery/fileUploader/bootstrap.js
deleted file mode 100644
index 10747cbd61d0c05289a2cc82a702ed8433f0a73a..0000000000000000000000000000000000000000
--- a/lib/web/jquery/fileUploader/bootstrap.js
+++ /dev/null
@@ -1,3 +0,0 @@
-require([
-    "jquery/file-uploader"
-]);
\ No newline at end of file
diff --git a/lib/web/jquery/jquery-ui-1.9.2.js b/lib/web/jquery/jquery-ui-1.9.2.js
index cc141602954f86adcce844f8ee003507e05ad12f..d556f0d7f605fcc1ab4dad10ebd7ee6d3e5bc35c 100644
--- a/lib/web/jquery/jquery-ui-1.9.2.js
+++ b/lib/web/jquery/jquery-ui-1.9.2.js
@@ -3,17 +3,6 @@
 * Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
 * Copyright 2012 jQuery Foundation and other contributors; Licensed MIT */
 
-(function (factory) {
-    if (typeof define === 'function' && define.amd) {
-        define([
-            "jquery",
-            "jquery/jquery.cookie"
-        ], factory);
-    } else {
-        factory(jQuery);
-    }
-}(function (jQuery) {
-
 (function( $, undefined ) {
 
 var uuid = 0,
@@ -14942,5 +14931,3 @@ $.widget( "ui.tooltip", {
 });
 
 }( jQuery ) );
-
-}));
\ No newline at end of file
diff --git a/lib/web/jquery/jquery-ui.js b/lib/web/jquery/jquery-ui.js
index b64228ac1c49c7a42ab36d6163ed59cd57d534af..63e278a8fd46100febc22f2874248550058a9732 100644
--- a/lib/web/jquery/jquery-ui.js
+++ b/lib/web/jquery/jquery-ui.js
@@ -2,10 +2,7 @@
 * http://jqueryui.com
 * Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.draggable.js, jquery.ui.droppable.js, jquery.ui.resizable.js, jquery.ui.selectable.js, jquery.ui.sortable.js, jquery.ui.effect.js, jquery.ui.accordion.js, jquery.ui.autocomplete.js, jquery.ui.button.js, jquery.ui.datepicker.js, jquery.ui.dialog.js, jquery.ui.effect-blind.js, jquery.ui.effect-bounce.js, jquery.ui.effect-clip.js, jquery.ui.effect-drop.js, jquery.ui.effect-explode.js, jquery.ui.effect-fade.js, jquery.ui.effect-fold.js, jquery.ui.effect-highlight.js, jquery.ui.effect-pulsate.js, jquery.ui.effect-scale.js, jquery.ui.effect-shake.js, jquery.ui.effect-slide.js, jquery.ui.effect-transfer.js, jquery.ui.menu.js, jquery.ui.position.js, jquery.ui.progressbar.js, jquery.ui.slider.js, jquery.ui.spinner.js, jquery.ui.tabs.js, jquery.ui.tooltip.js
 * Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
-define([
-	"jquery",
-	"jquery/jquery.cookie"
-], function(jQuery){
+
 (function( $, undefined ) {
 
 var uuid = 0,
@@ -15042,5 +15039,3 @@ $.widget( "ui.tooltip", {
 });
 
 }( jQuery ) );
-
-});
\ No newline at end of file
diff --git a/lib/web/jquery/jquery.min.js b/lib/web/jquery/jquery.min.js
index 73f33fb3aa529308d1f3f2f4fc253c4abed95374..046e93aa15e754747f529679e8c1567377f1bd6d 100644
--- a/lib/web/jquery/jquery.min.js
+++ b/lib/web/jquery/jquery.min.js
@@ -1,4 +1,4 @@
 /*! jQuery v1.11.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m="1.11.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!j.call(a,"constructor")&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(l.ownLast)for(b in a)return j.call(a,b);for(b in a);return void 0===b||j.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:k&&!k.call("\ufeff\xa0")?function(a){return null==a?"":k.call(a)}:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(g)return g.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=d.call(arguments,2),e=function(){return a.apply(b||this,c.concat(d.call(arguments)))},e.guid=a.guid=a.guid||n.guid++,e):void 0},now:function(){return+new Date},support:l}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="<select t=''><option selected=''></option></select>",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=jb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=kb(b);function nb(){}nb.prototype=d.filters=d.pseudos,d.setFilters=new nb;function ob(a,b){var c,e,f,g,h,i,j,k=x[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=Q.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?db.error(a):x(a,i).slice(0)}function pb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=a.document,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,B=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:A.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:z,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=z.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return y.find(a);this.length=1,this[0]=d}return this.context=z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};B.prototype=n.fn,y=n(z);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!n(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.unique(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g,G={};function H(a){var b=G[a]={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G[a]||H(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&n.each(arguments,function(a,c){var d;while((d=n.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){if(a===!0?!--n.readyWait:!n.isReady){if(!z.body)return setTimeout(n.ready);n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(z,[n]),n.fn.trigger&&n(z).trigger("ready").off("ready"))}}});function J(){z.addEventListener?(z.removeEventListener("DOMContentLoaded",K,!1),a.removeEventListener("load",K,!1)):(z.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(z.addEventListener||"load"===event.type||"complete"===z.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===z.readyState)setTimeout(n.ready);else if(z.addEventListener)z.addEventListener("DOMContentLoaded",K,!1),a.addEventListener("load",K,!1);else{z.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&z.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!n.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}J(),n.ready()}}()}return I.promise(b)};var L="undefined",M;for(M in n(l))break;l.ownLast="0"!==M,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c=z.getElementsByTagName("body")[0];c&&(a=z.createElement("div"),a.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",b=z.createElement("div"),c.appendChild(a).appendChild(b),typeof b.style.zoom!==L&&(b.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1",(l.inlineBlockNeedsLayout=3===b.offsetWidth)&&(c.style.zoom=1)),c.removeChild(a),a=b=null)}),function(){var a=z.createElement("div");if(null==l.deleteExpando){l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}}a=null}(),n.acceptData=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(n.acceptData(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f
 }}function S(a,b,c){if(n.acceptData(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d]));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},W=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},X=/^(?:checkbox|radio)$/i;!function(){var a=z.createDocumentFragment(),b=z.createElement("div"),c=z.createElement("input");if(b.setAttribute("className","t"),b.innerHTML="  <link/><table></table><a href='/a'>a</a>",l.leadingWhitespace=3===b.firstChild.nodeType,l.tbody=!b.getElementsByTagName("tbody").length,l.htmlSerialize=!!b.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==z.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,a.appendChild(c),l.appendChecked=c.checked,b.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,a.appendChild(b),b.innerHTML="<input type='radio' checked='checked' name='t'/>",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){l.noCloneEvent=!1}),b.cloneNode(!0).click()),null==l.deleteExpando){l.deleteExpando=!0;try{delete b.test}catch(d){l.deleteExpando=!1}}a=b=c=null}(),function(){var b,c,d=z.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),l[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var Y=/^(?:input|select|textarea)$/i,Z=/^key/,$=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,ab=/^([^.]*)(?:\.(.+)|)$/;function bb(){return!0}function cb(){return!1}function db(){try{return z.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof n===L||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=ab.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=ab.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,m,o=[d||z],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||z,3!==d.nodeType&&8!==d.nodeType&&!_.test(p+n.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[n.expando]?b:new n.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),k=n.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!n.isWindow(d)){for(i=k.delegateType||p,_.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||z)&&o.push(l.defaultView||l.parentWindow||a)}m=0;while((h=o[m++])&&!b.isPropagationStopped())b.type=m>1?i:k.bindType||p,f=(n._data(h,"events")||{})[b.type]&&n._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&n.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&n.acceptData(d)&&g&&d[p]&&!n.isWindow(d)){l=d[g],l&&(d[g]=null),n.event.triggered=p;try{d[p]()}catch(r){}n.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((n.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?n(c,this).index(i)>=0:n.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=$.test(e)?this.mouseHooks:Z.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||z),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button,g=b.fromElement;return null==a.pageX&&null!=b.clientX&&(d=a.target.ownerDocument||z,e=d.documentElement,c=d.body,a.pageX=b.clientX+(e&&e.scrollLeft||c&&c.scrollLeft||0)-(e&&e.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(e&&e.scrollTop||c&&c.scrollTop||0)-(e&&e.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&g&&(a.relatedTarget=g===a.target?b.toElement:g),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==db()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===db()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=z.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]===L&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&(a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault())?bb:cb):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:cb,isPropagationStopped:cb,isImmediatePropagationStopped:cb,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=bb,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=bb,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submitBubbles||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?b.form:void 0;c&&!n._data(c,"submitBubbles")&&(n.event.add(c,"submit._submit",function(a){a._submit_bubble=!0}),n._data(c,"submitBubbles",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.changeBubbles||(n.event.special.change={setup:function(){return Y.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._just_changed=!0)}),n.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),n.event.simulate("change",this,a,!0)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;Y.test(b.nodeName)&&!n._data(b,"changeBubbles")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a,!0)}),n._data(b,"changeBubbles",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!Y.test(this.nodeName)}}),l.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(f in a)this.on(f,b,c,a[f],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=cb;else if(!d)return this;return 1===e&&(g=d,d=function(a){return n().off(a),g.apply(this,arguments)},d.guid=g.guid||(g.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=cb),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});function eb(a){var b=fb.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}var fb="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gb=/ jQuery\d+="(?:null|\d+)"/g,hb=new RegExp("<(?:"+fb+")[\\s/>]","i"),ib=/^\s+/,jb=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,kb=/<([\w:]+)/,lb=/<tbody/i,mb=/<|&#?\w+;/,nb=/<(?:script|style|link)/i,ob=/checked\s*(?:[^=]|=\s*.checked.)/i,pb=/^$|\/(?:java|ecma)script/i,qb=/^true\/(.*)/,rb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,sb={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},tb=eb(z),ub=tb.appendChild(z.createElement("div"));sb.optgroup=sb.option,sb.tbody=sb.tfoot=sb.colgroup=sb.caption=sb.thead,sb.th=sb.td;function vb(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==L?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==L?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,vb(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function wb(a){X.test(a.type)&&(a.defaultChecked=a.checked)}function xb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function yb(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function zb(a){var b=qb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ab(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}function Bb(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Cb(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(yb(b).text=a.text,zb(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&X.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}n.extend({clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!hb.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ub.innerHTML=a.outerHTML,ub.removeChild(f=ub.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=vb(f),h=vb(a),g=0;null!=(e=h[g]);++g)d[g]&&Cb(e,d[g]);if(b)if(c)for(h=h||vb(a),d=d||vb(f),g=0;null!=(e=h[g]);g++)Bb(e,d[g]);else Bb(a,f);return d=vb(f,"script"),d.length>0&&Ab(d,!i&&vb(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,m=a.length,o=eb(b),p=[],q=0;m>q;q++)if(f=a[q],f||0===f)if("object"===n.type(f))n.merge(p,f.nodeType?[f]:f);else if(mb.test(f)){h=h||o.appendChild(b.createElement("div")),i=(kb.exec(f)||["",""])[1].toLowerCase(),k=sb[i]||sb._default,h.innerHTML=k[1]+f.replace(jb,"<$1></$2>")+k[2],e=k[0];while(e--)h=h.lastChild;if(!l.leadingWhitespace&&ib.test(f)&&p.push(b.createTextNode(ib.exec(f)[0])),!l.tbody){f="table"!==i||lb.test(f)?"<table>"!==k[1]||lb.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)n.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}n.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),l.appendChecked||n.grep(vb(p,"input"),wb),q=0;while(f=p[q++])if((!d||-1===n.inArray(f,d))&&(g=n.contains(f.ownerDocument,f),h=vb(o.appendChild(f),"script"),g&&Ab(h),c)){e=0;while(f=h[e++])pb.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.deleteExpando,m=n.event.special;null!=(d=a[h]);h++)if((b||n.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k?delete d[i]:typeof d.removeAttribute!==L?d.removeAttribute(i):d[i]=null,c.push(f))}}}),n.fn.extend({text:function(a){return W(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||z).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=xb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(vb(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&Ab(vb(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(vb(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return W(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(gb,""):void 0;if(!("string"!=typeof a||nb.test(a)||!l.htmlSerialize&&hb.test(a)||!l.leadingWhitespace&&ib.test(a)||sb[(kb.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(jb,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(vb(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(vb(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,o=k-1,p=a[0],q=n.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&ob.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(i=n.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=n.map(vb(i,"script"),yb),f=g.length;k>j;j++)d=i,j!==o&&(d=n.clone(d,!0,!0),f&&n.merge(g,vb(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,n.map(g,zb),j=0;f>j;j++)d=g[j],pb.test(d.type||"")&&!n._data(d,"globalEval")&&n.contains(h,d)&&(d.src?n._evalUrl&&n._evalUrl(d.src):n.globalEval((d.text||d.textContent||d.innerHTML||"").replace(rb,"")));i=c=null}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],g=n(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Db,Eb={};function Fb(b,c){var d=n(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:n.css(d[0],"display");return d.detach(),e}function Gb(a){var b=z,c=Eb[a];return c||(c=Fb(a,b),"none"!==c&&c||(Db=(Db||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Db[0].contentWindow||Db[0].contentDocument).document,b.write(),b.close(),c=Fb(a,b),Db.detach()),Eb[a]=c),c}!function(){var a,b,c=z.createElement("div"),d="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],a.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(a.style.opacity),l.cssFloat=!!a.style.cssFloat,c.style.backgroundClip="content-box",c.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===c.style.backgroundClip,a=c=null,l.shrinkWrapBlocks=function(){var a,c,e,f;if(null==b){if(a=z.getElementsByTagName("body")[0],!a)return;f="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",c=z.createElement("div"),e=z.createElement("div"),a.appendChild(c).appendChild(e),b=!1,typeof e.style.zoom!==L&&(e.style.cssText=d+";width:1px;padding:1px;zoom:1",e.innerHTML="<div></div>",e.firstChild.style.width="5px",b=3!==e.offsetWidth),a.removeChild(c),a=c=e=null}return b}}();var Hb=/^margin/,Ib=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Jb,Kb,Lb=/^(top|right|bottom|left)$/;a.getComputedStyle?(Jb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),Ib.test(g)&&Hb.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):z.documentElement.currentStyle&&(Jb=function(a){return a.currentStyle},Kb=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Jb(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ib.test(g)&&!Lb.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Mb(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h=z.createElement("div"),i="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",j="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";h.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",b=h.getElementsByTagName("a")[0],b.style.cssText="float:left;opacity:.5",l.opacity=/^0.5/.test(b.style.opacity),l.cssFloat=!!b.style.cssFloat,h.style.backgroundClip="content-box",h.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===h.style.backgroundClip,b=h=null,n.extend(l,{reliableHiddenOffsets:function(){if(null!=c)return c;var a,b,d,e=z.createElement("div"),f=z.getElementsByTagName("body")[0];if(f)return e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=z.createElement("div"),a.style.cssText=i,f.appendChild(a).appendChild(e),e.innerHTML="<table><tr><td></td><td>t</td></tr></table>",b=e.getElementsByTagName("td"),b[0].style.cssText="padding:0;margin:0;border:0;display:none",d=0===b[0].offsetHeight,b[0].style.display="",b[1].style.display="none",c=d&&0===b[0].offsetHeight,f.removeChild(a),e=f=null,c},boxSizing:function(){return null==d&&k(),d},boxSizingReliable:function(){return null==e&&k(),e},pixelPosition:function(){return null==f&&k(),f},reliableMarginRight:function(){var b,c,d,e;if(null==g&&a.getComputedStyle){if(b=z.getElementsByTagName("body")[0],!b)return;c=z.createElement("div"),d=z.createElement("div"),c.style.cssText=i,b.appendChild(c).appendChild(d),e=d.appendChild(z.createElement("div")),e.style.cssText=d.style.cssText=j,e.style.marginRight=e.style.width="0",d.style.width="1px",g=!parseFloat((a.getComputedStyle(e,null)||{}).marginRight),b.removeChild(c)}return g}});function k(){var b,c,h=z.getElementsByTagName("body")[0];h&&(b=z.createElement("div"),c=z.createElement("div"),b.style.cssText=i,h.appendChild(b).appendChild(c),c.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",n.swap(h,null!=h.style.zoom?{zoom:1}:{},function(){d=4===c.offsetWidth}),e=!0,f=!1,g=!0,a.getComputedStyle&&(f="1%"!==(a.getComputedStyle(c,null)||{}).top,e="4px"===(a.getComputedStyle(c,null)||{width:"4px"}).width),h.removeChild(b),c=h=null)}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Nb=/alpha\([^)]*\)/i,Ob=/opacity\s*=\s*([^)]*)/,Pb=/^(none|table(?!-c[ea]).+)/,Qb=new RegExp("^("+T+")(.*)$","i"),Rb=new RegExp("^([+-])=("+T+")","i"),Sb={position:"absolute",visibility:"hidden",display:"block"},Tb={letterSpacing:0,fontWeight:400},Ub=["Webkit","O","Moz","ms"];function Vb(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ub.length;while(e--)if(b=Ub[e]+c,b in a)return b;return d}function Wb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",Gb(d.nodeName)))):f[g]||(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Xb(a,b,c){var d=Qb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Yb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function Zb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Jb(a),g=l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Kb(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ib.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Yb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Kb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=Vb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Rb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]="",i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Vb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Kb(a,b,d)),"normal"===f&&b in Tb&&(f=Tb[b]),""===c||c?(e=parseFloat(f),c===!0||n.isNumeric(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?0===a.offsetWidth&&Pb.test(n.css(a,"display"))?n.swap(a,Sb,function(){return Zb(a,b,d)}):Zb(a,b,d):void 0},set:function(a,c,d){var e=d&&Jb(a);return Xb(a,c,d?Yb(a,b,d,l.boxSizing()&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Ob.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Nb,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Nb.test(f)?f.replace(Nb,e):f+" "+e)}}),n.cssHooks.marginRight=Mb(l.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},Kb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Hb.test(a)||(n.cssHooks[a+b].set=Xb)}),n.fn.extend({css:function(a,b){return W(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Jb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)
-},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
+},a,b,arguments.length>1)},show:function(){return Wb(this,!0)},hide:function(){return Wb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function $b(a,b,c,d,e){return new $b.prototype.init(a,b,c,d,e)}n.Tween=$b,$b.prototype={constructor:$b,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=$b.propHooks[this.prop];return a&&a.get?a.get(this):$b.propHooks._default.get(this)},run:function(a){var b,c=$b.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):$b.propHooks._default.set(this),this}},$b.prototype.init.prototype=$b.prototype,$b.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},$b.propHooks.scrollTop=$b.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=$b.prototype.init,n.fx.step={};var _b,ac,bc=/^(?:toggle|show|hide)$/,cc=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),dc=/queueHooks$/,ec=[jc],fc={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=cc.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&cc.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function gc(){return setTimeout(function(){_b=void 0}),_b=n.now()}function hc(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function ic(a,b,c){for(var d,e=(fc[b]||[]).concat(fc["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function jc(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k=Gb(a.nodeName),"none"===j&&(j=k),"inline"===j&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==k?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],bc.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}if(!n.isEmptyObject(o)){r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=ic(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function kc(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function lc(a,b,c){var d,e,f=0,g=ec.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=_b||gc(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:_b||gc(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(kc(k,j.opts.specialEasing);g>f;f++)if(d=ec[f].call(j,a,k,j.opts))return d;return n.map(k,ic,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(lc,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],fc[c]=fc[c]||[],fc[c].unshift(b)},prefilter:function(a,b){b?ec.unshift(a):ec.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=lc(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&dc.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(hc(b,!0),a,d,e)}}),n.each({slideDown:hc("show"),slideUp:hc("hide"),slideToggle:hc("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(_b=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),_b=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ac||(ac=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(ac),ac=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a,b,c,d,e=z.createElement("div");e.setAttribute("className","t"),e.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=e.getElementsByTagName("a")[0],c=z.createElement("select"),d=c.appendChild(z.createElement("option")),b=e.getElementsByTagName("input")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==e.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=d.selected,l.enctype=!!z.createElement("form").enctype,c.disabled=!0,l.optDisabled=!d.disabled,b=z.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value,a=b=c=d=e=null}();var mc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(mc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.text(a)}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(l.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var nc,oc,pc=n.expr.attrHandle,qc=/^(?:checked|selected)$/i,rc=l.getSetAttribute,sc=l.input;n.fn.extend({attr:function(a,b){return W(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===L?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?oc:nc)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?sc&&rc||!qc.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(rc?c:d)},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),oc={set:function(a,b,c){return b===!1?n.removeAttr(a,c):sc&&rc||!qc.test(c)?a.setAttribute(!rc&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=pc[b]||n.find.attr;pc[b]=sc&&rc||!qc.test(b)?function(a,b,d){var e,f;return d||(f=pc[b],pc[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,pc[b]=f),e}:function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),sc&&rc||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):nc&&nc.set(a,b,c)}}),rc||(nc={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},pc.id=pc.name=pc.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:nc.set},n.attrHooks.contenteditable={set:function(a,b,c){nc.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var tc=/^(?:input|select|textarea|button|object)$/i,uc=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return W(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):tc.test(a.nodeName)||uc.test(a.nodeName)&&a.href?0:-1}}}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var vc=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(F)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(vc," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===L||"boolean"===c)&&(this.className&&n._data(this,"__className__",this.className),this.className=this.className||a===!1?"":n._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(vc," ").indexOf(b)>=0)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var wc=n.now(),xc=/\?/,yc=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(yc,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var zc,Ac,Bc=/#.*$/,Cc=/([?&])_=[^&]*/,Dc=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Ec=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Fc=/^(?:GET|HEAD)$/,Gc=/^\/\//,Hc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ic={},Jc={},Kc="*/".concat("*");try{Ac=location.href}catch(Lc){Ac=z.createElement("a"),Ac.href="",Ac=Ac.href}zc=Hc.exec(Ac.toLowerCase())||[];function Mc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nc(a,b,c,d){var e={},f=a===Jc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Oc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Pc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Qc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ac,type:"GET",isLocal:Ec.test(zc[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Oc(Oc(a,n.ajaxSettings),b):Oc(n.ajaxSettings,a)},ajaxPrefilter:Mc(Ic),ajaxTransport:Mc(Jc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Dc.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||Ac)+"").replace(Bc,"").replace(Gc,zc[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(F)||[""],null==k.crossDomain&&(c=Hc.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===zc[1]&&c[2]===zc[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(zc[3]||("http:"===zc[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),Nc(Ic,k,b,v),2===t)return v;h=k.global,h&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Fc.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(xc.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Cc.test(e)?e.replace(Cc,"$1_="+wc++):e+(xc.test(e)?"&":"?")+"_="+wc++)),k.ifModified&&(n.lastModified[e]&&v.setRequestHeader("If-Modified-Since",n.lastModified[e]),n.etag[e]&&v.setRequestHeader("If-None-Match",n.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Kc+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Nc(Jc,k,b,v)){v.readyState=1,h&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Pc(k,v,c)),u=Qc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(n.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!l.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||n.css(a,"display"))},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Rc=/%20/g,Sc=/\[\]$/,Tc=/\r?\n/g,Uc=/^(?:submit|button|image|reset|file)$/i,Vc=/^(?:input|select|textarea|keygen)/i;function Wc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||Sc.test(a)?d(a,e):Wc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Wc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Wc(c,a[c],b,e);return d.join("&").replace(Rc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Vc.test(this.nodeName)&&!Uc.test(a)&&(this.checked||!X.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(Tc,"\r\n")}}):{name:b.name,value:c.replace(Tc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&$c()||_c()}:$c;var Xc=0,Yc={},Zc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Yc)Yc[a](void 0,!0)}),l.cors=!!Zc&&"withCredentials"in Zc,Zc=l.ajax=!!Zc,Zc&&n.ajaxTransport(function(a){if(!a.crossDomain||l.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Xc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Yc[g],b=void 0,f.onreadystatechange=n.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Yc[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function $c(){try{return new a.XMLHttpRequest}catch(b){}}function _c(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=z.head||n("head")[0]||z.documentElement;return{send:function(d,e){b=z.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ad=[],bd=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ad.pop()||n.expando+"_"+wc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(bd.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&bd.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(bd,"$1"+e):b.jsonp!==!1&&(b.url+=(xc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ad.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||z;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var cd=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&cd)return cd.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=a.slice(h,a.length),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&n.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,e||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var dd=a.document.documentElement;function ed(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(typeof e.getBoundingClientRect!==L&&(d=e.getBoundingClientRect()),c=ed(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||dd;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||dd})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return W(this,function(a,d,e){var f=ed(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Mb(l.pixelPosition,function(a,c){return c?(c=Kb(a,b),Ib.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return W(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var fd=a.jQuery,gd=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=gd),b&&a.jQuery===n&&(a.jQuery=fd),n},typeof b===L&&(a.jQuery=a.$=n),n});
\ No newline at end of file
diff --git a/lib/web/jquery/jquery.mousewheel.js b/lib/web/jquery/jquery.mousewheel.js
deleted file mode 100644
index 38b60951b201bedf3e1005ed49cbd1c0834d5815..0000000000000000000000000000000000000000
--- a/lib/web/jquery/jquery.mousewheel.js
+++ /dev/null
@@ -1,84 +0,0 @@
-/*! Copyright (c) 2011 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.0.6
- * 
- * Requires: 1.2.2+
- */
-
-(function($) {
-
-var types = ['DOMMouseScroll', 'mousewheel'];
-
-if ($.event.fixHooks) {
-    for ( var i=types.length; i; ) {
-        $.event.fixHooks[ types[--i] ] = $.event.mouseHooks;
-    }
-}
-
-$.event.special.mousewheel = {
-    setup: function() {
-        if ( this.addEventListener ) {
-            for ( var i=types.length; i; ) {
-                this.addEventListener( types[--i], handler, false );
-            }
-        } else {
-            this.onmousewheel = handler;
-        }
-    },
-    
-    teardown: function() {
-        if ( this.removeEventListener ) {
-            for ( var i=types.length; i; ) {
-                this.removeEventListener( types[--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, returnValue = true, deltaX = 0, deltaY = 0;
-    event = $.event.fix(orgEvent);
-    event.type = "mousewheel";
-    
-    // Old school scrollwheel delta
-    if ( orgEvent.wheelDelta ) { delta = orgEvent.wheelDelta/120; }
-    if ( orgEvent.detail     ) { delta = -orgEvent.detail/3; }
-    
-    // New school multidimensional scroll (touchpads) deltas
-    deltaY = delta;
-    
-    // Gecko
-    if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) {
-        deltaY = 0;
-        deltaX = -1*delta;
-    }
-    
-    // Webkit
-    if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; }
-    if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; }
-    
-    // Add event and delta to the front of the arguments
-    args.unshift(event, delta, deltaX, deltaY);
-    
-    return ($.event.dispatch || $.event.handle).apply(this, args);
-}
-
-})(jQuery);
diff --git a/lib/web/jquery/jquery.popups.js b/lib/web/jquery/jquery.popups.js
deleted file mode 100644
index 8849f53c3203c30f8cd2aefbb79b66b5e7062439..0000000000000000000000000000000000000000
--- a/lib/web/jquery/jquery.popups.js
+++ /dev/null
@@ -1,244 +0,0 @@
-/* ========================================================================
- * Bootstrap: modal.js v3.1.0
- * http://getbootstrap.com/javascript/#modals
- * ========================================================================
- * Copyright 2011-2014 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- * ======================================================================== */
-
-
-+function ($) {
-  'use strict';
-
-  // POPUP CLASS DEFINITION
-  // ======================
-
-  var Popup = function (element, options) {
-    this.options   = options
-    this.$element  = $(element)
-    this.$overlay =
-    this.isShown   = null
-
-    if (this.options.remote) {
-      this.$element
-        .find('.popup.content')
-        .load(this.options.remote, $.proxy(function () {
-          this.$element.trigger('loaded.bs.popup')
-        }, this))
-    }
-  }
-
-  Popup.DEFAULTS = {
-    overlay: true,
-    keyboard: true,
-    show: true
-  }
-
-  Popup.prototype.toggle = function (_relatedTarget) {
-    return this[!this.isShown ? 'show' : 'hide'](_relatedTarget)
-  }
-
-  Popup.prototype.show = function (_relatedTarget) {
-    var that = this
-    var e    = $.Event('show.bs.popup', { relatedTarget: _relatedTarget })
-
-    this.$element.trigger(e)
-
-    if (this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = true
-
-    this.escape()
-
-    this.$element.on('click.dismiss.bs.popup', '[data-dismiss="popup"]', $.proxy(this.hide, this))
-
-    this.overlay(function () {
-      var transition = $.support.transition && that.$element.hasClass('fade')
-
-      if (!that.$element.parent().length) {
-        that.$element.appendTo(document.body) // don't move popups dom position
-      }
-
-      that.$element
-        .show()
-        .scrollTop(0)
-
-      if (transition) {
-        that.$element[0].offsetWidth // force reflow
-      }
-
-      that.$element
-        .addClass('active')
-        .attr('aria-hidden', false)
-
-      that.enforceFocus()
-
-      var e = $.Event('shown.bs.popup', { relatedTarget: _relatedTarget })
-
-      // transition ?
-      //   that.$element.find('.popup-dialog') // wait for popup to slide in
-      //     .one($.support.transition.end, function () {
-      //       that.$element.focus().trigger(e)
-      //     })
-      //     .emulateTransitionEnd(300) :
-        that.$element.focus().trigger(e)
-    })
-  }
-
-  Popup.prototype.hide = function (e) {
-    if (e) e.preventDefault()
-
-    e = $.Event('hide.bs.popup')
-
-    this.$element.trigger(e)
-
-    if (!this.isShown || e.isDefaultPrevented()) return
-
-    this.isShown = false
-
-    this.escape()
-
-    $(document).off('focusin.bs.popup')
-
-    this.$element
-      .removeClass('active')
-      .attr('aria-hidden', true)
-      .off('click.dismiss.bs.popup')
-
-    // $.support.transition && this.$element.hasClass('fade') ?
-    //   this.$element
-    //     .one($.support.transition.end, $.proxy(this.hidePopup, this))
-    //     .emulateTransitionEnd(300) :
-      this.hidePopup()
-  }
-
-  Popup.prototype.enforceFocus = function () {
-    $(document)
-      .off('focusin.bs.popup') // guard against infinite focus loop
-      .on('focusin.bs.popup', $.proxy(function (e) {
-        if (this.$element[0] !== e.target && !this.$element.has(e.target).length) {
-          this.$element.focus()
-        }
-      }, this))
-  }
-
-  Popup.prototype.escape = function () {
-    if (this.isShown && this.options.keyboard) {
-      this.$element.on('keyup.dismiss.bs.popup', $.proxy(function (e) {
-        e.which == 27 && this.hide()
-      }, this))
-    } else if (!this.isShown) {
-      this.$element.off('keyup.dismiss.bs.popup')
-    }
-  }
-
-  Popup.prototype.hidePopup = function () {
-    var that = this
-    this.$element.hide()
-    this.overlay(function () {
-      that.removeBackdrop()
-      that.$element.trigger('hidden.bs.popup')
-    })
-  }
-
-  Popup.prototype.removeBackdrop = function () {
-    this.$overlay && this.$overlay.remove()
-    this.$overlay = null
-  }
-
-  Popup.prototype.overlay = function (callback) {
-    var animate = this.$element.hasClass('fade') ? 'fade' : ''
-
-    if (this.isShown && this.options.overlay) {
-      var doAnimate = $.support.transition && animate
-
-      this.$overlay = $('<div class="window overlay ' + animate + '" />')
-        .appendTo(document.body)
-
-      this.$element.on('click.dismiss.bs.popup', $.proxy(function (e) {
-        if (e.target !== e.currentTarget) return
-        this.options.overlay == 'static'
-          ? this.$element[0].focus.call(this.$element[0])
-          : this.hide.call(this)
-      }, this))
-
-      if (doAnimate) this.$overlay[0].offsetWidth // force reflow
-
-      this.$overlay.addClass('active')
-
-      if (!callback) return
-
-      // doAnimate ?
-      //   this.$overlay
-      //     .one($.support.transition.end, callback)
-      //     .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (!this.isShown && this.$overlay) {
-      this.$overlay.removeClass('active')
-
-      // $.support.transition && this.$element.hasClass('fade') ?
-      //   this.$overlay
-      //     .one($.support.transition.end, callback)
-      //     .emulateTransitionEnd(150) :
-        callback()
-
-    } else if (callback) {
-      callback()
-    }
-  }
-
-
-  // POPUP PLUGIN DEFINITION
-  // =======================
-
-  var old = $.fn.popup
-
-  $.fn.popup = function (option, _relatedTarget) {
-    return this.each(function () {
-      var $this   = $(this)
-      var data    = $this.data('bs.popup')
-      var options = $.extend({}, Popup.DEFAULTS, $this.data(), typeof option == 'object' && option)
-
-      if (!data) $this.data('bs.popup', (data = new Popup(this, options)))
-      if (typeof option == 'string') data[option](_relatedTarget)
-      else if (options.show) data.show(_relatedTarget)
-    })
-  }
-
-  $.fn.popup.Constructor = Popup
-
-
-  // POPUP NO CONFLICT
-  // =================
-
-  $.fn.popup.noConflict = function () {
-    $.fn.popup = old
-    return this
-  }
-
-
-  // POPUP DATA-API
-  // ==============
-
-  $(document).on('click.bs.popup.data-api', '[data-toggle="popup"]', function (e) {
-    var $this   = $(this)
-    var href    = $this.attr('href')
-    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7
-    var option  = $target.data('bs.popup') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
-
-    if ($this.is('a')) e.preventDefault()
-
-    $target
-      .popup(option, this)
-      .one('hide', function () {
-        $this.is(':visible') && $this.focus()
-      })
-  })
-
-  $(document)
-    .on('show.bs.popup', '.popup', function () { $(document.body).addClass('popup-open') })
-    .on('hidden.bs.popup', '.popup', function () { $(document.body).removeClass('popup-open') })
-
-
-}(jQuery);
\ No newline at end of file
diff --git a/lib/web/legacy-build.min.js b/lib/web/legacy-build.min.js
new file mode 100644
index 0000000000000000000000000000000000000000..60e39b33097e4d5d1f81d11292293240700a089a
--- /dev/null
+++ b/lib/web/legacy-build.min.js
@@ -0,0 +1,8 @@
+var Prototype={Version:"1.7",Browser:(function(){var ua=navigator.userAgent;var isOpera=Object.prototype.toString.call(window.opera)=="[object Opera]";return{IE:!!window.attachEvent&&!isOpera,Opera:isOpera,WebKit:ua.indexOf("AppleWebKit/")>-1,Gecko:ua.indexOf("Gecko")>-1&&ua.indexOf("KHTML")===-1,MobileSafari:/Apple.*Mobile/.test(ua)}})(),BrowserFeatures:{XPath:!!document.evaluate,SelectorsAPI:!!document.querySelector,ElementExtensions:(function(){var constructor=window.Element||window.HTMLElement;return !!(constructor&&constructor.prototype)})(),SpecificElementExtensions:(function(){if(typeof window.HTMLDivElement!=="undefined"){return true}var div=document.createElement("div"),form=document.createElement("form"),isSupported=false;if(div.__proto__&&(div.__proto__!==form.__proto__)){isSupported=true}div=form=null;return isSupported})()},ScriptFragment:"<script[^>]*>([\\S\\s]*?)<\/script>",JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari){Prototype.BrowserFeatures.SpecificElementExtensions=false}var Abstract={};var Try={these:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break}catch(e){}}return returnValue}};var Class=(function(){var IS_DONTENUM_BUGGY=(function(){for(var p in {toString:1}){if(p==="toString"){return false}}return true})();function subclass(){}function create(){var parent=null,properties=$A(arguments);if(Object.isFunction(properties[0])){parent=properties.shift()}function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=parent;klass.subclasses=[];if(parent){subclass.prototype=parent.prototype;klass.prototype=new subclass;parent.subclasses.push(klass)}for(var i=0,length=properties.length;i<length;i++){klass.addMethods(properties[i])}if(!klass.prototype.initialize){klass.prototype.initialize=Prototype.emptyFunction}klass.prototype.constructor=klass;return klass}function addMethods(source){var ancestor=this.superclass&&this.superclass.prototype,properties=Object.keys(source);if(IS_DONTENUM_BUGGY){if(source.toString!=Object.prototype.toString){properties.push("toString")}if(source.valueOf!=Object.prototype.valueOf){properties.push("valueOf")}}for(var i=0,length=properties.length;i<length;i++){var property=properties[i],value=source[property];if(ancestor&&Object.isFunction(value)&&value.argumentNames()[0]=="$super"){var method=value;value=(function(m){return function(){return ancestor[m].apply(this,arguments)}})(property).wrap(method);value.valueOf=method.valueOf.bind(method);value.toString=method.toString.bind(method)}this.prototype[property]=value}return this}return{create:create,Methods:{addMethods:addMethods}}})();(function(){var _toString=Object.prototype.toString,NULL_TYPE="Null",UNDEFINED_TYPE="Undefined",BOOLEAN_TYPE="Boolean",NUMBER_TYPE="Number",STRING_TYPE="String",OBJECT_TYPE="Object",FUNCTION_CLASS="[object Function]",BOOLEAN_CLASS="[object Boolean]",NUMBER_CLASS="[object Number]",STRING_CLASS="[object String]",ARRAY_CLASS="[object Array]",DATE_CLASS="[object Date]",NATIVE_JSON_STRINGIFY_SUPPORT=window.JSON&&typeof JSON.stringify==="function"&&JSON.stringify(0)==="0"&&typeof JSON.stringify(Prototype.K)==="undefined";function Type(o){switch(o){case null:return NULL_TYPE;case (void 0):return UNDEFINED_TYPE}var type=typeof o;switch(type){case"boolean":return BOOLEAN_TYPE;case"number":return NUMBER_TYPE;case"string":return STRING_TYPE}return OBJECT_TYPE}function extend(destination,source){for(var property in source){destination[property]=source[property]}return destination}function inspect(object){try{if(isUndefined(object)){return"undefined"}if(object===null){return"null"}return object.inspect?object.inspect():String(object)}catch(e){if(e instanceof RangeError){return"..."}throw e}}function toJSON(value){return Str("",{"":value},[])}function Str(key,holder,stack){var value=holder[key],type=typeof value;if(Type(value)===OBJECT_TYPE&&typeof value.toJSON==="function"){value=value.toJSON(key)}var _class=_toString.call(value);switch(_class){case NUMBER_CLASS:case BOOLEAN_CLASS:case STRING_CLASS:value=value.valueOf()}switch(value){case null:return"null";case true:return"true";case false:return"false"}type=typeof value;switch(type){case"string":return value.inspect(true);case"number":return isFinite(value)?String(value):"null";case"object":for(var i=0,length=stack.length;i<length;i++){if(stack[i]===value){throw new TypeError()}}stack.push(value);var partial=[];if(_class===ARRAY_CLASS){for(var i=0,length=value.length;i<length;i++){var str=Str(i,value,stack);partial.push(typeof str==="undefined"?"null":str)}partial="["+partial.join(",")+"]"}else{var keys=Object.keys(value);for(var i=0,length=keys.length;i<length;i++){var key=keys[i],str=Str(key,value,stack);if(typeof str!=="undefined"){partial.push(key.inspect(true)+":"+str)}}partial="{"+partial.join(",")+"}"}stack.pop();return partial}}function stringify(object){return JSON.stringify(object)}function toQueryString(object){return $H(object).toQueryString()}function toHTML(object){return object&&object.toHTML?object.toHTML():String.interpret(object)}function keys(object){if(Type(object)!==OBJECT_TYPE){throw new TypeError()}var results=[];for(var property in object){if(object.hasOwnProperty(property)){results.push(property)}}return results}function values(object){var results=[];for(var property in object){results.push(object[property])}return results}function clone(object){return extend({},object)}function isElement(object){return !!(object&&object.nodeType==1)}function isArray(object){return _toString.call(object)===ARRAY_CLASS}var hasNativeIsArray=(typeof Array.isArray=="function")&&Array.isArray([])&&!Array.isArray({});if(hasNativeIsArray){isArray=Array.isArray}function isHash(object){return object instanceof Hash}function isFunction(object){return _toString.call(object)===FUNCTION_CLASS}function isString(object){return _toString.call(object)===STRING_CLASS}function isNumber(object){return _toString.call(object)===NUMBER_CLASS}function isDate(object){return _toString.call(object)===DATE_CLASS}function isUndefined(object){return typeof object==="undefined"}extend(Object,{extend:extend,inspect:inspect,toJSON:NATIVE_JSON_STRINGIFY_SUPPORT?stringify:toJSON,toQueryString:toQueryString,toHTML:toHTML,keys:Object.keys||keys,values:values,clone:clone,isElement:isElement,isArray:isArray,isHash:isHash,isFunction:isFunction,isString:isString,isNumber:isNumber,isDate:isDate,isUndefined:isUndefined})})();Object.extend(Function.prototype,(function(){var slice=Array.prototype.slice;function update(array,args){var arrayLength=array.length,length=args.length;while(length--){array[arrayLength+length]=args[length]}return array}function merge(array,args){array=slice.call(array,0);return update(array,args)}function argumentNames(){var names=this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1].replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,"").replace(/\s+/g,"").split(",");return names.length==1&&!names[0]?[]:names}function bindAsEventListener(context){var __method=this,args=slice.call(arguments,1);return function(event){var a=update([event||window.event],args);return __method.apply(context,a)}}function curry(){if(!arguments.length){return this}var __method=this,args=slice.call(arguments,0);return function(){var a=merge(args,arguments);return __method.apply(this,a)}}function delay(timeout){var __method=this,args=slice.call(arguments,1);timeout=timeout*1000;return window.setTimeout(function(){return __method.apply(__method,args)},timeout)}function defer(){var args=update([0.01],arguments);return this.delay.apply(this,args)}function wrap(wrapper){var __method=this;return function(){var a=update([__method.bind(this)],arguments);return wrapper.apply(this,a)}}function methodize(){if(this._methodized){return this._methodized}var __method=this;return this._methodized=function(){var a=update([this],arguments);return __method.apply(null,a)}}return{argumentNames:argumentNames,bindAsEventListener:bindAsEventListener,curry:curry,delay:delay,defer:defer,wrap:wrap,methodize:methodize}})());(function(proto){function toISOString(){return this.getUTCFullYear()+"-"+(this.getUTCMonth()+1).toPaddedString(2)+"-"+this.getUTCDate().toPaddedString(2)+"T"+this.getUTCHours().toPaddedString(2)+":"+this.getUTCMinutes().toPaddedString(2)+":"+this.getUTCSeconds().toPaddedString(2)+"Z"}function toJSON(){return this.toISOString()}if(!proto.toISOString){proto.toISOString=toISOString}if(!proto.toJSON){proto.toJSON=toJSON}})(Date.prototype);RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(str){return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,"\\$1")};var PeriodicalExecuter=Class.create({initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer){return}clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute();this.currentlyExecuting=false}catch(e){this.currentlyExecuting=false;throw e}}}});Object.extend(String,{interpret:function(value){return value==null?"":String(value)},specialChar:{"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r","\\":"\\\\"}});Object.extend(String.prototype,(function(){var NATIVE_JSON_PARSE_SUPPORT=window.JSON&&typeof JSON.parse==="function"&&JSON.parse('{"test": true}').test;function prepareReplacement(replacement){if(Object.isFunction(replacement)){return replacement}var template=new Template(replacement);return function(match){return template.evaluate(match)}}function gsub(pattern,replacement){var result="",source=this,match;replacement=prepareReplacement(replacement);if(Object.isString(pattern)){pattern=RegExp.escape(pattern)}if(!(pattern.length||pattern.source)){replacement=replacement("");return replacement+source.split("").join(replacement)+replacement}while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=String.interpret(replacement(match));source=source.slice(match.index+match[0].length)}else{result+=source,source=""}}return result}function sub(pattern,replacement,count){replacement=prepareReplacement(replacement);count=Object.isUndefined(count)?1:count;return this.gsub(pattern,function(match){if(--count<0){return match[0]}return replacement(match)})}function scan(pattern,iterator){this.gsub(pattern,iterator);return String(this)}function truncate(length,truncation){length=length||30;truncation=Object.isUndefined(truncation)?"...":truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:String(this)}function strip(){return this.replace(/^\s+/,"").replace(/\s+$/,"")}function stripTags(){return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,"")}function stripScripts(){return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"")}function extractScripts(){var matchAll=new RegExp(Prototype.ScriptFragment,"img"),matchOne=new RegExp(Prototype.ScriptFragment,"im");return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||["",""])[1]})}function evalScripts(){return this.extractScripts().map(function(script){return eval(script)})}function escapeHTML(){return this.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function unescapeHTML(){return this.stripTags().replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&")}function toQueryParams(separator){var match=this.strip().match(/([^?#]*)(#.*)?$/);if(!match){return{}}return match[1].split(separator||"&").inject({},function(hash,pair){if((pair=pair.split("="))[0]){var key=decodeURIComponent(pair.shift()),value=pair.length>1?pair.join("="):pair[0];if(value!=undefined){value=decodeURIComponent(value)}if(key in hash){if(!Object.isArray(hash[key])){hash[key]=[hash[key]]}hash[key].push(value)}else{hash[key]=value}}return hash})}function toArray(){return this.split("")}function succ(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)}function times(count){return count<1?"":new Array(count+1).join(this)}function camelize(){return this.replace(/-+(.)?/g,function(match,chr){return chr?chr.toUpperCase():""})}function capitalize(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()}function underscore(){return this.replace(/::/g,"/").replace(/([A-Z]+)([A-Z][a-z])/g,"$1_$2").replace(/([a-z\d])([A-Z])/g,"$1_$2").replace(/-/g,"_").toLowerCase()}function dasherize(){return this.replace(/_/g,"-")}function inspect(useDoubleQuotes){var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){if(character in String.specialChar){return String.specialChar[character]}return"\\u00"+character.charCodeAt().toPaddedString(2,16)});if(useDoubleQuotes){return'"'+escapedString.replace(/"/g,'\\"')+'"'}return"'"+escapedString.replace(/'/g,"\\'")+"'"}function unfilterJSON(filter){return this.replace(filter||Prototype.JSONFilter,"$1")}function isJSON(){var str=this;if(str.blank()){return false}str=str.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@");str=str.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");str=str.replace(/(?:^|:|,)(?:\s*\[)+/g,"");return(/^[\],:{}\s]*$/).test(str)}function evalJSON(sanitize){var json=this.unfilterJSON(),cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;if(cx.test(json)){json=json.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}try{if(!sanitize||json.isJSON()){return eval("("+json+")")}}catch(e){}throw new SyntaxError("Badly formed JSON string: "+this.inspect())}function parseJSON(){var json=this.unfilterJSON();return JSON.parse(json)}function include(pattern){return this.indexOf(pattern)>-1}function startsWith(pattern){return this.lastIndexOf(pattern,0)===0}function endsWith(pattern){var d=this.length-pattern.length;return d>=0&&this.indexOf(pattern,d)===d}function empty(){return this==""}function blank(){return/^\s*$/.test(this)}function interpolate(object,pattern){return new Template(this,pattern).evaluate(object)}return{gsub:gsub,sub:sub,scan:scan,truncate:truncate,strip:String.prototype.trim||strip,stripTags:stripTags,stripScripts:stripScripts,extractScripts:extractScripts,evalScripts:evalScripts,escapeHTML:escapeHTML,unescapeHTML:unescapeHTML,toQueryParams:toQueryParams,parseQuery:toQueryParams,toArray:toArray,succ:succ,times:times,camelize:camelize,capitalize:capitalize,underscore:underscore,dasherize:dasherize,inspect:inspect,unfilterJSON:unfilterJSON,isJSON:isJSON,evalJSON:NATIVE_JSON_PARSE_SUPPORT?parseJSON:evalJSON,include:include,startsWith:startsWith,endsWith:endsWith,empty:empty,blank:blank,interpolate:interpolate}})());var Template=Class.create({initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern},evaluate:function(object){if(object&&Object.isFunction(object.toTemplateReplacements)){object=object.toTemplateReplacements()}return this.template.gsub(this.pattern,function(match){if(object==null){return(match[1]+"")}var before=match[1]||"";if(before=="\\"){return match[2]}var ctx=object,expr=match[3],pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;match=pattern.exec(expr);if(match==null){return before}while(match!=null){var comp=match[1].startsWith("[")?match[2].replace(/\\\\]/g,"]"):match[1];ctx=ctx[comp];if(null==ctx||""==match[3]){break}expr=expr.substring("["==match[3]?match[1].length:match[0].length);match=pattern.exec(expr)}return before+String.interpret(ctx)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable=(function(){function each(iterator,context){var index=0;try{this._each(function(value){iterator.call(context,value,index++)})}catch(e){if(e!=$break){throw e}}return this}function eachSlice(number,iterator,context){var index=-number,slices=[],array=this.toArray();if(number<1){return array}while((index+=number)<array.length){slices.push(array.slice(index,index+number))}return slices.collect(iterator,context)}function all(iterator,context){iterator=iterator||Prototype.K;var result=true;this.each(function(value,index){result=result&&!!iterator.call(context,value,index);if(!result){throw $break}});return result}function any(iterator,context){iterator=iterator||Prototype.K;var result=false;this.each(function(value,index){if(result=!!iterator.call(context,value,index)){throw $break}});return result}function collect(iterator,context){iterator=iterator||Prototype.K;var results=[];this.each(function(value,index){results.push(iterator.call(context,value,index))});return results}function detect(iterator,context){var result;this.each(function(value,index){if(iterator.call(context,value,index)){result=value;throw $break}});return result}function findAll(iterator,context){var results=[];this.each(function(value,index){if(iterator.call(context,value,index)){results.push(value)}});return results}function grep(filter,iterator,context){iterator=iterator||Prototype.K;var results=[];if(Object.isString(filter)){filter=new RegExp(RegExp.escape(filter))}this.each(function(value,index){if(filter.match(value)){results.push(iterator.call(context,value,index))}});return results}function include(object){if(Object.isFunction(this.indexOf)){if(this.indexOf(object)!=-1){return true}}var found=false;this.each(function(value){if(value==object){found=true;throw $break}});return found}function inGroupsOf(number,fillWith){fillWith=Object.isUndefined(fillWith)?null:fillWith;return this.eachSlice(number,function(slice){while(slice.length<number){slice.push(fillWith)}return slice})}function inject(memo,iterator,context){this.each(function(value,index){memo=iterator.call(context,memo,value,index)});return memo}function invoke(method){var args=$A(arguments).slice(1);return this.map(function(value){return value[method].apply(value,args)})}function max(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value>=result){result=value}});return result}function min(iterator,context){iterator=iterator||Prototype.K;var result;this.each(function(value,index){value=iterator.call(context,value,index);if(result==null||value<result){result=value}});return result}function partition(iterator,context){iterator=iterator||Prototype.K;var trues=[],falses=[];this.each(function(value,index){(iterator.call(context,value,index)?trues:falses).push(value)});return[trues,falses]}function pluck(property){var results=[];this.each(function(value){results.push(value[property])});return results}function reject(iterator,context){var results=[];this.each(function(value,index){if(!iterator.call(context,value,index)){results.push(value)}});return results}function sortBy(iterator,context){return this.map(function(value,index){return{value:value,criteria:iterator.call(context,value,index)}}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0}).pluck("value")}function toArray(){return this.map(Prototype.K)}function zip(){var iterator=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last())){iterator=args.pop()}var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index))})}function size(){return this.toArray().length}function inspect(){return"#<Enumerable:"+this.toArray().inspect()+">"}return{each:each,eachSlice:eachSlice,all:all,any:any,collect:collect,detect:detect,findAll:findAll,select:findAll,grep:grep,include:include,member:include,inGroupsOf:inGroupsOf,inject:inject,invoke:invoke,partition:partition,pluck:pluck,reject:reject,sortBy:sortBy,toArray:toArray,entries:toArray,zip:zip,size:size,inspect:inspect,find:detect,map:Array.prototype.map}})();function $A(iterable){if(!iterable){return[]}if("toArray" in Object(iterable)){return iterable.toArray()}var length=iterable.length||0,results=new Array(length);while(length--){results[length]=iterable[length]}return results}function $w(string){if(!Object.isString(string)){return[]}string=string.strip();return string?string.split(/\s+/):[]}Array.from=$A;(function(){var arrayProto=Array.prototype,slice=arrayProto.slice,_each=arrayProto.forEach;function each(iterator,context){for(var i=0,length=this.length>>>0;i<length;i++){if(i in this){iterator.call(context,this[i],i,this)}}}if(!_each){_each=each}function clear(){this.length=0;return this}function first(){return this[0]}function last(){return this[this.length-1]}function compact(){return this.select(function(value){return value!=null})}function flatten(){return this.inject([],function(array,value){if(Object.isArray(value)){return array.concat(value.flatten())}array.push(value);return array})}function without(){var values=slice.call(arguments,0);return this.select(function(value){return !values.include(value)})}function reverse(inline){return(inline===false?this.toArray():this)._reverse()}function uniq(sorted){return this.inject([],function(array,value,index){if(0==index||(sorted?array.last()!=value:!array.include(value))){array.push(value)}return array})}function intersect(array){return this.uniq().findAll(function(item){return array.detect(function(value){return item===value})})}function clone(){return slice.call(this,0)}function size(){return this.length}function inspect(){return"["+this.map(Object.inspect).join(", ")+"]"}function indexOf(item,i){i||(i=0);var length=this.length;if(i<0){i=length+i}for(;i<length;i++){if(this[i]===item){return i}}return -1}function lastIndexOf(item,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(item);return(n<0)?n:i-n-1}function concat(){var array=slice.call(this,0),item;for(var i=0,length=arguments.length;i<length;i++){item=arguments[i];if(Object.isArray(item)&&!("callee" in item)){for(var j=0,arrayLength=item.length;j<arrayLength;j++){array.push(item[j])}}else{array.push(item)}}return array}Object.extend(arrayProto,Enumerable);if(!arrayProto._reverse){arrayProto._reverse=arrayProto.reverse}Object.extend(arrayProto,{_each:_each,clear:clear,first:first,last:last,compact:compact,flatten:flatten,without:without,reverse:reverse,uniq:uniq,intersect:intersect,clone:clone,toArray:clone,size:size,inspect:inspect});var CONCAT_ARGUMENTS_BUGGY=(function(){return[].concat(arguments)[0][0]!==1})(1,2);if(CONCAT_ARGUMENTS_BUGGY){arrayProto.concat=concat}if(!arrayProto.indexOf){arrayProto.indexOf=indexOf}if(!arrayProto.lastIndexOf){arrayProto.lastIndexOf=lastIndexOf}})();function $H(object){return new Hash(object)}var Hash=Class.create(Enumerable,(function(){function initialize(object){this._object=Object.isHash(object)?object.toObject():Object.clone(object)}function _each(iterator){for(var key in this._object){var value=this._object[key],pair=[key,value];pair.key=key;pair.value=value;iterator(pair)}}function set(key,value){return this._object[key]=value}function get(key){if(this._object[key]!==Object.prototype[key]){return this._object[key]}}function unset(key){var value=this._object[key];delete this._object[key];return value}function toObject(){return Object.clone(this._object)}function keys(){return this.pluck("key")}function values(){return this.pluck("value")}function index(value){var match=this.detect(function(pair){return pair.value===value});return match&&match.key}function merge(object){return this.clone().update(object)}function update(object){return new Hash(object).inject(this,function(result,pair){result.set(pair.key,pair.value);return result})}function toQueryPair(key,value){if(Object.isUndefined(value)){return key}return key+"="+encodeURIComponent(String.interpret(value))}function toQueryString(){return this.inject([],function(results,pair){var key=encodeURIComponent(pair.key),values=pair.value;if(values&&typeof values=="object"){if(Object.isArray(values)){var queryValues=[];for(var i=0,len=values.length,value;i<len;i++){value=values[i];queryValues.push(toQueryPair(key,value))}return results.concat(queryValues)}}else{results.push(toQueryPair(key,values))}return results}).join("&")}function inspect(){return"#<Hash:{"+this.map(function(pair){return pair.map(Object.inspect).join(": ")}).join(", ")+"}>"}function clone(){return new Hash(this)}return{initialize:initialize,_each:_each,set:set,get:get,unset:unset,toObject:toObject,toTemplateReplacements:toObject,keys:keys,values:values,index:index,merge:merge,update:update,toQueryString:toQueryString,inspect:inspect,toJSON:toObject,clone:clone}})());Hash.from=$H;Object.extend(Number.prototype,(function(){function toColorPart(){return this.toPaddedString(2,16)}function succ(){return this+1}function times(iterator,context){$R(0,this,true).each(iterator,context);return this}function toPaddedString(length,radix){var string=this.toString(radix||10);return"0".times(length-string.length)+string}function abs(){return Math.abs(this)}function round(){return Math.round(this)}function ceil(){return Math.ceil(this)}function floor(){return Math.floor(this)}return{toColorPart:toColorPart,succ:succ,times:times,toPaddedString:toPaddedString,abs:abs,round:round,ceil:ceil,floor:floor}})());function $R(start,end,exclusive){return new ObjectRange(start,end,exclusive)}var ObjectRange=Class.create(Enumerable,(function(){function initialize(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive}function _each(iterator){var value=this.start;while(this.include(value)){iterator(value);value=value.succ()}}function include(value){if(value<this.start){return false}if(this.exclusive){return value<this.end}return value<=this.end}return{initialize:initialize,_each:_each,include:include}})());var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(iterator){this.responders._each(iterator)},register:function(responder){if(!this.include(responder)){this.responders.push(responder)}},unregister:function(responder){this.responders=this.responders.without(responder)},dispatch:function(callback,request,transport,json){this.each(function(responder){if(Object.isFunction(responder[callback])){try{responder[callback].apply(responder,[request,transport,json])}catch(e){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(options){this.options={method:"post",asynchronous:true,contentType:"application/x-www-form-urlencoded",encoding:"UTF-8",parameters:"",evalJSON:true,evalJS:true};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();if(Object.isHash(this.options.parameters)){this.options.parameters=this.options.parameters.toObject()}}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();this.request(url)},request:function(url){this.url=url;this.method=this.options.method;var params=Object.isString(this.options.parameters)?this.options.parameters:Object.toQueryString(this.options.parameters);if(!["get","post"].include(this.method)){params+=(params?"&":"")+"_method="+this.method;this.method="post"}if(params&&this.method==="get"){this.url+=(this.url.include("?")?"&":"?")+params}this.parameters=params.toQueryParams();try{var response=new Ajax.Response(this);if(this.options.onCreate){this.options.onCreate(response)}Ajax.Responders.dispatch("onCreate",this,response);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous){this.respondToReadyState.bind(this).defer(1)}this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=="post"?(this.options.postBody||params):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType){this.onStateChange()}}catch(e){this.dispatchException(e)}},onStateChange:function(){var readyState=this.transport.readyState;if(readyState>1&&!((readyState==4)&&this._complete)){this.respondToReadyState(this.transport.readyState)}},setRequestHeaders:function(){var headers={"X-Requested-With":"XMLHttpRequest","X-Prototype-Version":Prototype.Version,Accept:"text/javascript, text/html, application/xml, text/xml, */*"};if(this.method=="post"){headers["Content-type"]=this.options.contentType+(this.options.encoding?"; charset="+this.options.encoding:"");if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005){headers.Connection="close"}}if(typeof this.options.requestHeaders=="object"){var extras=this.options.requestHeaders;if(Object.isFunction(extras.push)){for(var i=0,length=extras.length;i<length;i+=2){headers[extras[i]]=extras[i+1]}}else{$H(extras).each(function(pair){headers[pair.key]=pair.value})}}for(var name in headers){this.transport.setRequestHeader(name,headers[name])}},success:function(){var status=this.getStatus();return !status||(status>=200&&status<300)||status==304},getStatus:function(){try{if(this.transport.status===1223){return 204}return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return !m||(m[0]=="#{protocol}//#{domain}#{port}".interpolate({protocol:location.protocol,domain:document.domain,port:location.port?":"+location.port:""}))},getHeader:function(name){try{return this.transport.getResponseHeader(name)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||"").unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);Ajax.Responders.dispatch("onException",this,exception)}});Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];Ajax.Response=Class.create({initialize:function(request){this.request=request;var transport=this.transport=request.transport,readyState=this.readyState=transport.readyState;if((readyState>2&&!Prototype.Browser.IE)||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(transport.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var xml=transport.responseXML;this.responseXML=Object.isUndefined(xml)?null:xml;this.responseJSON=this._getResponseJSON()}},status:0,statusText:"",getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||""}catch(e){return""}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(name){return this.transport.getResponseHeader(name)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var json=this.getHeader("X-JSON");if(!json){return null}json=decodeURIComponent(escape(json));try{return json.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var options=this.request.options;if(!options.evalJSON||(options.evalJSON!="force"&&!(this.getHeader("Content-type")||"").include("application/json"))||this.responseText.blank()){return null}try{return this.responseText.evalJSON(options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,container,url,options){this.container={success:(container.success||container),failure:(container.failure||(container.success?null:container))};options=Object.clone(options);var onComplete=options.onComplete;options.onComplete=(function(response,json){this.updateContent(response.responseText);if(Object.isFunction(onComplete)){onComplete(response,json)}}).bind(this);$super(url,options)},updateContent:function(responseText){var receiver=this.container[this.success()?"success":"failure"],options=this.options;if(!options.evalScripts){responseText=responseText.stripScripts()}if(receiver=$(receiver)){if(options.insertion){if(Object.isString(options.insertion)){var insertion={};insertion[options.insertion]=responseText;receiver.insert(insertion)}else{options.insertion(receiver,responseText)}}else{receiver.update(responseText)}}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,container,url,options){$super(options);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=container;this.url=url;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(response){if(this.options.decay){this.decay=(response.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=response.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(element){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++){elements.push($(arguments[i]))}return elements}if(Object.isString(element)){element=document.getElementById(element)}return Element.extend(element)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(expression,parentElement){var results=[];var query=document.evaluate(expression,$(parentElement)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=query.snapshotLength;i<length;i++){results.push(Element.extend(query.snapshotItem(i)))}return results}}if(!Node){var Node={}}if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(global){function shouldUseCache(tagName,attributes){if(tagName==="select"){return false}if("type" in attributes){return false}return true}var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX=(function(){try{var el=document.createElement('<input name="x">');return el.tagName.toLowerCase()==="input"&&el.name==="x"}catch(err){return false}})();var element=global.Element;global.Element=function(tagName,attributes){attributes=attributes||{};tagName=tagName.toLowerCase();var cache=Element.cache;if(HAS_EXTENDED_CREATE_ELEMENT_SYNTAX&&attributes.name){tagName="<"+tagName+' name="'+attributes.name+'">';delete attributes.name;return Element.writeAttribute(document.createElement(tagName),attributes)}if(!cache[tagName]){cache[tagName]=Element.extend(document.createElement(tagName))}var node=shouldUseCache(tagName,attributes)?cache[tagName].cloneNode(false):document.createElement(tagName);return Element.writeAttribute(node,attributes)};Object.extend(global.Element,element||{});if(element){global.Element.prototype=element.prototype}})(this);Element.idCounter=1;Element.cache={};Element._purgeElement=function(element){var uid=element._prototypeUID;if(uid){Element.stopObserving(element);element._prototypeUID=void 0;delete Element.Storage[uid]}};Element.Methods={visible:function(element){return $(element).style.display!="none"},toggle:function(element){element=$(element);Element[Element.visible(element)?"hide":"show"](element);return element},hide:function(element){element=$(element);element.style.display="none";return element},show:function(element){element=$(element);element.style.display="";return element},remove:function(element){element=$(element);element.parentNode.removeChild(element);return element},update:(function(){var SELECT_ELEMENT_INNERHTML_BUGGY=(function(){var el=document.createElement("select"),isBuggy=true;el.innerHTML='<option value="test">test</option>';if(el.options&&el.options[0]){isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION"}el=null;return isBuggy})();var TABLE_ELEMENT_INNERHTML_BUGGY=(function(){try{var el=document.createElement("table");if(el&&el.tBodies){el.innerHTML="<tbody><tr><td>test</td></tr></tbody>";var isBuggy=typeof el.tBodies[0]=="undefined";el=null;return isBuggy}}catch(e){return true}})();var LINK_ELEMENT_INNERHTML_BUGGY=(function(){try{var el=document.createElement("div");el.innerHTML="<link>";var isBuggy=(el.childNodes.length===0);el=null;return isBuggy}catch(e){return true}})();var ANY_INNERHTML_BUGGY=SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY||LINK_ELEMENT_INNERHTML_BUGGY;var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=(function(){var s=document.createElement("script"),isBuggy=false;try{s.appendChild(document.createTextNode(""));isBuggy=!s.firstChild||s.firstChild&&s.firstChild.nodeType!==3}catch(e){isBuggy=true}s=null;return isBuggy})();function update(element,content){element=$(element);var purgeElement=Element._purgeElement;var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--){purgeElement(descendants[i])}if(content&&content.toElement){content=content.toElement()}if(Object.isElement(content)){return element.update().insert(content)}content=Object.toHTML(content);var tagName=element.tagName.toUpperCase();if(tagName==="SCRIPT"&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){element.text=content;return element}if(ANY_INNERHTML_BUGGY){if(tagName in Element._insertionTranslations.tags){while(element.firstChild){element.removeChild(element.firstChild)}Element._getContentFromAnonymousElement(tagName,content.stripScripts()).each(function(node){element.appendChild(node)})}else{if(LINK_ELEMENT_INNERHTML_BUGGY&&Object.isString(content)&&content.indexOf("<link")>-1){while(element.firstChild){element.removeChild(element.firstChild)}var nodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts(),true);nodes.each(function(node){element.appendChild(node)})}else{element.innerHTML=content.stripScripts()}}}else{element.innerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}return update})(),replace:function(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}else{if(!Object.isElement(content)){content=Object.toHTML(content);var range=element.ownerDocument.createRange();range.selectNode(element);content.evalScripts.bind(content).defer();content=range.createContextualFragment(content.stripScripts())}}element.parentNode.replaceChild(content,element);return element},insert:function(element,insertions){element=$(element);if(Object.isString(insertions)||Object.isNumber(insertions)||Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML))){insertions={bottom:insertions}}var content,insert,tagName,childNodes;for(var position in insertions){content=insertions[position];position=position.toLowerCase();insert=Element._insertionTranslations[position];if(content&&content.toElement){content=content.toElement()}if(Object.isElement(content)){insert(element,content);continue}content=Object.toHTML(content);tagName=((position=="before"||position=="after")?element.parentNode:element).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());if(position=="top"||position=="after"){childNodes.reverse()}childNodes.each(insert.curry(element));content.evalScripts.bind(content).defer()}return element},wrap:function(element,wrapper,attributes){element=$(element);if(Object.isElement(wrapper)){$(wrapper).writeAttribute(attributes||{})}else{if(Object.isString(wrapper)){wrapper=new Element(wrapper,attributes)}else{wrapper=new Element("div",wrapper)}}if(element.parentNode){element.parentNode.replaceChild(wrapper,element)}wrapper.appendChild(element);return wrapper},inspect:function(element){element=$(element);var result="<"+element.tagName.toLowerCase();$H({id:"id",className:"class"}).each(function(pair){var property=pair.first(),attribute=pair.last(),value=(element[property]||"").toString();if(value){result+=" "+attribute+"="+value.inspect(true)}});return result+">"},recursivelyCollect:function(element,property,maximumLength){element=$(element);maximumLength=maximumLength||-1;var elements=[];while(element=element[property]){if(element.nodeType==1){elements.push(Element.extend(element))}if(elements.length==maximumLength){break}}return elements},ancestors:function(element){return Element.recursivelyCollect(element,"parentNode")},descendants:function(element){return Element.select(element,"*")},firstDescendant:function(element){element=$(element).firstChild;while(element&&element.nodeType!=1){element=element.nextSibling}return $(element)},immediateDescendants:function(element){var results=[],child=$(element).firstChild;while(child){if(child.nodeType===1){results.push(Element.extend(child))}child=child.nextSibling}return results},previousSiblings:function(element,maximumLength){return Element.recursivelyCollect(element,"previousSibling")},nextSiblings:function(element){return Element.recursivelyCollect(element,"nextSibling")},siblings:function(element){element=$(element);return Element.previousSiblings(element).reverse().concat(Element.nextSiblings(element))},match:function(element,selector){element=$(element);if(Object.isString(selector)){return Prototype.Selector.match(element,selector)}return selector.match(element)},up:function(element,expression,index){element=$(element);if(arguments.length==1){return $(element.parentNode)}var ancestors=Element.ancestors(element);return Object.isNumber(expression)?ancestors[expression]:Prototype.Selector.find(ancestors,expression,index)},down:function(element,expression,index){element=$(element);if(arguments.length==1){return Element.firstDescendant(element)}return Object.isNumber(expression)?Element.descendants(element)[expression]:Element.select(element,expression)[index||0]},previous:function(element,expression,index){element=$(element);if(Object.isNumber(expression)){index=expression,expression=false}if(!Object.isNumber(index)){index=0}if(expression){return Prototype.Selector.find(element.previousSiblings(),expression,index)}else{return element.recursivelyCollect("previousSibling",index+1)[index]}},next:function(element,expression,index){element=$(element);if(Object.isNumber(expression)){index=expression,expression=false}if(!Object.isNumber(index)){index=0}if(expression){return Prototype.Selector.find(element.nextSiblings(),expression,index)}else{var maximumLength=Object.isNumber(index)?index+1:1;return element.recursivelyCollect("nextSibling",index+1)[index]}},select:function(element){element=$(element);var expressions=Array.prototype.slice.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element)},adjacent:function(element){element=$(element);var expressions=Array.prototype.slice.call(arguments,1).join(", ");return Prototype.Selector.select(expressions,element.parentNode).without(element)},identify:function(element){element=$(element);var id=Element.readAttribute(element,"id");if(id){return id}do{id="anonymous_element_"+Element.idCounter++}while($(id));Element.writeAttribute(element,"id",id);return id},readAttribute:function(element,name){element=$(element);if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[name]){return t.values[name](element,name)}if(t.names[name]){name=t.names[name]}if(name.include(":")){return(!element.attributes||!element.attributes[name])?null:element.attributes[name].value}}return element.getAttribute(name)},writeAttribute:function(element,name,value){element=$(element);var attributes={},t=Element._attributeTranslations.write;if(typeof name=="object"){attributes=name}else{attributes[name]=Object.isUndefined(value)?true:value}for(var attr in attributes){name=t.names[attr]||attr;value=attributes[attr];if(t.values[attr]){name=t.values[attr](element,value)}if(value===false||value===null){element.removeAttribute(name)}else{if(value===true){element.setAttribute(name,name)}else{element.setAttribute(name,value)}}}return element},getHeight:function(element){return Element.getDimensions(element).height},getWidth:function(element){return Element.getDimensions(element).width},classNames:function(element){return new Element.ClassNames(element)},hasClassName:function(element,className){if(!(element=$(element))){return}var elementClassName=element.className;return(elementClassName.length>0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)))},addClassName:function(element,className){if(!(element=$(element))){return}if(!Element.hasClassName(element,className)){element.className+=(element.className?" ":"")+className}return element},removeClassName:function(element,className){if(!(element=$(element))){return}element.className=element.className.replace(new RegExp("(^|\\s+)"+className+"(\\s+|$)")," ").strip();return element},toggleClassName:function(element,className){if(!(element=$(element))){return}return Element[Element.hasClassName(element,className)?"removeClassName":"addClassName"](element,className)},cleanWhitespace:function(element){element=$(element);var node=element.firstChild;while(node){var nextNode=node.nextSibling;if(node.nodeType==3&&!/\S/.test(node.nodeValue)){element.removeChild(node)}node=nextNode}return element},empty:function(element){return $(element).innerHTML.blank()},descendantOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);if(element.compareDocumentPosition){return(element.compareDocumentPosition(ancestor)&8)===8}if(ancestor.contains){return ancestor.contains(element)&&ancestor!==element}while(element=element.parentNode){if(element==ancestor){return true}}return false},scrollTo:function(element){element=$(element);var pos=Element.cumulativeOffset(element);window.scrollTo(pos[0],pos[1]);return element},getStyle:function(element,style){element=$(element);style=style=="float"?"cssFloat":style.camelize();var value=element.style[style];if(!value||value=="auto"){var css=document.defaultView.getComputedStyle(element,null);value=css?css[style]:null}if(style=="opacity"){return value?parseFloat(value):1}return value=="auto"?null:value},getOpacity:function(element){return $(element).getStyle("opacity")},setStyle:function(element,styles){element=$(element);var elementStyle=element.style,match;if(Object.isString(styles)){element.style.cssText+=";"+styles;return styles.include("opacity")?element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element}for(var property in styles){if(property=="opacity"){element.setOpacity(styles[property])}else{elementStyle[(property=="float"||property=="cssFloat")?(Object.isUndefined(elementStyle.styleFloat)?"cssFloat":"styleFloat"):property]=styles[property]}}return element},setOpacity:function(element,value){element=$(element);element.style.opacity=(value==1||value==="")?"":(value<0.00001)?0:value;return element},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,"position");if(pos=="static"||!pos){element._madePositioned=true;element.style.position="relative";if(Prototype.Browser.Opera){element.style.top=0;element.style.left=0}}return element},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right=""}return element},makeClipping:function(element){element=$(element);if(element._overflow){return element}element._overflow=Element.getStyle(element,"overflow")||"auto";if(element._overflow!=="hidden"){element.style.overflow="hidden"}return element},undoClipping:function(element){element=$(element);if(!element._overflow){return element}element.style.overflow=element._overflow=="auto"?"":element._overflow;element._overflow=null;return element},clonePosition:function(element,source){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});source=$(source);var p=Element.viewportOffset(source),delta=[0,0],parent=null;element=$(element);if(Element.getStyle(element,"position")=="absolute"){parent=Element.getOffsetParent(element);delta=Element.viewportOffset(parent)}if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop}if(options.setLeft){element.style.left=(p[0]-delta[0]+options.offsetLeft)+"px"}if(options.setTop){element.style.top=(p[1]-delta[1]+options.offsetTop)+"px"}if(options.setWidth){element.style.width=source.offsetWidth+"px"}if(options.setHeight){element.style.height=source.offsetHeight+"px"}return element}};Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:"class",htmlFor:"for"},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(proceed,element,style){switch(style){case"height":case"width":if(!Element.visible(element)){return null}var dim=parseInt(proceed(element,style),10);if(dim!==element["offset"+style.capitalize()]){return dim+"px"}var properties;if(style==="height"){properties=["border-top-width","padding-top","padding-bottom","border-bottom-width"]}else{properties=["border-left-width","padding-left","padding-right","border-right-width"]}return properties.inject(dim,function(memo,property){var val=proceed(element,property);return val===null?memo:memo-parseInt(val,10)})+"px";default:return proceed(element,style)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(proceed,element,attribute){if(attribute==="title"){return element.title}return proceed(element,attribute)})}else{if(Prototype.Browser.IE){Element.Methods.getStyle=function(element,style){element=$(element);style=(style=="float"||style=="cssFloat")?"styleFloat":style.camelize();var value=element.style[style];if(!value&&element.currentStyle){value=element.currentStyle[style]}if(style=="opacity"){if(value=(element.getStyle("filter")||"").match(/alpha\(opacity=(.*)\)/)){if(value[1]){return parseFloat(value[1])/100}}return 1}if(value=="auto"){if((style=="width"||style=="height")&&(element.getStyle("display")!="none")){return element["offset"+style.capitalize()]+"px"}return null}return value};Element.Methods.setOpacity=function(element,value){function stripAlpha(filter){return filter.replace(/alpha\([^\)]*\)/gi,"")}element=$(element);var currentStyle=element.currentStyle;if((currentStyle&&!currentStyle.hasLayout)||(!currentStyle&&element.style.zoom=="normal")){element.style.zoom=1}var filter=element.getStyle("filter"),style=element.style;if(value==1||value===""){(filter=stripAlpha(filter))?style.filter=filter:style.removeAttribute("filter");return element}else{if(value<0.00001){value=0}}style.filter=stripAlpha(filter)+"alpha(opacity="+(value*100)+")";return element};Element._attributeTranslations=(function(){var classProp="className",forProp="for",el=document.createElement("div");el.setAttribute(classProp,"x");if(el.className!=="x"){el.setAttribute("class","x");if(el.className==="x"){classProp="class"}}el=null;el=document.createElement("label");el.setAttribute(forProp,"x");if(el.htmlFor!=="x"){el.setAttribute("htmlFor","x");if(el.htmlFor==="x"){forProp="htmlFor"}}el=null;return{read:{names:{"class":classProp,className:classProp,"for":forProp,htmlFor:forProp},values:{_getAttr:function(element,attribute){return element.getAttribute(attribute)},_getAttr2:function(element,attribute){return element.getAttribute(attribute,2)},_getAttrNode:function(element,attribute){var node=element.getAttributeNode(attribute);return node?node.value:""},_getEv:(function(){var el=document.createElement("div"),f;el.onclick=Prototype.emptyFunction;var value=el.getAttribute("onclick");if(String(value).indexOf("{")>-1){f=function(element,attribute){attribute=element.getAttribute(attribute);if(!attribute){return null}attribute=attribute.toString();attribute=attribute.split("{")[1];attribute=attribute.split("}")[0];return attribute.strip()}}else{if(value===""){f=function(element,attribute){attribute=element.getAttribute(attribute);if(!attribute){return null}return attribute.strip()}}}el=null;return f})(),_flag:function(element,attribute){return $(element).hasAttribute(attribute)?attribute:null},style:function(element){return element.style.cssText.toLowerCase()},title:function(element){return element.title}}}}})();Element._attributeTranslations.write={names:Object.extend({cellpadding:"cellPadding",cellspacing:"cellSpacing"},Element._attributeTranslations.read.names),values:{checked:function(element,value){element.checked=!!value},style:function(element,value){element.style.cssText=value?value:""}}};Element._attributeTranslations.has={};$w("colSpan rowSpan vAlign dateTime accessKey tabIndex encType maxLength readOnly longDesc frameBorder").each(function(attr){Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;Element._attributeTranslations.has[attr.toLowerCase()]=attr});(function(v){Object.extend(v,{href:v._getAttr2,src:v._getAttr2,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv})})(Element._attributeTranslations.read.values);if(Prototype.BrowserFeatures.ElementExtensions){(function(){function _descendants(element){var nodes=element.getElementsByTagName("*"),results=[];for(var i=0,node;node=nodes[i];i++){if(node.tagName!=="!"){results.push(node)}}return results}Element.Methods.down=function(element,expression,index){element=$(element);if(arguments.length==1){return element.firstDescendant()}return Object.isNumber(expression)?_descendants(element)[expression]:Element.select(element,expression)[index||0]}})()}}else{if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1)?0.999999:(value==="")?"":(value<0.00001)?0:value;return element}}else{if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(element,value){element=$(element);element.style.opacity=(value==1||value==="")?"":(value<0.00001)?0:value;if(value==1){if(element.tagName.toUpperCase()=="IMG"&&element.width){element.width++;element.width--}else{try{var n=document.createTextNode(" ");element.appendChild(n);element.removeChild(n)}catch(e){}}}return element}}}}}if("outerHTML" in document.documentElement){Element.Methods.replace=function(element,content){element=$(element);if(content&&content.toElement){content=content.toElement()}if(Object.isElement(content)){element.parentNode.replaceChild(content,element);return element}content=Object.toHTML(content);var parent=element.parentNode,tagName=parent.tagName.toUpperCase();if(Element._insertionTranslations.tags[tagName]){var nextSibling=element.next(),fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts());parent.removeChild(element);if(nextSibling){fragments.each(function(node){parent.insertBefore(node,nextSibling)})}else{fragments.each(function(node){parent.appendChild(node)})}}else{element.outerHTML=content.stripScripts()}content.evalScripts.bind(content).defer();return element}}Element._returnOffset=function(l,t){var result=[l,t];result.left=l;result.top=t;return result};Element._getContentFromAnonymousElement=function(tagName,html,force){var div=new Element("div"),t=Element._insertionTranslations.tags[tagName];var workaround=false;if(t){workaround=true}else{if(force){workaround=true;t=["","",0]}}if(workaround){div.innerHTML="&nbsp;"+t[0]+html+t[1];div.removeChild(div.firstChild);for(var i=t[2];i--;){div=div.firstChild}}else{div.innerHTML=html}return $A(div.childNodes)};Element._insertionTranslations={before:function(element,node){element.parentNode.insertBefore(node,element)},top:function(element,node){element.insertBefore(node,element.firstChild)},bottom:function(element,node){element.appendChild(node)},after:function(element,node){element.parentNode.insertBefore(node,element.nextSibling)},tags:{TABLE:["<table>","</table>",1],TBODY:["<table><tbody>","</tbody></table>",2],TR:["<table><tbody><tr>","</tr></tbody></table>",3],TD:["<table><tbody><tr><td>","</td></tr></tbody></table>",4],SELECT:["<select>","</select>",1]}};(function(){var tags=Element._insertionTranslations.tags;Object.extend(tags,{THEAD:tags.TBODY,TFOOT:tags.TBODY,TH:tags.TD})})();Element.Methods.Simulated={hasAttribute:function(element,attribute){attribute=Element._attributeTranslations.has[attribute]||attribute;var node=$(element).getAttributeNode(attribute);return !!(node&&node.specified)}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);(function(div){if(!Prototype.BrowserFeatures.ElementExtensions&&div.__proto__){window.HTMLElement={};window.HTMLElement.prototype=div.__proto__;Prototype.BrowserFeatures.ElementExtensions=true}div=null})(document.createElement("div"));Element.extend=(function(){function checkDeficiency(tagName){if(typeof window.Element!="undefined"){var proto=window.Element.prototype;if(proto){var id="_"+(Math.random()+"").slice(2),el=document.createElement(tagName);proto[id]="x";var isBuggy=(el[id]!=="x");delete proto[id];el=null;return isBuggy}}return false}function extendElementWith(element,methods){for(var property in methods){var value=methods[property];if(Object.isFunction(value)&&!(property in element)){element[property]=value.methodize()}}}var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkDeficiency("object");if(Prototype.BrowserFeatures.SpecificElementExtensions){if(HTMLOBJECTELEMENT_PROTOTYPE_BUGGY){return function(element){if(element&&typeof element._extendedByPrototype=="undefined"){var t=element.tagName;if(t&&(/^(?:object|applet|embed)$/i.test(t))){extendElementWith(element,Element.Methods);extendElementWith(element,Element.Methods.Simulated);extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()])}}return element}}return Prototype.K}var Methods={},ByTag=Element.Methods.ByTag;var extend=Object.extend(function(element){if(!element||typeof element._extendedByPrototype!="undefined"||element.nodeType!=1||element==window){return element}var methods=Object.clone(Methods),tagName=element.tagName.toUpperCase();if(ByTag[tagName]){Object.extend(methods,ByTag[tagName])}extendElementWith(element,methods);element._extendedByPrototype=Prototype.emptyFunction;return element},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(Methods,Element.Methods);Object.extend(Methods,Element.Methods.Simulated)}}});extend.refresh();return extend})();if(document.documentElement.hasAttribute){Element.hasAttribute=function(element,attribute){return element.hasAttribute(attribute)}}else{Element.hasAttribute=Element.Methods.Simulated.hasAttribute}Element.addMethods=function(methods){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!methods){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{FORM:Object.clone(Form.Methods),INPUT:Object.clone(Form.Element.Methods),SELECT:Object.clone(Form.Element.Methods),TEXTAREA:Object.clone(Form.Element.Methods),BUTTON:Object.clone(Form.Element.Methods)})}if(arguments.length==2){var tagName=methods;methods=arguments[1]}if(!tagName){Object.extend(Element.Methods,methods||{})}else{if(Object.isArray(tagName)){tagName.each(extend)}else{extend(tagName)}}function extend(tagName){tagName=tagName.toUpperCase();if(!Element.Methods.ByTag[tagName]){Element.Methods.ByTag[tagName]={}}Object.extend(Element.Methods.ByTag[tagName],methods)}function copy(methods,destination,onlyIfAbsent){onlyIfAbsent=onlyIfAbsent||false;for(var property in methods){var value=methods[property];if(!Object.isFunction(value)){continue}if(!onlyIfAbsent||!(property in destination)){destination[property]=value.methodize()}}}function findDOMClass(tagName){var klass;var trans={OPTGROUP:"OptGroup",TEXTAREA:"TextArea",P:"Paragraph",FIELDSET:"FieldSet",UL:"UList",OL:"OList",DL:"DList",DIR:"Directory",H1:"Heading",H2:"Heading",H3:"Heading",H4:"Heading",H5:"Heading",H6:"Heading",Q:"Quote",INS:"Mod",DEL:"Mod",A:"Anchor",IMG:"Image",CAPTION:"TableCaption",COL:"TableCol",COLGROUP:"TableCol",THEAD:"TableSection",TFOOT:"TableSection",TBODY:"TableSection",TR:"TableRow",TH:"TableCell",TD:"TableCell",FRAMESET:"FrameSet",IFRAME:"IFrame"};if(trans[tagName]){klass="HTML"+trans[tagName]+"Element"}if(window[klass]){return window[klass]}klass="HTML"+tagName+"Element";if(window[klass]){return window[klass]}klass="HTML"+tagName.capitalize()+"Element";if(window[klass]){return window[klass]}var element=document.createElement(tagName),proto=element.__proto__||element.constructor.prototype;element=null;return proto}var elementPrototype=window.HTMLElement?HTMLElement.prototype:Element.prototype;if(F.ElementExtensions){copy(Element.Methods,elementPrototype);copy(Element.Methods.Simulated,elementPrototype,true)}if(F.SpecificElementExtensions){for(var tag in Element.Methods.ByTag){var klass=findDOMClass(tag);if(Object.isUndefined(klass)){continue}copy(T[tag],klass.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh){Element.extend.refresh()}Element.cache={}};document.viewport={getDimensions:function(){return{width:this.getWidth(),height:this.getHeight()}},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};(function(viewport){var B=Prototype.Browser,doc=document,element,property={};function getRootElement(){if(B.WebKit&&!doc.evaluate){return document}if(B.Opera&&window.parseFloat(window.opera.version())<9.5){return document.body}return document.documentElement}function define(D){if(!element){element=getRootElement()}property[D]="client"+D;viewport["get"+D]=function(){return element[property[D]]};return viewport["get"+D]()}viewport.getWidth=define.curry("Width");viewport.getHeight=define.curry("Height")})(document.viewport);Element.Storage={UID:1};Element.addMethods({getStorage:function(element){if(!(element=$(element))){return}var uid;if(element===window){uid=0}else{if(typeof element._prototypeUID==="undefined"){element._prototypeUID=Element.Storage.UID++}uid=element._prototypeUID}if(!Element.Storage[uid]){Element.Storage[uid]=$H()}return Element.Storage[uid]},store:function(element,key,value){if(!(element=$(element))){return}if(arguments.length===2){Element.getStorage(element).update(key)}else{Element.getStorage(element).set(key,value)}return element},retrieve:function(element,key,defaultValue){if(!(element=$(element))){return}var hash=Element.getStorage(element),value=hash.get(key);if(Object.isUndefined(value)){hash.set(key,defaultValue);value=defaultValue}return value},clone:function(element,deep){if(!(element=$(element))){return}var clone=element.cloneNode(deep);clone._prototypeUID=void 0;if(deep){var descendants=Element.select(clone,"*"),i=descendants.length;while(i--){descendants[i]._prototypeUID=void 0}}return Element.extend(clone)},purge:function(element){if(!(element=$(element))){return}var purgeElement=Element._purgeElement;purgeElement(element);var descendants=element.getElementsByTagName("*"),i=descendants.length;while(i--){purgeElement(descendants[i])}return null}});(function(){function toDecimal(pctString){var match=pctString.match(/^(\d+)%?$/i);if(!match){return null}return(Number(match[1])/100)}function getPixelValue(value,property,context){var element=null;if(Object.isElement(value)){element=value;value=element.getStyle(property)}if(value===null){return null}if((/^(?:-)?\d+(\.\d+)?(px)?$/i).test(value)){return window.parseFloat(value)}var isPercentage=value.include("%"),isViewport=(context===document.viewport);if(/\d/.test(value)&&element&&element.runtimeStyle&&!(isPercentage&&isViewport)){var style=element.style.left,rStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=rStyle;return value}if(element&&isPercentage){context=context||element.parentNode;var decimal=toDecimal(value);var whole=null;var position=element.getStyle("position");var isHorizontal=property.include("left")||property.include("right")||property.include("width");var isVertical=property.include("top")||property.include("bottom")||property.include("height");if(context===document.viewport){if(isHorizontal){whole=document.viewport.getWidth()}else{if(isVertical){whole=document.viewport.getHeight()}}}else{if(isHorizontal){whole=$(context).measure("width")}else{if(isVertical){whole=$(context).measure("height")}}}return(whole===null)?0:whole*decimal}return 0}function toCSSPixels(number){if(Object.isString(number)&&number.endsWith("px")){return number}return number+"px"}function isDisplayed(element){var originalElement=element;while(element&&element.parentNode){var display=element.getStyle("display");if(display==="none"){return false}element=$(element.parentNode)}return true}var hasLayout=Prototype.K;if("currentStyle" in document.documentElement){hasLayout=function(element){if(!element.currentStyle.hasLayout){element.style.zoom=1}return element}}function cssNameFor(key){if(key.include("border")){key=key+"-width"}return key.camelize()}Element.Layout=Class.create(Hash,{initialize:function($super,element,preCompute){$super();this.element=$(element);Element.Layout.PROPERTIES.each(function(property){this._set(property,null)},this);if(preCompute){this._preComputing=true;this._begin();Element.Layout.PROPERTIES.each(this._compute,this);this._end();this._preComputing=false}},_set:function(property,value){return Hash.prototype.set.call(this,property,value)},set:function(property,value){throw"Properties of Element.Layout are read-only."},get:function($super,property){var value=$super(property);return value===null?this._compute(property):value},_begin:function(){if(this._prepared){return}var element=this.element;if(isDisplayed(element)){this._prepared=true;return}var originalStyles={position:element.style.position||"",width:element.style.width||"",visibility:element.style.visibility||"",display:element.style.display||""};element.store("prototype_original_styles",originalStyles);var position=element.getStyle("position"),width=element.getStyle("width");if(width==="0px"||width===null){element.style.display="block";width=element.getStyle("width")}var context=(position==="fixed")?document.viewport:element.parentNode;element.setStyle({position:"absolute",visibility:"hidden",display:"block"});var positionedWidth=element.getStyle("width");var newWidth;if(width&&(positionedWidth===width)){newWidth=getPixelValue(element,"width",context)}else{if(position==="absolute"||position==="fixed"){newWidth=getPixelValue(element,"width",context)}else{var parent=element.parentNode,pLayout=$(parent).getLayout();newWidth=pLayout.get("width")-this.get("margin-left")-this.get("border-left")-this.get("padding-left")-this.get("padding-right")-this.get("border-right")-this.get("margin-right")}}element.setStyle({width:newWidth+"px"});this._prepared=true},_end:function(){var element=this.element;var originalStyles=element.retrieve("prototype_original_styles");element.store("prototype_original_styles",null);element.setStyle(originalStyles);this._prepared=false},_compute:function(property){var COMPUTATIONS=Element.Layout.COMPUTATIONS;if(!(property in COMPUTATIONS)){throw"Property not found."}return this._set(property,COMPUTATIONS[property].call(this,this.element))},toObject:function(){var args=$A(arguments);var keys=(args.length===0)?Element.Layout.PROPERTIES:args.join(" ").split(" ");var obj={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key)){return}var value=this.get(key);if(value!=null){obj[key]=value}},this);return obj},toHash:function(){var obj=this.toObject.apply(this,arguments);return new Hash(obj)},toCSS:function(){var args=$A(arguments);var keys=(args.length===0)?Element.Layout.PROPERTIES:args.join(" ").split(" ");var css={};keys.each(function(key){if(!Element.Layout.PROPERTIES.include(key)){return}if(Element.Layout.COMPOSITE_PROPERTIES.include(key)){return}var value=this.get(key);if(value!=null){css[cssNameFor(key)]=value+"px"}},this);return css},inspect:function(){return"#<Element.Layout>"}});Object.extend(Element.Layout,{PROPERTIES:$w("height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height"),COMPOSITE_PROPERTIES:$w("padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height"),COMPUTATIONS:{height:function(element){if(!this._preComputing){this._begin()}var bHeight=this.get("border-box-height");if(bHeight<=0){if(!this._preComputing){this._end()}return 0}var bTop=this.get("border-top"),bBottom=this.get("border-bottom");var pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");if(!this._preComputing){this._end()}return bHeight-bTop-bBottom-pTop-pBottom},width:function(element){if(!this._preComputing){this._begin()}var bWidth=this.get("border-box-width");if(bWidth<=0){if(!this._preComputing){this._end()}return 0}var bLeft=this.get("border-left"),bRight=this.get("border-right");var pLeft=this.get("padding-left"),pRight=this.get("padding-right");if(!this._preComputing){this._end()}return bWidth-bLeft-bRight-pLeft-pRight},"padding-box-height":function(element){var height=this.get("height"),pTop=this.get("padding-top"),pBottom=this.get("padding-bottom");return height+pTop+pBottom},"padding-box-width":function(element){var width=this.get("width"),pLeft=this.get("padding-left"),pRight=this.get("padding-right");return width+pLeft+pRight},"border-box-height":function(element){if(!this._preComputing){this._begin()}var height=element.offsetHeight;if(!this._preComputing){this._end()}return height},"border-box-width":function(element){if(!this._preComputing){this._begin()}var width=element.offsetWidth;if(!this._preComputing){this._end()}return width},"margin-box-height":function(element){var bHeight=this.get("border-box-height"),mTop=this.get("margin-top"),mBottom=this.get("margin-bottom");if(bHeight<=0){return 0}return bHeight+mTop+mBottom},"margin-box-width":function(element){var bWidth=this.get("border-box-width"),mLeft=this.get("margin-left"),mRight=this.get("margin-right");if(bWidth<=0){return 0}return bWidth+mLeft+mRight},top:function(element){var offset=element.positionedOffset();return offset.top},bottom:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pHeight=parent.measure("height");var mHeight=this.get("border-box-height");return pHeight-mHeight-offset.top},left:function(element){var offset=element.positionedOffset();return offset.left},right:function(element){var offset=element.positionedOffset(),parent=element.getOffsetParent(),pWidth=parent.measure("width");var mWidth=this.get("border-box-width");return pWidth-mWidth-offset.left},"padding-top":function(element){return getPixelValue(element,"paddingTop")},"padding-bottom":function(element){return getPixelValue(element,"paddingBottom")},"padding-left":function(element){return getPixelValue(element,"paddingLeft")},"padding-right":function(element){return getPixelValue(element,"paddingRight")},"border-top":function(element){return getPixelValue(element,"borderTopWidth")},"border-bottom":function(element){return getPixelValue(element,"borderBottomWidth")},"border-left":function(element){return getPixelValue(element,"borderLeftWidth")},"border-right":function(element){return getPixelValue(element,"borderRightWidth")},"margin-top":function(element){return getPixelValue(element,"marginTop")},"margin-bottom":function(element){return getPixelValue(element,"marginBottom")},"margin-left":function(element){return getPixelValue(element,"marginLeft")},"margin-right":function(element){return getPixelValue(element,"marginRight")}}});if("getBoundingClientRect" in document.documentElement){Object.extend(Element.Layout.COMPUTATIONS,{right:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.right-rect.right).round()},bottom:function(element){var parent=hasLayout(element.getOffsetParent());var rect=element.getBoundingClientRect(),pRect=parent.getBoundingClientRect();return(pRect.bottom-rect.bottom).round()}})}Element.Offset=Class.create({initialize:function(left,top){this.left=left.round();this.top=top.round();this[0]=this.left;this[1]=this.top},relativeTo:function(offset){return new Element.Offset(this.left-offset.left,this.top-offset.top)},inspect:function(){return"#<Element.Offset left: #{left} top: #{top}>".interpolate(this)},toString:function(){return"[#{left}, #{top}]".interpolate(this)},toArray:function(){return[this.left,this.top]}});function getLayout(element,preCompute){return new Element.Layout(element,preCompute)}function measure(element,property){return $(element).getLayout().get(property)}function getDimensions(element){element=$(element);var display=Element.getStyle(element,"display");if(display&&display!=="none"){return{width:element.offsetWidth,height:element.offsetHeight}}var style=element.style;var originalStyles={visibility:style.visibility,position:style.position,display:style.display};var newStyles={visibility:"hidden",display:"block"};if(originalStyles.position!=="fixed"){newStyles.position="absolute"}Element.setStyle(element,newStyles);var dimensions={width:element.offsetWidth,height:element.offsetHeight};Element.setStyle(element,originalStyles);return dimensions}function getOffsetParent(element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element)){return $(document.body)}var isInline=(Element.getStyle(element,"display")==="inline");if(!isInline&&element.offsetParent){return $(element.offsetParent)}while((element=element.parentNode)&&element!==document.body){if(Element.getStyle(element,"position")!=="static"){return isHtml(element)?$(document.body):$(element)}}return $(document.body)}function cumulativeOffset(element){element=$(element);var valueT=0,valueL=0;if(element.parentNode){do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent}while(element)}return new Element.Offset(valueL,valueT)}function positionedOffset(element){element=$(element);var layout=element.getLayout();var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){if(isBody(element)){break}var p=Element.getStyle(element,"position");if(p!=="static"){break}}}while(element);valueL-=layout.get("margin-top");valueT-=layout.get("margin-left");return new Element.Offset(valueL,valueT)}function cumulativeScrollOffset(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode}while(element);return new Element.Offset(valueL,valueT)}function viewportOffset(forElement){element=$(element);var valueT=0,valueL=0,docBody=document.body;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==docBody&&Element.getStyle(element,"position")=="absolute"){break}}while(element=element.offsetParent);element=forElement;do{if(element!=docBody){valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0}}while(element=element.parentNode);return new Element.Offset(valueL,valueT)}function absolutize(element){element=$(element);if(Element.getStyle(element,"position")==="absolute"){return element}var offsetParent=getOffsetParent(element);var eOffset=element.viewportOffset(),pOffset=offsetParent.viewportOffset();var offset=eOffset.relativeTo(pOffset);var layout=element.getLayout();element.store("prototype_absolutize_original_styles",{left:element.getStyle("left"),top:element.getStyle("top"),width:element.getStyle("width"),height:element.getStyle("height")});element.setStyle({position:"absolute",top:offset.top+"px",left:offset.left+"px",width:layout.get("width")+"px",height:layout.get("height")+"px"});return element}function relativize(element){element=$(element);if(Element.getStyle(element,"position")==="relative"){return element}var originalStyles=element.retrieve("prototype_absolutize_original_styles");if(originalStyles){element.setStyle(originalStyles)}return element}if(Prototype.Browser.IE){getOffsetParent=getOffsetParent.wrap(function(proceed,element){element=$(element);if(isDocument(element)||isDetached(element)||isBody(element)||isHtml(element)){return $(document.body)}var position=element.getStyle("position");if(position!=="static"){return proceed(element)}element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value});positionedOffset=positionedOffset.wrap(function(proceed,element){element=$(element);if(!element.parentNode){return new Element.Offset(0,0)}var position=element.getStyle("position");if(position!=="static"){return proceed(element)}var offsetParent=element.getOffsetParent();if(offsetParent&&offsetParent.getStyle("position")==="fixed"){hasLayout(offsetParent)}element.setStyle({position:"relative"});var value=proceed(element);element.setStyle({position:position});return value})}else{if(Prototype.Browser.Webkit){cumulativeOffset=function(element){element=$(element);var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body){if(Element.getStyle(element,"position")=="absolute"){break}}element=element.offsetParent}while(element);return new Element.Offset(valueL,valueT)}}}Element.addMethods({getLayout:getLayout,measure:measure,getDimensions:getDimensions,getOffsetParent:getOffsetParent,cumulativeOffset:cumulativeOffset,positionedOffset:positionedOffset,cumulativeScrollOffset:cumulativeScrollOffset,viewportOffset:viewportOffset,absolutize:absolutize,relativize:relativize});function isBody(element){return element.nodeName.toUpperCase()==="BODY"}function isHtml(element){return element.nodeName.toUpperCase()==="HTML"}function isDocument(element){return element.nodeType===Node.DOCUMENT_NODE}function isDetached(element){return element!==document.body&&!Element.descendantOf(element,document.body)}if("getBoundingClientRect" in document.documentElement){Element.addMethods({viewportOffset:function(element){element=$(element);if(isDetached(element)){return new Element.Offset(0,0)}var rect=element.getBoundingClientRect(),docEl=document.documentElement;return new Element.Offset(rect.left-docEl.clientLeft,rect.top-docEl.clientTop)}})}})();window.$$=function(){var expression=$A(arguments).join(", ");return Prototype.Selector.select(expression,document)};Prototype.Selector=(function(){function select(){throw new Error('Method "Prototype.Selector.select" must be defined.')}function match(){throw new Error('Method "Prototype.Selector.match" must be defined.')}function find(elements,expression,index){index=index||0;var match=Prototype.Selector.match,length=elements.length,matchIndex=0,i;for(i=0;i<length;i++){if(match(elements[i],expression)&&index==matchIndex++){return Element.extend(elements[i])}}}function extendElements(elements){for(var i=0,length=elements.length;i<length;i++){Element.extend(elements[i])}return elements}var K=Prototype.K;return{select:select,match:match,find:find,extendElements:(Element.extend===K)?K:extendElements,extendElement:Element.extend}})();Prototype._original_property=window.Sizzle;
+/*!
+ * Sizzle CSS Selector Engine - v1.0
+ *  Copyright 2009, The Dojo Foundation
+ *  Released under the MIT, BSD, and GPL Licenses.
+ *  More information: http://sizzlejs.com/
+ */
+(function(){var chunker=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,done=0,toString=Object.prototype.toString,hasDuplicate=false,baseHasDuplicate=true;[0,0].sort(function(){baseHasDuplicate=false;return 0});var Sizzle=function(selector,context,results,seed){results=results||[];var origContext=context=context||document;if(context.nodeType!==1&&context.nodeType!==9){return[]}if(!selector||typeof selector!=="string"){return results}var parts=[],m,set,checkSet,check,mode,extra,prune=true,contextXML=isXML(context),soFar=selector;while((chunker.exec(""),m=chunker.exec(soFar))!==null){soFar=m[3];parts.push(m[1]);if(m[2]){extra=m[3];break}}if(parts.length>1&&origPOS.exec(selector)){if(parts.length===2&&Expr.relative[parts[0]]){set=posProcess(parts[0]+parts[1],context)}else{set=Expr.relative[parts[0]]?[context]:Sizzle(parts.shift(),context);while(parts.length){selector=parts.shift();if(Expr.relative[selector]){selector+=parts.shift()}set=posProcess(selector,set)}}}else{if(!seed&&parts.length>1&&context.nodeType===9&&!contextXML&&Expr.match.ID.test(parts[0])&&!Expr.match.ID.test(parts[parts.length-1])){var ret=Sizzle.find(parts.shift(),context,contextXML);context=ret.expr?Sizzle.filter(ret.expr,ret.set)[0]:ret.set[0]}if(context){var ret=seed?{expr:parts.pop(),set:makeArray(seed)}:Sizzle.find(parts.pop(),parts.length===1&&(parts[0]==="~"||parts[0]==="+")&&context.parentNode?context.parentNode:context,contextXML);set=ret.expr?Sizzle.filter(ret.expr,ret.set):ret.set;if(parts.length>0){checkSet=makeArray(set)}else{prune=false}while(parts.length){var cur=parts.pop(),pop=cur;if(!Expr.relative[cur]){cur=""}else{pop=parts.pop()}if(pop==null){pop=context}Expr.relative[cur](checkSet,pop,contextXML)}}else{checkSet=parts=[]}}if(!checkSet){checkSet=set}if(!checkSet){throw"Syntax error, unrecognized expression: "+(cur||selector)}if(toString.call(checkSet)==="[object Array]"){if(!prune){results.push.apply(results,checkSet)}else{if(context&&context.nodeType===1){for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&(checkSet[i]===true||checkSet[i].nodeType===1&&contains(context,checkSet[i]))){results.push(set[i])}}}else{for(var i=0;checkSet[i]!=null;i++){if(checkSet[i]&&checkSet[i].nodeType===1){results.push(set[i])}}}}}else{makeArray(checkSet,results)}if(extra){Sizzle(extra,origContext,results,seed);Sizzle.uniqueSort(results)}return results};Sizzle.uniqueSort=function(results){if(sortOrder){hasDuplicate=baseHasDuplicate;results.sort(sortOrder);if(hasDuplicate){for(var i=1;i<results.length;i++){if(results[i]===results[i-1]){results.splice(i--,1)}}}}return results};Sizzle.matches=function(expr,set){return Sizzle(expr,null,null,set)};Sizzle.find=function(expr,context,isXML){var set,match;if(!expr){return[]}for(var i=0,l=Expr.order.length;i<l;i++){var type=Expr.order[i],match;if((match=Expr.leftMatch[type].exec(expr))){var left=match[1];match.splice(1,1);if(left.substr(left.length-1)!=="\\"){match[1]=(match[1]||"").replace(/\\/g,"");set=Expr.find[type](match,context,isXML);if(set!=null){expr=expr.replace(Expr.match[type],"");break}}}}if(!set){set=context.getElementsByTagName("*")}return{set:set,expr:expr}};Sizzle.filter=function(expr,set,inplace,not){var old=expr,result=[],curLoop=set,match,anyFound,isXMLFilter=set&&set[0]&&isXML(set[0]);while(expr&&set.length){for(var type in Expr.filter){if((match=Expr.match[type].exec(expr))!=null){var filter=Expr.filter[type],found,item;anyFound=false;if(curLoop==result){result=[]}if(Expr.preFilter[type]){match=Expr.preFilter[type](match,curLoop,inplace,result,not,isXMLFilter);if(!match){anyFound=found=true}else{if(match===true){continue}}}if(match){for(var i=0;(item=curLoop[i])!=null;i++){if(item){found=filter(item,match,i,curLoop);var pass=not^!!found;if(inplace&&found!=null){if(pass){anyFound=true}else{curLoop[i]=false}}else{if(pass){result.push(item);anyFound=true}}}}}if(found!==undefined){if(!inplace){curLoop=result}expr=expr.replace(Expr.match[type],"");if(!anyFound){return[]}break}}}if(expr==old){if(anyFound==null){throw"Syntax error, unrecognized expression: "+expr}else{break}}old=expr}return curLoop};var Expr=Sizzle.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(elem){return elem.getAttribute("href")}},relative:{"+":function(checkSet,part,isXML){var isPartStr=typeof part==="string",isTag=isPartStr&&!/\W/.test(part),isPartStrNotTag=isPartStr&&!isTag;if(isTag&&!isXML){part=part.toUpperCase()}for(var i=0,l=checkSet.length,elem;i<l;i++){if((elem=checkSet[i])){while((elem=elem.previousSibling)&&elem.nodeType!==1){}checkSet[i]=isPartStrNotTag||elem&&elem.nodeName===part?elem||false:elem===part}}if(isPartStrNotTag){Sizzle.filter(part,checkSet,true)}},">":function(checkSet,part,isXML){var isPartStr=typeof part==="string";if(isPartStr&&!/\W/.test(part)){part=isXML?part:part.toUpperCase();for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){var parent=elem.parentNode;checkSet[i]=parent.nodeName===part?parent:false}}}else{for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){checkSet[i]=isPartStr?elem.parentNode:elem.parentNode===part}}if(isPartStr){Sizzle.filter(part,checkSet,true)}}},"":function(checkSet,part,isXML){var doneName=done++,checkFn=dirCheck;if(!/\W/.test(part)){var nodeCheck=part=isXML?part:part.toUpperCase();checkFn=dirNodeCheck}checkFn("parentNode",part,doneName,checkSet,nodeCheck,isXML)},"~":function(checkSet,part,isXML){var doneName=done++,checkFn=dirCheck;if(typeof part==="string"&&!/\W/.test(part)){var nodeCheck=part=isXML?part:part.toUpperCase();checkFn=dirNodeCheck}checkFn("previousSibling",part,doneName,checkSet,nodeCheck,isXML)}},find:{ID:function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?[m]:[]}},NAME:function(match,context,isXML){if(typeof context.getElementsByName!=="undefined"){var ret=[],results=context.getElementsByName(match[1]);for(var i=0,l=results.length;i<l;i++){if(results[i].getAttribute("name")===match[1]){ret.push(results[i])}}return ret.length===0?null:ret}},TAG:function(match,context){return context.getElementsByTagName(match[1])}},preFilter:{CLASS:function(match,curLoop,inplace,result,not,isXML){match=" "+match[1].replace(/\\/g,"")+" ";if(isXML){return match}for(var i=0,elem;(elem=curLoop[i])!=null;i++){if(elem){if(not^(elem.className&&(" "+elem.className+" ").indexOf(match)>=0)){if(!inplace){result.push(elem)}}else{if(inplace){curLoop[i]=false}}}}return false},ID:function(match){return match[1].replace(/\\/g,"")},TAG:function(match,curLoop){for(var i=0;curLoop[i]===false;i++){}return curLoop[i]&&isXML(curLoop[i])?match[1]:match[1].toUpperCase()},CHILD:function(match){if(match[1]=="nth"){var test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(match[2]=="even"&&"2n"||match[2]=="odd"&&"2n+1"||!/\D/.test(match[2])&&"0n+"+match[2]||match[2]);match[2]=(test[1]+(test[2]||1))-0;match[3]=test[3]-0}match[0]=done++;return match},ATTR:function(match,curLoop,inplace,result,not,isXML){var name=match[1].replace(/\\/g,"");if(!isXML&&Expr.attrMap[name]){match[1]=Expr.attrMap[name]}if(match[2]==="~="){match[4]=" "+match[4]+" "}return match},PSEUDO:function(match,curLoop,inplace,result,not){if(match[1]==="not"){if((chunker.exec(match[3])||"").length>1||/^\w/.test(match[3])){match[3]=Sizzle(match[3],null,null,curLoop)}else{var ret=Sizzle.filter(match[3],curLoop,inplace,true^not);if(!inplace){result.push.apply(result,ret)}return false}}else{if(Expr.match.POS.test(match[0])||Expr.match.CHILD.test(match[0])){return true}}return match},POS:function(match){match.unshift(true);return match}},filters:{enabled:function(elem){return elem.disabled===false&&elem.type!=="hidden"},disabled:function(elem){return elem.disabled===true},checked:function(elem){return elem.checked===true},selected:function(elem){elem.parentNode.selectedIndex;return elem.selected===true},parent:function(elem){return !!elem.firstChild},empty:function(elem){return !elem.firstChild},has:function(elem,i,match){return !!Sizzle(match[3],elem).length},header:function(elem){return/h\d/i.test(elem.nodeName)},text:function(elem){return"text"===elem.type},radio:function(elem){return"radio"===elem.type},checkbox:function(elem){return"checkbox"===elem.type},file:function(elem){return"file"===elem.type},password:function(elem){return"password"===elem.type},submit:function(elem){return"submit"===elem.type},image:function(elem){return"image"===elem.type},reset:function(elem){return"reset"===elem.type},button:function(elem){return"button"===elem.type||elem.nodeName.toUpperCase()==="BUTTON"},input:function(elem){return/input|select|textarea|button/i.test(elem.nodeName)}},setFilters:{first:function(elem,i){return i===0},last:function(elem,i,match,array){return i===array.length-1},even:function(elem,i){return i%2===0},odd:function(elem,i){return i%2===1},lt:function(elem,i,match){return i<match[3]-0},gt:function(elem,i,match){return i>match[3]-0},nth:function(elem,i,match){return match[3]-0==i},eq:function(elem,i,match){return match[3]-0==i}},filter:{PSEUDO:function(elem,match,i,array){var name=match[1],filter=Expr.filters[name];if(filter){return filter(elem,i,match,array)}else{if(name==="contains"){return(elem.textContent||elem.innerText||"").indexOf(match[3])>=0}else{if(name==="not"){var not=match[3];for(var i=0,l=not.length;i<l;i++){if(not[i]===elem){return false}}return true}}}},CHILD:function(elem,match){var type=match[1],node=elem;switch(type){case"only":case"first":while((node=node.previousSibling)){if(node.nodeType===1){return false}}if(type=="first"){return true}node=elem;case"last":while((node=node.nextSibling)){if(node.nodeType===1){return false}}return true;case"nth":var first=match[2],last=match[3];if(first==1&&last==0){return true}var doneName=match[0],parent=elem.parentNode;if(parent&&(parent.sizcache!==doneName||!elem.nodeIndex)){var count=0;for(node=parent.firstChild;node;node=node.nextSibling){if(node.nodeType===1){node.nodeIndex=++count}}parent.sizcache=doneName}var diff=elem.nodeIndex-last;if(first==0){return diff==0}else{return(diff%first==0&&diff/first>=0)}}},ID:function(elem,match){return elem.nodeType===1&&elem.getAttribute("id")===match},TAG:function(elem,match){return(match==="*"&&elem.nodeType===1)||elem.nodeName===match},CLASS:function(elem,match){return(" "+(elem.className||elem.getAttribute("class"))+" ").indexOf(match)>-1},ATTR:function(elem,match){var name=match[1],result=Expr.attrHandle[name]?Expr.attrHandle[name](elem):elem[name]!=null?elem[name]:elem.getAttribute(name),value=result+"",type=match[2],check=match[4];return result==null?type==="!=":type==="="?value===check:type==="*="?value.indexOf(check)>=0:type==="~="?(" "+value+" ").indexOf(check)>=0:!check?value&&result!==false:type==="!="?value!=check:type==="^="?value.indexOf(check)===0:type==="$="?value.substr(value.length-check.length)===check:type==="|="?value===check||value.substr(0,check.length+1)===check+"-":false},POS:function(elem,match,i,array){var name=match[2],filter=Expr.setFilters[name];if(filter){return filter(elem,i,match,array)}}}};var origPOS=Expr.match.POS;for(var type in Expr.match){Expr.match[type]=new RegExp(Expr.match[type].source+/(?![^\[]*\])(?![^\(]*\))/.source);Expr.leftMatch[type]=new RegExp(/(^(?:.|\r|\n)*?)/.source+Expr.match[type].source)}var makeArray=function(array,results){array=Array.prototype.slice.call(array,0);if(results){results.push.apply(results,array);return results}return array};try{Array.prototype.slice.call(document.documentElement.childNodes,0)}catch(e){makeArray=function(array,results){var ret=results||[];if(toString.call(array)==="[object Array]"){Array.prototype.push.apply(ret,array)}else{if(typeof array.length==="number"){for(var i=0,l=array.length;i<l;i++){ret.push(array[i])}}else{for(var i=0;array[i];i++){ret.push(array[i])}}}return ret}}var sortOrder;if(document.documentElement.compareDocumentPosition){sortOrder=function(a,b){if(!a.compareDocumentPosition||!b.compareDocumentPosition){if(a==b){hasDuplicate=true}return 0}var ret=a.compareDocumentPosition(b)&4?-1:a===b?0:1;if(ret===0){hasDuplicate=true}return ret}}else{if("sourceIndex" in document.documentElement){sortOrder=function(a,b){if(!a.sourceIndex||!b.sourceIndex){if(a==b){hasDuplicate=true}return 0}var ret=a.sourceIndex-b.sourceIndex;if(ret===0){hasDuplicate=true}return ret}}else{if(document.createRange){sortOrder=function(a,b){if(!a.ownerDocument||!b.ownerDocument){if(a==b){hasDuplicate=true}return 0}var aRange=a.ownerDocument.createRange(),bRange=b.ownerDocument.createRange();aRange.setStart(a,0);aRange.setEnd(a,0);bRange.setStart(b,0);bRange.setEnd(b,0);var ret=aRange.compareBoundaryPoints(Range.START_TO_END,bRange);if(ret===0){hasDuplicate=true}return ret}}}}(function(){var form=document.createElement("div"),id="script"+(new Date).getTime();form.innerHTML="<a name='"+id+"'/>";var root=document.documentElement;root.insertBefore(form,root.firstChild);if(!!document.getElementById(id)){Expr.find.ID=function(match,context,isXML){if(typeof context.getElementById!=="undefined"&&!isXML){var m=context.getElementById(match[1]);return m?m.id===match[1]||typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id").nodeValue===match[1]?[m]:undefined:[]}};Expr.filter.ID=function(elem,match){var node=typeof elem.getAttributeNode!=="undefined"&&elem.getAttributeNode("id");return elem.nodeType===1&&node&&node.nodeValue===match}}root.removeChild(form);root=form=null})();(function(){var div=document.createElement("div");div.appendChild(document.createComment(""));if(div.getElementsByTagName("*").length>0){Expr.find.TAG=function(match,context){var results=context.getElementsByTagName(match[1]);if(match[1]==="*"){var tmp=[];for(var i=0;results[i];i++){if(results[i].nodeType===1){tmp.push(results[i])}}results=tmp}return results}}div.innerHTML="<a href='#'></a>";if(div.firstChild&&typeof div.firstChild.getAttribute!=="undefined"&&div.firstChild.getAttribute("href")!=="#"){Expr.attrHandle.href=function(elem){return elem.getAttribute("href",2)}}div=null})();if(document.querySelectorAll){(function(){var oldSizzle=Sizzle,div=document.createElement("div");div.innerHTML="<p class='TEST'></p>";if(div.querySelectorAll&&div.querySelectorAll(".TEST").length===0){return}Sizzle=function(query,context,extra,seed){context=context||document;if(!seed&&context.nodeType===9&&!isXML(context)){try{return makeArray(context.querySelectorAll(query),extra)}catch(e){}}return oldSizzle(query,context,extra,seed)};for(var prop in oldSizzle){Sizzle[prop]=oldSizzle[prop]}div=null})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var div=document.createElement("div");div.innerHTML="<div class='test e'></div><div class='test'></div>";if(div.getElementsByClassName("e").length===0){return}div.lastChild.className="e";if(div.getElementsByClassName("e").length===1){return}Expr.order.splice(1,0,"CLASS");Expr.find.CLASS=function(match,context,isXML){if(typeof context.getElementsByClassName!=="undefined"&&!isXML){return context.getElementsByClassName(match[1])}};div=null})()}function dirNodeCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){var sibDir=dir=="previousSibling"&&!isXML;for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){if(sibDir&&elem.nodeType===1){elem.sizcache=doneName;elem.sizset=i}elem=elem[dir];var match=false;while(elem){if(elem.sizcache===doneName){match=checkSet[elem.sizset];break}if(elem.nodeType===1&&!isXML){elem.sizcache=doneName;elem.sizset=i}if(elem.nodeName===cur){match=elem;break}elem=elem[dir]}checkSet[i]=match}}}function dirCheck(dir,cur,doneName,checkSet,nodeCheck,isXML){var sibDir=dir=="previousSibling"&&!isXML;for(var i=0,l=checkSet.length;i<l;i++){var elem=checkSet[i];if(elem){if(sibDir&&elem.nodeType===1){elem.sizcache=doneName;elem.sizset=i}elem=elem[dir];var match=false;while(elem){if(elem.sizcache===doneName){match=checkSet[elem.sizset];break}if(elem.nodeType===1){if(!isXML){elem.sizcache=doneName;elem.sizset=i}if(typeof cur!=="string"){if(elem===cur){match=true;break}}else{if(Sizzle.filter(cur,[elem]).length>0){match=elem;break}}}elem=elem[dir]}checkSet[i]=match}}}var contains=document.compareDocumentPosition?function(a,b){return a.compareDocumentPosition(b)&16}:function(a,b){return a!==b&&(a.contains?a.contains(b):true)};var isXML=function(elem){return elem.nodeType===9&&elem.documentElement.nodeName!=="HTML"||!!elem.ownerDocument&&elem.ownerDocument.documentElement.nodeName!=="HTML"};var posProcess=function(selector,context){var tmpSet=[],later="",match,root=context.nodeType?[context]:context;while((match=Expr.match.PSEUDO.exec(selector))){later+=match[0];selector=selector.replace(Expr.match.PSEUDO,"")}selector=Expr.relative[selector]?selector+"*":selector;for(var i=0,l=root.length;i<l;i++){Sizzle(selector,root[i],tmpSet)}return Sizzle.filter(later,tmpSet)};window.Sizzle=Sizzle})();(function(engine){var extendElements=Prototype.Selector.extendElements;function select(selector,scope){return extendElements(engine(selector,scope||document))}function match(element,selector){return engine.matches(selector,[element]).length==1}Prototype.Selector.engine=engine;Prototype.Selector.select=select;Prototype.Selector.match=match})(Sizzle);window.Sizzle=Prototype._original_property;delete Prototype._original_property;var Form={reset:function(form){form=$(form);form.reset();return form},serializeElements:function(elements,options){if(typeof options!="object"){options={hash:!!options}}else{if(Object.isUndefined(options.hash)){options.hash=true}}var key,value,submitted=false,submit=options.submit,accumulator,initial;if(options.hash){initial={};accumulator=function(result,key,value){if(key in result){if(!Object.isArray(result[key])){result[key]=[result[key]]}result[key].push(value)}else{result[key]=value}return result}}else{initial="";accumulator=function(result,key,value){return result+(result?"&":"")+encodeURIComponent(key)+"="+encodeURIComponent(value)}}return elements.inject(initial,function(result,element){if(!element.disabled&&element.name){key=element.name;value=$(element).getValue();if(value!=null&&element.type!="file"&&(element.type!="submit"||(!submitted&&submit!==false&&(!submit||key==submit)&&(submitted=true)))){result=accumulator(result,key,value)}}return result})}};Form.Methods={serialize:function(form,options){return Form.serializeElements(Form.getElements(form),options)},getElements:function(form){var elements=$(form).getElementsByTagName("*"),element,arr=[],serializers=Form.Element.Serializers;for(var i=0;element=elements[i];i++){arr.push(element)}return arr.inject([],function(elements,child){if(serializers[child.tagName.toLowerCase()]){elements.push(Element.extend(child))}return elements})},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName("input");if(!typeName&&!name){return $A(inputs).map(Element.extend)}for(var i=0,matchingInputs=[],length=inputs.length;i<length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name)){continue}matchingInputs.push(Element.extend(input))}return matchingInputs},disable:function(form){form=$(form);Form.getElements(form).invoke("disable");return form},enable:function(form){form=$(form);Form.getElements(form).invoke("enable");return form},findFirstElement:function(form){var elements=$(form).getElements().findAll(function(element){return"hidden"!=element.type&&!element.disabled});var firstByIndex=elements.findAll(function(element){return element.hasAttribute("tabIndex")&&element.tabIndex>=0}).sortBy(function(element){return element.tabIndex}).first();return firstByIndex?firstByIndex:elements.find(function(element){return/^(?:input|select|textarea)$/i.test(element.tagName)})},focusFirstElement:function(form){form=$(form);var element=form.findFirstElement();if(element){element.activate()}return form},request:function(form,options){form=$(form),options=Object.clone(options||{});var params=options.parameters,action=form.readAttribute("action")||"";if(action.blank()){action=window.location.href}options.parameters=form.serialize(true);if(params){if(Object.isString(params)){params=params.toQueryParams()}Object.extend(options.parameters,params)}if(form.hasAttribute("method")&&!options.method){options.method=form.method}return new Ajax.Request(action,options)}};Form.Element={focus:function(element){$(element).focus();return element},select:function(element){$(element).select();return element}};Form.Element.Methods={serialize:function(element){element=$(element);if(!element.disabled&&element.name){var value=element.getValue();if(value!=undefined){var pair={};pair[element.name]=value;return Object.toQueryString(pair)}}return""},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();return Form.Element.Serializers[method](element)},setValue:function(element,value){element=$(element);var method=element.tagName.toLowerCase();Form.Element.Serializers[method](element,value);return element},clear:function(element){$(element).value="";return element},present:function(element){return $(element).value!=""},activate:function(element){element=$(element);try{element.focus();if(element.select&&(element.tagName.toLowerCase()!="input"||!(/^(?:button|reset|submit)$/i.test(element.type)))){element.select()}}catch(e){}return element},disable:function(element){element=$(element);element.disabled=true;return element},enable:function(element){element=$(element);element.disabled=false;return element}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers=(function(){function input(element,value){switch(element.type.toLowerCase()){case"checkbox":case"radio":return inputSelector(element,value);default:return valueSelector(element,value)}}function inputSelector(element,value){if(Object.isUndefined(value)){return element.checked?element.value:null}else{element.checked=!!value}}function valueSelector(element,value){if(Object.isUndefined(value)){return element.value}else{element.value=value}}function select(element,value){if(Object.isUndefined(value)){return(element.type==="select-one"?selectOne:selectMany)(element)}var opt,currentValue,single=!Object.isArray(value);for(var i=0,length=element.length;i<length;i++){opt=element.options[i];currentValue=this.optionValue(opt);if(single){if(currentValue==value){opt.selected=true;return}}else{opt.selected=value.include(currentValue)}}}function selectOne(element){var index=element.selectedIndex;return index>=0?optionValue(element.options[index]):null}function selectMany(element){var values,length=element.length;if(!length){return null}for(var i=0,values=[];i<length;i++){var opt=element.options[i];if(opt.selected){values.push(optionValue(opt))}}return values}function optionValue(opt){return Element.hasAttribute(opt,"value")?opt.value:opt.text}return{input:input,inputSelector:inputSelector,textarea:valueSelector,select:select,selectOne:selectOne,selectMany:selectMany,optionValue:optionValue,button:valueSelector}})();Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,element,frequency,callback){$super(callback,frequency);this.element=$(element);this.lastValue=this.getValue()},execute:function(){var value=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(value)?this.lastValue!=value:String(this.lastValue)!=String(value)){this.callback(this.element,value);this.lastValue=value}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=="form"){this.registerFormCallbacks()}else{this.registerCallback(this.element)}},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case"checkbox":case"radio":Event.observe(element,"click",this.onElementEvent.bind(this));break;default:Event.observe(element,"change",this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});(function(){var Event={KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{}};var docEl=document.documentElement;var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED="onmouseenter" in docEl&&"onmouseleave" in docEl;var isIELegacyEvent=function(event){return false};if(window.attachEvent){if(window.addEventListener){isIELegacyEvent=function(event){return !(event instanceof window.Event)}}else{isIELegacyEvent=function(event){return true}}}var _isButton;function _isButtonForDOMEvents(event,code){return event.which?(event.which===code+1):(event.button===code)}var legacyButtonMap={0:1,1:4,2:2};function _isButtonForLegacyEvents(event,code){return event.button===legacyButtonMap[code]}function _isButtonForWebKit(event,code){switch(code){case 0:return event.which==1&&!event.metaKey;case 1:return event.which==2||(event.which==1&&event.metaKey);case 2:return event.which==3;default:return false}}if(window.attachEvent){if(!window.addEventListener){_isButton=_isButtonForLegacyEvents}else{_isButton=function(event,code){return isIELegacyEvent(event)?_isButtonForLegacyEvents(event,code):_isButtonForDOMEvents(event,code)}}}else{if(Prototype.Browser.WebKit){_isButton=_isButtonForWebKit}else{_isButton=_isButtonForDOMEvents}}function isLeftClick(event){return _isButton(event,0)}function isMiddleClick(event){return _isButton(event,1)}function isRightClick(event){return _isButton(event,2)}function element(event){event=Event.extend(event);var node=event.target,type=event.type,currentTarget=event.currentTarget;if(currentTarget&&currentTarget.tagName){if(type==="load"||type==="error"||(type==="click"&&currentTarget.tagName.toLowerCase()==="input"&&currentTarget.type==="radio")){node=currentTarget}}if(node.nodeType==Node.TEXT_NODE){node=node.parentNode}return Element.extend(node)}function findElement(event,expression){var element=Event.element(event);if(!expression){return element}while(element){if(Object.isElement(element)&&Prototype.Selector.match(element,expression)){return Element.extend(element)}element=element.parentNode}}function pointer(event){return{x:pointerX(event),y:pointerY(event)}}function pointerX(event){var docElement=document.documentElement,body=document.body||{scrollLeft:0};return event.pageX||(event.clientX+(docElement.scrollLeft||body.scrollLeft)-(docElement.clientLeft||0))}function pointerY(event){var docElement=document.documentElement,body=document.body||{scrollTop:0};return event.pageY||(event.clientY+(docElement.scrollTop||body.scrollTop)-(docElement.clientTop||0))}function stop(event){Event.extend(event);event.preventDefault();event.stopPropagation();event.stopped=true}Event.Methods={isLeftClick:isLeftClick,isMiddleClick:isMiddleClick,isRightClick:isRightClick,element:element,findElement:findElement,pointer:pointer,pointerX:pointerX,pointerY:pointerY,stop:stop};var methods=Object.keys(Event.Methods).inject({},function(m,name){m[name]=Event.Methods[name].methodize();return m});if(window.attachEvent){function _relatedTarget(event){var element;switch(event.type){case"mouseover":case"mouseenter":element=event.fromElement;break;case"mouseout":case"mouseleave":element=event.toElement;break;default:return null}return Element.extend(element)}var additionalMethods={stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}};Event.extend=function(event,element){if(!event){return false}if(!isIELegacyEvent(event)){return event}if(event._extendedByPrototype){return event}event._extendedByPrototype=Prototype.emptyFunction;var pointer=Event.pointer(event);Object.extend(event,{target:event.srcElement||element,relatedTarget:_relatedTarget(event),pageX:pointer.x,pageY:pointer.y});Object.extend(event,methods);Object.extend(event,additionalMethods);return event}}else{Event.extend=Prototype.K}if(window.addEventListener){Event.prototype=window.Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(Event.prototype,methods)}function _createResponder(element,eventName,handler){var registry=Element.retrieve(element,"prototype_event_registry");if(Object.isUndefined(registry)){CACHE.push(element);registry=Element.retrieve(element,"prototype_event_registry",$H())}var respondersForEvent=registry.get(eventName);if(Object.isUndefined(respondersForEvent)){respondersForEvent=[];registry.set(eventName,respondersForEvent)}if(respondersForEvent.pluck("handler").include(handler)){return false}var responder;if(eventName.include(":")){responder=function(event){if(Object.isUndefined(event.eventName)){return false}if(event.eventName!==eventName){return false}Event.extend(event,element);handler.call(element,event)}}else{if(!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED&&(eventName==="mouseenter"||eventName==="mouseleave")){if(eventName==="mouseenter"||eventName==="mouseleave"){responder=function(event){Event.extend(event,element);var parent=event.relatedTarget;while(parent&&parent!==element){try{parent=parent.parentNode}catch(e){parent=element}}if(parent===element){return}handler.call(element,event)}}}else{responder=function(event){Event.extend(event,element);handler.call(element,event)}}}responder.handler=handler;respondersForEvent.push(responder);return responder}function _destroyCache(){for(var i=0,length=CACHE.length;i<length;i++){Event.stopObserving(CACHE[i]);CACHE[i]=null}}var CACHE=[];if(Prototype.Browser.IE){window.attachEvent("onunload",_destroyCache)}if(Prototype.Browser.WebKit){window.addEventListener("unload",Prototype.emptyFunction,false)}var _getDOMEventName=Prototype.K,translations={mouseenter:"mouseover",mouseleave:"mouseout"};if(!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED){_getDOMEventName=function(eventName){return(translations[eventName]||eventName)}}function observe(element,eventName,handler){element=$(element);var responder=_createResponder(element,eventName,handler);if(!responder){return element}if(eventName.include(":")){if(element.addEventListener){element.addEventListener("dataavailable",responder,false)}else{element.attachEvent("ondataavailable",responder);element.attachEvent("onlosecapture",responder)}}else{var actualEventName=_getDOMEventName(eventName);if(element.addEventListener){element.addEventListener(actualEventName,responder,false)}else{element.attachEvent("on"+actualEventName,responder)}}return element}function stopObserving(element,eventName,handler){element=$(element);var registry=Element.retrieve(element,"prototype_event_registry");if(!registry){return element}if(!eventName){registry.each(function(pair){var eventName=pair.key;stopObserving(element,eventName)});return element}var responders=registry.get(eventName);if(!responders){return element}if(!handler){responders.each(function(r){stopObserving(element,eventName,r.handler)});return element}var i=responders.length,responder;while(i--){if(responders[i].handler===handler){responder=responders[i];break}}if(!responder){return element}if(eventName.include(":")){if(element.removeEventListener){element.removeEventListener("dataavailable",responder,false)}else{element.detachEvent("ondataavailable",responder);element.detachEvent("onlosecapture",responder)}}else{var actualEventName=_getDOMEventName(eventName);if(element.removeEventListener){element.removeEventListener(actualEventName,responder,false)}else{element.detachEvent("on"+actualEventName,responder)}}registry.set(eventName,responders.without(responder));return element}function fire(element,eventName,memo,bubble){element=$(element);if(Object.isUndefined(bubble)){bubble=true}if(element==document&&document.createEvent&&!element.dispatchEvent){element=document.documentElement}var event;if(document.createEvent){event=document.createEvent("HTMLEvents");event.initEvent("dataavailable",bubble,true)}else{event=document.createEventObject();event.eventType=bubble?"ondataavailable":"onlosecapture"}event.eventName=eventName;event.memo=memo||{};if(document.createEvent){element.dispatchEvent(event)}else{element.fireEvent(event.eventType,event)}return Event.extend(event)}Event.Handler=Class.create({initialize:function(element,eventName,selector,callback){this.element=$(element);this.eventName=eventName;this.selector=selector;this.callback=callback;this.handler=this.handleEvent.bind(this)},start:function(){Event.observe(this.element,this.eventName,this.handler);return this},stop:function(){Event.stopObserving(this.element,this.eventName,this.handler);return this},handleEvent:function(event){var element=Event.findElement(event,this.selector);if(element){this.callback.call(this.element,event,element)}}});function on(element,eventName,selector,callback){element=$(element);if(Object.isFunction(selector)&&Object.isUndefined(callback)){callback=selector,selector=null}return new Event.Handler(element,eventName,selector,callback).start()}Object.extend(Event,Event.Methods);Object.extend(Event,{fire:fire,observe:observe,stopObserving:stopObserving,on:on});Element.addMethods({fire:fire,observe:observe,stopObserving:stopObserving,on:on});Object.extend(document,{fire:fire.methodize(),observe:observe.methodize(),stopObserving:stopObserving.methodize(),on:on.methodize(),loaded:false});if(window.Event){Object.extend(window.Event,Event)}else{window.Event=Event}})();(function(){var timer;function fireContentLoadedEvent(){if(document.loaded){return}if(timer){window.clearTimeout(timer)}document.loaded=true;document.fire("dom:loaded")}function checkReadyState(){if(document.readyState==="complete"){document.stopObserving("readystatechange",checkReadyState);fireContentLoadedEvent()}}if(document.addEventListener){document.addEventListener("DOMContentLoaded",fireContentLoadedEvent,false)}else{document.observe("readystatechange",checkReadyState);if(window==top){var timer=window.setInterval(function(){try{document.documentElement.doScroll("left")}catch(e){return}window.clearInterval(timer);fireContentLoadedEvent()},5)}}Event.observe(window,"load",fireContentLoadedEvent)})();Element.addMethods();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(element,content){return Element.insert(element,{before:content})},Top:function(element,content){return Element.insert(element,{top:content})},Bottom:function(element,content){return Element.insert(element,{bottom:content})},After:function(element,content){return Element.insert(element,{after:content})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(element,x,y){if(this.includeScrollOffsets){return this.withinIncludingScrolloffsets(element,x,y)}this.xcomp=x;this.ycomp=y;this.offset=Element.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth)},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=Element.cumulativeScrollOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=Element.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth)},overlap:function(mode,element){if(!mode){return 0}if(mode=="vertical"){return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight}if(mode=="horizontal"){return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth}},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(element){Position.prepare();return Element.absolutize(element)},relativize:function(element){Position.prepare();return Element.relativize(element)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(source,target,options){options=options||{};return Element.clonePosition(target,source,options)}};if(!document.getElementsByClassName){document.getElementsByClassName=function(instanceMethods){function iter(name){return name.blank()?null:"[contains(concat(' ', @class, ' '), ' "+name+" ')]"}instanceMethods.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(element,className){className=className.toString().strip();var cond=/\s/.test(className)?$w(className).map(iter).join(""):iter(className);return cond?document._getElementsByXPath(".//*"+cond,element):[]}:function(element,className){className=className.toString().strip();var elements=[],classNames=(/\s/.test(className)?$w(className):null);if(!classNames&&!className){return elements}var nodes=$(element).getElementsByTagName("*");className=" "+className+" ";for(var i=0,child,cn;child=nodes[i];i++){if(child.className&&(cn=" "+child.className+" ")&&(cn.include(className)||(classNames&&classNames.all(function(name){return !name.toString().blank()&&cn.include(" "+name+" ")})))){elements.push(Element.extend(child))}}return elements};return function(className,parentElement){return $(parentElement||document.body).getElementsByClassName(className)}}(Element.Methods)}Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element)},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0})._each(iterator)},set:function(className){this.element.className=className},add:function(classNameToAdd){if(this.include(classNameToAdd)){return}this.set($A(this).concat(classNameToAdd).join(" "))},remove:function(classNameToRemove){if(!this.include(classNameToRemove)){return}this.set($A(this).without(classNameToRemove).join(" "))},toString:function(){return $A(this).join(" ")}};Object.extend(Element.ClassNames.prototype,Enumerable);(function(){window.Selector=Class.create({initialize:function(expression){this.expression=expression.strip()},findElements:function(rootElement){return Prototype.Selector.select(this.expression,rootElement)},match:function(element){return Prototype.Selector.match(element,this.expression)},toString:function(){return this.expression},inspect:function(){return"#<Selector: "+this.expression+">"}});Object.extend(Selector,{matchElements:function(elements,expression){var match=Prototype.Selector.match,results=[];for(var i=0,length=elements.length;i<length;i++){var element=elements[i];if(match(element,expression)){results.push(Element.extend(element))}}return results},findElement:function(elements,expression,index){index=index||0;var matchIndex=0,element;for(var i=0,length=elements.length;i<length;i++){element=elements[i];if(Prototype.Selector.match(element,expression)&&index===matchIndex++){return Element.extend(element)}}},findChildElements:function(element,expressions){var selector=expressions.toArray().join(", ");return Prototype.Selector.select(selector,element||document)}})})();var Window=Class.create();Window.keepMultiModalWindow=false;Window.hasEffectLib=(typeof Effect!="undefined");Window.resizeEffectDuration=0.4;Window.prototype={initialize:function(){var id;var optionIndex=0;if(arguments.length>0){if(typeof arguments[0]=="string"){id=arguments[0];optionIndex=1}else{id=arguments[0]?arguments[0].id:null}}if(!id){id="window_"+new Date().getTime()}if($(id)){alert("Window "+id+" is already registered in the DOM! Make sure you use setDestroyOnClose() or destroyOnClose: true in the constructor")}this.options=Object.extend({className:"dialog",windowClassName:null,blurClassName:null,minWidth:100,minHeight:20,resizable:true,closable:true,minimizable:true,maximizable:true,draggable:true,userData:null,showEffect:(Window.hasEffectLib?Effect.Appear:Element.show),hideEffect:(Window.hasEffectLib?Effect.Fade:Element.hide),showEffectOptions:{},hideEffectOptions:{},effectOptions:null,parent:document.body,title:"&nbsp;",url:null,onload:Prototype.emptyFunction,width:200,height:300,opacity:1,recenterAuto:true,wiredDrag:false,closeOnEsc:true,closeCallback:null,destroyOnClose:false,gridX:1,gridY:1},arguments[optionIndex]||{});if(this.options.blurClassName){this.options.focusClassName=this.options.className}if(typeof this.options.top=="undefined"&&typeof this.options.bottom=="undefined"){this.options.top=this._round(Math.random()*500,this.options.gridY)}if(typeof this.options.left=="undefined"&&typeof this.options.right=="undefined"){this.options.left=this._round(Math.random()*500,this.options.gridX)}if(this.options.effectOptions){Object.extend(this.options.hideEffectOptions,this.options.effectOptions);Object.extend(this.options.showEffectOptions,this.options.effectOptions);if(this.options.showEffect==Element.Appear){this.options.showEffectOptions.to=this.options.opacity}}if(Window.hasEffectLib){if(this.options.showEffect==Effect.Appear){this.options.showEffectOptions.to=this.options.opacity}if(this.options.hideEffect==Effect.Fade){this.options.hideEffectOptions.from=this.options.opacity}}if(this.options.hideEffect==Element.hide){this.options.hideEffect=function(){Element.hide(this.element);if(this.options.destroyOnClose){this.destroy()}}.bind(this)}if(this.options.parent!=document.body){this.options.parent=$(this.options.parent)}this.element=this._createWindow(id);this.element.win=this;this.eventMouseDown=this._initDrag.bindAsEventListener(this);this.eventMouseUp=this._endDrag.bindAsEventListener(this);this.eventMouseMove=this._updateDrag.bindAsEventListener(this);this.eventOnLoad=this._getWindowBorderSize.bindAsEventListener(this);this.eventMouseDownContent=this.toFront.bindAsEventListener(this);this.eventResize=this._recenter.bindAsEventListener(this);this.eventKeyUp=this._keyUp.bindAsEventListener(this);this.topbar=$(this.element.id+"_top");this.bottombar=$(this.element.id+"_bottom");this.content=$(this.element.id+"_content");Event.observe(this.topbar,"mousedown",this.eventMouseDown);Event.observe(this.bottombar,"mousedown",this.eventMouseDown);Event.observe(this.content,"mousedown",this.eventMouseDownContent);Event.observe(window,"load",this.eventOnLoad);Event.observe(window,"resize",this.eventResize);Event.observe(window,"scroll",this.eventResize);Event.observe(document,"keyup",this.eventKeyUp);Event.observe(this.options.parent,"scroll",this.eventResize);if(this.options.draggable){var that=this;[this.topbar,this.topbar.up().previous(),this.topbar.up().next()].each(function(element){element.observe("mousedown",that.eventMouseDown);element.addClassName("top_draggable")});[this.bottombar.up(),this.bottombar.up().previous(),this.bottombar.up().next()].each(function(element){element.observe("mousedown",that.eventMouseDown);element.addClassName("bottom_draggable")})}if(this.options.resizable){this.sizer=$(this.element.id+"_sizer");Event.observe(this.sizer,"mousedown",this.eventMouseDown)}this.useLeft=null;this.useTop=null;if(typeof this.options.left!="undefined"){this.element.setStyle({left:parseFloat(this.options.left)+"px"});this.useLeft=true}else{this.element.setStyle({right:parseFloat(this.options.right)+"px"});this.useLeft=false}if(typeof this.options.top!="undefined"){this.element.setStyle({top:parseFloat(this.options.top)+"px"});this.useTop=true}else{this.element.setStyle({bottom:parseFloat(this.options.bottom)+"px"});this.useTop=false}this.storedLocation=null;this.setOpacity(this.options.opacity);if(this.options.zIndex){this.setZIndex(this.options.zIndex)}else{this.setZIndex(this.getMaxZIndex())}if(this.options.destroyOnClose){this.setDestroyOnClose(true)}this._getWindowBorderSize();this.width=this.options.width;this.height=this.options.height;this.visible=false;this.constraint=false;this.constraintPad={top:0,left:0,bottom:0,right:0};if(this.width&&this.height){this.setSize(this.options.width,this.options.height)}this.setTitle(this.options.title);Windows.register(this)},getMaxZIndex:function(){var max=0,i;var cn=document.body.childNodes;for(i=0;i<cn.length;i++){var el=cn[i];var zIndex=el.nodeType==1?parseInt(el.style.zIndex,10)||0:0;if(zIndex<10000){max=Math.max(max,zIndex)}}return max+10},destroy:function(){this._notify("onDestroy");Event.stopObserving(this.topbar,"mousedown",this.eventMouseDown);Event.stopObserving(this.bottombar,"mousedown",this.eventMouseDown);Event.stopObserving(this.content,"mousedown",this.eventMouseDownContent);Event.stopObserving(window,"load",this.eventOnLoad);Event.stopObserving(window,"resize",this.eventResize);Event.stopObserving(window,"scroll",this.eventResize);Event.stopObserving(this.content,"load",this.options.onload);Event.stopObserving(document,"keyup",this.eventKeyUp);if(this._oldParent){var content=this.getContent();var originalContent=null;for(var i=0;i<content.childNodes.length;i++){originalContent=content.childNodes[i];if(originalContent.nodeType==1){break}originalContent=null}if(originalContent){this._oldParent.appendChild(originalContent)}this._oldParent=null}if(this.sizer){Event.stopObserving(this.sizer,"mousedown",this.eventMouseDown)}if(this.options.url){this.content.src=null}if(this.iefix){Element.remove(this.iefix)}Element.remove(this.element);Windows.unregister(this)},setCloseCallback:function(callback){this.options.closeCallback=callback},getContent:function(){return this.content},setContent:function(id,autoresize,autoposition){var element=$(id);if(null==element){throw"Unable to find element '"+id+"' in DOM"}this._oldParent=element.parentNode;var d=null;var p=null;if(autoresize){d=Element.getDimensions(element)}if(autoposition){p=Position.cumulativeOffset(element)}var content=this.getContent();this.setHTMLContent("");content=this.getContent();content.appendChild(element);element.show();if(autoresize){this.setSize(d.width,d.height)}if(autoposition){this.setLocation(p[1]-this.heightN,p[0]-this.widthW)}},setHTMLContent:function(html){if(this.options.url){this.content.src=null;this.options.url=null;var content='<div id="'+this.getId()+'_content" class="'+this.options.className+'_content"> </div>';$(this.getId()+"_table_content").innerHTML=content;this.content=$(this.element.id+"_content")}this.getContent().innerHTML=html},setAjaxContent:function(url,options,showCentered,showModal){this.showFunction=showCentered?"showCenter":"show";this.showModal=showModal||false;options=options||{};this.setHTMLContent("");this.onComplete=options.onComplete;if(!this._onCompleteHandler){this._onCompleteHandler=this._setAjaxContent.bind(this)}options.onComplete=this._onCompleteHandler;new Ajax.Request(url,options);options.onComplete=this.onComplete},_setAjaxContent:function(originalRequest){Element.update(this.getContent(),originalRequest.responseText);if(this.onComplete){this.onComplete(originalRequest)}this.onComplete=null;this[this.showFunction](this.showModal)},setURL:function(url){if(this.options.url){this.content.src=null}this.options.url=url;var content="<iframe frameborder='0' name='"+this.getId()+"_content'  id='"+this.getId()+"_content' src='"+url+"' width='"+this.width+"' height='"+this.height+"'> </iframe>";$(this.getId()+"_table_content").innerHTML=content;this.content=$(this.element.id+"_content")},getURL:function(){return this.options.url?this.options.url:null},refresh:function(){if(this.options.url){$(this.element.getAttribute("id")+"_content").src=this.options.url}},setCookie:function(name,expires,path,domain,secure){name=name||this.element.id;this.cookie=[name,expires,path,domain,secure];var value=WindowUtilities.getCookie(name);if(value){var values=value.split(",");var x=values[0].split(":");var y=values[1].split(":");var w=parseFloat(values[2]),h=parseFloat(values[3]);var mini=values[4];var maxi=values[5];this.setSize(w,h);if(mini=="true"){this.doMinimize=true}else{if(maxi=="true"){this.doMaximize=true}}this.useLeft=x[0]=="l";this.useTop=y[0]=="t";this.element.setStyle(this.useLeft?{left:x[1]}:{right:x[1]});this.element.setStyle(this.useTop?{top:y[1]}:{bottom:y[1]})}},getId:function(){return this.element.id},setDestroyOnClose:function(){this.options.destroyOnClose=true},setConstraint:function(bool,padding){this.constraint=bool;this.constraintPad=Object.extend(this.constraintPad,padding||{});if(this.useTop&&this.useLeft){this.setLocation(parseFloat(this.element.style.top),parseFloat(this.element.style.left))}},_initDrag:function(event){if(Event.element(event)==this.sizer&&this.isMinimized()){return}if(Event.element(event)!=this.sizer&&this.isMaximized()){return}if(Prototype.Browser.IE&&this.heightN==0){this._getWindowBorderSize()}this.pointer=[this._round(Event.pointerX(event),this.options.gridX),this._round(Event.pointerY(event),this.options.gridY)];if(this.options.wiredDrag){this.currentDrag=this._createWiredElement()}else{this.currentDrag=this.element}if(Event.element(event)==this.sizer){this.doResize=true;this.widthOrg=this.width;this.heightOrg=this.height;this.bottomOrg=parseFloat(this.element.getStyle("bottom"));this.rightOrg=parseFloat(this.element.getStyle("right"));this._notify("onStartResize")}else{this.doResize=false;var closeButton=$(this.getId()+"_close");if(closeButton&&Position.within(closeButton,this.pointer[0],this.pointer[1])){this.currentDrag=null;return}this.toFront();if(!this.options.draggable){return}this._notify("onStartMove")}Event.observe(document,"mouseup",this.eventMouseUp,false);Event.observe(document,"mousemove",this.eventMouseMove,false);WindowUtilities.disableScreen("__invisible__","__invisible__",this.overlayOpacity);document.body.ondrag=function(){return false};document.body.onselectstart=function(){return false};this.currentDrag.show();Event.stop(event)},_round:function(val,round){return round==1?val:val=Math.floor(val/round)*round},_updateDrag:function(event){var pointer=[this._round(Event.pointerX(event),this.options.gridX),this._round(Event.pointerY(event),this.options.gridY)];var dx=pointer[0]-this.pointer[0];var dy=pointer[1]-this.pointer[1];if(this.doResize){var w=this.widthOrg+dx;var h=this.heightOrg+dy;dx=this.width-this.widthOrg;dy=this.height-this.heightOrg;if(this.useLeft){w=this._updateWidthConstraint(w)}else{this.currentDrag.setStyle({right:(this.rightOrg-dx)+"px"})}if(this.useTop){h=this._updateHeightConstraint(h)}else{this.currentDrag.setStyle({bottom:(this.bottomOrg-dy)+"px"})}this.setSize(w,h);this._notify("onResize")}else{this.pointer=pointer;if(this.useLeft){var left=parseFloat(this.currentDrag.getStyle("left"))+dx;var newLeft=this._updateLeftConstraint(left);this.pointer[0]+=newLeft-left;this.currentDrag.setStyle({left:newLeft+"px"})}else{this.currentDrag.setStyle({right:parseFloat(this.currentDrag.getStyle("right"))-dx+"px"})}if(this.useTop){var top=parseFloat(this.currentDrag.getStyle("top"))+dy;var newTop=this._updateTopConstraint(top);this.pointer[1]+=newTop-top;this.currentDrag.setStyle({top:newTop+"px"})}else{this.currentDrag.setStyle({bottom:parseFloat(this.currentDrag.getStyle("bottom"))-dy+"px"})}this._notify("onMove")}if(this.iefix){this._fixIEOverlapping()}this._removeStoreLocation();Event.stop(event)},_endDrag:function(event){WindowUtilities.enableScreen("__invisible__");if(this.doResize){this._notify("onEndResize")}else{this._notify("onEndMove")}Event.stopObserving(document,"mouseup",this.eventMouseUp,false);Event.stopObserving(document,"mousemove",this.eventMouseMove,false);Event.stop(event);this._hideWiredElement();this._saveCookie();document.body.ondrag=null;document.body.onselectstart=null},_updateLeftConstraint:function(left){if(this.constraint&&this.useLeft&&this.useTop){var width=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;if(left<this.constraintPad.left){left=this.constraintPad.left}if(left+this.width+this.widthE+this.widthW>width-this.constraintPad.right){left=width-this.constraintPad.right-this.width-this.widthE-this.widthW}}return left},_updateTopConstraint:function(top){if(this.constraint&&this.useLeft&&this.useTop){var height=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var h=this.height+this.heightN+this.heightS;if(top<this.constraintPad.top){top=this.constraintPad.top}if(top+h>height-this.constraintPad.bottom){top=height-this.constraintPad.bottom-h}}return top},_updateWidthConstraint:function(w){if(this.constraint&&this.useLeft&&this.useTop){var width=this.options.parent==document.body?WindowUtilities.getPageSize().windowWidth:this.options.parent.getDimensions().width;var left=parseFloat(this.element.getStyle("left"));if(left+w+this.widthE+this.widthW>width-this.constraintPad.right){w=width-this.constraintPad.right-left-this.widthE-this.widthW}}return w},_updateHeightConstraint:function(h){if(this.constraint&&this.useLeft&&this.useTop){var height=this.options.parent==document.body?WindowUtilities.getPageSize().windowHeight:this.options.parent.getDimensions().height;var top=parseFloat(this.element.getStyle("top"));if(top+h+this.heightN+this.heightS>height-this.constraintPad.bottom){h=height-this.constraintPad.bottom-top-this.heightN-this.heightS}}return h},_createWindow:function(id){var className=this.options.className;var win=document.createElement("div");win.setAttribute("id",id);win.className="dialog";if(this.options.windowClassName){win.className+=" "+this.options.windowClassName}var content;if(this.options.url){content='<iframe frameborder="0" name="'+id+'_content"  id="'+id+'_content" src="'+this.options.url+'"> </iframe>'}else{content='<div id="'+id+'_content" class="'+className+'_content"> </div>'}var closeDiv=this.options.closable?"<div class='"+className+"_close' id='"+id+"_close' onclick='Windows.close(\""+id+"\", event)'> </div>":"";var minDiv=this.options.minimizable?"<div class='"+className+"_minimize' id='"+id+"_minimize' onclick='Windows.minimize(\""+id+"\", event)'> </div>":"";var maxDiv=this.options.maximizable?"<div class='"+className+"_maximize' id='"+id+"_maximize' onclick='Windows.maximize(\""+id+"\", event)'> </div>":"";var seAttributes=this.options.resizable?"class='"+className+"_sizer' id='"+id+"_sizer'":"class='"+className+"_se'";var blank="../themes/default/blank.gif";win.innerHTML=closeDiv+minDiv+maxDiv+"      <a href='#' id='"+id+"_focus_anchor'><!-- --></a>      <table id='"+id+"_row1' class=\"top table_window\">        <tr>          <td class='"+className+"_nw'></td>          <td class='"+className+"_n'><div id='"+id+"_top' class='"+className+"_title title_window'>"+this.options.title+"</div></td>          <td class='"+className+"_ne'></td>        </tr>      </table>      <table id='"+id+"_row2' class=\"mid table_window\">        <tr>          <td class='"+className+"_w'></td>            <td id='"+id+"_table_content' class='"+className+"_content' valign='top'>"+content+"</td>          <td class='"+className+"_e'></td>        </tr>      </table>        <table id='"+id+"_row3' class=\"bot table_window\">        <tr>          <td class='"+className+"_sw'></td>            <td class='"+className+"_s'><div id='"+id+"_bottom' class='status_bar'><span style='float:left; width:1px; height:1px'></span></div></td>            <td "+seAttributes+"></td>        </tr>      </table>    ";Element.hide(win);this.options.parent.insertBefore(win,this.options.parent.firstChild);Event.observe($(id+"_content"),"load",this.options.onload);return win},changeClassName:function(newClassName){var className=this.options.className;var id=this.getId();$A(["_close","_minimize","_maximize","_sizer","_content"]).each(function(value){this._toggleClassName($(id+value),className+value,newClassName+value)}.bind(this));this._toggleClassName($(id+"_top"),className+"_title",newClassName+"_title");$$("#"+id+" td").each(function(td){td.className=td.className.sub(className,newClassName)});this.options.className=newClassName},_toggleClassName:function(element,oldClassName,newClassName){if(element){element.removeClassName(oldClassName);element.addClassName(newClassName)}},setLocation:function(top,left){top=this._updateTopConstraint(top);left=this._updateLeftConstraint(left);var e=this.currentDrag||this.element;e.setStyle({top:top+"px"});e.setStyle({left:left+"px"});this.useLeft=true;this.useTop=true},getLocation:function(){var location={};if(this.useTop){location=Object.extend(location,{top:this.element.getStyle("top")})}else{location=Object.extend(location,{bottom:this.element.getStyle("bottom")})}if(this.useLeft){location=Object.extend(location,{left:this.element.getStyle("left")})}else{location=Object.extend(location,{right:this.element.getStyle("right")})}return location},getSize:function(){return{width:this.width,height:this.height}},setSize:function(width,height,useEffect){width=parseFloat(width);height=parseFloat(height);if(!this.minimized&&width<this.options.minWidth){width=this.options.minWidth}if(!this.minimized&&height<this.options.minHeight){height=this.options.minHeight}if(this.options.maxHeight&&height>this.options.maxHeight){height=this.options.maxHeight}if(this.options.maxWidth&&width>this.options.maxWidth){width=this.options.maxWidth}if(this.useTop&&this.useLeft&&Window.hasEffectLib&&Effect.ResizeWindow&&useEffect){new Effect.ResizeWindow(this,null,null,width,height,{duration:Window.resizeEffectDuration})}else{this.width=width;this.height=height;var e=this.currentDrag?this.currentDrag:this.element;e.setStyle({width:width+this.widthW+this.widthE+"px"});e.setStyle({height:height+this.heightN+this.heightS+"px"});if(!this.currentDrag||this.currentDrag==this.element){var content=$(this.element.id+"_content");content.setStyle({height:height+"px"});content.setStyle({width:width+"px"})}}},updateHeight:function(){this.setSize(this.width,this.content.scrollHeight,true)},updateWidth:function(){this.setSize(this.content.scrollWidth,this.height,true)},toFront:function(){if(this.element.style.zIndex<Windows.maxZIndex){this.setZIndex(Windows.maxZIndex+1)}if(this.iefix){this._fixIEOverlapping()}},getBounds:function(insideOnly){if(!this.width||!this.height||!this.visible){this.computeBounds()}var w=this.width;var h=this.height;if(!insideOnly){w+=this.widthW+this.widthE;h+=this.heightN+this.heightS}var bounds=Object.extend(this.getLocation(),{width:w+"px",height:h+"px"});return bounds},computeBounds:function(){if(!this.width||!this.height){var size=WindowUtilities._computeSize(this.content.innerHTML,this.content.id,this.width,this.height,0,this.options.className);if(this.height){this.width=size+5}else{this.height=size+5}}this.setSize(this.width,this.height);if(this.centered){this._center(this.centerTop,this.centerLeft)}},show:function(modal){this.visible=true;if(modal){if(typeof this.overlayOpacity=="undefined"){var that=this;setTimeout(function(){that.show(modal)},10);return}Windows.addModalWindow(this);this.modal=true;this.setZIndex(Windows.maxZIndex+1);Windows.unsetOverflow(this)}else{if(!this.element.style.zIndex){this.setZIndex(Windows.maxZIndex+1)}}if(this.oldStyle){this.getContent().setStyle({overflow:this.oldStyle})}this.computeBounds();this._notify("onBeforeShow");if(this.options.showEffect!=Element.show&&this.options.showEffectOptions){this.options.showEffect(this.element,this.options.showEffectOptions)}else{this.options.showEffect(this.element)}this._checkIEOverlapping();WindowUtilities.focusedWindow=this;this._notify("onShow");$(this.element.id+"_focus_anchor").focus()},showCenter:function(modal,top,left){this.centered=true;this.centerTop=top;this.centerLeft=left;this.show(modal)},isVisible:function(){return this.visible},_center:function(top,left){var windowScroll=WindowUtilities.getWindowScroll(this.options.parent);var pageSize=WindowUtilities.getPageSize(this.options.parent);if(typeof top=="undefined"){top=(pageSize.windowHeight-(this.height+this.heightN+this.heightS))/2}top+=windowScroll.top;if(typeof left=="undefined"){left=(pageSize.windowWidth-(this.width+this.widthW+this.widthE))/2}left+=windowScroll.left;this.setLocation(top,left);this.toFront()},_recenter:function(event){if(this.centered){var pageSize=WindowUtilities.getPageSize(this.options.parent);var windowScroll=WindowUtilities.getWindowScroll(this.options.parent);if(this.pageSize&&this.pageSize.windowWidth==pageSize.windowWidth&&this.pageSize.windowHeight==pageSize.windowHeight&&this.windowScroll.left==windowScroll.left&&this.windowScroll.top==windowScroll.top){return}this.pageSize=pageSize;this.windowScroll=windowScroll;if($("overlay_modal")){$("overlay_modal").setStyle({height:(pageSize.pageHeight+"px")})}if(this.options.recenterAuto){this._center(this.centerTop,this.centerLeft)}}},hide:function(){this.visible=false;if(this.modal){Windows.removeModalWindow(this);Windows.resetOverflow()}this.oldStyle=this.getContent().getStyle("overflow")||"auto";this.getContent().setStyle({overflow:"hidden"});this.options.hideEffect(this.element,this.options.hideEffectOptions);if(this.iefix){this.iefix.hide()}if(!this.doNotNotifyHide){this._notify("onHide")}},close:function(){if(this.visible){if(this.options.closeCallback&&!this.options.closeCallback(this)){return}if(this.options.destroyOnClose){var destroyFunc=this.destroy.bind(this);if(this.options.hideEffectOptions.afterFinish){var func=this.options.hideEffectOptions.afterFinish;this.options.hideEffectOptions.afterFinish=function(){func();destroyFunc()}}else{this.options.hideEffectOptions.afterFinish=function(){destroyFunc()}}}Windows.updateFocusedWindow();this.doNotNotifyHide=true;this.hide();this.doNotNotifyHide=false;this._notify("onClose")}},minimize:function(){if(this.resizing){return}var r2=$(this.getId()+"_row2");if(!this.minimized){this.minimized=true;var dh=r2.getDimensions().height;this.r2Height=dh;var h=this.element.getHeight()-dh;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height-dh,{duration:Window.resizeEffectDuration})}else{this.height-=dh;this.element.setStyle({height:h+"px"});r2.hide()}if(!this.useTop){var bottom=parseFloat(this.element.getStyle("bottom"));this.element.setStyle({bottom:(bottom+dh)+"px"})}}else{this.minimized=false;var dh=this.r2Height;this.r2Height=null;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,null,null,null,this.height+dh,{duration:Window.resizeEffectDuration})}else{var h=this.element.getHeight()+dh;this.height+=dh;this.element.setStyle({height:h+"px"});r2.show()}if(!this.useTop){var bottom=parseFloat(this.element.getStyle("bottom"));this.element.setStyle({bottom:(bottom-dh)+"px"})}this.toFront()}this._notify("onMinimize");this._saveCookie()},maximize:function(){if(this.isMinimized()||this.resizing){return}if(Prototype.Browser.IE&&this.heightN==0){this._getWindowBorderSize()}if(this.storedLocation!=null){this._restoreLocation();if(this.iefix){this.iefix.hide()}}else{this._storeLocation();Windows.unsetOverflow(this);var windowScroll=WindowUtilities.getWindowScroll(this.options.parent);var pageSize=WindowUtilities.getPageSize(this.options.parent);var left=windowScroll.left;var top=windowScroll.top;if(this.options.parent!=document.body){windowScroll={top:0,left:0,bottom:0,right:0};var dim=this.options.parent.getDimensions();pageSize.windowWidth=dim.width;pageSize.windowHeight=dim.height;top=0;left=0}if(this.constraint){pageSize.windowWidth-=Math.max(0,this.constraintPad.left)+Math.max(0,this.constraintPad.right);pageSize.windowHeight-=Math.max(0,this.constraintPad.top)+Math.max(0,this.constraintPad.bottom);left+=Math.max(0,this.constraintPad.left);top+=Math.max(0,this.constraintPad.top)}var width=pageSize.windowWidth-this.widthW-this.widthE;var height=pageSize.windowHeight-this.heightN-this.heightS;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,top,left,width,height,{duration:Window.resizeEffectDuration})}else{this.setSize(width,height);this.element.setStyle(this.useLeft?{left:left}:{right:left});this.element.setStyle(this.useTop?{top:top}:{bottom:top})}this.toFront();if(this.iefix){this._fixIEOverlapping()}}this._notify("onMaximize");this._saveCookie()},isMinimized:function(){return this.minimized},isMaximized:function(){return(this.storedLocation!=null)},setOpacity:function(opacity){if(Element.setOpacity){Element.setOpacity(this.element,opacity)}},setZIndex:function(zindex){this.element.setStyle({zIndex:zindex});Windows.updateZindex(zindex,this)},setTitle:function(newTitle){if(!newTitle||newTitle==""){newTitle="&nbsp;"}Element.update(this.element.id+"_top",newTitle)},getTitle:function(){return $(this.element.id+"_top").innerHTML},setStatusBar:function(element){var statusBar=$(this.getId()+"_bottom");if(typeof(element)=="object"){if(this.bottombar.firstChild){this.bottombar.replaceChild(element,this.bottombar.firstChild)}else{this.bottombar.appendChild(element)}}else{this.bottombar.innerHTML=element}},_checkIEOverlapping:function(){if(!this.iefix&&(navigator.appVersion.indexOf("MSIE")>0)&&(navigator.userAgent.indexOf("Opera")<0)&&(this.element.getStyle("position")=="absolute")){new Insertion.After(this.element.id,'<iframe id="'+this.element.id+'_iefix" style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" src="javascript:false;" frameborder="0" scrolling="no"></iframe>');this.iefix=$(this.element.id+"_iefix")}if(this.iefix){setTimeout(this._fixIEOverlapping.bind(this),50)}},_fixIEOverlapping:function(){Position.clone(this.element,this.iefix);this.iefix.style.zIndex=this.element.style.zIndex-1;this.iefix.show()},_keyUp:function(event){if(27==event.keyCode&&this.options.closeOnEsc){this.close()}},_getWindowBorderSize:function(event){var div=this._createHiddenDiv(this.options.className+"_n");this.heightN=Element.getDimensions(div).height;div.parentNode.removeChild(div);var div=this._createHiddenDiv(this.options.className+"_s");this.heightS=Element.getDimensions(div).height;div.parentNode.removeChild(div);var div=this._createHiddenDiv(this.options.className+"_e");this.widthE=Element.getDimensions(div).width;div.parentNode.removeChild(div);var div=this._createHiddenDiv(this.options.className+"_w");this.widthW=Element.getDimensions(div).width;div.parentNode.removeChild(div);var div=document.createElement("div");div.className="overlay_"+this.options.className;document.body.appendChild(div);var that=this;setTimeout(function(){that.overlayOpacity=($(div).getStyle("opacity"));div.parentNode.removeChild(div)},10);if(Prototype.Browser.IE){this.heightS=$(this.getId()+"_row3").getDimensions().height;this.heightN=$(this.getId()+"_row1").getDimensions().height}if(Prototype.Browser.WebKit&&Prototype.Browser.WebKitVersion<420){this.setSize(this.width,this.height)}if(this.doMaximize){this.maximize()}if(this.doMinimize){this.minimize()}},_createHiddenDiv:function(className){var objBody=document.body;var win=document.createElement("div");win.setAttribute("id",this.element.id+"_tmp");win.className=className;win.style.display="none";win.innerHTML="";objBody.insertBefore(win,objBody.firstChild);return win},_storeLocation:function(){if(this.storedLocation==null){this.storedLocation={useTop:this.useTop,useLeft:this.useLeft,top:this.element.getStyle("top"),bottom:this.element.getStyle("bottom"),left:this.element.getStyle("left"),right:this.element.getStyle("right"),width:this.width,height:this.height}}},_restoreLocation:function(){if(this.storedLocation!=null){this.useLeft=this.storedLocation.useLeft;this.useTop=this.storedLocation.useTop;if(this.useLeft&&this.useTop&&Window.hasEffectLib&&Effect.ResizeWindow){new Effect.ResizeWindow(this,this.storedLocation.top,this.storedLocation.left,this.storedLocation.width,this.storedLocation.height,{duration:Window.resizeEffectDuration})}else{this.element.setStyle(this.useLeft?{left:this.storedLocation.left}:{right:this.storedLocation.right});this.element.setStyle(this.useTop?{top:this.storedLocation.top}:{bottom:this.storedLocation.bottom});this.setSize(this.storedLocation.width,this.storedLocation.height)}Windows.resetOverflow();this._removeStoreLocation()}},_removeStoreLocation:function(){this.storedLocation=null},_saveCookie:function(){if(this.cookie){var value="";if(this.useLeft){value+="l:"+(this.storedLocation?this.storedLocation.left:this.element.getStyle("left"))}else{value+="r:"+(this.storedLocation?this.storedLocation.right:this.element.getStyle("right"))}if(this.useTop){value+=",t:"+(this.storedLocation?this.storedLocation.top:this.element.getStyle("top"))}else{value+=",b:"+(this.storedLocation?this.storedLocation.bottom:this.element.getStyle("bottom"))}value+=","+(this.storedLocation?this.storedLocation.width:this.width);value+=","+(this.storedLocation?this.storedLocation.height:this.height);value+=","+this.isMinimized();value+=","+this.isMaximized();WindowUtilities.setCookie(value,this.cookie)}},_createWiredElement:function(){if(!this.wiredElement){if(Prototype.Browser.IE){this._getWindowBorderSize()}var div=document.createElement("div");div.className="wired_frame "+this.options.className+"_wired_frame";div.style.position="absolute";this.options.parent.insertBefore(div,this.options.parent.firstChild);this.wiredElement=$(div)}if(this.useLeft){this.wiredElement.setStyle({left:this.element.getStyle("left")})}else{this.wiredElement.setStyle({right:this.element.getStyle("right")})}if(this.useTop){this.wiredElement.setStyle({top:this.element.getStyle("top")})}else{this.wiredElement.setStyle({bottom:this.element.getStyle("bottom")})}var dim=this.element.getDimensions();this.wiredElement.setStyle({width:dim.width+"px",height:dim.height+"px"});this.wiredElement.setStyle({zIndex:Windows.maxZIndex+30});return this.wiredElement},_hideWiredElement:function(){if(!this.wiredElement||!this.currentDrag){return}if(this.currentDrag==this.element){this.currentDrag=null}else{if(this.useLeft){this.element.setStyle({left:this.currentDrag.getStyle("left")})}else{this.element.setStyle({right:this.currentDrag.getStyle("right")})}if(this.useTop){this.element.setStyle({top:this.currentDrag.getStyle("top")})}else{this.element.setStyle({bottom:this.currentDrag.getStyle("bottom")})}this.currentDrag.hide();this.currentDrag=null;if(this.doResize){this.setSize(this.width,this.height)}}},_notify:function(eventName){if(this.options[eventName]){this.options[eventName](this)}else{Windows.notify(eventName,this)}}};var Windows={windows:[],modalWindows:[],observers:[],focusedWindow:null,maxZIndex:0,overlayShowEffectOptions:{duration:0.5},overlayHideEffectOptions:{duration:0.5},addObserver:function(observer){this.removeObserver(observer);this.observers.push(observer)},removeObserver:function(observer){this.observers=this.observers.reject(function(o){return o==observer})},notify:function(eventName,win){this.observers.each(function(o){if(o[eventName]){o[eventName](eventName,win)}})},getWindow:function(id){return this.windows.detect(function(d){return d.getId()==id})},getFocusedWindow:function(){return this.focusedWindow},updateFocusedWindow:function(){this.focusedWindow=this.windows.length>=2?this.windows[this.windows.length-2]:null},register:function(win){this.windows.push(win)},addModalWindow:function(win){if(this.modalWindows.length==0){WindowUtilities.disableScreen(win.options.className,"overlay_modal",win.overlayOpacity,win.getId(),win.options.parent)}else{if(Window.keepMultiModalWindow){$("overlay_modal").style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex+=1;WindowUtilities._hideSelect(this.modalWindows.last().getId())}else{this.modalWindows.last().element.hide()}WindowUtilities._showSelect(win.getId())}this.modalWindows.push(win)},removeModalWindow:function(win){this.modalWindows.pop();if(this.modalWindows.length==0){WindowUtilities.enableScreen()}else{if(Window.keepMultiModalWindow){this.modalWindows.last().toFront();WindowUtilities._showSelect(this.modalWindows.last().getId())}else{this.modalWindows.last().element.show()}}},register:function(win){this.windows.push(win)},unregister:function(win){this.windows=this.windows.reject(function(d){return d==win})},closeAll:function(){this.windows.each(function(w){Windows.close(w.getId())})},closeAllModalWindows:function(){WindowUtilities.enableScreen();this.modalWindows.each(function(win){if(win){win.close()}})},minimize:function(id,event){var win=this.getWindow(id);if(win&&win.visible){win.minimize()}Event.stop(event)},maximize:function(id,event){var win=this.getWindow(id);if(win&&win.visible){win.maximize()}Event.stop(event)},close:function(id,event){var win=this.getWindow(id);if(win){win.close()}if(event){Event.stop(event)}},blur:function(id){var win=this.getWindow(id);if(!win){return}if(win.options.blurClassName){win.changeClassName(win.options.blurClassName)}if(this.focusedWindow==win){this.focusedWindow=null}win._notify("onBlur")},focus:function(id){var win=this.getWindow(id);if(!win){return}if(this.focusedWindow){this.blur(this.focusedWindow.getId())}if(win.options.focusClassName){win.changeClassName(win.options.focusClassName)}this.focusedWindow=win;win._notify("onFocus")},unsetOverflow:function(except){this.windows.each(function(d){d.oldOverflow=d.getContent().getStyle("overflow")||"auto";d.getContent().setStyle({overflow:"hidden"})});if(except&&except.oldOverflow){except.getContent().setStyle({overflow:except.oldOverflow})}},resetOverflow:function(){this.windows.each(function(d){if(d.oldOverflow){d.getContent().setStyle({overflow:d.oldOverflow})}})},updateZindex:function(zindex,win){if(zindex>this.maxZIndex){this.maxZIndex=zindex;if(this.focusedWindow){this.blur(this.focusedWindow.getId())}}this.focusedWindow=win;if(this.focusedWindow){this.focus(this.focusedWindow.getId())}}};var Dialog={dialogId:null,onCompleteFunc:null,callFunc:null,parameters:null,confirm:function(content,parameters){if(content&&typeof content!="string"){Dialog._runAjaxRequest(content,parameters,Dialog.confirm);return}content=content||"";parameters=parameters||{};var okLabel=parameters.okLabel?parameters.okLabel:"Ok";var cancelLabel=parameters.cancelLabel?parameters.cancelLabel:"Cancel";parameters=Object.extend(parameters,parameters.windowParameters||{});parameters.windowParameters=parameters.windowParameters||{};parameters.className=parameters.className||"alert";var okButtonClass="class ='"+(parameters.buttonClass?parameters.buttonClass+" ":"")+" ok_button'";var cancelButtonClass="class ='"+(parameters.buttonClass?parameters.buttonClass+" ":"")+" cancel_button'";var content="      <div class='"+parameters.className+"_message'>"+content+"</div>        <div class='"+parameters.className+"_buttons'>          <button type='button' title='"+okLabel+"' onclick='Dialog.okCallback()' "+okButtonClass+"><span><span><span>"+okLabel+"</span></span></span></button>          <button type='button' title='"+cancelLabel+"' onclick='Dialog.cancelCallback()' "+cancelButtonClass+"><span><span><span>"+cancelLabel+"</span></span></span></button>        </div>    ";return this._openDialog(content,parameters)},alert:function(content,parameters){if(content&&typeof content!="string"){Dialog._runAjaxRequest(content,parameters,Dialog.alert);return}content=content||"";parameters=parameters||{};var okLabel=parameters.okLabel?parameters.okLabel:"Ok";parameters=Object.extend(parameters,parameters.windowParameters||{});parameters.windowParameters=parameters.windowParameters||{};parameters.className=parameters.className||"alert";var okButtonClass="class ='"+(parameters.buttonClass?parameters.buttonClass+" ":"")+" ok_button'";var content="      <div class='"+parameters.className+"_message'>"+content+"</div>        <div class='"+parameters.className+"_buttons'>          <button type='button' title='"+okLabel+"' onclick='Dialog.okCallback()' "+okButtonClass+"><span><span><span>"+okLabel+"</span></span></span></button>        </div>";return this._openDialog(content,parameters)},info:function(content,parameters){if(content&&typeof content!="string"){Dialog._runAjaxRequest(content,parameters,Dialog.info);return}content=content||"";parameters=parameters||{};parameters=Object.extend(parameters,parameters.windowParameters||{});parameters.windowParameters=parameters.windowParameters||{};parameters.className=parameters.className||"alert";var content="<div id='modal_dialog_message' class='"+parameters.className+"_message'>"+content+"</div>";if(parameters.showProgress){content+="<div id='modal_dialog_progress' class='"+parameters.className+"_progress'>  </div>"}parameters.ok=null;parameters.cancel=null;return this._openDialog(content,parameters)},setInfoMessage:function(message){$("modal_dialog_message").update(message)},closeInfo:function(){Windows.close(this.dialogId)},_openDialog:function(content,parameters){var className=parameters.className;if(!parameters.height&&!parameters.width){parameters.width=WindowUtilities.getPageSize(parameters.options.parent||document.body).pageWidth/2}if(parameters.id){this.dialogId=parameters.id}else{var t=new Date();this.dialogId="modal_dialog_"+t.getTime();parameters.id=this.dialogId}if(!parameters.height||!parameters.width){var size=WindowUtilities._computeSize(content,this.dialogId,parameters.width,parameters.height,5,className);if(parameters.height){parameters.width=size+5}else{parameters.height=size+5}}parameters.effectOptions=parameters.effectOptions;parameters.resizable=parameters.resizable||false;parameters.minimizable=parameters.minimizable||false;parameters.maximizable=parameters.maximizable||false;parameters.draggable=parameters.draggable||false;parameters.closable=parameters.closable||false;var win=new Window(parameters);win.getContent().innerHTML=content;win.showCenter(true,parameters.top,parameters.left);win.setDestroyOnClose();win.cancelCallback=parameters.onCancel||parameters.cancel;win.okCallback=parameters.onOk||parameters.ok;return win},_getAjaxContent:function(originalRequest){Dialog.callFunc(originalRequest.responseText,Dialog.parameters)},_runAjaxRequest:function(message,parameters,callFunc){if(message.options==null){message.options={}}Dialog.onCompleteFunc=message.options.onComplete;Dialog.parameters=parameters;Dialog.callFunc=callFunc;message.options.onComplete=Dialog._getAjaxContent;new Ajax.Request(message.url,message.options)},okCallback:function(){var win=Windows.focusedWindow;if(!win.okCallback||win.okCallback(win)){$$("#"+win.getId()+" input").each(function(element){element.onclick=null});win.close()}},cancelCallback:function(){var win=Windows.focusedWindow;$$("#"+win.getId()+" input").each(function(element){element.onclick=null});win.close();if(win.cancelCallback){win.cancelCallback(win)}}};if(Prototype.Browser.WebKit){var array=navigator.userAgent.match(new RegExp(/AppleWebKit\/([\d\.\+]*)/));Prototype.Browser.WebKitVersion=parseFloat(array[1])}var WindowUtilities={getWindowScroll:function(parent){var T,L,W,H;parent=parent||document.body;if(parent!=document.body){T=parent.scrollTop;L=parent.scrollLeft;W=parent.scrollWidth;H=parent.scrollHeight}else{var w=window;with(w.document){if(w.document.documentElement&&documentElement.scrollTop){T=documentElement.scrollTop;L=documentElement.scrollLeft}else{if(w.document.body){T=body.scrollTop;L=body.scrollLeft}}if(w.innerWidth){W=w.innerWidth;H=w.innerHeight}else{if(w.document.documentElement&&documentElement.clientWidth){W=documentElement.clientWidth;H=documentElement.clientHeight}else{W=body.offsetWidth;H=body.offsetHeight}}}}return{top:T,left:L,width:W,height:H}},getPageSize:function(parent){parent=parent||document.body;var windowWidth,windowHeight;var pageHeight,pageWidth;if(parent!=document.body){windowWidth=parent.getWidth();windowHeight=parent.getHeight();pageWidth=parent.scrollWidth;pageHeight=parent.scrollHeight}else{var xScroll,yScroll;if(window.innerHeight&&window.scrollMaxY){xScroll=document.body.scrollWidth;yScroll=window.innerHeight+window.scrollMaxY}else{if(document.body.scrollHeight>document.body.offsetHeight){xScroll=document.body.scrollWidth;yScroll=document.body.scrollHeight}else{xScroll=document.body.offsetWidth;yScroll=document.body.offsetHeight}}if(self.innerHeight){windowWidth=document.documentElement.clientWidth;windowHeight=self.innerHeight}else{if(document.documentElement&&document.documentElement.clientHeight){windowWidth=document.documentElement.clientWidth;windowHeight=document.documentElement.clientHeight}else{if(document.body){windowWidth=document.body.clientWidth;windowHeight=document.body.clientHeight}}}if(yScroll<windowHeight){pageHeight=windowHeight}else{pageHeight=yScroll}if(xScroll<windowWidth){pageWidth=windowWidth}else{pageWidth=xScroll}}return{pageWidth:pageWidth,pageHeight:pageHeight,windowWidth:windowWidth,windowHeight:windowHeight}},disableScreen:function(className,overlayId,overlayOpacity,contentId,parent){WindowUtilities.initLightbox(overlayId,className,function(){this._disableScreen(className,overlayId,overlayOpacity,contentId)}.bind(this),parent||document.body)},_disableScreen:function(className,overlayId,overlayOpacity,contentId){var objOverlay=$(overlayId);var pageSize=WindowUtilities.getPageSize(objOverlay.parentNode);if(contentId&&Prototype.Browser.IE){WindowUtilities._hideSelect();WindowUtilities._showSelect(contentId)}objOverlay.style.height=(pageSize.pageHeight+"px");objOverlay.style.display="none";if(overlayId=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayShowEffectOptions){objOverlay.overlayOpacity=overlayOpacity;new Effect.Appear(objOverlay,Object.extend({from:0,to:overlayOpacity},Windows.overlayShowEffectOptions))}else{objOverlay.style.display="block"}},enableScreen:function(id){id=id||"overlay_modal";var objOverlay=$(id);if(objOverlay){if(id=="overlay_modal"&&Window.hasEffectLib&&Windows.overlayHideEffectOptions){new Effect.Fade(objOverlay,Object.extend({from:objOverlay.overlayOpacity,to:0},Windows.overlayHideEffectOptions))}else{objOverlay.style.display="none";objOverlay.parentNode.removeChild(objOverlay)}if(id!="__invisible__"){WindowUtilities._showSelect()}}},_hideSelect:function(id){if(Prototype.Browser.IE){id=id==null?"":"#"+id+" ";$$(id+"select").each(function(element){if(!WindowUtilities.isDefined(element.oldVisibility)){element.oldVisibility=element.style.visibility?element.style.visibility:"visible";element.style.visibility="hidden"}})}},_showSelect:function(id){if(Prototype.Browser.IE){id=id==null?"":"#"+id+" ";$$(id+"select").each(function(element){if(WindowUtilities.isDefined(element.oldVisibility)){try{element.style.visibility=element.oldVisibility}catch(e){element.style.visibility="visible"}element.oldVisibility=null}else{if(element.style.visibility){element.style.visibility="visible"}}})}},isDefined:function(object){return typeof(object)!="undefined"&&object!=null},initLightbox:function(id,className,doneHandler,parent){if($(id)){Element.setStyle(id,{zIndex:Windows.maxZIndex+1});Windows.maxZIndex++;doneHandler()}else{var objOverlay=document.createElement("div");objOverlay.setAttribute("id",id);objOverlay.className="overlay_"+className;objOverlay.style.display="none";objOverlay.style.position="absolute";objOverlay.style.top="0";objOverlay.style.left="0";objOverlay.style.zIndex=Windows.maxZIndex+1;Windows.maxZIndex++;objOverlay.style.width="100%";parent.insertBefore(objOverlay,parent.firstChild);if(Prototype.Browser.WebKit&&id=="overlay_modal"){setTimeout(function(){doneHandler()},10)}else{doneHandler()}}},setCookie:function(value,parameters){document.cookie=parameters[0]+"="+escape(value)+((parameters[1])?"; expires="+parameters[1].toGMTString():"")+((parameters[2])?"; path="+parameters[2]:"")+((parameters[3])?"; domain="+parameters[3]:"")+((parameters[4])?"; secure":"")},getCookie:function(name){var dc=document.cookie;var prefix=name+"=";var begin=dc.indexOf("; "+prefix);if(begin==-1){begin=dc.indexOf(prefix);if(begin!=0){return null}}else{begin+=2}var end=document.cookie.indexOf(";",begin);if(end==-1){end=dc.length}return unescape(dc.substring(begin+prefix.length,end))},_computeSize:function(content,id,width,height,margin,className){var objBody=document.body;var tmpObj=document.createElement("div");tmpObj.setAttribute("id",id);tmpObj.className=className+"_content";if(height){tmpObj.style.height=height+"px"}else{tmpObj.style.width=width+"px"}tmpObj.style.position="absolute";tmpObj.style.top="0";tmpObj.style.left="0";tmpObj.style.display="none";tmpObj.innerHTML=content;objBody.insertBefore(tmpObj,objBody.firstChild);var size;if(height){size=$(tmpObj).getDimensions().width+margin}else{size=$(tmpObj).getDimensions().height+margin}objBody.removeChild(tmpObj);return size}};var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||"div";var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">"}catch(e){}var element=parentElement.firstChild||null;if(element&&(element.tagName.toUpperCase()!=elementName)){element=element.getElementsByTagName(elementName)[0]}if(!element){element=document.createElement(elementName)}if(!element){return}if(arguments[1]){if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)||arguments[1].tagName){this._children(element,arguments[1])}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+attrs+"></"+elementName+">"}catch(e){}element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1]){element[attr=="class"?"className":attr]=arguments[1][attr]}}if(element.tagName.toUpperCase()!=elementName){element=parentElement.getElementsByTagName(elementName)[0]}}}}if(arguments[2]){this._children(element,arguments[2])}return $(element)},_text:function(text){return document.createTextNode(text)},ATTR_MAP:{className:"class",htmlFor:"for"},_attributes:function(attributes){var attrs=[];for(attribute in attributes){attrs.push((attribute in this.ATTR_MAP?this.ATTR_MAP[attribute]:attribute)+'="'+attributes[attribute].toString().escapeHTML().gsub(/"/,"&quot;")+'"')}return attrs.join(" ")},_children:function(element,children){if(children.tagName){element.appendChild(children);return}if(typeof children=="object"){children.flatten().each(function(e){if(typeof e=="object"){element.appendChild(e)}else{if(Builder._isStringOrNumber(e)){element.appendChild(Builder._text(e))}}})}else{if(Builder._isStringOrNumber(children)){element.appendChild(Builder._text(children))}}},_isStringOrNumber:function(param){return(typeof param=="string"||typeof param=="number")},build:function(html){var element=this.node("div");$(element).update(html.strip());return element.down()},dump:function(scope){if(typeof scope!="object"&&typeof scope!="function"){scope=window}var tags=("A ABBR ACRONYM ADDRESS APPLET AREA B BASE BASEFONT BDO BIG BLOCKQUOTE BODY BR BUTTON CAPTION CENTER CITE CODE COL COLGROUP DD DEL DFN DIR DIV DL DT EM FIELDSET FONT FORM FRAME FRAMESET H1 H2 H3 H4 H5 H6 HEAD HR HTML I IFRAME IMG INPUT INS ISINDEX KBD LABEL LEGEND LI LINK MAP MENU META NOFRAMES NOSCRIPT OBJECT OL OPTGROUP OPTION P PARAM PRE Q S SAMP SCRIPT SELECT SMALL SPAN STRIKE STRONG STYLE SUB SUP TABLE TBODY TD TEXTAREA TFOOT TH THEAD TITLE TR TT U UL VAR").split(/\s+/);tags.each(function(tag){scope[tag]=function(){return Builder.node.apply(Builder,[tag].concat($A(arguments)))}})}};String.prototype.parseColor=function(){var color="#";if(this.slice(0,4)=="rgb("){var cols=this.slice(4,this.length-1).split(",");var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3)}else{if(this.slice(0,1)=="#"){if(this.length==4){for(var i=1;i<4;i++){color+=(this.charAt(i)+this.charAt(i)).toLowerCase()}}if(this.length==7){color=this.toLowerCase()}}}return(color.length==7?color:(arguments[0]||this))};Element.collectTextNodes=function(element){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:(node.hasChildNodes()?Element.collectTextNodes(node):""))}).flatten().join("")};Element.collectTextNodesIgnoreClass=function(element,className){return $A($(element).childNodes).collect(function(node){return(node.nodeType==3?node.nodeValue:((node.hasChildNodes()&&!Element.hasClassName(node,className))?Element.collectTextNodesIgnoreClass(node,className):""))}).flatten().join("")};Element.setContentZoom=function(element,percent){element=$(element);element.setStyle({fontSize:(percent/100)+"em"});if(Prototype.Browser.WebKit){window.scrollBy(0,0)}return element};Element.getInlineOpacity=function(element){return $(element).style.opacity||""};Element.forceRerendering=function(element){try{element=$(element);var n=document.createTextNode(" ");element.appendChild(n);element.removeChild(n)}catch(e){}};var Effect={_elementDoesNotExistError:{name:"ElementDoesNotExistError",message:"The specified DOM element does not exist, but is required for this effect to operate"},Transitions:{linear:Prototype.K,sinoidal:function(pos){return(-Math.cos(pos*Math.PI)/2)+0.5},reverse:function(pos){return 1-pos},flicker:function(pos){var pos=((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;return pos>1?1:pos},wobble:function(pos){return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5},pulse:function(pos,pulses){return(-Math.cos((pos*((pulses||5)-0.5)*2)*Math.PI)/2)+0.5},spring:function(pos){return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6))},none:function(pos){return 0},full:function(pos){return 1}},DefaultOptions:{duration:1,fps:100,sync:false,from:0,to:1,delay:0,queue:"parallel"},tagifyText:function(element){var tagifyStyle="position:relative";if(Prototype.Browser.IE){tagifyStyle+=";zoom:1"}element=$(element);$A(element.childNodes).each(function(child){if(child.nodeType==3){child.nodeValue.toArray().each(function(character){element.insertBefore(new Element("span",{style:tagifyStyle}).update(character==" "?String.fromCharCode(160):character),child)});Element.remove(child)}})},multiple:function(element,effect){var elements;if(((typeof element=="object")||Object.isFunction(element))&&(element.length)){elements=element}else{elements=$(element).childNodes}var options=Object.extend({speed:0.1,delay:0},arguments[2]||{});var masterDelay=options.delay;$A(elements).each(function(element,index){new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}))})},PAIRS:{slide:["SlideDown","SlideUp"],blind:["BlindDown","BlindUp"],appear:["Appear","Fade"]},toggle:function(element,effect){element=$(element);effect=(effect||"appear").toLowerCase();var options=Object.extend({queue:{position:"end",scope:(element.id||"global"),limit:1}},arguments[2]||{});Effect[element.visible()?Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options)}};Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;Effect.ScopedQueue=Class.create(Enumerable,{initialize:function(){this.effects=[];this.interval=null},_each:function(iterator){this.effects._each(iterator)},add:function(effect){var timestamp=new Date().getTime();var position=Object.isString(effect.options.queue)?effect.options.queue:effect.options.queue.position;switch(position){case"front":this.effects.findAll(function(e){return e.state=="idle"}).each(function(e){e.startOn+=effect.finishOn;e.finishOn+=effect.finishOn});break;case"with-last":timestamp=this.effects.pluck("startOn").max()||timestamp;break;case"end":timestamp=this.effects.pluck("finishOn").max()||timestamp;break}effect.startOn+=timestamp;effect.finishOn+=timestamp;if(!effect.options.queue.limit||(this.effects.length<effect.options.queue.limit)){this.effects.push(effect)}if(!this.interval){this.interval=setInterval(this.loop.bind(this),15)}},remove:function(effect){this.effects=this.effects.reject(function(e){return e==effect});if(this.effects.length==0){clearInterval(this.interval);this.interval=null}},loop:function(){var timePos=new Date().getTime();for(var i=0,len=this.effects.length;i<len;i++){this.effects[i]&&this.effects[i].loop(timePos)}}});Effect.Queues={instances:$H(),get:function(queueName){if(!Object.isString(queueName)){return queueName}return this.instances.get(queueName)||this.instances.set(queueName,new Effect.ScopedQueue())}};Effect.Queue=Effect.Queues.get("global");Effect.Base=Class.create({position:null,start:function(options){function codeForEvent(options,eventName){return((options[eventName+"Internal"]?"this.options."+eventName+"Internal(this);":"")+(options[eventName]?"this.options."+eventName+"(this);":""))}if(options&&options.transition===false){options.transition=Effect.Transitions.linear}this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});this.currentFrame=0;this.state="idle";this.startOn=this.options.delay*1000;this.finishOn=this.startOn+(this.options.duration*1000);this.fromToDelta=this.options.to-this.options.from;this.totalTime=this.finishOn-this.startOn;this.totalFrames=this.options.fps*this.options.duration;this.render=(function(){function dispatch(effect,eventName){if(effect.options[eventName+"Internal"]){effect.options[eventName+"Internal"](effect)}if(effect.options[eventName]){effect.options[eventName](effect)}}return function(pos){if(this.state==="idle"){this.state="running";dispatch(this,"beforeSetup");if(this.setup){this.setup()}dispatch(this,"afterSetup")}if(this.state==="running"){pos=(this.options.transition(pos)*this.fromToDelta)+this.options.from;this.position=pos;dispatch(this,"beforeUpdate");if(this.update){this.update(pos)}dispatch(this,"afterUpdate")}}})();this.event("beforeStart");if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).add(this)}},loop:function(timePos){if(timePos>=this.startOn){if(timePos>=this.finishOn){this.render(1);this.cancel();this.event("beforeFinish");if(this.finish){this.finish()}this.event("afterFinish");return}var pos=(timePos-this.startOn)/this.totalTime,frame=(pos*this.totalFrames).round();if(frame>this.currentFrame){this.render(pos);this.currentFrame=frame}}},cancel:function(){if(!this.options.sync){Effect.Queues.get(Object.isString(this.options.queue)?"global":this.options.queue.scope).remove(this)}this.state="finished"},event:function(eventName){if(this.options[eventName+"Internal"]){this.options[eventName+"Internal"](this)}if(this.options[eventName]){this.options[eventName](this)}},inspect:function(){var data=$H();for(property in this){if(!Object.isFunction(this[property])){data.set(property,this[property])}}return"#<Effect:"+data.inspect()+",options:"+$H(this.options).inspect()+">"}});Effect.Parallel=Class.create(Effect.Base,{initialize:function(effects){this.effects=effects||[];this.start(arguments[1])},update:function(position){this.effects.invoke("render",position)},finish:function(position){this.effects.each(function(effect){effect.render(1);effect.cancel();effect.event("beforeFinish");if(effect.finish){effect.finish(position)}effect.event("afterFinish")})}});Effect.Tween=Class.create(Effect.Base,{initialize:function(object,from,to){object=Object.isString(object)?$(object):object;var args=$A(arguments),method=args.last(),options=args.length==5?args[3]:null;this.method=Object.isFunction(method)?method.bind(object):Object.isFunction(object[method])?object[method].bind(object):function(value){object[method]=value};this.start(Object.extend({from:from,to:to},options||{}))},update:function(position){this.method(position)}});Effect.Event=Class.create(Effect.Base,{initialize:function(){this.start(Object.extend({duration:0},arguments[0]||{}))},update:Prototype.emptyFunction});Effect.Opacity=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element){throw (Effect._elementDoesNotExistError)}if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}var options=Object.extend({from:this.element.getOpacity()||0,to:1},arguments[1]||{});this.start(options)},update:function(position){this.element.setOpacity(position)}});Effect.Move=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element){throw (Effect._elementDoesNotExistError)}var options=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});this.start(options)},setup:function(){this.element.makePositioned();this.originalLeft=parseFloat(this.element.getStyle("left")||"0");this.originalTop=parseFloat(this.element.getStyle("top")||"0");if(this.options.mode=="absolute"){this.options.x=this.options.x-this.originalLeft;this.options.y=this.options.y-this.originalTop}},update:function(position){this.element.setStyle({left:(this.options.x*position+this.originalLeft).round()+"px",top:(this.options.y*position+this.originalTop).round()+"px"})}});Effect.MoveBy=function(element,toTop,toLeft){return new Effect.Move(element,Object.extend({x:toLeft,y:toTop},arguments[3]||{}))};Effect.Scale=Class.create(Effect.Base,{initialize:function(element,percent){this.element=$(element);if(!this.element){throw (Effect._elementDoesNotExistError)}var options=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:percent},arguments[2]||{});this.start(options)},setup:function(){this.restoreAfterFinish=this.options.restoreAfterFinish||false;this.elementPositioning=this.element.getStyle("position");this.originalStyle={};["top","left","width","height","fontSize"].each(function(k){this.originalStyle[k]=this.element.style[k]}.bind(this));this.originalTop=this.element.offsetTop;this.originalLeft=this.element.offsetLeft;var fontSize=this.element.getStyle("font-size")||"100%";["em","px","%","pt"].each(function(fontSizeType){if(fontSize.indexOf(fontSizeType)>0){this.fontSize=parseFloat(fontSize);this.fontSizeType=fontSizeType}}.bind(this));this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;this.dims=null;if(this.options.scaleMode=="box"){this.dims=[this.element.offsetHeight,this.element.offsetWidth]}if(/^content/.test(this.options.scaleMode)){this.dims=[this.element.scrollHeight,this.element.scrollWidth]}if(!this.dims){this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth]}},update:function(position){var currentScale=(this.options.scaleFrom/100)+(this.factor*position);if(this.options.scaleContent&&this.fontSize){this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType})}this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale)},finish:function(position){if(this.restoreAfterFinish){this.element.setStyle(this.originalStyle)}},setDimensions:function(height,width){var d={};if(this.options.scaleX){d.width=width.round()+"px"}if(this.options.scaleY){d.height=height.round()+"px"}if(this.options.scaleFromCenter){var topd=(height-this.dims[0])/2;var leftd=(width-this.dims[1])/2;if(this.elementPositioning=="absolute"){if(this.options.scaleY){d.top=this.originalTop-topd+"px"}if(this.options.scaleX){d.left=this.originalLeft-leftd+"px"}}else{if(this.options.scaleY){d.top=-topd+"px"}if(this.options.scaleX){d.left=-leftd+"px"}}}this.element.setStyle(d)}});Effect.Highlight=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element){throw (Effect._elementDoesNotExistError)}var options=Object.extend({startcolor:"#ffff99"},arguments[1]||{});this.start(options)},setup:function(){if(this.element.getStyle("display")=="none"){this.cancel();return}this.oldStyle={};if(!this.options.keepBackgroundImage){this.oldStyle.backgroundImage=this.element.getStyle("background-image");this.element.setStyle({backgroundImage:"none"})}if(!this.options.endcolor){this.options.endcolor=this.element.getStyle("background-color").parseColor("#ffffff")}if(!this.options.restorecolor){this.options.restorecolor=this.element.getStyle("background-color")}this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this))},update:function(position){this.element.setStyle({backgroundColor:$R(0,2).inject("#",function(m,v,i){return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart())}.bind(this))})},finish:function(){this.element.setStyle(Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}))}});Effect.ScrollTo=function(element){var options=arguments[1]||{},scrollOffsets=document.viewport.getScrollOffsets(),elementOffsets=$(element).cumulativeOffset();if(options.offset){elementOffsets[1]+=options.offset}return new Effect.Tween(null,scrollOffsets.top,elementOffsets[1],options,function(p){scrollTo(scrollOffsets.left,p.round())})};Effect.Fade=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();var options=Object.extend({from:element.getOpacity()||1,to:0,afterFinishInternal:function(effect){if(effect.options.to!=0){return}effect.element.hide().setStyle({opacity:oldOpacity})}},arguments[1]||{});return new Effect.Opacity(element,options)};Effect.Appear=function(element){element=$(element);var options=Object.extend({from:(element.getStyle("display")=="none"?0:element.getOpacity()||0),to:1,afterFinishInternal:function(effect){effect.element.forceRerendering()},beforeSetup:function(effect){effect.element.setOpacity(effect.options.from).show()}},arguments[1]||{});return new Effect.Opacity(element,options)};Effect.Puff=function(element){element=$(element);var oldStyle={opacity:element.getInlineOpacity(),position:element.getStyle("position"),top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};return new Effect.Parallel([new Effect.Scale(element,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(element,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(effect){Position.absolutize(effect.effects[0].element)},afterFinishInternal:function(effect){effect.effects[0].element.hide().setStyle(oldStyle)}},arguments[1]||{}))};Effect.BlindUp=function(element){element=$(element);element.makeClipping();return new Effect.Scale(element,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(effect){effect.element.hide().undoClipping()}},arguments[1]||{}))};Effect.BlindDown=function(element){element=$(element);var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makeClipping().setStyle({height:"0px"}).show()},afterFinishInternal:function(effect){effect.element.undoClipping()}},arguments[1]||{}))};Effect.SwitchOff=function(element){element=$(element);var oldOpacity=element.getInlineOpacity();return new Effect.Appear(element,Object.extend({duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(effect){new Effect.Scale(effect.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makePositioned().makeClipping()},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned().setStyle({opacity:oldOpacity})}})}},arguments[1]||{}))};Effect.DropOut=function(element){element=$(element);var oldStyle={top:element.getStyle("top"),left:element.getStyle("left"),opacity:element.getInlineOpacity()};return new Effect.Parallel([new Effect.Move(element,{x:0,y:100,sync:true}),new Effect.Opacity(element,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(effect){effect.effects[0].element.makePositioned()},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle)}},arguments[1]||{}))};Effect.Shake=function(element){element=$(element);var options=Object.extend({distance:20,duration:0.5},arguments[1]||{});var distance=parseFloat(options.distance);var split=parseFloat(options.duration)/10;var oldStyle={top:element.getStyle("top"),left:element.getStyle("left")};return new Effect.Move(element,{x:distance,y:0,duration:split,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){new Effect.Move(effect.element,{x:-distance,y:0,duration:split,afterFinishInternal:function(effect){effect.element.undoPositioned().setStyle(oldStyle)}})}})}})}})}})}})};Effect.SlideDown=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle("bottom");var elementDimensions=element.getDimensions();return new Effect.Scale(element,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:window.opera?0:1,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera){effect.element.setStyle({top:""})}effect.element.makeClipping().setStyle({height:"0px"}).show()},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+"px"})},afterFinishInternal:function(effect){effect.element.undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom})}},arguments[1]||{}))};Effect.SlideUp=function(element){element=$(element).cleanWhitespace();var oldInnerBottom=element.down().getStyle("bottom");var elementDimensions=element.getDimensions();return new Effect.Scale(element,window.opera?0:1,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},restoreAfterFinish:true,afterSetup:function(effect){effect.element.makePositioned();effect.element.down().makePositioned();if(window.opera){effect.element.setStyle({top:""})}effect.element.makeClipping().show()},afterUpdateInternal:function(effect){effect.element.down().setStyle({bottom:(effect.dims[0]-effect.element.clientHeight)+"px"})},afterFinishInternal:function(effect){effect.element.hide().undoClipping().undoPositioned();effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom})}},arguments[1]||{}))};Effect.Squish=function(element){return new Effect.Scale(element,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(effect){effect.element.makeClipping()},afterFinishInternal:function(effect){effect.element.hide().undoClipping()}})};Effect.Grow=function(element){element=$(element);var options=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var initialMoveX,initialMoveY;var moveX,moveY;switch(options.direction){case"top-left":initialMoveX=initialMoveY=moveX=moveY=0;break;case"top-right":initialMoveX=dims.width;initialMoveY=moveY=0;moveX=-dims.width;break;case"bottom-left":initialMoveX=moveX=0;initialMoveY=dims.height;moveY=-dims.height;break;case"bottom-right":initialMoveX=dims.width;initialMoveY=dims.height;moveX=-dims.width;moveY=-dims.height;break;case"center":initialMoveX=dims.width/2;initialMoveY=dims.height/2;moveX=-dims.width/2;moveY=-dims.height/2;break}return new Effect.Move(element,{x:initialMoveX,y:initialMoveY,duration:0.01,beforeSetup:function(effect){effect.element.hide().makeClipping().makePositioned()},afterFinishInternal:function(effect){new Effect.Parallel([new Effect.Opacity(effect.element,{sync:true,to:1,from:0,transition:options.opacityTransition}),new Effect.Move(effect.element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition}),new Effect.Scale(effect.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:options.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(effect){effect.effects[0].element.setStyle({height:"0px"}).show()},afterFinishInternal:function(effect){effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle)}},options))}})};Effect.Shrink=function(element){element=$(element);var options=Object.extend({direction:"center",moveTransition:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});var oldStyle={top:element.style.top,left:element.style.left,height:element.style.height,width:element.style.width,opacity:element.getInlineOpacity()};var dims=element.getDimensions();var moveX,moveY;switch(options.direction){case"top-left":moveX=moveY=0;break;case"top-right":moveX=dims.width;moveY=0;break;case"bottom-left":moveX=0;moveY=dims.height;break;case"bottom-right":moveX=dims.width;moveY=dims.height;break;case"center":moveX=dims.width/2;moveY=dims.height/2;break}return new Effect.Parallel([new Effect.Opacity(element,{sync:true,to:0,from:1,transition:options.opacityTransition}),new Effect.Scale(element,window.opera?1:0,{sync:true,transition:options.scaleTransition,restoreAfterFinish:true}),new Effect.Move(element,{x:moveX,y:moveY,sync:true,transition:options.moveTransition})],Object.extend({beforeStartInternal:function(effect){effect.effects[0].element.makePositioned().makeClipping()},afterFinishInternal:function(effect){effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle)}},options))};Effect.Pulsate=function(element){element=$(element);var options=arguments[1]||{},oldOpacity=element.getInlineOpacity(),transition=options.transition||Effect.Transitions.linear,reverser=function(pos){return 1-transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2)+0.5)};return new Effect.Opacity(element,Object.extend(Object.extend({duration:2,from:0,afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity})}},options),{transition:reverser}))};Effect.Fold=function(element){element=$(element);var oldStyle={top:element.style.top,left:element.style.left,width:element.style.width,height:element.style.height};element.makeClipping();return new Effect.Scale(element,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(effect){new Effect.Scale(element,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(effect){effect.element.hide().undoClipping().setStyle(oldStyle)}})}},arguments[1]||{}))};Effect.Morph=Class.create(Effect.Base,{initialize:function(element){this.element=$(element);if(!this.element){throw (Effect._elementDoesNotExistError)}var options=Object.extend({style:{}},arguments[1]||{});if(!Object.isString(options.style)){this.style=$H(options.style)}else{if(options.style.include(":")){this.style=options.style.parseStyle()}else{this.element.addClassName(options.style);this.style=$H(this.element.getStyles());this.element.removeClassName(options.style);var css=this.element.getStyles();this.style=this.style.reject(function(style){return style.value==css[style.key]});options.afterFinishInternal=function(effect){effect.element.addClassName(effect.options.style);effect.transforms.each(function(transform){effect.element.style[transform.style]=""})}}}this.start(options)},setup:function(){function parseColor(color){if(!color||["rgba(0, 0, 0, 0)","transparent"].include(color)){color="#ffffff"}color=color.parseColor();return $R(0,2).map(function(i){return parseInt(color.slice(i*2+1,i*2+3),16)})}this.transforms=this.style.map(function(pair){var property=pair[0],value=pair[1],unit=null;if(value.parseColor("#zzzzzz")!="#zzzzzz"){value=value.parseColor();unit="color"}else{if(property=="opacity"){value=parseFloat(value);if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout)){this.element.setStyle({zoom:1})}}else{if(Element.CSS_LENGTH.test(value)){var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);value=parseFloat(components[1]);unit=(components.length==3)?components[2]:null}}}var originalValue=this.element.getStyle(property);return{style:property.camelize(),originalValue:unit=="color"?parseColor(originalValue):parseFloat(originalValue||0),targetValue:unit=="color"?parseColor(value):value,unit:unit}}.bind(this)).reject(function(transform){return((transform.originalValue==transform.targetValue)||(transform.unit!="color"&&(isNaN(transform.originalValue)||isNaN(transform.targetValue))))})},update:function(position){var style={},transform,i=this.transforms.length;while(i--){style[(transform=this.transforms[i]).style]=transform.unit=="color"?"#"+(Math.round(transform.originalValue[0]+(transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+(Math.round(transform.originalValue[1]+(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+(Math.round(transform.originalValue[2]+(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():(transform.originalValue+(transform.targetValue-transform.originalValue)*position).toFixed(3)+(transform.unit===null?"":transform.unit)}this.element.setStyle(style,true)}});Effect.Transform=Class.create({initialize:function(tracks){this.tracks=[];this.options=arguments[1]||{};this.addTracks(tracks)},addTracks:function(tracks){tracks.each(function(track){track=$H(track);var data=track.values().first();this.tracks.push($H({ids:track.keys().first(),effect:Effect.Morph,options:{style:data}}))}.bind(this));return this},play:function(){return new Effect.Parallel(this.tracks.map(function(track){var ids=track.get("ids"),effect=track.get("effect"),options=track.get("options");var elements=[$(ids)||$$(ids)].flatten();return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))})}).flatten(),this.options)}});Element.CSS_PROPERTIES=$w("backgroundColor backgroundPosition borderBottomColor borderBottomStyle borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth borderRightColor borderRightStyle borderRightWidth borderSpacing borderTopColor borderTopStyle borderTopWidth bottom clip color fontSize fontWeight height left letterSpacing lineHeight marginBottom marginLeft marginRight marginTop markerOffset maxHeight maxWidth minHeight minWidth opacity outlineColor outlineOffset outlineWidth paddingBottom paddingLeft paddingRight paddingTop right textIndent top width wordSpacing zIndex");Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;String.__parseStyleElement=document.createElement("div");String.prototype.parseStyle=function(){var style,styleRules=$H();if(Prototype.Browser.WebKit){style=new Element("div",{style:this}).style}else{String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';style=String.__parseStyleElement.childNodes[0].style}Element.CSS_PROPERTIES.each(function(property){if(style[property]){styleRules.set(property,style[property])}});if(Prototype.Browser.IE&&this.include("opacity")){styleRules.set("opacity",this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1])}return styleRules};if(document.defaultView&&document.defaultView.getComputedStyle){Element.getStyles=function(element){var css=document.defaultView.getComputedStyle($(element),null);return Element.CSS_PROPERTIES.inject({},function(styles,property){styles[property]=css[property];return styles})}}else{Element.getStyles=function(element){element=$(element);var css=element.currentStyle,styles;styles=Element.CSS_PROPERTIES.inject({},function(results,property){results[property]=css[property];return results});if(!styles.opacity){styles.opacity=element.getOpacity()}return styles}}Effect.Methods={morph:function(element,style){element=$(element);new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));return element},visualEffect:function(element,effect,options){element=$(element);var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1);new Effect[klass](element,options);return element},highlight:function(element,options){element=$(element);new Effect.Highlight(element,options);return element}};$w("fade appear grow shrink fold blindUp blindDown slideUp slideDown pulsate shake puff squish switchOff dropOut").each(function(effect){Effect.Methods[effect]=function(element,options){element=$(element);Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options);return element}});$w("getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles").each(function(f){Effect.Methods[f]=Element[f]});Element.addMethods(Effect.Methods);function validateCreditCard(s){var v="0123456789";var w="";for(i=0;i<s.length;i++){x=s.charAt(i);if(v.indexOf(x,0)!=-1){w+=x}}j=w.length/2;k=Math.floor(j);m=Math.ceil(j)-k;c=0;for(i=0;i<k;i++){a=w.charAt(i*2+m)*2;c+=a>9?Math.floor(a/10+a%10):a}for(i=0;i<k+m;i++){c+=w.charAt(i*2+1-m)*1}return(c%10==0)}var Validator=Class.create();Validator.prototype={initialize:function(className,error,test,options){if(typeof test=="function"){this.options=$H(options);this._test=test}else{this.options=$H(test);this._test=function(){return true}}this.error=error||"Validation failed.";this.className=className},test:function(v,elm){return(this._test(v,elm)&&this.options.all(function(p){return Validator.methods[p.key]?Validator.methods[p.key](v,elm,p.value):true}))}};Validator.methods={pattern:function(v,elm,opt){return Validation.get("IsEmpty").test(v)||opt.test(v)},minLength:function(v,elm,opt){return v.length>=opt},maxLength:function(v,elm,opt){return v.length<=opt},min:function(v,elm,opt){return v>=parseFloat(opt)},max:function(v,elm,opt){return v<=parseFloat(opt)},notOneOf:function(v,elm,opt){return $A(opt).all(function(value){return v!=value})},oneOf:function(v,elm,opt){return $A(opt).any(function(value){return v==value})},is:function(v,elm,opt){return v==opt},isNot:function(v,elm,opt){return v!=opt},equalToField:function(v,elm,opt){return v==$F(opt)},notEqualToField:function(v,elm,opt){return v!=$F(opt)},include:function(v,elm,opt){return $A(opt).all(function(value){return Validation.get(value).test(v,elm)})}};var Validation=Class.create();Validation.defaultOptions={onSubmit:true,stopOnFirst:false,immediate:false,focusOnError:true,useTitles:false,addClassNameToContainer:false,containerClassName:".input-box",onFormValidate:function(result,form){},onElementValidate:function(result,elm){}};Validation.prototype={initialize:function(form,options){this.form=$(form);if(!this.form){return}this.options=Object.extend({onSubmit:Validation.defaultOptions.onSubmit,stopOnFirst:Validation.defaultOptions.stopOnFirst,immediate:Validation.defaultOptions.immediate,focusOnError:Validation.defaultOptions.focusOnError,useTitles:Validation.defaultOptions.useTitles,onFormValidate:Validation.defaultOptions.onFormValidate,onElementValidate:Validation.defaultOptions.onElementValidate},options||{});if(this.options.onSubmit){Event.observe(this.form,"submit",this.onSubmit.bind(this),false)}if(this.options.immediate){Form.getElements(this.form).each(function(input){if(input.tagName.toLowerCase()=="select"){Event.observe(input,"blur",this.onChange.bindAsEventListener(this))}if(input.type.toLowerCase()=="radio"||input.type.toLowerCase()=="checkbox"){Event.observe(input,"click",this.onChange.bindAsEventListener(this))}else{Event.observe(input,"change",this.onChange.bindAsEventListener(this))}},this)}},onChange:function(ev){Validation.isOnChange=true;Validation.validate(Event.element(ev),{useTitle:this.options.useTitles,onElementValidate:this.options.onElementValidate});Validation.isOnChange=false},onSubmit:function(ev){if(!this.validate()){Event.stop(ev)}},validate:function(){var result=false;var useTitles=this.options.useTitles;var callback=this.options.onElementValidate;try{if(this.options.stopOnFirst){result=Form.getElements(this.form).all(function(elm){if(elm.hasClassName("local-validation")&&!this.isElementInForm(elm,this.form)){return true}return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback})},this)}else{result=Form.getElements(this.form).collect(function(elm){if(elm.hasClassName("local-validation")&&!this.isElementInForm(elm,this.form)){return true}if(elm.hasClassName("validation-disabled")){return true}return Validation.validate(elm,{useTitle:useTitles,onElementValidate:callback})},this).all()}}catch(e){}if(!result&&this.options.focusOnError){try{Form.getElements(this.form).findAll(function(elm){return $(elm).hasClassName("validation-failed")}).first().focus()}catch(e){}}this.options.onFormValidate(result,this.form);return result},reset:function(){Form.getElements(this.form).each(Validation.reset)},isElementInForm:function(elm,form){var domForm=elm.up("form");if(domForm==form){return true}return false}};Object.extend(Validation,{validate:function(elm,options){options=Object.extend({useTitle:false,onElementValidate:function(result,elm){}},options||{});elm=$(elm);var cn=$w(elm.className);return result=cn.all(function(value){var test=Validation.test(value,elm,options.useTitle);options.onElementValidate(test,elm);return test})},insertAdvice:function(elm,advice){var container=$(elm).up(".field-row");if(container){Element.insert(container,{after:advice})}else{if(elm.up("td.value")){elm.up("td.value").insert({bottom:advice})}else{if(elm.advaiceContainer&&$(elm.advaiceContainer)){$(elm.advaiceContainer).update(advice)}else{switch(elm.type.toLowerCase()){case"checkbox":case"radio":var p=elm.parentNode;if(p){Element.insert(p,{bottom:advice})}else{Element.insert(elm,{after:advice})}break;default:Element.insert(elm,{after:advice})}}}}},showAdvice:function(elm,advice,adviceName){if(!elm.advices){elm.advices=new Hash()}else{elm.advices.each(function(pair){if(!advice||pair.value.id!=advice.id){this.hideAdvice(elm,pair.value)}}.bind(this))}elm.advices.set(adviceName,advice);if(typeof Effect=="undefined"){advice.style.display="block"}else{if(!advice._adviceAbsolutize){new Effect.Appear(advice,{duration:1})}else{Position.absolutize(advice);advice.show();advice.setStyle({top:advice._adviceTop,left:advice._adviceLeft,width:advice._adviceWidth,"z-index":1000});advice.addClassName("advice-absolute")}}},hideAdvice:function(elm,advice){if(advice!=null){new Effect.Fade(advice,{duration:1,afterFinishInternal:function(){advice.hide()}})}},updateCallback:function(elm,status){if(typeof elm.callbackFunction!="undefined"){eval(elm.callbackFunction+"('"+elm.id+"','"+status+"')")}},ajaxError:function(elm,errorMsg){var name="validate-ajax";var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,false,errorMsg)}this.showAdvice(elm,advice,"validate-ajax");this.updateCallback(elm,"failed");elm.addClassName("validation-failed");elm.addClassName("validate-ajax");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName("validation-passed");container.addClassName("validation-error")}}},allowContainerClassName:function(elm){if(elm.type=="radio"||elm.type=="checkbox"){return elm.hasClassName("change-container-classname")}return true},test:function(name,elm,useTitle){var v=Validation.get(name);var prop="__advice"+name.camelize();try{if(Validation.isVisible(elm)&&!v.test($F(elm),elm)){var advice=Validation.getAdvice(name,elm);if(advice==null){advice=this.createAdvice(name,elm,useTitle)}this.showAdvice(elm,advice,name);this.updateCallback(elm,"failed");elm[prop]=1;if(!elm.advaiceContainer){elm.removeClassName("validation-passed");elm.addClassName("validation-failed")}if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&this.allowContainerClassName(elm)){container.removeClassName("validation-passed");container.addClassName("validation-error")}}return false}else{var advice=Validation.getAdvice(name,elm);this.hideAdvice(elm,advice);this.updateCallback(elm,"passed");elm[prop]="";elm.removeClassName("validation-failed");elm.addClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var container=elm.up(Validation.defaultOptions.containerClassName);if(container&&!container.down(".validation-failed")&&this.allowContainerClassName(elm)){if(!Validation.get("IsEmpty").test(elm.value)||!this.isVisible(elm)){container.addClassName("validation-passed")}else{container.removeClassName("validation-passed")}container.removeClassName("validation-error")}}return true}}catch(e){throw (e)}},isVisible:function(elm){while(elm.tagName!="BODY"){if(!$(elm).visible()){return false}elm=elm.parentNode}return true},getAdvice:function(name,elm){return $("advice-"+name+"-"+Validation.getElmID(elm))||$("advice-"+Validation.getElmID(elm))},createAdvice:function(name,elm,useTitle,customError){var v=Validation.get(name);var errorMsg=useTitle?((elm&&elm.title)?elm.title:v.error):v.error;if(customError){errorMsg=customError}if(jQuery.mage.__){errorMsg=jQuery.mage.__(errorMsg)}advice='<div class="validation-advice" id="advice-'+name+"-"+Validation.getElmID(elm)+'" style="display:none">'+errorMsg+"</div>";Validation.insertAdvice(elm,advice);advice=Validation.getAdvice(name,elm);if($(elm).hasClassName("absolute-advice")){var dimensions=$(elm).getDimensions();var originalPosition=Position.cumulativeOffset(elm);advice._adviceTop=(originalPosition[1]+dimensions.height)+"px";advice._adviceLeft=(originalPosition[0])+"px";advice._adviceWidth=(dimensions.width)+"px";advice._adviceAbsolutize=true}return advice},getElmID:function(elm){return elm.id?elm.id:elm.name},reset:function(elm){elm=$(elm);var cn=$w(elm.className);cn.each(function(value){var prop="__advice"+value.camelize();if(elm[prop]){var advice=Validation.getAdvice(value,elm);if(advice){advice.hide()}elm[prop]=""}elm.removeClassName("validation-failed");elm.removeClassName("validation-passed");if(Validation.defaultOptions.addClassNameToContainer&&Validation.defaultOptions.containerClassName!=""){var container=elm.up(Validation.defaultOptions.containerClassName);if(container){container.removeClassName("validation-passed");container.removeClassName("validation-error")}}})},add:function(className,error,test,options){var nv={};nv[className]=new Validator(className,error,test,options);Object.extend(Validation.methods,nv)},addAllThese:function(validators){var nv={};$A(validators).each(function(value){nv[value[0]]=new Validator(value[0],value[1],value[2],(value.length>3?value[3]:{}))});Object.extend(Validation.methods,nv)},get:function(name){return Validation.methods[name]?Validation.methods[name]:Validation.methods._LikeNoIDIEverSaw_},methods:{_LikeNoIDIEverSaw_:new Validator("_LikeNoIDIEverSaw_","",{})}});Validation.add("IsEmpty","",function(v){return(v==""||(v==null)||(v.length==0)||/^\s+$/.test(v))});Validation.addAllThese([["validate-no-html-tags","HTML tags are not allowed",function(v){return !/<(\/)?\w+/.test(v)}],["validate-select","Please select an option.",function(v){return((v!="none")&&(v!=null)&&(v.length!=0))}],["required-entry","This is a required field.",function(v){return !Validation.get("IsEmpty").test(v)}],["validate-number","Please enter a valid number in this field.",function(v){return Validation.get("IsEmpty").test(v)||(!isNaN(parseNumber(v))&&/^\s*-?\d*(\.\d*)?\s*$/.test(v))}],["validate-number-range","The value is not within the specified range.",function(v,elm){if(Validation.get("IsEmpty").test(v)){return true}var numValue=parseNumber(v);if(isNaN(numValue)){return false}var reRange=/^number-range-(-?[\d.,]+)?-(-?[\d.,]+)?$/,result=true;$w(elm.className).each(function(name){var m=reRange.exec(name);if(m){result=result&&(m[1]==null||m[1]==""||numValue>=parseNumber(m[1]))&&(m[2]==null||m[2]==""||numValue<=parseNumber(m[2]))}});return result}],["validate-digits","Please use numbers only in this field. Please avoid spaces or other characters such as dots or commas.",function(v){return Validation.get("IsEmpty").test(v)||!/[^\d]/.test(v)}],["validate-digits-range","The value is not within the specified range.",function(v,elm){if(Validation.get("IsEmpty").test(v)){return true}var numValue=parseNumber(v);if(isNaN(numValue)){return false}var reRange=/^digits-range-(-?\d+)?-(-?\d+)?$/,result=true;$w(elm.className).each(function(name){var m=reRange.exec(name);if(m){result=result&&(m[1]==null||m[1]==""||numValue>=parseNumber(m[1]))&&(m[2]==null||m[2]==""||numValue<=parseNumber(m[2]))}});return result}],["validate-range","The value is not within the specified range.",function(v,elm){var minValue,maxValue;if(Validation.get("IsEmpty").test(v)){return true}else{if(Validation.get("validate-digits").test(v)){minValue=maxValue=parseNumber(v)}else{var ranges=/^(-?\d+)?-(-?\d+)?$/.exec(v);if(ranges){minValue=parseNumber(ranges[1]);maxValue=parseNumber(ranges[2]);if(minValue>maxValue){return false}}else{return false}}}var reRange=/^range-(-?\d+)?-(-?\d+)?$/,result=true;$w(elm.className).each(function(name){var validRange=reRange.exec(name);if(validRange){var minValidRange=parseNumber(validRange[1]);var maxValidRange=parseNumber(validRange[2]);result=result&&(isNaN(minValidRange)||minValue>=minValidRange)&&(isNaN(maxValidRange)||maxValue<=maxValidRange)}});return result}],["validate-alpha","Please use letters only (a-z or A-Z) in this field.",function(v){return Validation.get("IsEmpty").test(v)||/^[a-zA-Z]+$/.test(v)}],["validate-code","Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.",function(v){return Validation.get("IsEmpty").test(v)||/^[a-z]+[a-z0-9_]+$/.test(v)}],["validate-alphanum","Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.",function(v){return Validation.get("IsEmpty").test(v)||/^[a-zA-Z0-9]+$/.test(v)}],["validate-alphanum-with-spaces","Please use only letters (a-z or A-Z), numbers (0-9) or spaces only in this field.",function(v){return Validation.get("IsEmpty").test(v)||/^[a-zA-Z0-9 ]+$/.test(v)}],["validate-street","Please use only letters (a-z or A-Z) or numbers (0-9) or spaces and # only in this field.",function(v){return Validation.get("IsEmpty").test(v)||/^[ \w]{3,}([A-Za-z]\.)?([ \w]*\#\d+)?(\r\n| )[ \w]{3,}/.test(v)}],["validate-phoneStrict","Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.",function(v){return Validation.get("IsEmpty").test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v)}],["validate-phoneLax","Please enter a valid phone number. For example (123) 456-7890 or 123-456-7890.",function(v){return Validation.get("IsEmpty").test(v)||/^((\d[-. ]?)?((\(\d{3}\))|\d{3}))?[-. ]?\d{3}[-. ]?\d{4}$/.test(v)}],["validate-fax","Please enter a valid fax number. For example (123) 456-7890 or 123-456-7890.",function(v){return Validation.get("IsEmpty").test(v)||/^(\()?\d{3}(\))?(-|\s)?\d{3}(-|\s)\d{4}$/.test(v)}],["validate-date","Please enter a valid date.",function(v){var test=new Date(v);return Validation.get("IsEmpty").test(v)||!isNaN(test)}],["validate-date-range","The From Date value should be less than or equal to the To Date value.",function(v,elm){var m=/\bdate-range-(\w+)-(\w+)\b/.exec(elm.className);if(!m||m[2]=="to"||Validation.get("IsEmpty").test(v)){return true}var currentYear=new Date().getFullYear()+"";var normalizedTime=function(v){v=v.split(/[.\/]/);if(v[2]&&v[2].length<4){v[2]=currentYear.substr(0,v[2].length)+v[2]}return new Date(v.join("/")).getTime()};var dependentElements=Element.select(elm.form,".validate-date-range.date-range-"+m[1]+"-to");return !dependentElements.length||Validation.get("IsEmpty").test(dependentElements[0].value)||normalizedTime(v)<=normalizedTime(dependentElements[0].value)}],["validate-email","Please enter a valid email address. For example johndoe@domain.com.",function(v){return Validation.get("IsEmpty").test(v)||/^([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9,!\#\$%&'\*\+\/=\?\^_`\{\|\}~-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*@([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z0-9-]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*\.(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]){2,})$/i.test(v)}],["validate-emailSender","Please use only visible characters and spaces.",function(v){return Validation.get("IsEmpty").test(v)||/^[\S ]+$/.test(v)}],["validate-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(v){var pass=v.strip();return !(pass.length>0&&pass.length<6)}],["validate-admin-password","Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.",function(v){var pass=v.strip();if(0==pass.length){return true}if(!(/[a-z]/i.test(v))||!(/[0-9]/.test(v))){return false}return !(pass.length<7)}],["validate-cpassword","Please make sure your passwords match.",function(v){var conf=$("confirmation")?$("confirmation"):$$(".validate-cpassword")[0];var pass=false;if($("password")){pass=$("password")}var passwordElements=$$(".validate-password");for(var i=0;i<passwordElements.size();i++){var passwordElement=passwordElements[i];if(passwordElement.up("form").id==conf.up("form").id){pass=passwordElement}}if($$(".validate-admin-password").size()){pass=$$(".validate-admin-password")[0]}return(pass.value==conf.value)}],["validate-both-passwords","Please make sure your passwords match.",function(v,input){var dependentInput=$(input.form[input.name=="password"?"confirmation":"password"]),isEqualValues=input.value==dependentInput.value;if(isEqualValues&&dependentInput.hasClassName("validation-failed")){Validation.test(this.className,dependentInput)}return dependentInput.value==""||isEqualValues}],["validate-url","Please enter a valid URL. Protocol is required (http://, https:// or ftp://)",function(v){v=(v||"").replace(/^\s+/,"").replace(/\s+$/,"");return Validation.get("IsEmpty").test(v)||/^(http|https|ftp):\/\/(([A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))(\.[A-Z0-9]([A-Z0-9_-]*[A-Z0-9]|))*)(:(\d+))?(\/[A-Z0-9~](([A-Z0-9_~-]|\.)*[A-Z0-9~]|))*\/?(.*)?$/i.test(v)}],["validate-clean-url","Please enter a valid URL. For example http://www.example.com or www.example.com",function(v){return Validation.get("IsEmpty").test(v)||/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)||/^(www)((\.[A-Z0-9][A-Z0-9_-]*)+.(com|org|net|dk|at|us|tv|info|uk|co.uk|biz|se)$)(:(\d+))?\/?/i.test(v)}],["validate-identifier",'Please enter a valid URL Key. For example "example-page", "example-page.html" or "anotherlevel/example-page".',function(v){return Validation.get("IsEmpty").test(v)||/^[a-z0-9][a-z0-9_\/-]+(\.[a-z0-9_-]+)?$/.test(v)}],["validate-xml-identifier","Please enter a valid XML-identifier. For example something_1, block5, id-4.",function(v){return Validation.get("IsEmpty").test(v)||/^[A-Z][A-Z0-9_\/-]*$/i.test(v)}],["validate-ssn","Please enter a valid social security number. For example 123-45-6789.",function(v){return Validation.get("IsEmpty").test(v)||/^\d{3}-?\d{2}-?\d{4}$/.test(v)}],["validate-zip-us","Please enter a valid zip code. For example 90602 or 90602-1234.",function(v){return Validation.get("IsEmpty").test(v)||/(^\d{5}$)|(^\d{5}-\d{4}$)/.test(v)}],["validate-zip-international","Please enter a valid zip code.",function(v){return true}],["validate-date-au","Please use this date format: dd/mm/yyyy. For example 17/03/2006 for the 17th of March, 2006.",function(v){if(Validation.get("IsEmpty").test(v)){return true}var regex=/^(\d{2})\/(\d{2})\/(\d{4})$/;if(!regex.test(v)){return false}var d=new Date(v.replace(regex,"$2/$1/$3"));return(parseInt(RegExp.$2,10)==(1+d.getMonth()))&&(parseInt(RegExp.$1,10)==d.getDate())&&(parseInt(RegExp.$3,10)==d.getFullYear())}],["validate-currency-dollar","Please enter a valid $ amount. For example $100.00.",function(v){return Validation.get("IsEmpty").test(v)||/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/.test(v)}],["validate-one-required","Please select one of the above options.",function(v,elm){var p=elm.parentNode;var options=p.getElementsByTagName("INPUT");return $A(options).any(function(elm){return $F(elm)})}],["validate-one-required-by-name","Please select one of the options.",function(v,elm){var inputs=$$('input[name="'+elm.name.replace(/([\\"])/g,"\\$1")+'"]');var error=1;for(var i=0;i<inputs.length;i++){if((inputs[i].type=="checkbox"||inputs[i].type=="radio")&&inputs[i].checked==true){error=0}if(Validation.isOnChange&&(inputs[i].type=="checkbox"||inputs[i].type=="radio")){Validation.reset(inputs[i])}}if(error==0){return true}else{return false}}],["validate-not-negative-number","Please enter a number 0 or greater in this field.",function(v){if(Validation.get("IsEmpty").test(v)){return true}v=parseNumber(v);return !isNaN(v)&&v>=0}],["validate-zero-or-greater","Please enter a number 0 or greater in this field.",function(v){return Validation.get("validate-not-negative-number").test(v)}],["validate-greater-than-zero","Please enter a number greater than 0 in this field.",function(v){if(Validation.get("IsEmpty").test(v)){return true}v=parseNumber(v);return !isNaN(v)&&v>0}],["validate-state","Please select State/Province.",function(v){return(v!=0||v=="")}],["validate-new-password","Please enter 6 or more characters. Leading or trailing spaces will be ignored.",function(v){if(!Validation.get("validate-password").test(v)){return false}if(Validation.get("IsEmpty").test(v)&&v!=""){return false}return true}],["validate-cc-number","Please enter a valid credit card number.",function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf("_cc_number"))+"_cc_type");if(ccTypeContainer&&typeof Validation.creditCartTypes.get(ccTypeContainer.value)!="undefined"&&Validation.creditCartTypes.get(ccTypeContainer.value)[2]==false){if(!Validation.get("IsEmpty").test(v)&&Validation.get("validate-digits").test(v)){return true}else{return false}}return validateCreditCard(v)}],["validate-cc-type","Credit card number does not match credit card type.",function(v,elm){elm.value=removeDelimiters(elm.value);v=removeDelimiters(v);var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf("_cc_number"))+"_cc_type");if(!ccTypeContainer){return true}var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=="undefined"){return false}if(Validation.creditCartTypes.get(ccType)[0]==false){return true}var ccMatchedType="";Validation.creditCartTypes.each(function(pair){if(pair.value[0]&&v.match(pair.value[0])){ccMatchedType=pair.key;throw $break}});if(ccMatchedType!=ccType){return false}if(ccTypeContainer.hasClassName("validation-failed")&&Validation.isOnChange){Validation.validate(ccTypeContainer)}return true}],["validate-cc-type-select","Card type does not match credit card number.",function(v,elm){var ccNumberContainer=$(elm.id.substr(0,elm.id.indexOf("_cc_type"))+"_cc_number");if(Validation.isOnChange&&Validation.get("IsEmpty").test(ccNumberContainer.value)){return true}if(Validation.get("validate-cc-type").test(ccNumberContainer.value,ccNumberContainer)){Validation.validate(ccNumberContainer)}return Validation.get("validate-cc-type").test(ccNumberContainer.value,ccNumberContainer)}],["validate-cc-exp","Incorrect credit card expiration date.",function(v,elm){var ccExpMonth=v;var ccExpYear=$(elm.id.substr(0,elm.id.indexOf("_expiration"))+"_expiration_yr").value;var currentTime=new Date();var currentMonth=currentTime.getMonth()+1;var currentYear=currentTime.getFullYear();if(ccExpMonth<currentMonth&&ccExpYear==currentYear){return false}return true}],["validate-cc-cvn","Please enter a valid credit card verification number.",function(v,elm){var ccTypeContainer=$(elm.id.substr(0,elm.id.indexOf("_cc_cid"))+"_cc_type");if(!ccTypeContainer){return true}var ccType=ccTypeContainer.value;if(typeof Validation.creditCartTypes.get(ccType)=="undefined"){return false}var re=Validation.creditCartTypes.get(ccType)[1];if(v.match(re)){return true}return false}],["validate-ajax","",function(v,elm){return true}],["validate-data","Please use only letters (a-z or A-Z), numbers (0-9) or underscore(_) in this field, first character should be a letter.",function(v){if(v!=""&&v){return/^[A-Za-z]+[A-Za-z0-9_]+$/.test(v)}return true}],["validate-css-length","Please input a valid CSS-length. For example 100px or 77pt or 20em or .5ex or 50%.",function(v){if(v!=""&&v){return/^[0-9\.]+(px|pt|em|ex|%)?$/.test(v)&&(!(/\..*\./.test(v)))&&!(/\.$/.test(v))}return true}],["validate-length","Text length does not satisfy specified text range.",function(v,elm){var reMax=new RegExp(/^maximum-length-[0-9]+$/);var reMin=new RegExp(/^minimum-length-[0-9]+$/);var result=true;$w(elm.className).each(function(name,index){if(name.match(reMax)&&result){var length=name.split("-")[2];result=(v.length<=length)}if(name.match(reMin)&&result&&!Validation.get("IsEmpty").test(v)){var length=name.split("-")[2];result=(v.length>=length)}});return result}],["validate-percents","Please enter a number lower than 100.",{max:100}],["required-file","Please select a file",function(v,elm){var result=!Validation.get("IsEmpty").test(v);if(result===false){ovId=elm.id+"_value";if($(ovId)){result=!Validation.get("IsEmpty").test($(ovId).value)}}return result}],["validate-cc-ukss","Please enter issue number or start date for switch/solo card type.",function(v,elm){var endposition;if(elm.id.match(/(.)+_cc_issue$/)){endposition=elm.id.indexOf("_cc_issue")}else{if(elm.id.match(/(.)+_start_month$/)){endposition=elm.id.indexOf("_start_month")}else{endposition=elm.id.indexOf("_start_year")}}var prefix=elm.id.substr(0,endposition);var ccTypeContainer=$(prefix+"_cc_type");if(!ccTypeContainer){return true}var ccType=ccTypeContainer.value;if(["SS","SM","SO"].indexOf(ccType)==-1){return true}$(prefix+"_cc_issue").advaiceContainer=$(prefix+"_start_month").advaiceContainer=$(prefix+"_start_year").advaiceContainer=$(prefix+"_cc_type_ss_div").down(".adv-container");var ccIssue=$(prefix+"_cc_issue").value;var ccSMonth=$(prefix+"_start_month").value;var ccSYear=$(prefix+"_start_year").value;var ccStartDatePresent=(ccSMonth&&ccSYear)?true:false;if(!ccStartDatePresent&&!ccIssue){return false}return true}]]);function removeDelimiters(v){v=v.replace(/\s/g,"");v=v.replace(/\-/g,"");return v}function parseNumber(v){if(typeof v!="string"){return parseFloat(v)}var isDot=v.indexOf(".");var isComa=v.indexOf(",");if(isDot!=-1&&isComa!=-1){if(isComa>isDot){v=v.replace(".","").replace(",",".")}else{v=v.replace(",","")}}else{if(isComa!=-1){v=v.replace(",",".")}}return parseFloat(v)}Validation.creditCartTypes=$H({SO:[new RegExp("^(6334[5-9]([0-9]{11}|[0-9]{13,14}))|(6767([0-9]{12}|[0-9]{14,15}))$"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],SM:[new RegExp("(^(5[0678])[0-9]{11,18}$)|(^(6[^05])[0-9]{11,18}$)|(^(601)[^1][0-9]{9,16}$)|(^(6011)[0-9]{9,11}$)|(^(6011)[0-9]{13,16}$)|(^(65)[0-9]{11,13}$)|(^(65)[0-9]{15,18}$)|(^(49030)[2-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49033)[5-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49110)[1-2]([0-9]{10}$|[0-9]{12,13}$))|(^(49117)[4-9]([0-9]{10}$|[0-9]{12,13}$))|(^(49118)[0-2]([0-9]{10}$|[0-9]{12,13}$))|(^(4936)([0-9]{12}$|[0-9]{14,15}$))"),new RegExp("^([0-9]{3}|[0-9]{4})?$"),true],VI:[new RegExp("^4[0-9]{12}([0-9]{3})?$"),new RegExp("^[0-9]{3}$"),true],MC:[new RegExp("^5[1-5][0-9]{14}$"),new RegExp("^[0-9]{3}$"),true],AE:[new RegExp("^3[47][0-9]{13}$"),new RegExp("^[0-9]{4}$"),true],DI:[new RegExp("^6(011|4[4-9][0-9]|5[0-9]{2})[0-9]{12}$"),new RegExp("^[0-9]{3}$"),true],JCB:[new RegExp("^(3[0-9]{15}|(2131|1800)[0-9]{11})$"),new RegExp("^[0-9]{3,4}$"),true],OT:[false,new RegExp("^([0-9]{3}|[0-9]{4})?$"),false]});function popWin(url,win,para){var win=window.open(url,win,para);win.focus()}function setLocation(url){window.location.href=url}function setPLocation(url,setFocus){if(setFocus){window.opener.focus()}window.opener.location.href=url}function setLanguageCode(code,fromCode){var href=window.location.href;var after="",dash;if(dash=href.match(/\#(.*)$/)){href=href.replace(/\#(.*)$/,"");after=dash[0]}if(href.match(/[?]/)){var re=/([?&]store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,"$1"+code)}else{href+="&store="+code}var re=/([?&]from_store=)[a-z0-9_]*/;if(href.match(re)){href=href.replace(re,"")}}else{href+="?store="+code}if(typeof(fromCode)!="undefined"){href+="&from_store="+fromCode}href+=after;setLocation(href)}function decorateGeneric(elements,decorateParams){var allSupportedParams=["odd","even","first","last"];var _decorateParams={};var total=elements.length;if(total){if(typeof(decorateParams)=="undefined"){decorateParams=allSupportedParams}if(!decorateParams.length){return}for(var k in allSupportedParams){_decorateParams[allSupportedParams[k]]=false}for(var k in decorateParams){_decorateParams[decorateParams[k]]=true}if(_decorateParams.first){Element.addClassName(elements[0],"first")}if(_decorateParams.last){Element.addClassName(elements[total-1],"last")}for(var i=0;i<total;i++){if((i+1)%2==0){if(_decorateParams.even){Element.addClassName(elements[i],"even")}}else{if(_decorateParams.odd){Element.addClassName(elements[i],"odd")}}}}}function decorateTable(table,options){var table=$(table);if(table){var _options={tbody:false,"tbody tr":["odd","even","first","last"],"thead tr":["first","last"],"tfoot tr":["first","last"],"tr td":["last"]};if(typeof(options)!="undefined"){for(var k in options){_options[k]=options[k]}}if(_options.tbody){decorateGeneric(table.select("tbody"),_options.tbody)}if(_options["tbody tr"]){decorateGeneric(table.select("tbody tr"),_options["tbody tr"])}if(_options["thead tr"]){decorateGeneric(table.select("thead tr"),_options["thead tr"])}if(_options["tfoot tr"]){decorateGeneric(table.select("tfoot tr"),_options["tfoot tr"])}if(_options["tr td"]){var allRows=table.select("tr");if(allRows.length){for(var i=0;i<allRows.length;i++){decorateGeneric(allRows[i].getElementsByTagName("TD"),_options["tr td"])}}}}}function decorateList(list,nonRecursive){if($(list)){if(typeof(nonRecursive)=="undefined"){var items=$(list).select("li")}else{var items=$(list).childElements()}decorateGeneric(items,["odd","even","last"])}}function decorateDataList(list){list=$(list);if(list){decorateGeneric(list.select("dt"),["odd","even","last"]);decorateGeneric(list.select("dd"),["odd","even","last"])}}function parseSidUrl(baseUrl,urlExt){var sidPos=baseUrl.indexOf("/?SID=");var sid="";urlExt=(urlExt!=undefined)?urlExt:"";if(sidPos>-1){sid="?"+baseUrl.substring(sidPos+2);baseUrl=baseUrl.substring(0,sidPos+1)}return baseUrl+urlExt+sid}function formatCurrency(price,format,showPlus){var precision=isNaN(format.precision=Math.abs(format.precision))?2:format.precision;var requiredPrecision=isNaN(format.requiredPrecision=Math.abs(format.requiredPrecision))?2:format.requiredPrecision;precision=requiredPrecision;var integerRequired=isNaN(format.integerRequired=Math.abs(format.integerRequired))?1:format.integerRequired;var decimalSymbol=format.decimalSymbol==undefined?",":format.decimalSymbol;var groupSymbol=format.groupSymbol==undefined?".":format.groupSymbol;var groupLength=format.groupLength==undefined?3:format.groupLength;var s="";if(showPlus==undefined||showPlus==true){s=price<0?"-":(showPlus?"+":"")}else{if(showPlus==false){s=""}}var i=parseInt(price=Math.abs(+price||0).toFixed(precision))+"";var pad=(i.length<integerRequired)?(integerRequired-i.length):0;while(pad){i="0"+i;pad--}j=(j=i.length)>groupLength?j%groupLength:0;re=new RegExp("(\\d{"+groupLength+"})(?=\\d)","g");var r=(j?i.substr(0,j)+groupSymbol:"")+i.substr(j).replace(re,"$1"+groupSymbol)+(precision?decimalSymbol+Math.abs(price-i).toFixed(precision).replace(/-/,0).slice(2):"");var pattern="";if(format.pattern.indexOf("{sign}")==-1){pattern=s+format.pattern}else{pattern=format.pattern.replace("{sign}",s)}return pattern.replace("%s",r).replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function expandDetails(el,childClass){if(Element.hasClassName(el,"show-details")){$$(childClass).each(function(item){item.hide()});Element.removeClassName(el,"show-details")}else{$$(childClass).each(function(item){item.show()});Element.addClassName(el,"show-details")}}var isIE=navigator.appVersion.match(/MSIE/)=="MSIE";if(!window.Varien){var Varien=new Object()}Varien.showLoading=function(){var loader=$("loading-process");loader&&loader.show()};Varien.hideLoading=function(){var loader=$("loading-process");loader&&loader.hide()};Varien.GlobalHandlers={onCreate:function(){Varien.showLoading()},onComplete:function(){if(Ajax.activeRequestCount==0){Varien.hideLoading()}}};Ajax.Responders.register(Varien.GlobalHandlers);Varien.searchForm=Class.create();Varien.searchForm.prototype={initialize:function(form,field,emptyText){this.form=$(form);this.field=$(field);this.emptyText=emptyText;Event.observe(this.form,"submit",this.submit.bind(this));Event.observe(this.field,"focus",this.focus.bind(this));Event.observe(this.field,"blur",this.blur.bind(this));this.blur()},submit:function(event){if(this.field.value==this.emptyText||this.field.value==""){Event.stop(event);return false}return true},focus:function(event){if(this.field.value==this.emptyText){this.field.value=""}},blur:function(event){if(this.field.value==""){this.field.value=this.emptyText}}};Varien.DateElement=Class.create();Varien.DateElement.prototype={initialize:function(type,content,required,format){if(type=="id"){this.day=$(content+"day");this.month=$(content+"month");this.year=$(content+"year");this.full=$(content+"full");this.advice=$(content+"date-advice")}else{if(type=="container"){this.day=content.day;this.month=content.month;this.year=content.year;this.full=content.full;this.advice=content.advice}else{return}}this.required=required;this.format=format;this.day.addClassName("validate-custom");this.day.validate=this.validate.bind(this);this.month.addClassName("validate-custom");this.month.validate=this.validate.bind(this);this.year.addClassName("validate-custom");this.year.validate=this.validate.bind(this);this.setDateRange(false,false);this.year.setAttribute("autocomplete","off");this.advice.hide()},validate:function(){var error=false,day=parseInt(this.day.value,10)||0,month=parseInt(this.month.value,10)||0,year=parseInt(this.year.value,10)||0;if(this.day.value.strip().empty()&&this.month.value.strip().empty()&&this.year.value.strip().empty()){if(this.required){error="This date is a required value."}else{this.full.value=""}}else{if(!day||!month||!year){error="Please enter a valid full date."}else{var date=new Date,countDaysInMonth=0,errorType=null;date.setYear(year);date.setMonth(month-1);date.setDate(32);countDaysInMonth=32-date.getDate();if(!countDaysInMonth||countDaysInMonth>31){countDaysInMonth=31}if(day<1||day>countDaysInMonth){errorType="day";error="Please enter a valid day (1-%1)."}else{if(month<1||month>12){errorType="month";error="Please enter a valid month (1-12)."}else{if(day%10==day){this.day.value="0"+day}if(month%10==month){this.month.value="0"+month}this.full.value=this.format.replace(/%[mb]/i,this.month.value).replace(/%[de]/i,this.day.value).replace(/%y/i,this.year.value);var testFull=this.month.value+"/"+this.day.value+"/"+this.year.value;var test=new Date(testFull);if(isNaN(test)){error="Please enter a valid date."}else{this.setFullDate(test)}}}var valueError=false;if(!error&&!this.validateData()){errorType=this.validateDataErrorType;valueError=this.validateDataErrorText;error=valueError}}}if(error!==false){if(jQuery.mage.__){error=jQuery.mage.__(error)}if(!valueError){this.advice.innerHTML=error.replace("%1",countDaysInMonth)}else{this.advice.innerHTML=this.errorTextModifier(error)}this.advice.show();return false}this.day.removeClassName("validation-failed");this.month.removeClassName("validation-failed");this.year.removeClassName("validation-failed");this.advice.hide();return true},validateData:function(){var year=this.fullDate.getFullYear();var date=new Date;this.curyear=date.getFullYear();return(year>=1900&&year<=this.curyear)},validateDataErrorType:"year",validateDataErrorText:"Please enter a valid year (1900-%1).",errorTextModifier:function(text){return text.replace("%1",this.curyear)},setDateRange:function(minDate,maxDate){this.minDate=minDate;this.maxDate=maxDate},setFullDate:function(date){this.fullDate=date}};Varien.DOB=Class.create();Varien.DOB.prototype={initialize:function(selector,required,format){var el=$$(selector)[0];var container={};container.day=Element.select(el,".dob-day input")[0];container.month=Element.select(el,".dob-month input")[0];container.year=Element.select(el,".dob-year input")[0];container.full=Element.select(el,".dob-full input")[0];container.advice=Element.select(el,".validation-advice")[0];new Varien.DateElement("container",container,required,format)}};Varien.dateRangeDate=Class.create();Varien.dateRangeDate.prototype=Object.extend(new Varien.DateElement(),{validateData:function(){var validate=true;if(this.minDate||this.maxValue){if(this.minDate){this.minDate=new Date(this.minDate);this.minDate.setHours(0);if(isNaN(this.minDate)){this.minDate=new Date("1/1/1900")}validate=validate&&(this.fullDate>=this.minDate)}if(this.maxDate){this.maxDate=new Date(this.maxDate);this.minDate.setHours(0);if(isNaN(this.maxDate)){this.maxDate=new Date()}validate=validate&&(this.fullDate<=this.maxDate)}if(this.maxDate&&this.minDate){this.validateDataErrorText="Please enter a valid date between %s and %s"}else{if(this.maxDate){this.validateDataErrorText="Please enter a valid date less than or equal to %s"}else{if(this.minDate){this.validateDataErrorText="Please enter a valid date equal to or greater than %s"}else{this.validateDataErrorText=""}}}}return validate},validateDataErrorText:"Date should be between %s and %s",errorTextModifier:function(text){if(this.minDate){text=text.sub("%s",this.dateFormat(this.minDate))}if(this.maxDate){text=text.sub("%s",this.dateFormat(this.maxDate))}return text},dateFormat:function(date){return(date.getMonth()+1)+"/"+date.getDate()+"/"+date.getFullYear()}});Varien.FileElement=Class.create();Varien.FileElement.prototype={initialize:function(id){this.fileElement=$(id);this.hiddenElement=$(id+"_value");this.fileElement.observe("change",this.selectFile.bind(this))},selectFile:function(event){this.hiddenElement.value=this.fileElement.getValue()}};Validation.addAllThese([["validate-custom"," ",function(v,elm){return elm.validate()}]]);Element.addMethods({getInnerText:function(element){element=$(element);if(element.innerText&&!Prototype.Browser.Opera){return element.innerText}return element.innerHTML.stripScripts().unescapeHTML().replace(/[\n\r\s]+/g," ").strip()}});function fireEvent(element,event){if(document.createEvent){var evt=document.createEvent("HTMLEvents");evt.initEvent(event,true,true);return element.dispatchEvent(evt)}else{var evt=document.createEventObject();return element.fireEvent("on"+event,evt)}}function modulo(dividend,divisor){var epsilon=divisor/10000;var remainder=dividend%divisor;if(Math.abs(remainder-divisor)<epsilon||Math.abs(remainder)<epsilon){remainder=0}return remainder}if((typeof Range!="undefined")&&!Range.prototype.createContextualFragment){Range.prototype.createContextualFragment=function(html){var frag=document.createDocumentFragment(),div=document.createElement("div");frag.appendChild(div);div.outerHTML=html;return frag}}var byteConvert=function(bytes){if(isNaN(bytes)){return""}var symbols=["bytes","KB","MB","GB","TB","PB","EB","ZB","YB"];var exp=Math.floor(Math.log(bytes)/Math.log(2));if(exp<1){exp=0}var i=Math.floor(exp/10);bytes=bytes/Math.pow(2,10*i);if(bytes.toString().length>bytes.toFixed(2).toString().length){bytes=bytes.toFixed(2)}return bytes+" "+symbols[i]};var SessionError=Class.create();SessionError.prototype={initialize:function(errorText){this.errorText=errorText},toString:function(){return"Session Error:"+this.errorText}};Ajax.Request.addMethods({initialize:function($super,url,options){$super(options);this.transport=Ajax.getTransport();if(!url.match(new RegExp("[?&]isAjax=true",""))){url=url.match(new RegExp("\\?","g"))?url+"&isAjax=true":url+"?isAjax=true"}if(Object.isString(this.options.parameters)&&this.options.parameters.indexOf("form_key=")==-1){this.options.parameters+="&"+Object.toQueryString({form_key:FORM_KEY})}else{if(!this.options.parameters){this.options.parameters={form_key:FORM_KEY}}if(!this.options.parameters.form_key){this.options.parameters.form_key=FORM_KEY}}this.request(url)},respondToReadyState:function(readyState){var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);if(state=="Complete"){try{this._complete=true;if(response.responseText.isJSON()){var jsonObject=response.responseText.evalJSON();if(jsonObject.ajaxExpired&&jsonObject.ajaxRedirect){window.location.replace(jsonObject.ajaxRedirect);throw new SessionError("session expired")}}(this.options["on"+response.status]||this.options["on"+(this.success()?"Success":"Failure")]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e);if(e instanceof SessionError){return}}var contentType=response.getHeader("Content-type");if(this.options.evalJS=="force"||(this.options.evalJS&&this.isSameOrigin()&&contentType&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))){this.evalResponse()}}try{(this.options["on"+state]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch("on"+state,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(state=="Complete"){this.transport.onreadystatechange=Prototype.emptyFunction}}});Ajax.Updater.respondToReadyState=Ajax.Request.respondToReadyState;var varienLoader=new Class.create();varienLoader.prototype={initialize:function(caching){this.callback=false;this.cache=$H();this.caching=caching||false;this.url=false},getCache:function(url){if(this.cache.get(url)){return this.cache.get(url)}return false},load:function(url,params,callback){this.url=url;this.callback=callback;if(this.caching){var transport=this.getCache(url);if(transport){this.processResult(transport);return}}if(typeof(params.updaterId)!="undefined"){new varienUpdater(params.updaterId,url,{evalScripts:true,onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)})}else{new Ajax.Request(url,{method:"post",parameters:params||{},onComplete:this.processResult.bind(this),onFailure:this._processFailure.bind(this)})}},_processFailure:function(transport){location.href=BASE_URL},processResult:function(transport){if(this.caching){this.cache.set(this.url,transport)}if(this.callback){this.callback(transport.responseText)}}};if(!window.varienLoaderHandler){var varienLoaderHandler=new Object()}varienLoaderHandler.handler={onCreate:function(request){if(request.options.loaderArea===false){return}jQuery("body").trigger("processStart")},onException:function(transport){jQuery("body").trigger("processStop")},onComplete:function(transport){jQuery("body").trigger("processStop")}};function setLoaderPosition(){var elem=$("loading_mask_loader");if(elem&&Prototype.Browser.IE){var elementDims=elem.getDimensions();var viewPort=document.viewport.getDimensions();var offsets=document.viewport.getScrollOffsets();elem.style.left=Math.floor(viewPort.width/2+offsets.left-elementDims.width/2)+"px";elem.style.top=Math.floor(viewPort.height/2+offsets.top-elementDims.height/2)+"px";elem.style.position="absolute"}}function toggleSelectsUnderBlock(block,flag){if(Prototype.Browser.IE){var selects=document.getElementsByTagName("select");for(var i=0;i<selects.length;i++){if(flag){if(selects[i].needShowOnSuccess){selects[i].needShowOnSuccess=false;selects[i].style.visibility=""}}else{if(Element.visible(selects[i])){selects[i].style.visibility="hidden";selects[i].needShowOnSuccess=true}}}}}Ajax.Responders.register(varienLoaderHandler.handler);var varienUpdater=Class.create(Ajax.Updater,{updateContent:function($super,responseText){if(responseText.isJSON()){var responseJSON=responseText.evalJSON();if(responseJSON.ajaxExpired&&responseJSON.ajaxRedirect){window.location.replace(responseJSON.ajaxRedirect)}}else{$super(responseText)}}});function setLocation(url){window.location.href=url}function confirmSetLocation(message,url){if(confirm(message)){setLocation(url)}return false}function deleteConfirm(message,url){confirmSetLocation(message,url)}function setElementDisable(element,disable){if($(element)){$(element).disabled=disable}}function toggleParentVis(obj){obj=$(obj).parentNode;if(obj.style.display=="none"){obj.style.display=""}else{obj.style.display="none"}}function toggleFieldsetVis(obj){id=obj;obj=$(obj);if(obj.style.display=="none"){obj.style.display=""}else{obj.style.display="none"}obj=obj.parentNode.childElements();for(var i=0;i<obj.length;i++){if(obj[i].id!=undefined&&obj[i].id==id&&obj[(i-1)].classNames()=="entry-edit-head"){if(obj[i-1].style.display=="none"){obj[i-1].style.display=""}else{obj[i-1].style.display="none"}}}}function toggleVis(obj){obj=$(obj);if(obj.style.display=="none"){obj.style.display=""}else{obj.style.display="none"}}function imagePreview(element){if($(element)){var win=window.open("","preview","width=400,height=400,resizable=1,scrollbars=1");win.document.open();win.document.write('<body style="padding:0;margin:0"><img src="'+$(element).src+'" id="image_preview"/></body>');win.document.close();Event.observe(win,"load",function(){var img=win.document.getElementById("image_preview");win.resizeTo(img.width+40,img.height+80)})}}function checkByProductPriceType(elem){if(elem.id=="price_type"){this.productPriceType=elem.value;return false}else{if(elem.id=="price"&&this.productPriceType==0){return false}return true}}Event.observe(window,"load",function(){if($("price_default")&&$("price_default").checked){$("price").disabled="disabled"}});function toggleSeveralValueElements(checkbox,containers,excludedElements,checked){if(containers&&checkbox){if(Object.prototype.toString.call(containers)!="[object Array]"){containers=[containers]}containers.each(function(container){toggleValueElements(checkbox,container,excludedElements,checked)})}}function toggleValueElements(checkbox,container,excludedElements,checked){if(container&&checkbox){var ignoredElements=[checkbox];if(typeof excludedElements!="undefined"){if(Object.prototype.toString.call(excludedElements)!="[object Array]"){excludedElements=[excludedElements]}for(var i=0;i<excludedElements.length;i++){ignoredElements.push(excludedElements[i])}}var elems=Element.select(container,["select","input","textarea","button","img"]).filter(function(el){return(el.readAttribute("type")!="hidden")});var isDisabled=(checked!=undefined?checked:checkbox.checked);elems.each(function(elem){if(checkByProductPriceType(elem)){var i=ignoredElements.length;while(i--&&elem!=ignoredElements[i]){}if(i!=-1){return}elem.disabled=isDisabled;if(isDisabled){elem.addClassName("disabled")}else{elem.removeClassName("disabled")}if(elem.nodeName.toLowerCase()=="img"){isDisabled?elem.hide():elem.show()}}})}}function submitAndReloadArea(area,url){if($(area)){var fields=$(area).select("input","select","textarea");var data=Form.serializeElements(fields,true);url=url+(url.match(new RegExp("\\?"))?"&isAjax=true":"?isAjax=true");new Ajax.Request(url,{parameters:$H(data),loaderArea:area,onSuccess:function(transport){try{if(transport.responseText.isJSON()){var response=transport.responseText.evalJSON();if(response.error){alert(response.message)}if(response.ajaxExpired&&response.ajaxRedirect){setLocation(response.ajaxRedirect)}}else{$(area).update(transport.responseText)}}catch(e){$(area).update(transport.responseText)}}})}}function syncOnchangeValue(baseElem,distElem){var compare={baseElem:baseElem,distElem:distElem};Event.observe(baseElem,"change",function(){if($(this.baseElem)&&$(this.distElem)){$(this.distElem).value=$(this.baseElem).value}}.bind(compare))}function updateElementAtCursor(el,value,win){if(win==undefined){win=window.self}if(document.selection){el.focus();sel=win.document.selection.createRange();sel.text=value}else{if(el.selectionStart||el.selectionStart=="0"){var startPos=el.selectionStart;var endPos=el.selectionEnd;el.value=el.value.substring(0,startPos)+value+el.value.substring(endPos,el.value.length)}else{el.value+=value}}}function firebugEnabled(){if(window.console&&window.console.firebug){return true}return false}function disableElement(elem){elem.disabled=true;elem.addClassName("disabled")}function enableElement(elem){elem.disabled=false;elem.removeClassName("disabled")}function disableElements(search){$$("."+search).each(disableElement)}function enableElements(search){$$("."+search).each(enableElement)}var Cookie={all:function(){var pairs=document.cookie.split(";");var cookies={};pairs.each(function(item,index){var pair=item.strip().split("=");cookies[unescape(pair[0])]=unescape(pair[1])});return cookies},read:function(cookieName){var cookies=this.all();if(cookies[cookieName]){return cookies[cookieName]}return null},write:function(cookieName,cookieValue,cookieLifeTime){var expires="";if(cookieLifeTime){var date=new Date();date.setTime(date.getTime()+(cookieLifeTime*1000));expires="; expires="+date.toGMTString()}var urlPath="/"+BASE_URL.split("/").slice(3).join("/");document.cookie=escape(cookieName)+"="+escape(cookieValue)+expires+"; path="+urlPath},clear:function(cookieName){this.write(cookieName,"",-1)}};var Fieldset={cookiePrefix:"fh-",applyCollapse:function(containerId){if($(containerId+"-state")){collapsed=$(containerId+"-state").value==1?0:1}else{collapsed=$(containerId+"-head").collapsed}if(collapsed==1||collapsed===undefined){$(containerId+"-head").removeClassName("open");if($(containerId+"-head").up(".section-config")){$(containerId+"-head").up(".section-config").removeClassName("active")}$(containerId).hide()}else{$(containerId+"-head").addClassName("open");if($(containerId+"-head").up(".section-config")){$(containerId+"-head").up(".section-config").addClassName("active")}$(containerId).show()}},toggleCollapse:function(containerId,saveThroughAjax){if($(containerId+"-state")){collapsed=$(containerId+"-state").value==1?0:1}else{collapsed=$(containerId+"-head").collapsed}if(collapsed==1||collapsed===undefined){if($(containerId+"-state")){$(containerId+"-state").value=1}$(containerId+"-head").collapsed=0}else{if($(containerId+"-state")){$(containerId+"-state").value=0}$(containerId+"-head").collapsed=1}this.applyCollapse(containerId);if(typeof saveThroughAjax!="undefined"){this.saveState(saveThroughAjax,{container:containerId,value:$(containerId+"-state").value})}},addToPrefix:function(value){this.cookiePrefix+=value+"-"},saveState:function(url,parameters){new Ajax.Request(url,{method:"get",parameters:Object.toQueryString(parameters),loaderArea:false})}};var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(input){var output="";var chr1,chr2,chr3,enc1,enc2,enc3,enc4;var i=0;if(typeof window.btoa==="function"){return window.btoa(input)}input=Base64._utf8_encode(input);while(i<input.length){chr1=input.charCodeAt(i++);chr2=input.charCodeAt(i++);chr3=input.charCodeAt(i++);enc1=chr1>>2;enc2=((chr1&3)<<4)|(chr2>>4);enc3=((chr2&15)<<2)|(chr3>>6);enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else{if(isNaN(chr3)){enc4=64}}output=output+this._keyStr.charAt(enc1)+this._keyStr.charAt(enc2)+this._keyStr.charAt(enc3)+this._keyStr.charAt(enc4)}return output},decode:function(input){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;if(typeof window.atob==="function"){return window.atob(input)}input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i<input.length){enc1=this._keyStr.indexOf(input.charAt(i++));enc2=this._keyStr.indexOf(input.charAt(i++));enc3=this._keyStr.indexOf(input.charAt(i++));enc4=this._keyStr.indexOf(input.charAt(i++));chr1=(enc1<<2)|(enc2>>4);chr2=((enc2&15)<<4)|(enc3>>2);chr3=((enc3&3)<<6)|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}output=Base64._utf8_decode(output);return output},mageEncode:function(input){return this.encode(input).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,",")},mageDecode:function(output){output=output.replace(/\-/g,"+").replace(/_/g,"/").replace(/,/g,"=");return this.decode(output)},idEncode:function(input){return this.encode(input).replace(/\+/g,":").replace(/\//g,"_").replace(/=/g,"-")},idDecode:function(output){output=output.replace(/\-/g,"=").replace(/_/g,"/").replace(/\:/g,"+");return this.decode(output)},_utf8_encode:function(string){string=string.replace(/\r\n/g,"\n");var utftext="";for(var n=0;n<string.length;n++){var c=string.charCodeAt(n);if(c<128){utftext+=String.fromCharCode(c)}else{if((c>127)&&(c<2048)){utftext+=String.fromCharCode((c>>6)|192);utftext+=String.fromCharCode((c&63)|128)}else{utftext+=String.fromCharCode((c>>12)|224);utftext+=String.fromCharCode(((c>>6)&63)|128);utftext+=String.fromCharCode((c&63)|128)}}}return utftext},_utf8_decode:function(utftext){var string="";var i=0;var c=c1=c2=0;while(i<utftext.length){c=utftext.charCodeAt(i);if(c<128){string+=String.fromCharCode(c);i++}else{if((c>191)&&(c<224)){c2=utftext.charCodeAt(i+1);string+=String.fromCharCode(((c&31)<<6)|(c2&63));i+=2}else{c2=utftext.charCodeAt(i+1);c3=utftext.charCodeAt(i+2);string+=String.fromCharCode(((c&15)<<12)|((c2&63)<<6)|(c3&63));i+=3}}}return string}};function sortNumeric(val1,val2){return val1-val2};
\ No newline at end of file
diff --git a/lib/web/lib/boxover.js b/lib/web/lib/boxover.js
deleted file mode 100644
index b9cb869a95f7dbfc844ddb4519802c22f0a270ba..0000000000000000000000000000000000000000
--- a/lib/web/lib/boxover.js
+++ /dev/null
@@ -1,372 +0,0 @@
-/* --- BoxOver ---
-/* --- v 2.1 17th June 2006
-By Oliver Bryant with help of Matthew Tagg
-http://boxover.swazz.org */
-
-if (typeof document.attachEvent!='undefined') {
-   window.attachEvent('onload',init);
-   document.attachEvent('onmousemove',moveMouse);
-   document.attachEvent('onclick',checkMove); }
-else {
-   window.addEventListener('load',init,false);
-   document.addEventListener('mousemove',moveMouse,false);
-   document.addEventListener('click',checkMove,false);
-}
-
-var oDv=document.createElement("div");
-var dvHdr=document.createElement("div");
-var dvBdy=document.createElement("div");
-var windowlock,boxMove,fixposx,fixposy,lockX,lockY,fixx,fixy,ox,oy,boxLeft,boxRight,boxTop,boxBottom,evt,mouseX,mouseY,boxOpen,totalScrollTop,totalScrollLeft;
-boxOpen=false;
-ox=10;
-oy=10;
-lockX=0;
-lockY=0;
-
-function init() {
-	oDv.appendChild(dvHdr);
-	oDv.appendChild(dvBdy);
-	oDv.style.position="absolute";
-	oDv.style.visibility='hidden';
-	document.body.appendChild(oDv);	
-}
-
-function defHdrStyle() {
-	dvHdr.innerHTML='<img  style="vertical-align:middle"  src="info.gif">&nbsp;&nbsp;'+dvHdr.innerHTML;
-	dvHdr.style.fontWeight='bold';
-	dvHdr.style.width='150px';
-	dvHdr.style.fontFamily='arial';
-	dvHdr.style.border='1px solid #A5CFE9';
-	dvHdr.style.padding='3';
-	dvHdr.style.fontSize='11';
-	dvHdr.style.color='#4B7A98';
-	dvHdr.style.background='#D5EBF9';
-	dvHdr.style.filter='alpha(opacity=85)'; // IE
-	dvHdr.style.opacity='0.85'; // FF
-}
-
-function defBdyStyle() {
-	dvBdy.style.borderBottom='1px solid #A5CFE9';
-	dvBdy.style.borderLeft='1px solid #A5CFE9';
-	dvBdy.style.borderRight='1px solid #A5CFE9';
-	dvBdy.style.width='150px';
-	dvBdy.style.fontFamily='arial';
-	dvBdy.style.fontSize='11';
-	dvBdy.style.padding='3';
-	dvBdy.style.color='#1B4966';
-	dvBdy.style.background='#FFFFFF';
-	dvBdy.style.filter='alpha(opacity=85)'; // IE
-	dvBdy.style.opacity='0.85'; // FF
-}
-
-function checkElemBO(txt) {
-if (!txt || typeof(txt) != 'string') return false;
-if ((txt.indexOf('header')>-1)&&(txt.indexOf('body')>-1)&&(txt.indexOf('[')>-1)&&(txt.indexOf('[')>-1)) 
-   return true;
-else
-   return false;
-}
-
-function scanBO(curNode) {
-	  if (checkElemBO(curNode.title)) {
-         curNode.boHDR=getParam('header',curNode.title);
-         curNode.boBDY=getParam('body',curNode.title);
-			curNode.boCSSBDY=getParam('cssbody',curNode.title);			
-			curNode.boCSSHDR=getParam('cssheader',curNode.title);
-			curNode.IEbugfix=(getParam('hideselects',curNode.title)=='on')?true:false;
-			curNode.fixX=parseInt(getParam('fixedrelx',curNode.title));
-			curNode.fixY=parseInt(getParam('fixedrely',curNode.title));
-			curNode.absX=parseInt(getParam('fixedabsx',curNode.title));
-			curNode.absY=parseInt(getParam('fixedabsy',curNode.title));
-			curNode.offY=(getParam('offsety',curNode.title)!='')?parseInt(getParam('offsety',curNode.title)):10;
-			curNode.offX=(getParam('offsetx',curNode.title)!='')?parseInt(getParam('offsetx',curNode.title)):10;
-			curNode.fade=(getParam('fade',curNode.title)=='on')?true:false;
-			curNode.fadespeed=(getParam('fadespeed',curNode.title)!='')?getParam('fadespeed',curNode.title):0.04;
-			curNode.delay=(getParam('delay',curNode.title)!='')?parseInt(getParam('delay',curNode.title)):0;
-			if (getParam('requireclick',curNode.title)=='on') {
-				curNode.requireclick=true;
-				document.all?curNode.attachEvent('onclick',showHideBox):curNode.addEventListener('click',showHideBox,false);
-				document.all?curNode.attachEvent('onmouseover',hideBox):curNode.addEventListener('mouseover',hideBox,false);
-			}
-			else {// Note : if requireclick is on the stop clicks are ignored   			
-   			if (getParam('doubleclickstop',curNode.title)!='off') {
-   				document.all?curNode.attachEvent('ondblclick',pauseBox):curNode.addEventListener('dblclick',pauseBox,false);
-   			}	
-   			if (getParam('singleclickstop',curNode.title)=='on') {
-   				document.all?curNode.attachEvent('onclick',pauseBox):curNode.addEventListener('click',pauseBox,false);
-   			}
-   		}
-			curNode.windowLock=getParam('windowlock',curNode.title).toLowerCase()=='off'?false:true;
-			curNode.title='';
-			curNode.hasbox=1;
-	   }
-	   else
-	      curNode.hasbox=2;   
-}
-
-
-function getParam(param,list) {
-	var reg = new RegExp('([^a-zA-Z]' + param + '|^' + param + ')\\s*=\\s*\\[\\s*(((\\[\\[)|(\\]\\])|([^\\]\\[]))*)\\s*\\]');
-	var res = reg.exec(list);
-	var returnvar;
-	if(res)
-		return res[2].replace('[[','[').replace(']]',']');
-	else
-		return '';
-}
-
-function Left(elem){	
-	var x=0;
-	if (elem.calcLeft)
-		return elem.calcLeft;
-	var oElem=elem;
-	while(elem){
-		 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderLeftWidth)))&&(x!=0))
-		 	x+=parseInt(elem.currentStyle.borderLeftWidth);
-		 x+=elem.offsetLeft;
-		 elem=elem.offsetParent;
-	  } 
-	oElem.calcLeft=x;
-	return x;
-	}
-
-function Top(elem){
-	 var x=0;
-	 if (elem.calcTop)
-	 	return elem.calcTop;
-	 var oElem=elem;
-	 while(elem){		
-	 	 if ((elem.currentStyle)&& (!isNaN(parseInt(elem.currentStyle.borderTopWidth)))&&(x!=0))
-		 	x+=parseInt(elem.currentStyle.borderTopWidth); 
-		 x+=elem.offsetTop;
-	         elem=elem.offsetParent;
- 	 } 
- 	 oElem.calcTop=x;
- 	 return x;
- 	 
-}
-
-var ah,ab;
-function applyStyles() {
-	if(ab)
-		oDv.removeChild(dvBdy);
-	if (ah)
-		oDv.removeChild(dvHdr);
-	dvHdr=document.createElement("div");
-	dvBdy=document.createElement("div");
-	CBE.boCSSBDY?dvBdy.className=CBE.boCSSBDY:defBdyStyle();
-	CBE.boCSSHDR?dvHdr.className=CBE.boCSSHDR:defHdrStyle();
-	dvHdr.innerHTML=CBE.boHDR;
-	dvBdy.innerHTML=CBE.boBDY;
-	ah=false;
-	ab=false;
-	if (CBE.boHDR!='') {		
-		oDv.appendChild(dvHdr);
-		ah=true;
-	}	
-	if (CBE.boBDY!=''){
-		oDv.appendChild(dvBdy);
-		ab=true;
-	}	
-}
-
-var CSE,iterElem,LSE,CBE,LBE, totalScrollLeft, totalScrollTop, width, height ;
-var ini=false;
-
-// Customised function for inner window dimension
-function SHW() {
-   if (document.body && (document.body.clientWidth !=0)) {
-      width=document.body.clientWidth;
-      height=document.body.clientHeight;
-   }
-   if (document.documentElement && (document.documentElement.clientWidth!=0) && (document.body.clientWidth + 20 >= document.documentElement.clientWidth)) {
-      width=document.documentElement.clientWidth;   
-      height=document.documentElement.clientHeight;   
-   }   
-   return [width,height];
-}
-
-
-var ID=null;
-function moveMouse(e) {
-   //boxMove=true;
-	e?evt=e:evt=event;
-	
-	CSE=evt.target?evt.target:evt.srcElement;
-	
-	if (!CSE.hasbox) {
-	   // Note we need to scan up DOM here, some elements like TR don't get triggered as srcElement
-	   iElem=CSE;
-	   while ((iElem.parentNode) && (!iElem.hasbox)) {
-	      scanBO(iElem);
-	      iElem=iElem.parentNode;
-	   }	   
-	}
-	
-	if ((CSE!=LSE)&&(!isChild(CSE,dvHdr))&&(!isChild(CSE,dvBdy))){		
-	   if (!CSE.boxItem) {
-			iterElem=CSE;
-			while ((iterElem.hasbox==2)&&(iterElem.parentNode))
-					iterElem=iterElem.parentNode; 
-			CSE.boxItem=iterElem;
-			}
-		iterElem=CSE.boxItem;
-		if (CSE.boxItem&&(CSE.boxItem.hasbox==1))  {
-			LBE=CBE;
-			CBE=iterElem;
-			if (CBE!=LBE) {
-				applyStyles();
-				if (!CBE.requireclick)
-					if (CBE.fade) {
-						if (ID!=null)
-							clearTimeout(ID);
-						ID=setTimeout("fadeIn("+CBE.fadespeed+")",CBE.delay);
-					}
-					else {
-						if (ID!=null)
-							clearTimeout(ID);
-						COL=1;
-						ID=setTimeout("oDv.style.visibility='visible';ID=null;",CBE.delay);						
-					}
-				if (CBE.IEbugfix) {hideSelects();} 
-				fixposx=!isNaN(CBE.fixX)?Left(CBE)+CBE.fixX:CBE.absX;
-				fixposy=!isNaN(CBE.fixY)?Top(CBE)+CBE.fixY:CBE.absY;			
-				lockX=0;
-				lockY=0;
-				boxMove=true;
-				ox=CBE.offX?CBE.offX:10;
-				oy=CBE.offY?CBE.offY:10;
-			}
-		}
-		else if (!isChild(CSE,dvHdr) && !isChild(CSE,dvBdy) && (boxMove))	{
-			// The conditional here fixes flickering between tables cells.
-			if ((!isChild(CBE,CSE)) || (CSE.tagName!='TABLE')) {   			
-   			CBE=null;
-   			if (ID!=null)
-  					clearTimeout(ID);
-   			fadeOut();
-   			showSelects();
-			}
-		}
-		LSE=CSE;
-	}
-	else if (((isChild(CSE,dvHdr) || isChild(CSE,dvBdy))&&(boxMove))) {
-		totalScrollLeft=0;
-		totalScrollTop=0;
-		
-		iterElem=CSE;
-		while(iterElem) {
-			if(!isNaN(parseInt(iterElem.scrollTop)))
-				totalScrollTop+=parseInt(iterElem.scrollTop);
-			if(!isNaN(parseInt(iterElem.scrollLeft)))
-				totalScrollLeft+=parseInt(iterElem.scrollLeft);
-			iterElem=iterElem.parentNode;			
-		}
-		if (CBE!=null) {
-			boxLeft=Left(CBE)-totalScrollLeft;
-			boxRight=parseInt(Left(CBE)+CBE.offsetWidth)-totalScrollLeft;
-			boxTop=Top(CBE)-totalScrollTop;
-			boxBottom=parseInt(Top(CBE)+CBE.offsetHeight)-totalScrollTop;
-			doCheck();
-		}
-	}
-	
-	if (boxMove&&CBE) {
-		// This added to alleviate bug in IE6 w.r.t DOCTYPE
-		bodyScrollTop=document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop;
-		bodyScrollLet=document.documentElement&&document.documentElement.scrollLeft?document.documentElement.scrollLeft:document.body.scrollLeft;
-		mouseX=evt.pageX?evt.pageX-bodyScrollLet:evt.clientX-document.body.clientLeft;
-		mouseY=evt.pageY?evt.pageY-bodyScrollTop:evt.clientY-document.body.clientTop;
-		if ((CBE)&&(CBE.windowLock)) {
-			mouseY < -oy?lockY=-mouseY-oy:lockY=0;
-			mouseX < -ox?lockX=-mouseX-ox:lockX=0;
-			mouseY > (SHW()[1]-oDv.offsetHeight-oy)?lockY=-mouseY+SHW()[1]-oDv.offsetHeight-oy:lockY=lockY;
-			mouseX > (SHW()[0]-dvBdy.offsetWidth-ox)?lockX=-mouseX-ox+SHW()[0]-dvBdy.offsetWidth:lockX=lockX;			
-		}
-		oDv.style.left=((fixposx)||(fixposx==0))?fixposx:bodyScrollLet+mouseX+ox+lockX+"px";
-		oDv.style.top=((fixposy)||(fixposy==0))?fixposy:bodyScrollTop+mouseY+oy+lockY+"px";		
-		
-	}
-}
-
-function doCheck() {	
-	if (   (mouseX < boxLeft)    ||     (mouseX >boxRight)     || (mouseY < boxTop) || (mouseY > boxBottom)) {
-		if (!CBE.requireclick)
-			fadeOut();
-		if (CBE.IEbugfix) {showSelects();}
-		CBE=null;
-	}
-}
-
-function pauseBox(e) {
-   e?evt=e:evt=event;
-	boxMove=false;
-	evt.cancelBubble=true;
-}
-
-function showHideBox(e) {
-	oDv.style.visibility=(oDv.style.visibility!='visible')?'visible':'hidden';
-}
-
-function hideBox(e) {
-	oDv.style.visibility='hidden';
-}
-
-var COL=0;
-var stopfade=false;
-function fadeIn(fs) {
-		ID=null;
-		COL=0;
-		oDv.style.visibility='visible';
-		fadeIn2(fs);
-}
-
-function fadeIn2(fs) {
-		COL=COL+fs;
-		COL=(COL>1)?1:COL;
-		oDv.style.filter='alpha(opacity='+parseInt(100*COL)+')';
-		oDv.style.opacity=COL;
-		if (COL<1)
-		 setTimeout("fadeIn2("+fs+")",20);		
-}
-
-
-function fadeOut() {
-	oDv.style.visibility='hidden';
-	
-}
-
-function isChild(s,d) {
-	while(s) {
-		if (s==d) 
-			return true;
-		s=s.parentNode;
-	}
-	return false;
-}
-
-var cSrc;
-function checkMove(e) {
-	e?evt=e:evt=event;
-	cSrc=evt.target?evt.target:evt.srcElement;
-	if ((!boxMove)&&(!isChild(cSrc,oDv))) {
-		fadeOut();
-		if (CBE&&CBE.IEbugfix) {showSelects();}
-		boxMove=true;
-		CBE=null;
-	}
-}
-
-function showSelects(){
-   var elements = document.getElementsByTagName("select");
-   for (i=0;i< elements.length;i++){
-      elements[i].style.visibility='visible';
-   }
-}
-
-function hideSelects(){
-   var elements = document.getElementsByTagName("select");
-   for (i=0;i< elements.length;i++){
-   elements[i].style.visibility='hidden';
-   }
-}
\ No newline at end of file
diff --git a/lib/web/lib/ds-sleight.js b/lib/web/lib/ds-sleight.js
deleted file mode 100644
index b43be15eddca2917ba7be92e0ed763af9e041819..0000000000000000000000000000000000000000
--- a/lib/web/lib/ds-sleight.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// Universal transparent-PNG enabler for MSIE/Win 5.5+
-// http://dsandler.org
-// From original code: http://www.youngpup.net/?request=/snippets/sleight.xml
-// and background-image code: http://www.allinthehead.com/retro/69
-// also:
-//  * use sizingMethod=crop to avoid scaling PNGs (who would do such a thing?)
-//  * only do this once, to make it compatible with CSS rollovers
-
-if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) {
-	window.attachEvent("onload", enableAlphaImages);
-}
-
-function enableAlphaImages(){
-	var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
-	var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
-	if (itsAllGood) {
-		for (var i=0; i<document.all.length; i++){
-			var obj = document.all[i];
-			var bg = obj.currentStyle.backgroundImage;
-			var img = document.images[i];
-			if (bg && bg.match(/\.png/i) != null) {
-				var img = bg.substring(5,bg.length-2);
-				var offset = obj.style["background-position"];
-				obj.style.filter =
-				"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img+"', sizingMethod='crop')";
-				obj.style.backgroundImage = "url('"+BLANK_IMG+"')";
-				obj.style["background-position"] = offset; // reapply
-			} else if (img && img.src.match(/\.png$/i) != null) {
-				var src = img.src;
-				img.style.width = img.width + "px";
-				img.style.height = img.height + "px";
-				img.style.filter =
-				"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='crop')"
-				img.src = BLANK_IMG;
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index b4fc65566ca3050b1c0d0ac434a7fc34710cfe2e..3e9a022c5f33b42cbf8a19c9a361f93062412cc1 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -5,10 +5,11 @@
 /*jshint browser:true jquery:true*/
 define([
     "jquery",
+    "tinymce",
     "jquery/ui",
     "jquery/jstree/jquery.jstree",
     "mage/mage"
-], function($){
+], function($, tinyMCE){
     
     MediabrowserUtility = {
         windowId: 'modal_dialog_message',
diff --git a/lib/web/mage/adminhtml/form.js b/lib/web/mage/adminhtml/form.js
index e266ece372ac4c8abda7a7b74b2b582eeffe1ed8..104125ffa48ce4a0d1ba2e2e91612dc3225be12a 100644
--- a/lib/web/mage/adminhtml/form.js
+++ b/lib/web/mage/adminhtml/form.js
@@ -309,62 +309,6 @@ Event.pointerY = function(event){
     }
 }
 
-SelectUpdater = Class.create();
-SelectUpdater.prototype = {
-    initialize: function (firstSelect, secondSelect, selectFirstMessage, noValuesMessage, values, selected)
-    {
-        this.first = $(firstSelect);
-        this.second = $(secondSelect);
-        this.message = selectFirstMessage;
-        this.values = values;
-        this.noMessage = noValuesMessage;
-        this.selected = selected;
-
-        this.update();
-
-        Event.observe(this.first, 'change', this.update.bind(this));
-    },
-
-    update: function()
-    {
-        this.second.length = 0;
-        this.second.value = '';
-
-        if (this.first.value && this.values[this.first.value]) {
-            for (optionValue in this.values[this.first.value]) {
-                optionTitle = this.values[this.first.value][optionValue];
-
-                this.addOption(this.second, optionValue, optionTitle);
-            }
-            this.second.disabled = false;
-        } else if (this.first.value && !this.values[this.first.value]) {
-            this.addOption(this.second, '', this.noMessage);
-        } else {
-            this.addOption(this.second, '', this.message);
-            this.second.disabled = true;
-        }
-    },
-
-    addOption: function(select, value, text)
-    {
-        option = document.createElement('OPTION');
-        option.value = value;
-        option.text = text;
-
-        if (this.selected && option.value == this.selected) {
-            option.selected = true;
-            this.selected = false;
-        }
-
-        if (select.options.add) {
-            select.options.add(option);
-        } else {
-            select.appendChild(option);
-        }
-    }
-}
-
-
 /**
  * Observer that watches for dependent form elements
  * If an element depends on 1 or more of other elements, it should show up only when all of them gain specified values
diff --git a/lib/web/mage/adminhtml/tabs.js b/lib/web/mage/adminhtml/tabs.js
deleted file mode 100644
index 35bc76cd9fc4010921c08f9f0d6a0b4069e88ba2..0000000000000000000000000000000000000000
--- a/lib/web/mage/adminhtml/tabs.js
+++ /dev/null
@@ -1,271 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'jquery',
-    'prototype',
-    'mage/adminhtml/events'
-], function(jQuery){
-
-    varienTabs = new Class.create();
-
-    varienTabs.prototype = {
-        initialize : function(containerId, destElementId,  activeTabId, shadowTabs){
-            this.containerId    = containerId;
-            this.destElementId  = destElementId;
-            this.activeTab = null;
-
-            this.tabOnClick     = this.tabMouseClick.bindAsEventListener(this);
-
-            this.tabs = $$('#'+this.containerId+' li a.tab-item-link');
-
-            this.hideAllTabsContent();
-            for (var tab=0; tab<this.tabs.length; tab++) {
-                Event.observe(this.tabs[tab],'click',this.tabOnClick);
-                // move tab contents to destination element
-                if($(this.destElementId)){
-                    var tabContentElement = $(this.getTabContentElementId(this.tabs[tab]));
-                    if(tabContentElement && tabContentElement.parentNode.id != this.destElementId){
-                        $(this.destElementId).appendChild(tabContentElement);
-                        tabContentElement.container = this;
-                        tabContentElement.statusBar = this.tabs[tab];
-                        tabContentElement.tabObject  = this.tabs[tab];
-                        this.tabs[tab].contentMoved = true;
-                        this.tabs[tab].container = this;
-                        this.tabs[tab].show = function(){
-                            this.container.showTabContent(this);
-                        }
-                        if(varienGlobalEvents){
-                            varienGlobalEvents.fireEvent('moveTab', {tab:this.tabs[tab]});
-                        }
-                    }
-                }
-    /*
-                // this code is pretty slow in IE, so lets do it in tabs*.phtml
-                // mark ajax tabs as not loaded
-                if (Element.hasClassName($(this.tabs[tab].id), 'ajax')) {
-                    Element.addClassName($(this.tabs[tab].id), 'notloaded');
-                }
-    */
-                // bind shadow tabs
-                if (this.tabs[tab].id && shadowTabs && shadowTabs[this.tabs[tab].id]) {
-                    this.tabs[tab].shadowTabs = shadowTabs[this.tabs[tab].id];
-                }
-            }
-
-            this.displayFirst = activeTabId;
-            Event.observe(window,'load',this.moveTabContentInDest.bind(this));
-            Event.observe(window,'load',this.bindOnbeforeSubmit.bind(this));
-            Event.observe(window,'load',this.bindOnInvalid.bind(this));
-        },
-
-        bindOnInvalid: function() {
-            jQuery.each(this.tabs, jQuery.proxy(function(i, tab) {
-                jQuery('#' + this.getTabContentElementId(tab))
-                    .on('highlight.validate', function() {
-                        jQuery(tab).addClass('error').find('.error').show();
-                    })
-                    .on('focusin', jQuery.proxy(function() {
-                        this.showTabContentImmediately(tab);
-                    }, this));
-            }, this));
-        },
-
-        bindOnbeforeSubmit: function() {
-            jQuery('#' + this.destElementId).on('beforeSubmit', jQuery.proxy(function(e, data) {
-                var tabsIdValue = this.activeTab.id;
-                if (this.tabsBlockPrefix) {
-                    if (this.activeTab.id.startsWith(this.tabsBlockPrefix)) {
-                        tabsIdValue = tabsIdValue.substr(this.tabsBlockPrefix.length);
-                    }
-                }
-                jQuery(this.tabs).removeClass('error');
-                var options = {action: {args: {}}};
-                options.action.args[this.tabIdArgument || 'tab'] = tabsIdValue;
-                data = data ? jQuery.extend(data, options) : options;
-            }, this));
-        },
-
-        setSkipDisplayFirstTab : function(){
-            this.displayFirst = null;
-        },
-
-        moveTabContentInDest : function(){
-            for(var tab=0; tab<this.tabs.length; tab++){
-                if($(this.destElementId) &&  !this.tabs[tab].contentMoved){
-                    var tabContentElement = $(this.getTabContentElementId(this.tabs[tab]));
-                    if(tabContentElement && tabContentElement.parentNode.id != this.destElementId){
-                        $(this.destElementId).appendChild(tabContentElement);
-                        tabContentElement.container = this;
-                        tabContentElement.statusBar = this.tabs[tab];
-                        tabContentElement.tabObject  = this.tabs[tab];
-                        this.tabs[tab].container = this;
-                        this.tabs[tab].show = function(){
-                            this.container.showTabContent(this);
-                        }
-                        if(varienGlobalEvents){
-                            varienGlobalEvents.fireEvent('moveTab', {tab:this.tabs[tab]});
-                        }
-                    }
-                }
-            }
-            if (this.displayFirst) {
-                this.showTabContent($(this.displayFirst));
-                this.displayFirst = null;
-            }
-        },
-
-        getTabContentElementId : function(tab){
-            if(tab){
-                return tab.id+'_content';
-            }
-            return false;
-        },
-
-        tabMouseClick : function(event) {
-            var tab = Event.findElement(event, 'a');
-
-            // go directly to specified url or switch tab
-            if ((tab.href.indexOf('#') != tab.href.length-1)
-                && !(Element.hasClassName(tab, 'ajax'))
-            ) {
-                location.href = tab.href;
-            }
-            else {
-                this.showTabContent(tab);
-            }
-            Event.stop(event);
-        },
-
-        hideAllTabsContent : function(){
-            for(var tab in this.tabs){
-                this.hideTabContent(this.tabs[tab]);
-            }
-        },
-
-        // show tab, ready or not
-        showTabContentImmediately : function(tab) {
-            this.hideAllTabsContent();
-            var tabContentElement = $(this.getTabContentElementId(tab));
-            if (tabContentElement) {
-                Element.show(tabContentElement);
-                Element.addClassName(tab, 'active');
-                // load shadow tabs, if any
-                if (tab.shadowTabs && tab.shadowTabs.length) {
-                    for (var k in tab.shadowTabs) {
-                        this.loadShadowTab($(tab.shadowTabs[k]));
-                    }
-                }
-                if (!Element.hasClassName(tab, 'ajax only')) {
-                    Element.removeClassName(tab, 'notloaded');
-                }
-                this.activeTab = tab;
-            }
-            if (varienGlobalEvents) {
-                varienGlobalEvents.fireEvent('showTab', {tab:tab});
-            }
-        },
-
-        // the lazy show tab method
-        showTabContent : function(tab) {
-            var tabContentElement = $(this.getTabContentElementId(tab));
-            if (tabContentElement) {
-                if (this.activeTab != tab) {
-                    if (varienGlobalEvents) {
-                        var defaultTab = this.tabs[0];
-                        var eventData = {
-                            from: this.activeTab ? this.activeTab.getAttribute('id') : null,
-                            to: tab ? tab.getAttribute('id') : null,
-                            first: defaultTab && tab && tab.getAttribute('id') == defaultTab.getAttribute('id')
-                        };
-                        if (varienGlobalEvents.fireEvent('tabChangeBefore', eventData) === false) {
-                            return;
-                        };
-                    }
-                }
-                // wait for ajax request, if defined
-                var isAjax = Element.hasClassName(tab, 'ajax');
-                var isEmpty = tabContentElement.innerHTML=='' && tab.href.indexOf('#')!=tab.href.length-1;
-                var isNotLoaded = Element.hasClassName(tab, 'notloaded');
-
-                if ( isAjax && (isEmpty || isNotLoaded) )
-                {
-                    new Ajax.Request(tab.href, {
-                        parameters: {form_key: FORM_KEY},
-                        evalScripts: true,
-                        onSuccess: function(transport) {
-                            try {
-                                if (transport.responseText.isJSON()) {
-                                    var response = transport.responseText.evalJSON()
-                                    if (response.error) {
-                                        alert(response.message);
-                                    }
-                                    if(response.ajaxExpired && response.ajaxRedirect) {
-                                        setLocation(response.ajaxRedirect);
-                                    }
-                                } else {
-                                    $(tabContentElement.id).update(transport.responseText);
-                                    this.showTabContentImmediately(tab)
-                                }
-                            }
-                            catch (e) {
-                                $(tabContentElement.id).update(transport.responseText);
-                                this.showTabContentImmediately(tab)
-                            }
-                        }.bind(this)
-                    });
-                }
-                else {
-                    this.showTabContentImmediately(tab);
-                }
-            }
-        },
-
-        loadShadowTab : function(tab) {
-            var tabContentElement = $(this.getTabContentElementId(tab));
-            if (tabContentElement && Element.hasClassName(tab, 'ajax') && Element.hasClassName(tab, 'notloaded')) {
-                new Ajax.Request(tab.href, {
-                    parameters: {form_key: FORM_KEY},
-                    evalScripts: true,
-                    onSuccess: function(transport) {
-                        try {
-                            if (transport.responseText.isJSON()) {
-                                var response = transport.responseText.evalJSON()
-                                if (response.error) {
-                                    alert(response.message);
-                                }
-                                if(response.ajaxExpired && response.ajaxRedirect) {
-                                    setLocation(response.ajaxRedirect);
-                                }
-                            } else {
-                                $(tabContentElement.id).update(transport.responseText);
-                                if (!Element.hasClassName(tab, 'ajax only')) {
-                                    Element.removeClassName(tab, 'notloaded');
-                                }
-                            }
-                        }
-                        catch (e) {
-                            $(tabContentElement.id).update(transport.responseText);
-                            if (!Element.hasClassName(tab, 'ajax only')) {
-                                Element.removeClassName(tab, 'notloaded');
-                            }
-                        }
-                    }.bind(this)
-                });
-            }
-        },
-
-        hideTabContent : function(tab){
-            var tabContentElement = $(this.getTabContentElementId(tab));
-            if($(this.destElementId) && tabContentElement){
-               Element.hide(tabContentElement);
-               Element.removeClassName(tab, 'active');
-            }
-            if(varienGlobalEvents){
-                varienGlobalEvents.fireEvent('hideTab', {tab:tab});
-            }
-        }
-    };
-
-});
\ No newline at end of file
diff --git a/lib/web/mage/adminhtml/wysiwyg/tiny_mce/setup.js b/lib/web/mage/adminhtml/wysiwyg/tiny_mce/setup.js
index 4923b76d81d19e0f47e8aa7c00c7161f5fdeb8af..03b3b5b33ca05aacb9b55c07da3a31b0087246c6 100644
--- a/lib/web/mage/adminhtml/wysiwyg/tiny_mce/setup.js
+++ b/lib/web/mage/adminhtml/wysiwyg/tiny_mce/setup.js
@@ -5,11 +5,12 @@
 define([
     'jquery',
     'underscore',
+    'tinymce',
     'mage/translate',
     'prototype',
     'mage/adminhtml/events',
     'mage/adminhtml/browser'
-], function(jQuery, _) {
+], function(jQuery, _, tinyMCE) {
 
     tinyMceWysiwygSetup = Class.create();
 
@@ -36,12 +37,12 @@ define([
 
         setup: function(mode) {
             if (this.config.widget_plugin_src) {
-                tinymce.PluginManager.load('magentowidget', this.config.widget_plugin_src);
+                tinyMCE.PluginManager.load('magentowidget', this.config.widget_plugin_src);
             }
 
             if (this.config.plugins) {
                 this.config.plugins.each(function(plugin) {
-                    tinymce.PluginManager.load(plugin.name, plugin.src);
+                    tinyMCE.PluginManager.load(plugin.name, plugin.src);
                 });
             }
 
diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index fd643d4674429687040ab27b8114c580d1171764..b963ead4648fda6996bdfc1158fc804a253e571c 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -5,13 +5,14 @@
 
 define([
     "jquery",
+    "tinymce",
     "jquery/ui",
     "mage/translate",
     "mage/mage",
     "mage/validation",
     "mage/adminhtml/events",
     "prototype"
-], function(jQuery){
+], function(jQuery, tinyMCE){
 
     var widgetTools = {
         getDivHtml: function(id, html) {
diff --git a/lib/web/mage/apply/main.js b/lib/web/mage/apply/main.js
index 3c42cc06c0ea5fac0242448705e5c7f07b2ddd75..d76848c0eaca3b349c2b4e9ddcf3551d9079fd38 100644
--- a/lib/web/mage/apply/main.js
+++ b/lib/web/mage/apply/main.js
@@ -7,7 +7,7 @@ define([
     'underscore',
     './registry',
     'require'
-], function($, _, registry, require) {
+], function ($, _, registry, require) {
     'use strict';
 
     var dataAttr        = 'data-mage-init',
@@ -20,14 +20,13 @@ define([
      * @param {String} component - Components' path.
      */
     function init(el, config, component) {
-        
         if (registry.has(el, component)) {
             return;
         }
 
         registry.add(el, component);
 
-        require([component], function(callback) {
+        require([component], function (callback) {
             config = getConfig(el, config);
 
             if (typeof callback === 'object') {
@@ -42,13 +41,12 @@ define([
         });
     }
 
-
     /**
      * Searches for elements which has 'data-mage-init' attribute.
      * @param {HTMLElement} [parent=document.body] - Optional node inside of which to perform search.
      * @returns {Array} An array of elements with 'data-mage-init' attribute.
      */
-    function getElements(parent){
+    function getElements(parent) {
         var elems;
 
         parent = parent || document.body;
@@ -56,48 +54,45 @@ define([
         elems = parent.querySelectorAll('[' + dataAttr + ']');
         elems = Array.prototype.slice.call(elems);
 
-        if(parent.hasAttribute(dataAttr)){
+        if (parent.hasAttribute(dataAttr)) {
             elems.push(parent);
         }
 
         return elems;
     }
 
-
     /**
      * Parses elements 'data-mage-init' attribute as a valid JSON data.
      * @param {HTMLElement} el - Element whose attribute should be parsed.
      * @returns {Object}
      */
-    function getData(el){
+    function getData(el) {
         var data = el.getAttribute(dataAttr);
 
         return JSON.parse(data);
     }
 
-
     /**
      * Searches for a components' configurational node.
      * @param {HTMLElement} el - Will be used as a parentNode for configurational element.
      * @param {Object|String} [config] - Initial config.
      * @returns {Object} Components' config.
      */
-    function getConfig(el, config){
+    function getConfig(el, config) {
         var node,
             content;
 
-        if(el.tagName === 'SCRIPT'){
+        if (el.tagName === 'SCRIPT') {
             node = el;
-        }
-        else{
+        } else {
             node = el.querySelector(nodeSelector);
 
-            if( node && node.parentNode !== el ){
+            if (node && node.parentNode !== el) {
                 node = false;
             }
         }
 
-        config  = config || {};
+        config = config || {};
         content = node ? JSON.parse(node.textContent) : {};
 
         return _.extend(config, content);
@@ -108,11 +103,11 @@ define([
          * Initializes components assigned to HTML elements via [data-mage-init].
          * @param {HTMLElement} [ctx=document.body] - Optional node to search inside.
          */
-        apply: function(ctx){
+        apply: function (ctx) {
             var elems = getElements(ctx),
                 data;
 
-            elems.forEach(function(el){
+            elems.forEach(function (el) {
                 data = getData(el);
 
                 _.each(data, init.bind(this, el));
@@ -121,10 +116,10 @@ define([
 
         /**
          * Intializes single element with a specified component and config.
-         * @param {HTMLElement} el - Element to initialize component on.   
+         * @param {HTMLElement} el - Element to initialize component on.
          * @param {Object} config - Components' configuration.
-         * @param {String} component - Components' path. 
+         * @param {String} component - Components' path.
          */
         applyFor: init
     };
-});
\ No newline at end of file
+});
diff --git a/lib/web/mage/backend/ajax-setup.js b/lib/web/mage/backend/ajax-setup.js
deleted file mode 100644
index 79035c3be44b81bd52e24391955df09523d26c95..0000000000000000000000000000000000000000
--- a/lib/web/mage/backend/ajax-setup.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true */
-/*global window:true FORM_KEY:true SessionError:true*/
-define([
-    "jquery",
-    "jquery/ui"
-], function($){
-    
-    $.ajaxSetup({
-        /*
-         * @type {string}
-         */
-        type: 'POST',
-        /*
-         * Ajax before send callback
-         * @param {Object} The jQuery XMLHttpRequest object returned by $.ajax()
-         * @param {Object}
-         */
-        beforeSend: function(jqXHR, settings){
-            if (!settings.url.match(new RegExp('[?&]isAjax=true',''))) {
-                settings.url = settings.url.match(
-                    new RegExp('\\?',"g")) ?
-                    settings.url + '&isAjax=true' :
-                    settings.url + '?isAjax=true';
-            }
-            if ($.type(settings.data) === "string" && settings.data.indexOf('form_key=') === -1
-                ) {
-                settings.data += '&' + $.param({
-                    form_key: FORM_KEY
-                });
-            } else {
-                if (!settings.data) {
-                    settings.data = {
-                        form_key: FORM_KEY
-                    };
-                }
-                if (!settings.data.form_key) {
-                    settings.data.form_key = FORM_KEY;
-                }
-            }
-        },
-        /*
-         * Ajax complete callback
-         * @param {Object} The jQuery XMLHttpRequest object returned by $.ajax()
-         */
-        complete: function(jqXHR){
-            if (jqXHR.readyState === 4) {
-                try {
-                    var jsonObject = $.parseJSON(jqXHR.responseText);
-                    if (jsonObject.ajaxExpired && jsonObject.ajaxRedirect) {
-                        window.location.replace(jsonObject.ajaxRedirect);
-                        throw new SessionError('session expired');
-                    }
-                } catch (e) {
-                    if (e instanceof SessionError) {
-                        return;
-                    }
-                }
-            }
-        }
-    });
-});
diff --git a/lib/web/mage/backend/bootstrap.js b/lib/web/mage/backend/bootstrap.js
index 2130aa28324a292a6de2b9702f139ccd3b4c8258..5e18cd229d6644d8ef36a9362cc1d02acb4c2c24 100644
--- a/lib/web/mage/backend/bootstrap.js
+++ b/lib/web/mage/backend/bootstrap.js
@@ -72,8 +72,6 @@ define([
          * Initialization of notification widget
          */
         $('body').mage('notification');
-
-        $('.content-header:not(.skip-header)').mage('floatingHeader');
     };
 
     $(bootstrap);
diff --git a/lib/web/mage/backend/button.js b/lib/web/mage/backend/button.js
index 6f67f16c38ced429024781219f59d6e5951a4aed..63e23ee02ee077977d5f6c11136c98cc9dd44e46 100644
--- a/lib/web/mage/backend/button.js
+++ b/lib/web/mage/backend/button.js
@@ -4,17 +4,20 @@
  */
 /*global require:true*/
 (function (factory) {
+    'use strict';
+
     if (typeof define === 'function' && define.amd) {
         define([
-            "jquery",
-            "jquery/ui"
+            'jquery',
+            'jquery/ui',
+            'mage/requirejs/resolver'
         ], factory);
     } else {
         factory(jQuery);
     }
 }(function ($) {
     'use strict';
-    
+
     var resolver = require && require.resolver;
 
     $.widget('ui.button', $.ui.button, {
@@ -27,7 +30,7 @@
          * Button creation.
          * @protected
          */
-        _create: function() {
+        _create: function () {
             if (this.options.event) {
                 this.options.target = this.options.target || this.element;
                 this._bind();
@@ -39,20 +42,20 @@
          * Bind handler on button click.
          * @protected
          */
-        _bind: function() {
+        _bind: function () {
             var waitTillResolved = this.options.waitTillResolved,
                 handler = !waitTillResolved || !resolver ? this._click : this._proxyClick;
 
             this.element
-                .off( 'click.button' )
-                .on( 'click.button', $.proxy(handler, this) );
+                .off('click.button')
+                .on('click.button', $.proxy(handler, this));
         },
 
         /**
          * Button click handler.
          * @protected
          */
-        _click: function(){
+        _click: function () {
             var options = this.options;
 
             $(options.target).trigger(options.event, [options.eventData]);
@@ -60,19 +63,16 @@
 
         /**
          * Proxy button click handler that might postpone the event
-         * untill all of the rjs dependencies will be resolved. 
+         * untill all of the rjs dependencies will be resolved.
          * @protected
          */
-        _proxyClick: function(){
-            var options = this.options;
-
-            if( resolver.resolved  ){
+        _proxyClick: function () {
+            if (resolver.resolved) {
                 this._click();
-            }
-            else if( !resolver.hasListeners('spinnerCover') ){
+            } else if (!resolver.hasListeners('spinnerCover')) {
                 $('body').trigger('processStart');
 
-                resolver.on('spinnerCover', $.proxy(this._onResolve, this) );
+                resolver.on('spinnerCover', $.proxy(this._onResolve, this));
             }
         },
 
@@ -80,12 +80,12 @@
          * Callback of the rjs resolver 'onAllResolved' event.
          * @protected
          */
-        _onResolve: function(){
+        _onResolve: function () {
             $('body').trigger('processStop');
 
             this._click();
         }
     });
-    
+
     return $.ui.button;
 }));
diff --git a/lib/web/mage/backend/validation.js b/lib/web/mage/backend/validation.js
index 8c50338e4a10cbac38588b20b55d7016520e6266..ac7dc1dc1715958f4d7ea303b67170aed5bc6a28 100644
--- a/lib/web/mage/backend/validation.js
+++ b/lib/web/mage/backend/validation.js
@@ -201,6 +201,68 @@
             }
         }
     });
-    
+
+    _.each({
+        'validate-greater-zero-based-on-option': [
+            function (v, el) {
+                var optionType = $(el)
+                    .closest('.form-list')
+                    .prev('.fieldset-alt')
+                    .find('select.select-product-option-type'),
+                    optionTypeVal = optionType.val();
+                v = Number(v) || 0;
+                if (optionType && (optionTypeVal == 'checkbox' || optionTypeVal == 'multi') && v <= 0) {
+                    return false;
+                }
+                return true;
+            },
+            'Please enter a number greater 0 in this field.'
+        ],
+        'validate-rating': [
+            function () {
+                var ratings = $('#detailed_rating').find('.field-rating'),
+                    noError = true;
+
+                ratings.each(function (index, rating) {
+                    noError = noError && $(rating).find('input:checked').length > 0;
+                });
+                return noError;
+            },
+            'Please select one of each ratings above.'
+        ],
+        'validate-downloadable-file': [
+            function (v, element) {
+                var elmParent = $(element).parent(),
+                    linkType = elmParent.find('input[value="file"]'),
+                    newFileContainer;
+
+                if (linkType.is(':checked') && (v === '' || v === '[]')) {
+                    newFileContainer = elmParent.find('.new-file');
+                    if (!alertAlreadyDisplayed && (newFileContainer.empty() || newFileContainer.is(':visible'))) {
+                        alertAlreadyDisplayed = true;
+                        alert($.mage.__('There are files that were selected but not uploaded yet. ' +
+                            'Please upload or remove them first'));
+                    }
+                    return false;
+                }
+                return true;
+            },
+            'Please upload a file.'
+        ],
+        'validate-downloadable-url': [
+            function (v, element) {
+                var linkType = $(element).parent().find('input[value="url"]');
+                if (linkType.is(':checked') && v === '') {
+                    return false;
+                }
+                return true;
+            },
+            'Please specify Url.'
+        ]
+    }, function (rule, i) {
+        rule.unshift(i);
+        $.validator.addMethod.apply($.validator, rule);
+    });
+
     return $.mage.validation;
 }));
diff --git a/lib/web/mage/common.js b/lib/web/mage/common.js
index 13f8a35be5fe54a7b10ea3782d7f5f3470026c46..470fd17f35be1421417c9ae274428b7a934d3fa7 100644
--- a/lib/web/mage/common.js
+++ b/lib/web/mage/common.js
@@ -3,9 +3,12 @@
  * See COPYING.txt for license details.
  */
 /*jshint browser:true jquery:true*/
-jQuery(function ($) {
-    $(document).ready(function(){
-        /* Form with auto submit feature */
-        $('form[data-auto-submit="true"]').submit();
-    });
-});
\ No newline at end of file
+define([
+    'jquery',
+    'domReady!'
+], function ($) {
+    'use strict';
+
+    /* Form with auto submit feature */
+    $('form[data-auto-submit="true"]').submit();
+});
diff --git a/lib/web/mage/dropdown_old.js b/lib/web/mage/dropdown_old.js
index 2d13b604865d4897ef28f549667388b37116f5d4..c81616b309e59227a537609c1cdd8ac775db578c 100644
--- a/lib/web/mage/dropdown_old.js
+++ b/lib/web/mage/dropdown_old.js
@@ -64,11 +64,7 @@ define([
         });
     };
 
-    $(document).ready(function() {
-        $('[data-toggle=dropdown]').dropdown();
-    });
-
-    return function(data, el){
+    return function (data, el) {
         $(el).dropdown(data);
     };
 });
diff --git a/lib/web/mage/jquery-no-conflict.js b/lib/web/mage/jquery-no-conflict.js
deleted file mode 100644
index 6350b1e8593b2ae8b79ce5b680c5d3a940eb1a2c..0000000000000000000000000000000000000000
--- a/lib/web/mage/jquery-no-conflict.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-jQuery.noConflict();
diff --git a/lib/web/mage/mage.js b/lib/web/mage/mage.js
index 725e4b1082e841eeb36619c1c647f117253db85c..81db2ce2e50ec1c7cf17f082dc161ea893ea75f3 100644
--- a/lib/web/mage/mage.js
+++ b/lib/web/mage/mage.js
@@ -5,17 +5,16 @@
 /*jshint eqnull:true browser:true jquery:true expr:true */
 /*global require:true console:true*/
 (function (factory) {
-    if (typeof define === "function" && define.amd) {
+    if (typeof define === 'function' && define.amd) {
         define([
-            "jquery",
-            "mage/apply/main"
+            'jquery',
+            'mage/apply/main'
         ], factory);
     } else {
         factory(jQuery);
     }
 }(function ($, mage) {
-    "use strict";
-
+    'use strict';
 
     /**
      * Main namespace for Magento extensions
@@ -29,22 +28,22 @@
      * @param {Object} config - Components' config.
      * @returns {JQuery} Chainable.
      */
-    $.fn.mage = function(name, config) {
+    $.fn.mage = function (name, config) {
         config = config || {};
 
-        this.each(function(index, el){
+        this.each(function (index, el) {
             mage.applyFor(el, config, name);
         });
 
         return this;
     };
-    
+
     $.extend($.mage, {
         /**
          * Handle all components declared via data attribute
          * @return {Object} $.mage
          */
-        init: function() {
+        init: function () {
             mage.apply();
 
             return this;
@@ -57,33 +56,31 @@
          * @param {(undefined|Number)} timeout - timeout in milliseconds before processing the redirect or reload
          * @param {(undefined|Boolean)} forced - true|false used for 'reload' only
          */
-        redirect: function(url, type, timeout, forced) {
+        redirect: function (url, type, timeout, forced) {
             var _redirect;
 
             forced  = !!forced;
             timeout = timeout || 0;
             type    = type || "assign";
-            
-            _redirect = function() {
+
+            _redirect = function () {
                 window.location[type](type === 'reload' ? forced : url);
             };
-            
+
             timeout ? setTimeout(_redirect, timeout) : _redirect();
         },
 
-
         /**
          * Checks if provided string is a valid selector.
          * @param {String} selector - Selector to check.
          * @returns {Boolean}
          */
-        isValidSelector: function(selector){
+        isValidSelector: function (selector) {
             try {
                 document.querySelector(selector);
 
                 return true;
-            }
-            catch(e){
+            } catch (e) {
                 return false;
             }
         }
@@ -92,8 +89,8 @@
     /**
      * Init components inside of dynamically updated elements
      */
-    $('body').on('contentUpdated', function(e) {
-        if(mage) {
+    $('body').on('contentUpdated', function (e) {
+        if (mage) {
             mage.apply(e.target);
         }
     });
diff --git a/lib/web/mage/menu.js b/lib/web/mage/menu.js
index 6453bede58a78ede645956e1dbc3d27e94688d43..01b4d116ebf4a8d192512003a6cb9e51752092eb 100644
--- a/lib/web/mage/menu.js
+++ b/lib/web/mage/menu.js
@@ -2,13 +2,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
- /*global mediaCheck*/
 define([
     "jquery",
+    "matchMedia",
     "jquery/ui",
-    "jquery/jquery.mobile.custom",
-    "matchMedia"
-], function($){
+    "jquery/jquery.mobile.custom"
+], function($, mediaCheck){
     'use strict';
 
     /**
diff --git a/lib/web/mage/requirejs/resolver.js b/lib/web/mage/requirejs/resolver.js
index d50049b7e752b0929c8efcd46c1be9e8833050b6..4e9fce726655852362e1c7caa11fb7f87c23c2b2 100644
--- a/lib/web/mage/requirejs/resolver.js
+++ b/lib/web/mage/requirejs/resolver.js
@@ -3,11 +3,14 @@
  * See COPYING.txt for license details.
  */
 /*global require:true*/
-(function(factory) {
+(function (factory) {
+    'use strict';
+
     if (require && define && define.amd) {
         factory(require);
     }
-}(function(require) {
+}(function (require) {
+    'use strict';
 
     var context         = require.s.contexts._,
         completeLoad    = context.completeLoad,
@@ -45,17 +48,20 @@
          * Checks wethre all of the current dependencies are resolved.
          * returns {Boolean}
          */
-        isResolved: function() {
-            return !Object.keys(registry).length;
-        },
+        isResolved: function () {
+            var keys = Object.keys(registry);
 
+            return !keys.length || keys.every(function (key) {
+                return !registry[key].depCount;
+            });
+        },
 
         /**
          * Attaches event handler for the 'onAllResolved' event.
          * @param {String} [namespace = _default] - Namespace of the handler.
          * @param {Function} callback - Events' callback function.
          */
-        on: function(namespace, callback) {
+        on: function (namespace, callback) {
             var handlers;
 
             if (arguments.length === 1 && typeof namespace === 'function') {
@@ -76,10 +82,10 @@
 
         /**
          * Checks for the attached listeners.
-         * @praram {String} [namespace = _default] - Namespace of the handler.
+         * @param {String} [namespace = _default] - Namespace of the handler.
          * @return {Boolean}
          */
-        hasListeners: function(namespace) {
+        hasListeners: function (namespace) {
             var handlers;
 
             if (typeof namespace === 'undefined') {
@@ -92,11 +98,10 @@
         }
     };
 
-
     /**
      * Inner requirejs's context method that fires whenever script has been loaded.
      */
-    context.completeLoad = function() {
+    context.completeLoad = function () {
         completeLoad.apply(context, arguments);
 
         if (resolver.isResolved()) {
@@ -105,4 +110,4 @@
     };
 
     require.resolver = resolver;
-}));
\ No newline at end of file
+}));
diff --git a/lib/web/mage/terms.js b/lib/web/mage/terms.js
index 5373952dd28186063bd007585c45d0ca67d352e2..a82cecb1c60f4c9b22aea70860561b00849581a1 100644
--- a/lib/web/mage/terms.js
+++ b/lib/web/mage/terms.js
@@ -140,9 +140,6 @@ define([
             init();
         });
     };
-    $(document).ready(function() {
-        $('[data-sections]').terms();
-    });
 
     return function(data, el){
         $(el).terms(data);
diff --git a/lib/web/mage/validation.js b/lib/web/mage/validation.js
index e987e147ea414f6914f9935fe3aba000f48adaec..8a9dfc4ca603f94ea38c4dffc9fff4b9fc4e7f20 100644
--- a/lib/web/mage/validation.js
+++ b/lib/web/mage/validation.js
@@ -1346,4 +1346,6 @@
             });
         }
     });
+
+    return $.mage.validation;
 }));
diff --git a/lib/web/mage/validation/dob-rule.js b/lib/web/mage/validation/dob-rule.js
deleted file mode 100644
index c1a82e3ab522a447c9f23e571d0b0288ffb364a1..0000000000000000000000000000000000000000
--- a/lib/web/mage/validation/dob-rule.js
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * @category    validation - dob rule
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint jquery:true*/
-define([
-    "jquery",
-    "jquery/validate",
-    "mage/translate"
-], function($){
-    "use strict";
-    
-    $.validator.addMethod(
-        'validate-dob',
-        function (val, element, params) {
-            var dob = $(element).parents('.customer-dob');
-            $(dob).find('.' + this.settings.errorClass).removeClass(this.settings.errorClass);
-            var dayVal = $(dob).find(params[0]).find('input:text').val(),
-                monthVal = $(dob).find(params[1]).find('input:text').val(),
-                yearVal = $(dob).find(params[2]).find('input:text').val(),
-                dobLength = dayVal.length + monthVal.length + yearVal.length;
-            if (params[3] && dobLength === 0) {
-                this.dobErrorMessage = 'This is a required field.';
-                return false;
-            }
-            if (!params[3] && dobLength === 0) {
-                return true;
-            }
-            var day = parseInt(dayVal, 10) || 0,
-                month = parseInt(monthVal, 10) || 0,
-                year = parseInt(yearVal, 10) || 0,
-                curYear = (new Date()).getFullYear();
-            if (!day || !month || !year) {
-                this.dobErrorMessage = 'Please enter a valid full date.';
-                return false;
-            }
-            if (month < 1 || month > 12) {
-                this.dobErrorMessage = 'Please enter a valid month (1-12).';
-                return false;
-            }
-            if (year < 1900 || year > curYear) {
-                this.dobErrorMessage =
-                    $.mage.__('Please enter a valid year (1900-%1).').replace('%1', curYear.toString());
-                return false;
-            }
-            var validateDayInMonth = new Date(year, month, 0).getDate();
-            if (day < 1 || day > validateDayInMonth) {
-                this.dobErrorMessage =
-                    $.mage.__('Please enter a valid day (1-%1).').replace('%1', validateDayInMonth.toString());
-                return false;
-            }
-            var today = new Date(),
-                dateEntered = new Date();
-            dateEntered.setFullYear(year, month - 1, day);
-            if (dateEntered > today) {
-                this.dobErrorMessage = $.mage.__('Please enter a date in the past.');
-                return false;
-            }
-
-            day = day % 10 === day ? '0' + day : day;
-            month = month % 10 === month ? '0' + month : month;
-            $(element).val(month + '/' + day + '/' + year);
-            return true;
-        },
-        function(){
-            return this.dobErrorMessage;
-        }
-    );
-
-});
diff --git a/lib/web/mage/validation/validation.js b/lib/web/mage/validation/validation.js
index f5f18aaee3301be8519d31017752af71ffc3b25a..42013cf2ca1b41c1e6a1eb40b22cb9417f8b9d0a 100644
--- a/lib/web/mage/validation/validation.js
+++ b/lib/web/mage/validation/validation.js
@@ -15,76 +15,127 @@
     }
 }(function ($) {
     "use strict";
-    
-    /**
-     * Validation rule for grouped product, with multiple qty fields,
-     * only one qty needs to have a positive integer
-     */
-    $.validator.addMethod(
-        "validate-grouped-qty",
-        function(value, element, params) {
-            var result = false;
-            var total = 0;
-            $(params).find('input[data-validate*="validate-grouped-qty"]').each(function(i, e) {
-                var val = $(e).val();
-                if (val && val.length > 0) {
-                    result = true;
-                    var valInt = parseInt(val, 10) || 0;
-                    if (valInt >= 0) {
-                        total += valInt;
-                    } else {
-                        result = false;
-                        return result;
-                    }
-                }
-            });
-            return result && total > 0;
-        },
-        'Please specify the quantity of product(s).'
-    );
 
-    $.validator.addMethod(
-        "validate-one-checkbox-required-by-name",
-        function(value, element, params) {
-            var checkedCount = 0;
-            if (element.type === 'checkbox') {
-                $('[name="' + element.name + '"]').each(function() {
-                    if ($(this).is(':checked')) {
-                        checkedCount += 1;
-                        return false;
+    $.each({
+        'validate-grouped-qty': [
+            function (value, element, params) {
+                var result = false;
+                var total = 0;
+                $(params).find('input[data-validate*="validate-grouped-qty"]').each(function (i, e) {
+                    var val = $(e).val();
+                    if (val && val.length > 0) {
+                        result = true;
+                        var valInt = parseInt(val, 10) || 0;
+                        if (valInt >= 0) {
+                            total += valInt;
+                        } else {
+                            result = false;
+                            return result;
+                        }
                     }
                 });
-            }
-            var container = '#' + params;
-            if (checkedCount > 0) {
-                $(container).removeClass('validation-failed');
-                $(container).addClass('validation-passed');
-                return true;
-            } else {
-                $(container).addClass('validation-failed');
-                $(container).removeClass('validation-passed');
+                return result && total > 0;
+            },
+            'Please specify the quantity of product(s).'
+        ],
+        'validate-one-checkbox-required-by-name': [
+            function (value, element, params) {
+                var checkedCount = 0;
+                if (element.type === 'checkbox') {
+                    $('[name="' + element.name + '"]').each(function () {
+                        if ($(this).is(':checked')) {
+                            checkedCount += 1;
+                            return false;
+                        }
+                    });
+                }
+                var container = '#' + params;
+                if (checkedCount > 0) {
+                    $(container).removeClass('validation-failed');
+                    $(container).addClass('validation-passed');
+                    return true;
+                } else {
+                    $(container).addClass('validation-failed');
+                    $(container).removeClass('validation-passed');
+                    return false;
+                }
+            },
+            'Please select one of the options.'
+        ],
+        'validate-date-between': [
+            function (value, element, params) {
+                var minDate = new Date(params[0]),
+                    maxDate = new Date(params[1]),
+                    inputDate = new Date(element.value);
+                minDate.setHours(0);
+                maxDate.setHours(0);
+                if (inputDate >= minDate && inputDate <= maxDate) {
+                    return true;
+                }
+                this.dateBetweenErrorMessage = $.mage.__('Please enter a date between %min and %max.').replace('%min', minDate).replace('%max', maxDate);
                 return false;
+            },
+            function () {
+                return this.dateBetweenErrorMessage;
             }
-        },
-        'Please select one of the options.'
-    );
+        ],
+        'validate-dob': [
+            function (val, element, params) {
+                var dob = $(element).parents('.customer-dob');
+                $(dob).find('.' + this.settings.errorClass).removeClass(this.settings.errorClass);
+                var dayVal = $(dob).find(params[0]).find('input:text').val(),
+                    monthVal = $(dob).find(params[1]).find('input:text').val(),
+                    yearVal = $(dob).find(params[2]).find('input:text').val(),
+                    dobLength = dayVal.length + monthVal.length + yearVal.length;
+                if (params[3] && dobLength === 0) {
+                    this.dobErrorMessage = 'This is a required field.';
+                    return false;
+                }
+                if (!params[3] && dobLength === 0) {
+                    return true;
+                }
+                var day = parseInt(dayVal, 10) || 0,
+                    month = parseInt(monthVal, 10) || 0,
+                    year = parseInt(yearVal, 10) || 0,
+                    curYear = (new Date()).getFullYear();
+                if (!day || !month || !year) {
+                    this.dobErrorMessage = 'Please enter a valid full date.';
+                    return false;
+                }
+                if (month < 1 || month > 12) {
+                    this.dobErrorMessage = 'Please enter a valid month (1-12).';
+                    return false;
+                }
+                if (year < 1900 || year > curYear) {
+                    this.dobErrorMessage =
+                        $.mage.__('Please enter a valid year (1900-%1).').replace('%1', curYear.toString());
+                    return false;
+                }
+                var validateDayInMonth = new Date(year, month, 0).getDate();
+                if (day < 1 || day > validateDayInMonth) {
+                    this.dobErrorMessage =
+                        $.mage.__('Please enter a valid day (1-%1).').replace('%1', validateDayInMonth.toString());
+                    return false;
+                }
+                var today = new Date(),
+                    dateEntered = new Date();
+                dateEntered.setFullYear(year, month - 1, day);
+                if (dateEntered > today) {
+                    this.dobErrorMessage = $.mage.__('Please enter a date in the past.');
+                    return false;
+                }
 
-    $.validator.addMethod(
-        "validate-date-between",
-        function(value, element, params) {
-            var minDate = new Date(params[0]),
-                maxDate = new Date(params[1]),
-                inputDate = new Date(element.value);
-            minDate.setHours(0);
-            maxDate.setHours(0);
-            if (inputDate >= minDate && inputDate <= maxDate) {
+                day = day % 10 === day ? '0' + day : day;
+                month = month % 10 === month ? '0' + month : month;
+                $(element).val(month + '/' + day + '/' + year);
                 return true;
+            },
+            function () {
+                return this.dobErrorMessage;
             }
-            this.dateBetweenErrorMessage = $.mage.__('Please enter a date between %min and %max.').replace('%min', minDate).replace('%max', maxDate);
-            return false;
-        },
-        function(){
-            return this.dateBetweenErrorMessage;
-        }
-    );
-}));
+        ]
+    }, function (i, rule) {
+        rule.unshift(i);
+        $.validator.addMethod.apply($.validator, rule);
+    });
+}));
\ No newline at end of file
diff --git a/lib/web/prototype/debug.js b/lib/web/prototype/debug.js
deleted file mode 100644
index 3d8f338836ec6730ff75f25ce4ae86954f22ed46..0000000000000000000000000000000000000000
--- a/lib/web/prototype/debug.js
+++ /dev/null
@@ -1,137 +0,0 @@
-var debugWindow = null;
-function debug(text, reverse) {
-	if (debugWindow == null)
- 		return;
-
-	time = "-"; //new Date();
-	if (reverse) {
-		$('debug').innerHTML = time + " " + text + "<br>"+ 	$('debug').innerHTML;
-		debugWindow.getContent().scrollTop=0;
-	}
-	else {
-		$('debug').innerHTML +=  time + " " + text + "<br>";
-		debugWindow.getContent().scrollTop=10000; // Far away 
-	}
-}
-
-function hideDebug() {
-	if (debugWindow) {
-		debugWindow.destroy();
-		debugWindow = null;
-	}
-}
-
-function showDebug(bShow) {
- if (debugWindow == null) {
-  debugWindow = new Window('debug_window', {className: 'dialog',width:250, height:100, right:4, bottom:42, zIndex:1000, opacity:1, showEffect: Element.show, resizable: true, title: "Debug"})
-  debugWindow.getContent().innerHTML = "<style>#debug_window .dialog_content {background:#000;}</style> <div id='debug'></div>";
-  date=new Date;
-    date.setMonth(date.getMonth()+3);
-    
-  //debugWindow.setCookie(null, date);
- }
- if( typeof bShow == 'undefined' || bShow)debugWindow.show()
-}
-
-
-function clearDebug() {
-	if (debugWindow == null)
- 		return;
-	$('debug').innerHTML = "";
-}
-
-/**
- * document.createElement convenience wrapper
- *
- * The data parameter is an object that must have the "tag" key, containing
- * a string with the tagname of the element to create.  It can optionally have
- * a "children" key which can be: a string, "data" object, or an array of "data"
- * objects to append to this element as children.  Any other key is taken as an
- * attribute to be applied to this tag.
- *
- * Available under an MIT license:
- * http://www.opensource.org/licenses/mit-license.php
- *
- * @param {Object} data The data representing the element to create
- * @return {Element} The element created.
- */
-function $E(data) {
-  var el;
-  if ('string'==typeof data) {
-      el=document.createTextNode(data);
-  } else {
-    //create the element
-    el=document.createElement(data.tag);
-    delete(data.tag);
-
-    //append the children
-    if ('undefined'!=typeof data.children) {
-      if ('string'==typeof data.children ||'undefined'==typeof data.children.length) {
-        //strings and single elements
-        el.appendChild($E(data.children));
-      } else {
-        //arrays of elements
-        for (var i=0, child=null; 'undefined'!=typeof (child=data.children[i]); i++) {
-            el.appendChild($E(child));
-        }
-      }
-      delete(data.children);
-    }
-
-    //any other data is attributes
-    for (attr in data) {
-      el[attr]=data[attr];
-    }
-  }
-
-  return el;
-}
-
-// FROM Nick Hemsley
-var Debug = {
-	inspectOutput: function (container, within) {
-		within = within || debugWindow.getContent()
-		
-		if (debugWindow == null)
- 			return;
-
-		within.appendChild(container)
-	},
-	
-	inspect: function(object) {
-		var cont = $E({tag: "div", className: "inspector"})
-		Debug.inspectObj(object, cont)
-		debugWindow.getContent().appendChild(cont)
-	},
-	
-	inspectObj: function (object, container) {
-		for (prop in object) {
-			Debug.inspectOutput(Debug.inspectable(object, prop), container)
-		}
-	},
-	
-	inspectable: function(object, prop) {
-		cont = $E({tag: 'div', className: 'inspectable', children: [prop + " value: " + object[prop] ]})
-		cont.toInspect = object[prop]
-		Event.observe(cont, 'click', Debug.inspectClicked, false)
-		return cont
-	},
-	
-	inspectClicked: function(e) {
-		Debug.inspectContained(Event.element(e))
-		Event.stop(e)
-	},
-	
-	inspectContained: function(container) {
-		if (container.opened) {
-			container.parentNode.removeChild(container.opened)
-			delete(container.opened)
-		} else {
-			sibling = container.parentNode.insertBefore($E({tag: "div", className: "child"}), container.nextSibling)
-			if (container.toInspect)
-				Debug.inspectObj(container.toInspect, sibling)
-			container.opened = sibling
-		}
-	}
-}
-var inspect = Debug.inspect;
diff --git a/lib/web/prototype/effects.js b/lib/web/prototype/effects.js
deleted file mode 100644
index 8a4a4f9f67ecdc0047af5e7f4f4acad3ec49c856..0000000000000000000000000000000000000000
--- a/lib/web/prototype/effects.js
+++ /dev/null
@@ -1,1094 +0,0 @@
-// script.aculo.us effects.js v1.7.1_beta1, Mon Mar 12 14:40:50 +0100 2007
-
-// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-// Contributors:
-//  Justin Palmer (http://encytemedia.com/)
-//  Mark Pilgrim (http://diveintomark.org/)
-//  Martin Bialasinki
-// 
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/ 
-
-// converts rgb() and #xxx to #xxxxxx format,  
-// returns self (or first argument) if not convertable  
-String.prototype.parseColor = function() {  
-  var color = '#';
-  if(this.slice(0,4) == 'rgb(') {  
-    var cols = this.slice(4,this.length-1).split(',');  
-    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
-  } else {  
-    if(this.slice(0,1) == '#') {  
-      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
-      if(this.length==7) color = this.toLowerCase();  
-    }  
-  }  
-  return(color.length==7 ? color : (arguments[0] || this));  
-}
-
-/*--------------------------------------------------------------------------*/
-
-Element.collectTextNodes = function(element) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
-  }).flatten().join('');
-}
-
-Element.collectTextNodesIgnoreClass = function(element, className) {  
-  return $A($(element).childNodes).collect( function(node) {
-    return (node.nodeType==3 ? node.nodeValue : 
-      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
-        Element.collectTextNodesIgnoreClass(node, className) : ''));
-  }).flatten().join('');
-}
-
-Element.setContentZoom = function(element, percent) {
-  element = $(element);  
-  element.setStyle({fontSize: (percent/100) + 'em'});   
-  if(Prototype.Browser.WebKit) window.scrollBy(0,0);
-  return element;
-}
-
-Element.getInlineOpacity = function(element){
-  return $(element).style.opacity || '';
-}
-
-Element.forceRerendering = function(element) {
-  try {
-    element = $(element);
-    var n = document.createTextNode(' ');
-    element.appendChild(n);
-    element.removeChild(n);
-  } catch(e) { }
-};
-
-/*--------------------------------------------------------------------------*/
-
-Array.prototype.call = function() {
-  var args = arguments;
-  this.each(function(f){ f.apply(this, args) });
-}
-
-/*--------------------------------------------------------------------------*/
-
-var Effect = {
-  _elementDoesNotExistError: {
-    name: 'ElementDoesNotExistError',
-    message: 'The specified DOM element does not exist, but is required for this effect to operate'
-  },
-  tagifyText: function(element) {
-    if(typeof Builder == 'undefined')
-      throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
-      
-    var tagifyStyle = 'position:relative';
-    if(Prototype.Browser.IE) tagifyStyle += ';zoom:1';
-    
-    element = $(element);
-    $A(element.childNodes).each( function(child) {
-      if(child.nodeType==3) {
-        child.nodeValue.toArray().each( function(character) {
-          element.insertBefore(
-            Builder.node('span',{style: tagifyStyle},
-              character == ' ' ? String.fromCharCode(160) : character), 
-              child);
-        });
-        Element.remove(child);
-      }
-    });
-  },
-  multiple: function(element, effect) {
-    var elements;
-    if(((typeof element == 'object') || 
-        (typeof element == 'function')) && 
-       (element.length))
-      elements = element;
-    else
-      elements = $(element).childNodes;
-      
-    var options = Object.extend({
-      speed: 0.1,
-      delay: 0.0
-    }, arguments[2] || {});
-    var masterDelay = options.delay;
-
-    $A(elements).each( function(element, index) {
-      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
-    });
-  },
-  PAIRS: {
-    'slide':  ['SlideDown','SlideUp'],
-    'blind':  ['BlindDown','BlindUp'],
-    'appear': ['Appear','Fade']
-  },
-  toggle: function(element, effect) {
-    element = $(element);
-    effect = (effect || 'appear').toLowerCase();
-    var options = Object.extend({
-      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
-    }, arguments[2] || {});
-    Effect[element.visible() ? 
-      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
-  }
-};
-
-var Effect2 = Effect; // deprecated
-
-/* ------------- transitions ------------- */
-
-Effect.Transitions = {
-  linear: Prototype.K,
-  sinoidal: function(pos) {
-    return (-Math.cos(pos*Math.PI)/2) + 0.5;
-  },
-  reverse: function(pos) {
-    return 1-pos;
-  },
-  flicker: function(pos) {
-    var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
-    return (pos > 1 ? 1 : pos);
-  },
-  wobble: function(pos) {
-    return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
-  },
-  pulse: function(pos, pulses) { 
-    pulses = pulses || 5; 
-    return (
-      Math.round((pos % (1/pulses)) * pulses) == 0 ? 
-            ((pos * pulses * 2) - Math.floor(pos * pulses * 2)) : 
-        1 - ((pos * pulses * 2) - Math.floor(pos * pulses * 2))
-      );
-  },
-  none: function(pos) {
-    return 0;
-  },
-  full: function(pos) {
-    return 1;
-  }
-};
-
-/* ------------- core effects ------------- */
-
-Effect.ScopedQueue = Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
-  initialize: function() {
-    this.effects  = [];
-    this.interval = null;    
-  },
-  _each: function(iterator) {
-    this.effects._each(iterator);
-  },
-  add: function(effect) {
-    var timestamp = new Date().getTime();
-    
-    var position = (typeof effect.options.queue == 'string') ? 
-      effect.options.queue : effect.options.queue.position;
-    
-    switch(position) {
-      case 'front':
-        // move unstarted effects after this effect  
-        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
-            e.startOn  += effect.finishOn;
-            e.finishOn += effect.finishOn;
-          });
-        break;
-      case 'with-last':
-        timestamp = this.effects.pluck('startOn').max() || timestamp;
-        break;
-      case 'end':
-        // start effect after last queued effect has finished
-        timestamp = this.effects.pluck('finishOn').max() || timestamp;
-        break;
-    }
-    
-    effect.startOn  += timestamp;
-    effect.finishOn += timestamp;
-
-    if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
-      this.effects.push(effect);
-    
-    if(!this.interval)
-      this.interval = setInterval(this.loop.bind(this), 15);
-  },
-  remove: function(effect) {
-    this.effects = this.effects.reject(function(e) { return e==effect });
-    if(this.effects.length == 0) {
-      clearInterval(this.interval);
-      this.interval = null;
-    }
-  },
-  loop: function() {
-    var timePos = new Date().getTime();
-    for(var i=0, len=this.effects.length;i<len;i++) 
-      this.effects[i] && this.effects[i].loop(timePos);
-  }
-});
-
-Effect.Queues = {
-  instances: $H(),
-  get: function(queueName) {
-    if(typeof queueName != 'string') return queueName;
-    
-    if(!this.instances[queueName])
-      this.instances[queueName] = new Effect.ScopedQueue();
-      
-    return this.instances[queueName];
-  }
-}
-Effect.Queue = Effect.Queues.get('global');
-
-Effect.DefaultOptions = {
-  transition: Effect.Transitions.sinoidal,
-  duration:   1.0,   // seconds
-  fps:        100,   // 100= assume 66fps max.
-  sync:       false, // true for combining
-  from:       0.0,
-  to:         1.0,
-  delay:      0.0,
-  queue:      'parallel'
-}
-
-Effect.Base = function() {};
-Effect.Base.prototype = {
-  position: null,
-  start: function(options) {
-    function codeForEvent(options,eventName){
-      return (
-        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
-        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
-      );
-    }
-    if(options.transition === false) options.transition = Effect.Transitions.linear;
-    this.options      = Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
-    this.currentFrame = 0;
-    this.state        = 'idle';
-    this.startOn      = this.options.delay*1000;
-    this.finishOn     = this.startOn+(this.options.duration*1000);
-    this.fromToDelta  = this.options.to-this.options.from;
-    this.totalTime    = this.finishOn-this.startOn;
-    this.totalFrames  = this.options.fps*this.options.duration;
-    
-    eval('this.render = function(pos){ '+
-      'if(this.state=="idle"){this.state="running";'+
-      codeForEvent(options,'beforeSetup')+
-      (this.setup ? 'this.setup();':'')+ 
-      codeForEvent(options,'afterSetup')+
-      '};if(this.state=="running"){'+
-      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
-      'this.position=pos;'+
-      codeForEvent(options,'beforeUpdate')+
-      (this.update ? 'this.update(pos);':'')+
-      codeForEvent(options,'afterUpdate')+
-      '}}');
-    
-    this.event('beforeStart');
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).add(this);
-  },
-  loop: function(timePos) {
-    if(timePos >= this.startOn) {
-      if(timePos >= this.finishOn) {
-        this.render(1.0);
-        this.cancel();
-        this.event('beforeFinish');
-        if(this.finish) this.finish(); 
-        this.event('afterFinish');
-        return;  
-      }
-      var pos   = (timePos - this.startOn) / this.totalTime,
-          frame = Math.round(pos * this.totalFrames);
-      if(frame > this.currentFrame) {
-        this.render(pos);
-        this.currentFrame = frame;
-      }
-    }
-  },
-  cancel: function() {
-    if(!this.options.sync)
-      Effect.Queues.get(typeof this.options.queue == 'string' ? 
-        'global' : this.options.queue.scope).remove(this);
-    this.state = 'finished';
-  },
-  event: function(eventName) {
-    if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
-    if(this.options[eventName]) this.options[eventName](this);
-  },
-  inspect: function() {
-    var data = $H();
-    for(property in this)
-      if(typeof this[property] != 'function') data[property] = this[property];
-    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
-  }
-}
-
-Effect.Parallel = Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
-  initialize: function(effects) {
-    this.effects = effects || [];
-    this.start(arguments[1]);
-  },
-  update: function(position) {
-    this.effects.invoke('render', position);
-  },
-  finish: function(position) {
-    this.effects.each( function(effect) {
-      effect.render(1.0);
-      effect.cancel();
-      effect.event('beforeFinish');
-      if(effect.finish) effect.finish(position);
-      effect.event('afterFinish');
-    });
-  }
-});
-
-Effect.Event = Class.create();
-Object.extend(Object.extend(Effect.Event.prototype, Effect.Base.prototype), {
-  initialize: function() {
-    var options = Object.extend({
-      duration: 0
-    }, arguments[0] || {});
-    this.start(options);
-  },
-  update: Prototype.emptyFunction
-});
-
-Effect.Opacity = Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    // make this work on IE on elements without 'layout'
-    if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
-      this.element.setStyle({zoom: 1});
-    var options = Object.extend({
-      from: this.element.getOpacity() || 0.0,
-      to:   1.0
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  update: function(position) {
-    this.element.setOpacity(position);
-  }
-});
-
-Effect.Move = Class.create();
-Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      x:    0,
-      y:    0,
-      mode: 'relative'
-    }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Bug in Opera: Opera returns the "real" position of a static element or
-    // relative element that does not have top/left explicitly set.
-    // ==> Always set top and left for position relative elements in your stylesheets 
-    // (to 0 if you do not need them) 
-    this.element.makePositioned();
-    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
-    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
-    if(this.options.mode == 'absolute') {
-      // absolute movement, so we need to calc deltaX and deltaY
-      this.options.x = this.options.x - this.originalLeft;
-      this.options.y = this.options.y - this.originalTop;
-    }
-  },
-  update: function(position) {
-    this.element.setStyle({
-      left: Math.round(this.options.x  * position + this.originalLeft) + 'px',
-      top:  Math.round(this.options.y  * position + this.originalTop)  + 'px'
-    });
-  }
-});
-
-// for backwards compatibility
-Effect.MoveBy = function(element, toTop, toLeft) {
-  return new Effect.Move(element, 
-    Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
-};
-
-Effect.Scale = Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
-  initialize: function(element, percent) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      scaleX: true,
-      scaleY: true,
-      scaleContent: true,
-      scaleFromCenter: false,
-      scaleMode: 'box',        // 'box' or 'contents' or {} with provided values
-      scaleFrom: 100.0,
-      scaleTo:   percent
-    }, arguments[2] || {});
-    this.start(options);
-  },
-  setup: function() {
-    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
-    this.elementPositioning = this.element.getStyle('position');
-    
-    this.originalStyle = {};
-    ['top','left','width','height','fontSize'].each( function(k) {
-      this.originalStyle[k] = this.element.style[k];
-    }.bind(this));
-      
-    this.originalTop  = this.element.offsetTop;
-    this.originalLeft = this.element.offsetLeft;
-    
-    var fontSize = this.element.getStyle('font-size') || '100%';
-    ['em','px','%','pt'].each( function(fontSizeType) {
-      if(fontSize.indexOf(fontSizeType)>0) {
-        this.fontSize     = parseFloat(fontSize);
-        this.fontSizeType = fontSizeType;
-      }
-    }.bind(this));
-    
-    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
-    
-    this.dims = null;
-    if(this.options.scaleMode=='box')
-      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
-    if(/^content/.test(this.options.scaleMode))
-      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
-    if(!this.dims)
-      this.dims = [this.options.scaleMode.originalHeight,
-                   this.options.scaleMode.originalWidth];
-  },
-  update: function(position) {
-    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
-    if(this.options.scaleContent && this.fontSize)
-      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
-    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
-  },
-  finish: function(position) {
-    if(this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
-  },
-  setDimensions: function(height, width) {
-    var d = {};
-    if(this.options.scaleX) d.width = Math.round(width) + 'px';
-    if(this.options.scaleY) d.height = Math.round(height) + 'px';
-    if(this.options.scaleFromCenter) {
-      var topd  = (height - this.dims[0])/2;
-      var leftd = (width  - this.dims[1])/2;
-      if(this.elementPositioning == 'absolute') {
-        if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
-        if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
-      } else {
-        if(this.options.scaleY) d.top = -topd + 'px';
-        if(this.options.scaleX) d.left = -leftd + 'px';
-      }
-    }
-    this.element.setStyle(d);
-  }
-});
-
-Effect.Highlight = Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
-    this.start(options);
-  },
-  setup: function() {
-    // Prevent executing on elements not in the layout flow
-    if(this.element.getStyle('display')=='none') { this.cancel(); return; }
-    // Disable background image during the effect
-    this.oldStyle = {};
-    if (!this.options.keepBackgroundImage) {
-      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
-      this.element.setStyle({backgroundImage: 'none'});
-    }
-    if(!this.options.endcolor)
-      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
-    if(!this.options.restorecolor)
-      this.options.restorecolor = this.element.getStyle('background-color');
-    // init color calculations
-    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
-    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
-  },
-  update: function(position) {
-    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
-      return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
-  },
-  finish: function() {
-    this.element.setStyle(Object.extend(this.oldStyle, {
-      backgroundColor: this.options.restorecolor
-    }));
-  }
-});
-
-Effect.ScrollTo = Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    this.start(arguments[1] || {});
-  },
-  setup: function() {
-    Position.prepare();
-    var offsets = Position.cumulativeOffset(this.element);
-    if(this.options.offset) offsets[1] += this.options.offset;
-    var max = window.innerHeight ? 
-      window.height - window.innerHeight :
-      document.body.scrollHeight - 
-        (document.documentElement.clientHeight ? 
-          document.documentElement.clientHeight : document.body.clientHeight);
-    this.scrollStart = Position.deltaY;
-    this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
-  },
-  update: function(position) {
-    Position.prepare();
-    window.scrollTo(Position.deltaX, 
-      this.scrollStart + (position*this.delta));
-  }
-});
-
-/* ------------- combination effects ------------- */
-
-Effect.Fade = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  var options = Object.extend({
-  from: element.getOpacity() || 1.0,
-  to:   0.0,
-  afterFinishInternal: function(effect) { 
-    if(effect.options.to!=0) return;
-    effect.element.hide().setStyle({opacity: oldOpacity}); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Appear = function(element) {
-  element = $(element);
-  var options = Object.extend({
-  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
-  to:   1.0,
-  // force Safari to render floated elements properly
-  afterFinishInternal: function(effect) {
-    effect.element.forceRerendering();
-  },
-  beforeSetup: function(effect) {
-    effect.element.setOpacity(effect.options.from).show(); 
-  }}, arguments[1] || {});
-  return new Effect.Opacity(element,options);
-}
-
-Effect.Puff = function(element) {
-  element = $(element);
-  var oldStyle = { 
-    opacity: element.getInlineOpacity(), 
-    position: element.getStyle('position'),
-    top:  element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height
-  };
-  return new Effect.Parallel(
-   [ new Effect.Scale(element, 200, 
-      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
-     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
-     Object.extend({ duration: 1.0, 
-      beforeSetupInternal: function(effect) {
-        Position.absolutize(effect.effects[0].element)
-      },
-      afterFinishInternal: function(effect) {
-         effect.effects[0].element.hide().setStyle(oldStyle); }
-     }, arguments[1] || {})
-   );
-}
-
-Effect.BlindUp = function(element) {
-  element = $(element);
-  element.makeClipping();
-  return new Effect.Scale(element, 0,
-    Object.extend({ scaleContent: false, 
-      scaleX: false, 
-      restoreAfterFinish: true,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping();
-      } 
-    }, arguments[1] || {})
-  );
-}
-
-Effect.BlindDown = function(element) {
-  element = $(element);
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false,
-    scaleFrom: 0,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping();
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.SwitchOff = function(element) {
-  element = $(element);
-  var oldOpacity = element.getInlineOpacity();
-  return new Effect.Appear(element, Object.extend({
-    duration: 0.4,
-    from: 0,
-    transition: Effect.Transitions.flicker,
-    afterFinishInternal: function(effect) {
-      new Effect.Scale(effect.element, 1, { 
-        duration: 0.3, scaleFromCenter: true,
-        scaleX: false, scaleContent: false, restoreAfterFinish: true,
-        beforeSetup: function(effect) { 
-          effect.element.makePositioned().makeClipping();
-        },
-        afterFinishInternal: function(effect) {
-          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
-        }
-      })
-    }
-  }, arguments[1] || {}));
-}
-
-Effect.DropOut = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left'),
-    opacity: element.getInlineOpacity() };
-  return new Effect.Parallel(
-    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
-      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
-    Object.extend(
-      { duration: 0.5,
-        beforeSetup: function(effect) {
-          effect.effects[0].element.makePositioned(); 
-        },
-        afterFinishInternal: function(effect) {
-          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
-        } 
-      }, arguments[1] || {}));
-}
-
-Effect.Shake = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.getStyle('top'),
-    left: element.getStyle('left') };
-    return new Effect.Move(element, 
-      { x:  20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x:  40, y: 0, duration: 0.1,  afterFinishInternal: function(effect) {
-    new Effect.Move(effect.element,
-      { x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
-        effect.element.undoPositioned().setStyle(oldStyle);
-  }}) }}) }}) }}) }}) }});
-}
-
-Effect.SlideDown = function(element) {
-  element = $(element).cleanWhitespace();
-  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
-  var oldInnerBottom = element.down().getStyle('bottom');
-  var elementDimensions = element.getDimensions();
-  return new Effect.Scale(element, 100, Object.extend({ 
-    scaleContent: false, 
-    scaleX: false, 
-    scaleFrom: window.opera ? 0 : 1,
-    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
-    restoreAfterFinish: true,
-    afterSetup: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
-    },
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.undoClipping().undoPositioned();
-      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
-    }, arguments[1] || {})
-  );
-}
-
-Effect.SlideUp = function(element) {
-  element = $(element).cleanWhitespace();
-  var oldInnerBottom = element.down().getStyle('bottom');
-  return new Effect.Scale(element, window.opera ? 0 : 1,
-   Object.extend({ scaleContent: false, 
-    scaleX: false, 
-    scaleMode: 'box',
-    scaleFrom: 100,
-    restoreAfterFinish: true,
-    beforeStartInternal: function(effect) {
-      effect.element.makePositioned();
-      effect.element.down().makePositioned();
-      if(window.opera) effect.element.setStyle({top: ''});
-      effect.element.makeClipping().show();
-    },  
-    afterUpdateInternal: function(effect) {
-      effect.element.down().setStyle({bottom:
-        (effect.dims[0] - effect.element.clientHeight) + 'px' });
-    },
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping().undoPositioned().setStyle({bottom: oldInnerBottom});
-      effect.element.down().undoPositioned();
-    }
-   }, arguments[1] || {})
-  );
-}
-
-// Bug in opera makes the TD containing this element expand for a instance after finish 
-Effect.Squish = function(element) {
-  return new Effect.Scale(element, window.opera ? 1 : 0, { 
-    restoreAfterFinish: true,
-    beforeSetup: function(effect) {
-      effect.element.makeClipping(); 
-    },  
-    afterFinishInternal: function(effect) {
-      effect.element.hide().undoClipping(); 
-    }
-  });
-}
-
-Effect.Grow = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.full
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();    
-  var initialMoveX, initialMoveY;
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      initialMoveX = initialMoveY = moveX = moveY = 0; 
-      break;
-    case 'top-right':
-      initialMoveX = dims.width;
-      initialMoveY = moveY = 0;
-      moveX = -dims.width;
-      break;
-    case 'bottom-left':
-      initialMoveX = moveX = 0;
-      initialMoveY = dims.height;
-      moveY = -dims.height;
-      break;
-    case 'bottom-right':
-      initialMoveX = dims.width;
-      initialMoveY = dims.height;
-      moveX = -dims.width;
-      moveY = -dims.height;
-      break;
-    case 'center':
-      initialMoveX = dims.width / 2;
-      initialMoveY = dims.height / 2;
-      moveX = -dims.width / 2;
-      moveY = -dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Move(element, {
-    x: initialMoveX,
-    y: initialMoveY,
-    duration: 0.01, 
-    beforeSetup: function(effect) {
-      effect.element.hide().makeClipping().makePositioned();
-    },
-    afterFinishInternal: function(effect) {
-      new Effect.Parallel(
-        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
-          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
-          new Effect.Scale(effect.element, 100, {
-            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
-            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
-        ], Object.extend({
-             beforeSetup: function(effect) {
-               effect.effects[0].element.setStyle({height: '0px'}).show(); 
-             },
-             afterFinishInternal: function(effect) {
-               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
-             }
-           }, options)
-      )
-    }
-  });
-}
-
-Effect.Shrink = function(element) {
-  element = $(element);
-  var options = Object.extend({
-    direction: 'center',
-    moveTransition: Effect.Transitions.sinoidal,
-    scaleTransition: Effect.Transitions.sinoidal,
-    opacityTransition: Effect.Transitions.none
-  }, arguments[1] || {});
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    height: element.style.height,
-    width: element.style.width,
-    opacity: element.getInlineOpacity() };
-
-  var dims = element.getDimensions();
-  var moveX, moveY;
-  
-  switch (options.direction) {
-    case 'top-left':
-      moveX = moveY = 0;
-      break;
-    case 'top-right':
-      moveX = dims.width;
-      moveY = 0;
-      break;
-    case 'bottom-left':
-      moveX = 0;
-      moveY = dims.height;
-      break;
-    case 'bottom-right':
-      moveX = dims.width;
-      moveY = dims.height;
-      break;
-    case 'center':  
-      moveX = dims.width / 2;
-      moveY = dims.height / 2;
-      break;
-  }
-  
-  return new Effect.Parallel(
-    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
-      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
-      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
-    ], Object.extend({            
-         beforeStartInternal: function(effect) {
-           effect.effects[0].element.makePositioned().makeClipping(); 
-         },
-         afterFinishInternal: function(effect) {
-           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
-       }, options)
-  );
-}
-
-Effect.Pulsate = function(element) {
-  element = $(element);
-  var options    = arguments[1] || {};
-  var oldOpacity = element.getInlineOpacity();
-  var transition = options.transition || Effect.Transitions.sinoidal;
-  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
-  reverser.bind(transition);
-  return new Effect.Opacity(element, 
-    Object.extend(Object.extend({  duration: 2.0, from: 0,
-      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
-    }, options), {transition: reverser}));
-}
-
-Effect.Fold = function(element) {
-  element = $(element);
-  var oldStyle = {
-    top: element.style.top,
-    left: element.style.left,
-    width: element.style.width,
-    height: element.style.height };
-  element.makeClipping();
-  return new Effect.Scale(element, 5, Object.extend({   
-    scaleContent: false,
-    scaleX: false,
-    afterFinishInternal: function(effect) {
-    new Effect.Scale(element, 1, { 
-      scaleContent: false, 
-      scaleY: false,
-      afterFinishInternal: function(effect) {
-        effect.element.hide().undoClipping().setStyle(oldStyle);
-      } });
-  }}, arguments[1] || {}));
-};
-
-Effect.Morph = Class.create();
-Object.extend(Object.extend(Effect.Morph.prototype, Effect.Base.prototype), {
-  initialize: function(element) {
-    this.element = $(element);
-    if(!this.element) throw(Effect._elementDoesNotExistError);
-    var options = Object.extend({
-      style: {}
-    }, arguments[1] || {});
-    if (typeof options.style == 'string') {
-      if(options.style.indexOf(':') == -1) {
-        var cssText = '', selector = '.' + options.style;
-        $A(document.styleSheets).reverse().each(function(styleSheet) {
-          if (styleSheet.cssRules) cssRules = styleSheet.cssRules;
-          else if (styleSheet.rules) cssRules = styleSheet.rules;
-          $A(cssRules).reverse().each(function(rule) {
-            if (selector == rule.selectorText) {
-              cssText = rule.style.cssText;
-              throw $break;
-            }
-          });
-          if (cssText) throw $break;
-        });
-        this.style = cssText.parseStyle();
-        options.afterFinishInternal = function(effect){
-          effect.element.addClassName(effect.options.style);
-          effect.transforms.each(function(transform) {
-            if(transform.style != 'opacity')
-              effect.element.style[transform.style] = '';
-          });
-        }
-      } else this.style = options.style.parseStyle();
-    } else this.style = $H(options.style)
-    this.start(options);
-  },
-  setup: function(){
-    function parseColor(color){
-      if(!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
-      color = color.parseColor();
-      return $R(0,2).map(function(i){
-        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
-      });
-    }
-    this.transforms = this.style.map(function(pair){
-      var property = pair[0], value = pair[1], unit = null;
-
-      if(value.parseColor('#zzzzzz') != '#zzzzzz') {
-        value = value.parseColor();
-        unit  = 'color';
-      } else if(property == 'opacity') {
-        value = parseFloat(value);
-        if(Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
-          this.element.setStyle({zoom: 1});
-      } else if(Element.CSS_LENGTH.test(value)) {
-          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
-          value = parseFloat(components[1]);
-          unit = (components.length == 3) ? components[2] : null;
-      }
-
-      var originalValue = this.element.getStyle(property);
-      return { 
-        style: property.camelize(), 
-        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
-        targetValue: unit=='color' ? parseColor(value) : value,
-        unit: unit
-      };
-    }.bind(this)).reject(function(transform){
-      return (
-        (transform.originalValue == transform.targetValue) ||
-        (
-          transform.unit != 'color' &&
-          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
-        )
-      )
-    });
-  },
-  update: function(position) {
-    var style = {}, transform, i = this.transforms.length;
-    while(i--)
-      style[(transform = this.transforms[i]).style] = 
-        transform.unit=='color' ? '#'+
-          (Math.round(transform.originalValue[0]+
-            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
-          (Math.round(transform.originalValue[1]+
-            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
-          (Math.round(transform.originalValue[2]+
-            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
-        transform.originalValue + Math.round(
-          ((transform.targetValue - transform.originalValue) * position) * 1000)/1000 + transform.unit;
-    this.element.setStyle(style, true);
-  }
-});
-
-Effect.Transform = Class.create();
-Object.extend(Effect.Transform.prototype, {
-  initialize: function(tracks){
-    this.tracks  = [];
-    this.options = arguments[1] || {};
-    this.addTracks(tracks);
-  },
-  addTracks: function(tracks){
-    tracks.each(function(track){
-      var data = $H(track).values().first();
-      this.tracks.push($H({
-        ids:     $H(track).keys().first(),
-        effect:  Effect.Morph,
-        options: { style: data }
-      }));
-    }.bind(this));
-    return this;
-  },
-  play: function(){
-    return new Effect.Parallel(
-      this.tracks.map(function(track){
-        var elements = [$(track.ids) || $$(track.ids)].flatten();
-        return elements.map(function(e){ return new track.effect(e, Object.extend({ sync:true }, track.options)) });
-      }).flatten(),
-      this.options
-    );
-  }
-});
-
-Element.CSS_PROPERTIES = $w(
-  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
-  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
-  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
-  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
-  'fontSize fontWeight height left letterSpacing lineHeight ' +
-  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
-  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
-  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
-  'right textIndent top width wordSpacing zIndex');
-  
-Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
-
-String.prototype.parseStyle = function(){
-  var element = document.createElement('div');
-  element.innerHTML = '<div style="' + this + '"></div>';
-  var style = element.childNodes[0].style, styleRules = $H();
-  
-  Element.CSS_PROPERTIES.each(function(property){
-    if(style[property]) styleRules[property] = style[property]; 
-  });
-  if(Prototype.Browser.IE && this.indexOf('opacity') > -1) {
-    styleRules.opacity = this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1];
-  }
-  return styleRules;
-};
-
-Element.morph = function(element, style) {
-  new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || {}));
-  return element;
-};
-
-['getInlineOpacity','forceRerendering','setContentZoom',
- 'collectTextNodes','collectTextNodesIgnoreClass','morph'].each( 
-  function(f) { Element.Methods[f] = Element[f]; }
-);
-
-Element.Methods.visualEffect = function(element, effect, options) {
-  s = effect.dasherize().camelize();
-  effect_class = s.charAt(0).toUpperCase() + s.substring(1);
-  new Effect[effect_class](element, options);
-  return $(element);
-};
-
-Element.addMethods();
\ No newline at end of file
diff --git a/lib/web/prototype/extended_debug.js b/lib/web/prototype/extended_debug.js
deleted file mode 100644
index 2b935b1b7dda57ff3203eb4673961fff1466304b..0000000000000000000000000000000000000000
--- a/lib/web/prototype/extended_debug.js
+++ /dev/null
@@ -1,113 +0,0 @@
-var commandHistory;
-var historyIndex;
-
-function showExtendedDebug() {
-	if (debugWindow != null) {
-	  hideDebug();
-  }
-  
-	if (debugWindow == null) {
-	 	commandHistory = new Array();
-	 	historyIndex = 0;
-		
-		debugWindow = new Window('debug_window', {className: 'dialog',width:250, height:100, right:4, minWidth:250, bottom:42, zIndex:1000, opacity:1, showEffect: Element.show, resizable: true, title: "Debug"})
-		debugWindow.getContent().innerHTML = "<style>#debug_window .dialog_content {background:#000;}</style> <div font='monaco' id='debug' style='padding:3px;color:#0F0;font-family:monaco'></div>";
-
-		//create hourglass icon and attach events to it.
-		var cont = "<div id=\"debug_window_inspect\" style=\"width: 15px; height: 15px; background: transparent url(themes/default/inspect.gif) no-repeat 0 0; position:absolute; top:5px; left:70px; cursor:pointer; z-index:3000;\"></div>";
-
-		new Insertion.After('debug_window_maximize', cont);
-		Event.observe('debug_window_inspect', 'click', enterInspectionMode, false);
-
-		//create command text box
-		cont = "Eval:<input id=\"debug_window_command\" type=\"textbox\" style=\"width:150px; height: 12px; color: black;\">"
-		debugWindow.setStatusBar(cont);
-
-		Event.observe('debug_window_command', 'mousedown', donothing);
-		Event.observe('debug_window_command', 'keypress', evalJS, false);
-	}
-	debugWindow.show();		
-}
-
-function donothing(evt){
-		Field.activate('debug_window_command');
-		return false;
-}
-
-function evalJS(evt){
-	if(evt.keyCode == Event.KEY_RETURN){
-		var js = $F('debug_window_command');
-		try{
-			var ret = eval(js);
-			if(ret != null)
-				debug(ret);
-		}catch(e){
-			debug(e);
-		}
-		$('debug_window_command').value = '';
-
-		Field.activate('debug_window_command');
-		commandHistory.push(js);
-		historyIndex = 0;
-	}
-
-	if(evt.keyCode == Event.KEY_UP){
-		if(commandHistory.length > historyIndex){
-			historyIndex++;
-			var js = commandHistory[commandHistory.length-historyIndex];
-			$('debug_window_command').value = js;
-			Event.stop(evt);
-			Field.activate('debug_window_command');
-		}
-	}
-
-	if(evt.keyCode == Event.KEY_DOWN){
-		if(commandHistory.length >= historyIndex && historyIndex > 1){
-			historyIndex--;
-			var js = commandHistory[commandHistory.length-historyIndex];
-			$('debug_window_command').value = js;
-			Event.stop(evt);
-			Field.activate('debug_window_command');
-		}
-	}	
-}
-
-function enterInspectionMode(evt){
-	//stop observing magnifying glass
-	Event.stopObserving('debug_window_inspect', 'click', enterInspectionMode, false);
-	//change pointer
-	document.body.style.cursor='help';
-	//start observing mouse clicks
-	Event.observe(window, 'click', inspectItem, false);		
-}
-
-function inspectItem(evt){
-	// the element that triggered the event
-	var element = Event.element(evt);
-	if(element.id!="debug_window_inspect"){
-		clearDebug()
-		//change pointer
-		document.body.style.cursor='default';
-		debug(element.id);
-		inspect(element);
-		//stop observing mouse clicks
-		Event.stopObserving(window, 'click', inspectItem, false);
-		//alert('doing something');
-		//start observing mag
-		Event.observe('debug_window_inspect', 'click', enterInspectionMode, false);
-	}
-}
-
-function clearDebug() {
-	var win = $('debug');
-	if (win == null)
-		return;
-		
-	win.innerHTML=" ";
-	//clear inspections too
-	var divs = document.getElementsByClassName('inspector');
-	divs.each(function(div){
-		Element.remove(div);
-	});
-}
-
diff --git a/lib/web/prototype/window_effects.js b/lib/web/prototype/window_effects.js
deleted file mode 100644
index 6ad73cc052e80ee383e45226f8135da959bc0a54..0000000000000000000000000000000000000000
--- a/lib/web/prototype/window_effects.js
+++ /dev/null
@@ -1,157 +0,0 @@
-Effect.ResizeWindow = Class.create();
-Object.extend(Object.extend(Effect.ResizeWindow.prototype, Effect.Base.prototype), {
-  initialize: function(win, top, left, width, height) {
-    this.window = win;
-    this.window.resizing = true;
-    
-    var size = win.getSize();
-    this.initWidth    = parseFloat(size.width);
-    this.initHeight   = parseFloat(size.height);
-
-    var location = win.getLocation();
-    this.initTop    = parseFloat(location.top);
-    this.initLeft   = parseFloat(location.left);
-
-    this.width    = width != null  ? parseFloat(width)  : this.initWidth;
-    this.height   = height != null ? parseFloat(height) : this.initHeight;
-    this.top      = top != null    ? parseFloat(top)    : this.initTop;
-    this.left     = left != null   ? parseFloat(left)   : this.initLeft;
-
-    this.dx     = this.left   - this.initLeft;
-    this.dy     = this.top    - this.initTop;
-    this.dw     = this.width  - this.initWidth;
-    this.dh     = this.height - this.initHeight;
-    
-    this.r2      = $(this.window.getId() + "_row2");
-    this.content = $(this.window.getId() + "_content");
-        
-    this.contentOverflow = this.content.getStyle("overflow") || "auto";
-    this.content.setStyle({overflow: "hidden"});
-    
-    // Wired mode
-    if (this.window.options.wiredDrag) {
-      this.window.currentDrag = win._createWiredElement();
-      this.window.currentDrag.show();
-      this.window.element.hide();
-    }
-
-    this.start(arguments[5]);
-  },
-  
-  update: function(position) {
-    var width  = Math.floor(this.initWidth  + this.dw * position);
-    var height = Math.floor(this.initHeight + this.dh * position);
-    var top    = Math.floor(this.initTop    + this.dy * position);
-    var left   = Math.floor(this.initLeft   + this.dx * position);
-
-    if (window.ie) {
-      if (Math.floor(height) == 0)  
-        this.r2.hide();
-      else if (Math.floor(height) >1)  
-        this.r2.show();
-    }      
-    this.r2.setStyle({height: height});
-    this.window.setSize(width, height);
-    this.window.setLocation(top, left);
-  },
-  
-  finish: function(position) {
-    // Wired mode
-    if (this.window.options.wiredDrag) {
-      this.window._hideWiredElement();
-      this.window.element.show();
-    }
-
-    this.window.setSize(this.width, this.height);
-    this.window.setLocation(this.top, this.left);
-    this.r2.setStyle({height: null});
-    
-    this.content.setStyle({overflow: this.contentOverflow});
-      
-    this.window.resizing = false;
-  }
-});
-
-Effect.ModalSlideDown = function(element) {
-  var windowScroll = WindowUtilities.getWindowScroll();    
-  var height = element.getStyle("height");  
-  element.setStyle({top: - (parseFloat(height) - windowScroll.top) + "px"});
-  
-  element.show();
-  return new Effect.Move(element, Object.extend({ x: 0, y: parseFloat(height) }, arguments[1] || {}));
-};
-
-
-Effect.ModalSlideUp = function(element) {
-  var height = element.getStyle("height");
-  return new Effect.Move(element, Object.extend({ x: 0, y: -parseFloat(height) }, arguments[1] || {}));
-};
-
-PopupEffect = Class.create();
-PopupEffect.prototype = {    
-  initialize: function(htmlElement) {
-    this.html = $(htmlElement);      
-    this.options = Object.extend({className: "popup_effect", duration: 0.4}, arguments[1] || {});
-    
-  },
-  show: function(element, options) { 
-    var position = Position.cumulativeOffset(this.html);      
-    var size = this.html.getDimensions();
-    var bounds = element.win.getBounds();
-    this.window =  element.win;      
-    // Create a div
-    if (!this.div) {
-      this.div = document.createElement("div");
-      this.div.className = this.options.className;
-      this.div.style.height = size.height + "px";
-      this.div.style.width  = size.width  + "px";
-      this.div.style.top    = position[1] + "px";
-      this.div.style.left   = position[0] + "px";   
-      this.div.style.position = "absolute"
-      document.body.appendChild(this.div);
-    }                                                   
-    if (this.options.fromOpacity)
-      this.div.setStyle({opacity: this.options.fromOpacity})
-    this.div.show();          
-    var style = "top:" + bounds.top + ";left:" +bounds.left + ";width:" + bounds.width +";height:" + bounds.height;
-    if (this.options.toOpacity)
-      style += ";opacity:" + this.options.toOpacity;
-    
-    new Effect.Morph(this.div ,{style: style, duration: this.options.duration, afterFinish: this._showWindow.bind(this)});    
-  },
-
-  hide: function(element, options) {     
-    var position = Position.cumulativeOffset(this.html);      
-    var size = this.html.getDimensions();    
-    this.window.visible = true; 
-    var bounds = this.window.getBounds();
-    this.window.visible = false; 
-
-    this.window.element.hide();
-
-    this.div.style.height = bounds.height;
-    this.div.style.width  = bounds.width;
-    this.div.style.top    = bounds.top;
-    this.div.style.left   = bounds.left;
-    
-    if (this.options.toOpacity)
-      this.div.setStyle({opacity: this.options.toOpacity})
-
-    this.div.show();                                 
-    var style = "top:" + position[1] + "px;left:" + position[0] + "px;width:" + size.width +"px;height:" + size.height + "px";
-
-    if (this.options.fromOpacity)
-      style += ";opacity:" + this.options.fromOpacity;
-    new Effect.Morph(this.div ,{style: style, duration: this.options.duration, afterFinish: this._hideDiv.bind(this)});    
-  },
-  
-  _showWindow: function() {
-    this.div.hide();
-    this.window.element.show(); 
-  },
-  
-  _hideDiv: function() {
-    this.div.hide();
-  }
-}
-
diff --git a/lib/web/prototype/window_ext.js b/lib/web/prototype/window_ext.js
deleted file mode 100644
index 60efac61b4b733b04e090c5479c5d8e6e0692d77..0000000000000000000000000000000000000000
--- a/lib/web/prototype/window_ext.js
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (c) 2006 Sébastien Gruhier (http://xilinus.com, http://itseb.com)
-// YOU MUST INCLUDE window.js BEFORE
-//
-// Object to store hide/show windows status in a cookie
-// Just add at the end of your HTML file this javascript line: WindowStore.init()
-WindowStore = {
-  doSetCookie: false,
-  cookieName:  "__window_store__",
-  expired:     null,
-  
-  // Init function with two optional parameters
-  // - cookieName (default = __window_store__)
-  // - expiration date (default 3 years from now)
-  init: function(cookieName, expired) {
-    WindowStore.cookieName = cookieName || WindowStore.cookieName
-
-    if (! expired) {
-      var today = new Date();
-      today.setYear(today.getYear()+1903);
-      WindowStore.expired = today;
-    }
-    else
-      WindowStore.expired = expired;
-
-    Windows.windows.each(function(win) {
-      win.setCookie(win.getId(), WindowStore.expired);
-    });
-
-    // Create observer on show/hide events
-    var myObserver = {
-    	onShow: function(eventName, win) {
-    	  WindowStore._saveCookie();
-    	},
-    	
-    	onClose: function(eventName, win) {
-    	  WindowStore._saveCookie();
-  	  },
-  	  
-    	onHide: function(eventName, win) {
-    	  WindowStore._saveCookie();
-    	}
-    }
-    Windows.addObserver(myObserver);
-
-    WindowStore._restoreWindows();
-    WindowStore._saveCookie();
-  },
-  
-  show: function(win) {
-    eval("var cookie = " + WindowUtilities.getCookie(WindowStore.cookieName));
-    if (cookie != null) {
-      if (cookie[win.getId()])
-        win.show();
-    }
-    else
-      win.show();
-  },
-
-  // Function to store windows show/hide status in a cookie 
-  _saveCookie: function() {
-    if (!doSetCookie)
-      return;
-    
-    var cookieValue = "{";
-    Windows.windows.each(function(win) {
-      if (cookieValue != "{")
-        cookieValue += ","
-      cookieValue += win.getId() + ": " + win.isVisible();
-    });
-    cookieValue += "}"
-  
-    WindowUtilities.setCookie(cookieValue, [WindowStore.cookieName, WindowStore.expired]);  
-  },
-
-  // Function to restore windows show/hide status from a cookie if exists
-  _restoreWindows: function() {
-    eval("var cookie = " + WindowUtilities.getCookie(WindowStore.cookieName));
-    if (cookie != null) {
-      doSetCookie = false;
-      Windows.windows.each(function(win) {
-        if (cookie[win.getId()])
-          win.show();
-      });
-    }
-    doSetCookie = true;
-  }
-}
-
-// Object to set a close key an all windows
-WindowCloseKey = {
-  keyCode: Event.KEY_ESC,
-  
-  init: function(keyCode) {
-    if (keyCode)
-      WindowCloseKey.keyCode = keyCode;      
-      
-    Event.observe(document, 'keydown', this._closeCurrentWindow.bindAsEventListener(this));   
-  },
-  
-  _closeCurrentWindow: function(event) {
-    var e = event || window.event
-  	var characterCode = e.which || e.keyCode;
-  	
-  	// Check if there is a top window (it means it's an URL content)
-  	var win = top.Windows.focusedWindow;
-    if (characterCode == WindowCloseKey.keyCode && win) {
-      if (win.cancelCallback) 
-        top.Dialog.cancelCallback();      
-      else if (win.okCallback) 
-        top.Dialog.okCallback();
-      else
-        top.Windows.close(top.Windows.focusedWindow.getId());
-    }
-  }
-}
\ No newline at end of file
diff --git a/lib/web/scriptaculous/scriptaculous.js b/lib/web/scriptaculous/scriptaculous.js
deleted file mode 100644
index 3e5543bd01f62c4c0f60d493f5ed869443567eb5..0000000000000000000000000000000000000000
--- a/lib/web/scriptaculous/scriptaculous.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// script.aculo.us scriptaculous.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
-
-// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//
-// Permission is hereby granted, free of charge, to any person obtaining
-// a copy of this software and associated documentation files (the
-// "Software"), to deal in the Software without restriction, including
-// without limitation the rights to use, copy, modify, merge, publish,
-// distribute, sublicense, and/or sell copies of the Software, and to
-// permit persons to whom the Software is furnished to do so, subject to
-// the following conditions:
-//
-// The above copyright notice and this permission notice shall be
-// included in all copies or substantial portions of the Software.
-//
-// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-//
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-var Scriptaculous = {
-  Version: '1.8.2',
-  require: function(libraryName) {
-    // inserting via DOM fails in Safari 2.0, so brute force approach
-    document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>');
-  },
-  REQUIRED_PROTOTYPE: '1.6.0.3',
-  load: function() {
-    function convertVersionString(versionString) {
-      var v = versionString.replace(/_.*|\./g, '');
-      v = parseInt(v + '0'.times(4-v.length));
-      return versionString.indexOf('_') > -1 ? v-1 : v;
-    }
-
-    if((typeof Prototype=='undefined') ||
-       (typeof Element == 'undefined') ||
-       (typeof Element.Methods=='undefined') ||
-       (convertVersionString(Prototype.Version) <
-        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
-       throw("script.aculo.us requires the Prototype JavaScript framework >= " +
-        Scriptaculous.REQUIRED_PROTOTYPE);
-
-    var js = /scriptaculous\.js(\?.*)?$/;
-    $$('head script[src]').findAll(function(s) {
-      return s.src.match(js);
-    }).each(function(s) {
-      var path = s.src.replace(js, ''),
-      includes = s.src.match(/\?.*load=([a-z,]*)/);
-      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
-       function(include) { Scriptaculous.require(path+include+'.js') });
-    });
-  }
-};
-
-Scriptaculous.load();
\ No newline at end of file
diff --git a/lib/web/scriptaculous/unittest.js b/lib/web/scriptaculous/unittest.js
deleted file mode 100644
index 446097ec51696b715c0717022228f7c7ceb4ba7b..0000000000000000000000000000000000000000
--- a/lib/web/scriptaculous/unittest.js
+++ /dev/null
@@ -1,568 +0,0 @@
-// script.aculo.us unittest.js v1.8.2, Tue Nov 18 18:30:58 +0100 2008
-
-// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
-//           (c) 2005-2008 Jon Tirsen (http://www.tirsen.com)
-//           (c) 2005-2008 Michael Schuerig (http://www.schuerig.de/michael/)
-//
-// script.aculo.us is freely distributable under the terms of an MIT-style license.
-// For details, see the script.aculo.us web site: http://script.aculo.us/
-
-// experimental, Firefox-only
-Event.simulateMouse = function(element, eventName) {
-  var options = Object.extend({
-    pointerX: 0,
-    pointerY: 0,
-    buttons:  0,
-    ctrlKey:  false,
-    altKey:   false,
-    shiftKey: false,
-    metaKey:  false
-  }, arguments[2] || {});
-  var oEvent = document.createEvent("MouseEvents");
-  oEvent.initMouseEvent(eventName, true, true, document.defaultView, 
-    options.buttons, options.pointerX, options.pointerY, options.pointerX, options.pointerY, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey, 0, $(element));
-  
-  if(this.mark) Element.remove(this.mark);
-  this.mark = document.createElement('div');
-  this.mark.appendChild(document.createTextNode(" "));
-  document.body.appendChild(this.mark);
-  this.mark.style.position = 'absolute';
-  this.mark.style.top = options.pointerY + "px";
-  this.mark.style.left = options.pointerX + "px";
-  this.mark.style.width = "5px";
-  this.mark.style.height = "5px;";
-  this.mark.style.borderTop = "1px solid red;";
-  this.mark.style.borderLeft = "1px solid red;";
-  
-  if(this.step)
-    alert('['+new Date().getTime().toString()+'] '+eventName+'/'+Test.Unit.inspect(options));
-  
-  $(element).dispatchEvent(oEvent);
-};
-
-// Note: Due to a fix in Firefox 1.0.5/6 that probably fixed "too much", this doesn't work in 1.0.6 or DP2.
-// You need to downgrade to 1.0.4 for now to get this working
-// See https://bugzilla.mozilla.org/show_bug.cgi?id=289940 for the fix that fixed too much
-Event.simulateKey = function(element, eventName) {
-  var options = Object.extend({
-    ctrlKey: false,
-    altKey: false,
-    shiftKey: false,
-    metaKey: false,
-    keyCode: 0,
-    charCode: 0
-  }, arguments[2] || {});
-
-  var oEvent = document.createEvent("KeyEvents");
-  oEvent.initKeyEvent(eventName, true, true, window, 
-    options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
-    options.keyCode, options.charCode );
-  $(element).dispatchEvent(oEvent);
-};
-
-Event.simulateKeys = function(element, command) {
-  for(var i=0; i<command.length; i++) {
-    Event.simulateKey(element,'keypress',{charCode:command.charCodeAt(i)});
-  }
-};
-
-var Test = {};
-Test.Unit = {};
-
-// security exception workaround
-Test.Unit.inspect = Object.inspect;
-
-Test.Unit.Logger = Class.create();
-Test.Unit.Logger.prototype = {
-  initialize: function(log) {
-    this.log = $(log);
-    if (this.log) {
-      this._createLogTable();
-    }
-  },
-  start: function(testName) {
-    if (!this.log) return;
-    this.testName = testName;
-    this.lastLogLine = document.createElement('tr');
-    this.statusCell = document.createElement('td');
-    this.nameCell = document.createElement('td');
-    this.nameCell.className = "nameCell";
-    this.nameCell.appendChild(document.createTextNode(testName));
-    this.messageCell = document.createElement('td');
-    this.lastLogLine.appendChild(this.statusCell);
-    this.lastLogLine.appendChild(this.nameCell);
-    this.lastLogLine.appendChild(this.messageCell);
-    this.loglines.appendChild(this.lastLogLine);
-  },
-  finish: function(status, summary) {
-    if (!this.log) return;
-    this.lastLogLine.className = status;
-    this.statusCell.innerHTML = status;
-    this.messageCell.innerHTML = this._toHTML(summary);
-    this.addLinksToResults();
-  },
-  message: function(message) {
-    if (!this.log) return;
-    this.messageCell.innerHTML = this._toHTML(message);
-  },
-  summary: function(summary) {
-    if (!this.log) return;
-    this.logsummary.innerHTML = this._toHTML(summary);
-  },
-  _createLogTable: function() {
-    this.log.innerHTML =
-    '<div id="logsummary"></div>' +
-    '<table id="logtable">' +
-    '<thead><tr><th>Status</th><th>Test</th><th>Message</th></tr></thead>' +
-    '<tbody id="loglines"></tbody>' +
-    '</table>';
-    this.logsummary = $('logsummary');
-    this.loglines = $('loglines');
-  },
-  _toHTML: function(txt) {
-    return txt.escapeHTML().replace(/\n/g,"<br/>");
-  },
-  addLinksToResults: function(){ 
-    $$("tr.failed .nameCell").each( function(td){ // todo: limit to children of this.log
-      td.title = "Run only this test";
-      Event.observe(td, 'click', function(){ window.location.search = "?tests=" + td.innerHTML;});
-    });
-    $$("tr.passed .nameCell").each( function(td){ // todo: limit to children of this.log
-      td.title = "Run all tests";
-      Event.observe(td, 'click', function(){ window.location.search = "";});
-    });
-  }
-};
-
-Test.Unit.Runner = Class.create();
-Test.Unit.Runner.prototype = {
-  initialize: function(testcases) {
-    this.options = Object.extend({
-      testLog: 'testlog'
-    }, arguments[1] || {});
-    this.options.resultsURL = this.parseResultsURLQueryParameter();
-    this.options.tests      = this.parseTestsQueryParameter();
-    if (this.options.testLog) {
-      this.options.testLog = $(this.options.testLog) || null;
-    }
-    if(this.options.tests) {
-      this.tests = [];
-      for(var i = 0; i < this.options.tests.length; i++) {
-        if(/^test/.test(this.options.tests[i])) {
-          this.tests.push(new Test.Unit.Testcase(this.options.tests[i], testcases[this.options.tests[i]], testcases["setup"], testcases["teardown"]));
-        }
-      }
-    } else {
-      if (this.options.test) {
-        this.tests = [new Test.Unit.Testcase(this.options.test, testcases[this.options.test], testcases["setup"], testcases["teardown"])];
-      } else {
-        this.tests = [];
-        for(var testcase in testcases) {
-          if(/^test/.test(testcase)) {
-            this.tests.push(
-               new Test.Unit.Testcase(
-                 this.options.context ? ' -> ' + this.options.titles[testcase] : testcase, 
-                 testcases[testcase], testcases["setup"], testcases["teardown"]
-               ));
-          }
-        }
-      }
-    }
-    this.currentTest = 0;
-    this.logger = new Test.Unit.Logger(this.options.testLog);
-    setTimeout(this.runTests.bind(this), 1000);
-  },
-  parseResultsURLQueryParameter: function() {
-    return window.location.search.parseQuery()["resultsURL"];
-  },
-  parseTestsQueryParameter: function(){
-    if (window.location.search.parseQuery()["tests"]){
-        return window.location.search.parseQuery()["tests"].split(',');
-    };
-  },
-  // Returns:
-  //  "ERROR" if there was an error,
-  //  "FAILURE" if there was a failure, or
-  //  "SUCCESS" if there was neither
-  getResult: function() {
-    var hasFailure = false;
-    for(var i=0;i<this.tests.length;i++) {
-      if (this.tests[i].errors > 0) {
-        return "ERROR";
-      }
-      if (this.tests[i].failures > 0) {
-        hasFailure = true;
-      }
-    }
-    if (hasFailure) {
-      return "FAILURE";
-    } else {
-      return "SUCCESS";
-    }
-  },
-  postResults: function() {
-    if (this.options.resultsURL) {
-      new Ajax.Request(this.options.resultsURL, 
-        { method: 'get', parameters: 'result=' + this.getResult(), asynchronous: false });
-    }
-  },
-  runTests: function() {
-    var test = this.tests[this.currentTest];
-    if (!test) {
-      // finished!
-      this.postResults();
-      this.logger.summary(this.summary());
-      return;
-    }
-    if(!test.isWaiting) {
-      this.logger.start(test.name);
-    }
-    test.run();
-    if(test.isWaiting) {
-      this.logger.message("Waiting for " + test.timeToWait + "ms");
-      setTimeout(this.runTests.bind(this), test.timeToWait || 1000);
-    } else {
-      this.logger.finish(test.status(), test.summary());
-      this.currentTest++;
-      // tail recursive, hopefully the browser will skip the stackframe
-      this.runTests();
-    }
-  },
-  summary: function() {
-    var assertions = 0;
-    var failures = 0;
-    var errors = 0;
-    var messages = [];
-    for(var i=0;i<this.tests.length;i++) {
-      assertions +=   this.tests[i].assertions;
-      failures   +=   this.tests[i].failures;
-      errors     +=   this.tests[i].errors;
-    }
-    return (
-      (this.options.context ? this.options.context + ': ': '') + 
-      this.tests.length + " tests, " + 
-      assertions + " assertions, " + 
-      failures   + " failures, " +
-      errors     + " errors");
-  }
-};
-
-Test.Unit.Assertions = Class.create();
-Test.Unit.Assertions.prototype = {
-  initialize: function() {
-    this.assertions = 0;
-    this.failures   = 0;
-    this.errors     = 0;
-    this.messages   = [];
-  },
-  summary: function() {
-    return (
-      this.assertions + " assertions, " + 
-      this.failures   + " failures, " +
-      this.errors     + " errors" + "\n" +
-      this.messages.join("\n"));
-  },
-  pass: function() {
-    this.assertions++;
-  },
-  fail: function(message) {
-    this.failures++;
-    this.messages.push("Failure: " + message);
-  },
-  info: function(message) {
-    this.messages.push("Info: " + message);
-  },
-  error: function(error) {
-    this.errors++;
-    this.messages.push(error.name + ": "+ error.message + "(" + Test.Unit.inspect(error) +")");
-  },
-  status: function() {
-    if (this.failures > 0) return 'failed';
-    if (this.errors > 0) return 'error';
-    return 'passed';
-  },
-  assert: function(expression) {
-    var message = arguments[1] || 'assert: got "' + Test.Unit.inspect(expression) + '"';
-    try { expression ? this.pass() : 
-      this.fail(message); }
-    catch(e) { this.error(e); }
-  },
-  assertEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEqual";
-    try { (expected == actual) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertInspect: function(expected, actual) {
-    var message = arguments[2] || "assertInspect";
-    try { (expected == actual.inspect()) ? this.pass() :
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) + 
-        '", actual "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertEnumEqual: function(expected, actual) {
-    var message = arguments[2] || "assertEnumEqual";
-    try { $A(expected).length == $A(actual).length && 
-      expected.zip(actual).all(function(pair) { return pair[0] == pair[1] }) ?
-        this.pass() : this.fail(message + ': expected ' + Test.Unit.inspect(expected) + 
-          ', actual ' + Test.Unit.inspect(actual)); }
-    catch(e) { this.error(e); }
-  },
-  assertNotEqual: function(expected, actual) {
-    var message = arguments[2] || "assertNotEqual";
-    try { (expected != actual) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertIdentical: function(expected, actual) { 
-    var message = arguments[2] || "assertIdentical"; 
-    try { (expected === actual) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
-    catch(e) { this.error(e); } 
-  },
-  assertNotIdentical: function(expected, actual) { 
-    var message = arguments[2] || "assertNotIdentical"; 
-    try { !(expected === actual) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + Test.Unit.inspect(actual) + '"'); } 
-    catch(e) { this.error(e); } 
-  },
-  assertNull: function(obj) {
-    var message = arguments[1] || 'assertNull';
-    try { (obj==null) ? this.pass() : 
-      this.fail(message + ': got "' + Test.Unit.inspect(obj) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertMatch: function(expected, actual) {
-    var message = arguments[2] || 'assertMatch';
-    var regex = new RegExp(expected);
-    try { (regex.exec(actual)) ? this.pass() :
-      this.fail(message + ' : regex: "' +  Test.Unit.inspect(expected) + ' did not match: ' + Test.Unit.inspect(actual) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertHidden: function(element) {
-    var message = arguments[1] || 'assertHidden';
-    this.assertEqual("none", element.style.display, message);
-  },
-  assertNotNull: function(object) {
-    var message = arguments[1] || 'assertNotNull';
-    this.assert(object != null, message);
-  },
-  assertType: function(expected, actual) {
-    var message = arguments[2] || 'assertType';
-    try { 
-      (actual.constructor == expected) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + (actual.constructor) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertNotOfType: function(expected, actual) {
-    var message = arguments[2] || 'assertNotOfType';
-    try { 
-      (actual.constructor != expected) ? this.pass() : 
-      this.fail(message + ': expected "' + Test.Unit.inspect(expected) +  
-        '", actual "' + (actual.constructor) + '"'); }
-    catch(e) { this.error(e); }
-  },
-  assertInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertInstanceOf';
-    try { 
-      (actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was not an instance of the expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertNotInstanceOf: function(expected, actual) {
-    var message = arguments[2] || 'assertNotInstanceOf';
-    try { 
-      !(actual instanceof expected) ? this.pass() : 
-      this.fail(message + ": object was an instance of the not expected type"); }
-    catch(e) { this.error(e); } 
-  },
-  assertRespondsTo: function(method, obj) {
-    var message = arguments[2] || 'assertRespondsTo';
-    try {
-      (obj[method] && typeof obj[method] == 'function') ? this.pass() : 
-      this.fail(message + ": object doesn't respond to [" + method + "]"); }
-    catch(e) { this.error(e); }
-  },
-  assertReturnsTrue: function(method, obj) {
-    var message = arguments[2] || 'assertReturnsTrue';
-    try {
-      var m = obj[method];
-      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
-      m() ? this.pass() : 
-      this.fail(message + ": method returned false"); }
-    catch(e) { this.error(e); }
-  },
-  assertReturnsFalse: function(method, obj) {
-    var message = arguments[2] || 'assertReturnsFalse';
-    try {
-      var m = obj[method];
-      if(!m) m = obj['is'+method.charAt(0).toUpperCase()+method.slice(1)];
-      !m() ? this.pass() : 
-      this.fail(message + ": method returned true"); }
-    catch(e) { this.error(e); }
-  },
-  assertRaise: function(exceptionName, method) {
-    var message = arguments[2] || 'assertRaise';
-    try { 
-      method();
-      this.fail(message + ": exception expected but none was raised"); }
-    catch(e) {
-      ((exceptionName == null) || (e.name==exceptionName)) ? this.pass() : this.error(e); 
-    }
-  },
-  assertElementsMatch: function() {
-    var expressions = $A(arguments), elements = $A(expressions.shift());
-    if (elements.length != expressions.length) {
-      this.fail('assertElementsMatch: size mismatch: ' + elements.length + ' elements, ' + expressions.length + ' expressions');
-      return false;
-    }
-    elements.zip(expressions).all(function(pair, index) {
-      var element = $(pair.first()), expression = pair.last();
-      if (element.match(expression)) return true;
-      this.fail('assertElementsMatch: (in index ' + index + ') expected ' + expression.inspect() + ' but got ' + element.inspect());
-    }.bind(this)) && this.pass();
-  },
-  assertElementMatches: function(element, expression) {
-    this.assertElementsMatch([element], expression);
-  },
-  benchmark: function(operation, iterations) {
-    var startAt = new Date();
-    (iterations || 1).times(operation);
-    var timeTaken = ((new Date())-startAt);
-    this.info((arguments[2] || 'Operation') + ' finished ' + 
-       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
-    return timeTaken;
-  },
-  _isVisible: function(element) {
-    element = $(element);
-    if(!element.parentNode) return true;
-    this.assertNotNull(element);
-    if(element.style && Element.getStyle(element, 'display') == 'none')
-      return false;
-    
-    return this._isVisible(element.parentNode);
-  },
-  assertNotVisible: function(element) {
-    this.assert(!this._isVisible(element), Test.Unit.inspect(element) + " was not hidden and didn't have a hidden parent either. " + ("" || arguments[1]));
-  },
-  assertVisible: function(element) {
-    this.assert(this._isVisible(element), Test.Unit.inspect(element) + " was not visible. " + ("" || arguments[1]));
-  },
-  benchmark: function(operation, iterations) {
-    var startAt = new Date();
-    (iterations || 1).times(operation);
-    var timeTaken = ((new Date())-startAt);
-    this.info((arguments[2] || 'Operation') + ' finished ' + 
-       iterations + ' iterations in ' + (timeTaken/1000)+'s' );
-    return timeTaken;
-  }
-};
-
-Test.Unit.Testcase = Class.create();
-Object.extend(Object.extend(Test.Unit.Testcase.prototype, Test.Unit.Assertions.prototype), {
-  initialize: function(name, test, setup, teardown) {
-    Test.Unit.Assertions.prototype.initialize.bind(this)();
-    this.name           = name;
-    
-    if(typeof test == 'string') {
-      test = test.gsub(/(\.should[^\(]+\()/,'#{0}this,');
-      test = test.gsub(/(\.should[^\(]+)\(this,\)/,'#{1}(this)');
-      this.test = function() {
-        eval('with(this){'+test+'}');
-      }
-    } else {
-      this.test = test || function() {};
-    }
-    
-    this.setup          = setup || function() {};
-    this.teardown       = teardown || function() {};
-    this.isWaiting      = false;
-    this.timeToWait     = 1000;
-  },
-  wait: function(time, nextPart) {
-    this.isWaiting = true;
-    this.test = nextPart;
-    this.timeToWait = time;
-  },
-  run: function() {
-    try {
-      try {
-        if (!this.isWaiting) this.setup.bind(this)();
-        this.isWaiting = false;
-        this.test.bind(this)();
-      } finally {
-        if(!this.isWaiting) {
-          this.teardown.bind(this)();
-        }
-      }
-    }
-    catch(e) { this.error(e); }
-  }
-});
-
-// *EXPERIMENTAL* BDD-style testing to please non-technical folk
-// This draws many ideas from RSpec http://rspec.rubyforge.org/
-
-Test.setupBDDExtensionMethods = function(){
-  var METHODMAP = {
-    shouldEqual:     'assertEqual',
-    shouldNotEqual:  'assertNotEqual',
-    shouldEqualEnum: 'assertEnumEqual',
-    shouldBeA:       'assertType',
-    shouldNotBeA:    'assertNotOfType',
-    shouldBeAn:      'assertType',
-    shouldNotBeAn:   'assertNotOfType',
-    shouldBeNull:    'assertNull',
-    shouldNotBeNull: 'assertNotNull',
-    
-    shouldBe:        'assertReturnsTrue',
-    shouldNotBe:     'assertReturnsFalse',
-    shouldRespondTo: 'assertRespondsTo'
-  };
-  var makeAssertion = function(assertion, args, object) { 
-   	this[assertion].apply(this,(args || []).concat([object]));
-  };
-  
-  Test.BDDMethods = {};   
-  $H(METHODMAP).each(function(pair) { 
-    Test.BDDMethods[pair.key] = function() { 
-       var args = $A(arguments); 
-       var scope = args.shift(); 
-       makeAssertion.apply(scope, [pair.value, args, this]); }; 
-  });
-  
-  [Array.prototype, String.prototype, Number.prototype, Boolean.prototype].each(
-    function(p){ Object.extend(p, Test.BDDMethods) }
-  );
-};
-
-Test.context = function(name, spec, log){
-  Test.setupBDDExtensionMethods();
-  
-  var compiledSpec = {};
-  var titles = {};
-  for(specName in spec) {
-    switch(specName){
-      case "setup":
-      case "teardown":
-        compiledSpec[specName] = spec[specName];
-        break;
-      default:
-        var testName = 'test'+specName.gsub(/\s+/,'-').camelize();
-        var body = spec[specName].toString().split('\n').slice(1);
-        if(/^\{/.test(body[0])) body = body.slice(1);
-        body.pop();
-        body = body.map(function(statement){ 
-          return statement.strip()
-        });
-        compiledSpec[testName] = body.join('\n');
-        titles[testName] = specName;
-    }
-  }
-  new Test.Unit.Runner(compiledSpec, { titles: titles, testLog: log || 'testlog', context: name });
-};
\ No newline at end of file
diff --git a/lib/web/selectivizr.js b/lib/web/selectivizr.js
deleted file mode 100644
index f7bd64295b5b82b889c3729adc3159437f46d19e..0000000000000000000000000000000000000000
--- a/lib/web/selectivizr.js
+++ /dev/null
@@ -1,545 +0,0 @@
-/*
-selectivizr v1.0.2 - (c) Keith Clark, freely distributable under the terms 
-of the MIT license.
-
-selectivizr.com
-*/
-/* 
-  
-Notes about this source
------------------------
-
- * The #DEBUG_START and #DEBUG_END comments are used to mark blocks of code
-   that will be removed prior to building a final release version (using a
-   pre-compression script)
-  
-  
-References:
------------
- 
- * CSS Syntax          : http://www.w3.org/TR/2003/WD-css3-syntax-20030813/#style
- * Selectors           : http://www.w3.org/TR/css3-selectors/#selectors
- * IE Compatability    : http://msdn.microsoft.com/en-us/library/cc351024(VS.85).aspx
- * W3C Selector Tests  : http://www.w3.org/Style/CSS/Test/CSS3/Selectors/current/html/tests/
- 
-*/
-
-(function(win) {
-
-	// If browser isn't IE, then stop execution! This handles the script 
-	// being loaded by non IE browsers because the developer didn't use 
-	// conditional comments.
-	if (/*@cc_on!@*/true) return;
-
-	// =========================== Init Objects ============================
-
-	var doc = document;
-	var root = doc.documentElement;
-	var xhr = getXHRObject();
-	var ieVersion = /MSIE (\d+)/.exec(navigator.userAgent)[1];
-	
-	// If were not in standards mode, IE is too old / new or we can't create
-	// an XMLHttpRequest object then we should get out now.
-	if (doc.compatMode != 'CSS1Compat' || ieVersion<6 || ieVersion>8 || !xhr) {
-		return;
-	}
-	
-	
-	// ========================= Common Objects ============================
-
-	// Compatiable selector engines in order of CSS3 support. Note: '*' is
-	// a placholder for the object key name. (basically, crude compression)
-	var selectorEngines = {
-		"NW"								: "*.Dom.select",
-		"MooTools"							: "$$",
-		"DOMAssistant"						: "*.$", 
-		"Prototype"							: "$$",
-		"YAHOO"								: "*.util.Selector.query",
-		"Sizzle"							: "*", 
-		"jQuery"							: "*",
-		"dojo"								: "*.query"
-	};
-
-	var selectorMethod;
-	var enabledWatchers 					= [];     // array of :enabled/:disabled elements to poll
-	var ie6PatchID 							= 0;      // used to solve ie6's multiple class bug
-	var patchIE6MultipleClasses				= true;   // if true adds class bloat to ie6
-	var namespace 							= "slvzr";
-	
-	// Stylesheet parsing regexp's
-	var RE_COMMENT							= /(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g;
-	var RE_IMPORT							= /@import\s*(?:(?:(?:url\(\s*(['"]?)(.*)\1)\s*\))|(?:(['"])(.*)\3))[^;]*;/g;
-	var RE_ASSET_URL 						= /\burl\(\s*(["']?)(?!data:)([^"')]+)\1\s*\)/g;
-	var RE_PSEUDO_STRUCTURAL				= /^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/;
-	var RE_PSEUDO_ELEMENTS					= /:(:first-(?:line|letter))/g;
-	var RE_SELECTOR_GROUP					= /(^|})\s*([^\{]*?[\[:][^{]+)/g;
-	var RE_SELECTOR_PARSE					= /([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g; 
-	var RE_LIBRARY_INCOMPATIBLE_PSEUDOS		= /(:not\()?:(enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g;
-	var RE_PATCH_CLASS_NAME_REPLACE			= /[^\w-]/g;
-	
-	// HTML UI element regexp's
-	var RE_INPUT_ELEMENTS					= /^(INPUT|SELECT|TEXTAREA|BUTTON)$/;
-	var RE_INPUT_CHECKABLE_TYPES			= /^(checkbox|radio)$/;
-
-	// Broken attribute selector implementations (IE7/8 native [^=""], [$=""] and [*=""])
-	var BROKEN_ATTR_IMPLEMENTATIONS			= ieVersion>6 ? /[\$\^*]=(['"])\1/ : null;
-
-	// Whitespace normalization regexp's
-	var RE_TIDY_TRAILING_WHITESPACE			= /([(\[+~])\s+/g;
-	var RE_TIDY_LEADING_WHITESPACE			= /\s+([)\]+~])/g;
-	var RE_TIDY_CONSECUTIVE_WHITESPACE		= /\s+/g;
-	var RE_TIDY_TRIM_WHITESPACE				= /^\s*((?:[\S\s]*\S)?)\s*$/;
-	
-	// String constants
-	var EMPTY_STRING						= "";
-	var SPACE_STRING						= " ";
-	var PLACEHOLDER_STRING					= "$1";
-
-	// =========================== Patching ================================
-
-	// --[ patchStyleSheet() ]----------------------------------------------
-	// Scans the passed cssText for selectors that require emulation and
-	// creates one or more patches for each matched selector.
-	function patchStyleSheet( cssText ) {
-		return cssText.replace(RE_PSEUDO_ELEMENTS, PLACEHOLDER_STRING).
-			replace(RE_SELECTOR_GROUP, function(m, prefix, selectorText) {	
-    			var selectorGroups = selectorText.split(",");
-    			for (var c = 0, cs = selectorGroups.length; c < cs; c++) {
-    				var selector = normalizeSelectorWhitespace(selectorGroups[c]) + SPACE_STRING;
-    				var patches = [];
-    				selectorGroups[c] = selector.replace(RE_SELECTOR_PARSE, 
-    					function(match, combinator, pseudo, attribute, index) {
-    						if (combinator) {
-    							if (patches.length>0) {
-    								applyPatches( selector.substring(0, index), patches );
-    								patches = [];
-    							}
-    							return combinator;
-    						}		
-    						else {
-    							var patch = (pseudo) ? patchPseudoClass( pseudo ) : patchAttribute( attribute );
-    							if (patch) {
-    								patches.push(patch);
-    								return "." + patch.className;
-    							}
-    							return match;
-    						}
-    					}
-    				);
-    			}
-    			return prefix + selectorGroups.join(",");
-    		});
-	};
-
-	// --[ patchAttribute() ]-----------------------------------------------
-	// returns a patch for an attribute selector.
-	function patchAttribute( attr ) {
-		return (!BROKEN_ATTR_IMPLEMENTATIONS || BROKEN_ATTR_IMPLEMENTATIONS.test(attr)) ? 
-			{ className: createClassName(attr), applyClass: true } : null;
-	};
-
-	// --[ patchPseudoClass() ]---------------------------------------------
-	// returns a patch for a pseudo-class
-	function patchPseudoClass( pseudo ) {
-
-		var applyClass = true;
-		var className = createClassName(pseudo.slice(1));
-		var isNegated = pseudo.substring(0, 5) == ":not(";
-		var activateEventName;
-		var deactivateEventName;
-
-		// if negated, remove :not() 
-		if (isNegated) {
-			pseudo = pseudo.slice(5, -1);
-		}
-		
-		// bracket contents are irrelevant - remove them
-		var bracketIndex = pseudo.indexOf("(")
-		if (bracketIndex > -1) {
-			pseudo = pseudo.substring(0, bracketIndex);
-		}		
-		
-		// check we're still dealing with a pseudo-class
-		if (pseudo.charAt(0) == ":") {
-			switch (pseudo.slice(1)) {
-
-				case "root":
-					applyClass = function(e) {
-						return isNegated ? e != root : e == root;
-					}
-					break;
-
-				case "target":
-					// :target is only supported in IE8
-					if (ieVersion == 8) {
-						applyClass = function(e) {
-							var handler = function() { 
-								var hash = location.hash;
-								var hashID = hash.slice(1);
-								return isNegated ? (hash == EMPTY_STRING || e.id != hashID) : (hash != EMPTY_STRING && e.id == hashID);
-							};
-							addEvent( win, "hashchange", function() {
-								toggleElementClass(e, className, handler());
-							})
-							return handler();
-						}
-						break;
-					}
-					return false;
-				
-				case "checked":
-					applyClass = function(e) { 
-						if (RE_INPUT_CHECKABLE_TYPES.test(e.type)) {
-							addEvent( e, "propertychange", function() {
-								if (event.propertyName == "checked") {
-									toggleElementClass( e, className, e.checked !== isNegated );
-								} 							
-							})
-						}
-						return e.checked !== isNegated;
-					}
-					break;
-					
-				case "disabled":
-					isNegated = !isNegated;
-
-				case "enabled":
-					applyClass = function(e) { 
-						if (RE_INPUT_ELEMENTS.test(e.tagName)) {
-							addEvent( e, "propertychange", function() {
-								if (event.propertyName == "$disabled") {
-									toggleElementClass( e, className, e.$disabled === isNegated );
-								} 
-							});
-							enabledWatchers.push(e);
-							e.$disabled = e.disabled;
-							return e.disabled === isNegated;
-						}
-						return pseudo == ":enabled" ? isNegated : !isNegated;
-					}
-					break;
-					
-				case "focus":
-					activateEventName = "focus";
-					deactivateEventName = "blur";
-
-				// everything else
-				default:
-					// If we don't support this pseudo-class don't create 
-					// a patch for it
-					if (!RE_PSEUDO_STRUCTURAL.test(pseudo)) {
-						return false;
-					}
-					break;
-			}
-		}
-		return { className: className, applyClass: applyClass };
-	};
-
-	// --[ applyPatches() ]-------------------------------------------------
-	// uses the passed selector text to find DOM nodes and patch them	
-	function applyPatches(selectorText, patches) {
-		var elms;
-		
-		// Although some selector libraries can find :checked :enabled etc. 
-		// we need to find all elements that could have that state because 
-		// it can be changed by the user.
-		var domSelectorText = selectorText.replace(RE_LIBRARY_INCOMPATIBLE_PSEUDOS, EMPTY_STRING);
-		
-		// If the dom selector equates to an empty string or ends with 
-		// whitespace then we need to append a universal selector (*) to it.
-		if (domSelectorText == EMPTY_STRING || domSelectorText.charAt(domSelectorText.length - 1) == SPACE_STRING) {
-			domSelectorText += "*";
-		}
-		
-		// Ensure we catch errors from the selector library
-		try {
-			elms = selectorMethod( domSelectorText );
-		} catch (ex) {
-			// #DEBUG_START
-			log( "Selector '" + selectorText + "' threw exception '" + ex + "'" );
-			// #DEBUG_END
-		}
-
-
-		if (elms) {
-			for (var d = 0, dl = elms.length; d < dl; d++) {	
-				var elm = elms[d];
-				var cssClasses = elm.className;
-				for (var f = 0, fl = patches.length; f < fl; f++) {
-					var patch = patches[f];
-					
-					if (!hasPatch(elm, patch)) {
-						if (patch.applyClass && (patch.applyClass === true || patch.applyClass(elm) === true)) {
-							cssClasses = toggleClass(cssClasses, patch.className, true );
-						}
-					}
-				}
-				elm.className = cssClasses;
-			}
-		}
-	};
-
-	// --[ hasPatch() ]-----------------------------------------------------
-	// checks for the exsistence of a patch on an element
-	function hasPatch( elm, patch ) {
-		return new RegExp("(^|\\s)" + patch.className + "(\\s|$)").test(elm.className);
-	};
-	
-	
-	// =========================== Utility =================================
-	
-	function createClassName( className ) {
-		return namespace + "-" + ((ieVersion == 6 && patchIE6MultipleClasses) ?
-			ie6PatchID++
-		:
-			className.replace(RE_PATCH_CLASS_NAME_REPLACE, function(a) { return a.charCodeAt(0) }));
-	};
-
-	// --[ log() ]----------------------------------------------------------
-	// #DEBUG_START
-	function log( message ) {
-		if (win.console) {
-			win.console.log(message);
-		}
-	};
-	// #DEBUG_END
-
-	// --[ trim() ]---------------------------------------------------------
-	// removes leading, trailing whitespace from a string
-	function trim( text ) {
-		return text.replace(RE_TIDY_TRIM_WHITESPACE, PLACEHOLDER_STRING);
-	};
-
-	// --[ normalizeWhitespace() ]------------------------------------------
-	// removes leading, trailing and consecutive whitespace from a string
-	function normalizeWhitespace( text ) {
-		return trim(text).replace(RE_TIDY_CONSECUTIVE_WHITESPACE, SPACE_STRING);
-	};
-
-	// --[ normalizeSelectorWhitespace() ]----------------------------------
-	// tidies whitespace around selector brackets and combinators
-	function normalizeSelectorWhitespace( selectorText ) {
-		return normalizeWhitespace(selectorText.
-			replace(RE_TIDY_TRAILING_WHITESPACE, PLACEHOLDER_STRING).
-			replace(RE_TIDY_LEADING_WHITESPACE, PLACEHOLDER_STRING)
-		);
-	};
-
-	// --[ toggleElementClass() ]-------------------------------------------
-	// toggles a single className on an element
-	function toggleElementClass( elm, className, on ) {
-		var oldClassName = elm.className;
-		var newClassName = toggleClass(oldClassName, className, on);
-		if (newClassName != oldClassName) {
-			elm.className = newClassName;
-			elm.parentNode.className += EMPTY_STRING;
-		}
-	};
-
-	// --[ toggleClass() ]--------------------------------------------------
-	// adds / removes a className from a string of classNames. Used to 
-	// manage multiple class changes without forcing a DOM redraw
-	function toggleClass( classList, className, on ) {
-		var re = RegExp("(^|\\s)" + className + "(\\s|$)");
-		var classExists = re.test(classList);
-		if (on) {
-			return classExists ? classList : classList + SPACE_STRING + className;
-		} else {
-			return classExists ? trim(classList.replace(re, PLACEHOLDER_STRING)) : classList;
-		}
-	};
-	
-	// --[ addEvent() ]-----------------------------------------------------
-	function addEvent(elm, eventName, eventHandler) {
-		elm.attachEvent("on" + eventName, eventHandler);
-	};
-
-	// --[ getXHRObject() ]-------------------------------------------------
-	function getXHRObject()
-	{
-		if (win.XMLHttpRequest) {
-			return new XMLHttpRequest;
-		}
-		try	{ 
-			return new ActiveXObject('Microsoft.XMLHTTP');
-		} catch(e) { 
-			return null;
-		}
-	};
-
-	// --[ loadStyleSheet() ]-----------------------------------------------
-	function loadStyleSheet( url ) {
-		xhr.open("GET", url, false);
-		xhr.send();
-		return (xhr.status==200) ? xhr.responseText : EMPTY_STRING;	
-	};
-	
-	// --[ resolveUrl() ]---------------------------------------------------
-	// Converts a URL fragment to a fully qualified URL using the specified
-	// context URL. Returns null if same-origin policy is broken
-	function resolveUrl( url, contextUrl ) {
-	
-		function getProtocolAndHost( url ) {
-			return url.substring(0, url.indexOf("/", 8));
-		};
-		
-		// absolute path
-		if (/^https?:\/\//i.test(url)) {
-			return getProtocolAndHost(contextUrl) == getProtocolAndHost(url) ? url : null;
-		}
-		
-		// root-relative path
-		if (url.charAt(0)=="/")	{
-			return getProtocolAndHost(contextUrl) + url;
-		}
-
-		// relative path
-		var contextUrlPath = contextUrl.split(/[?#]/)[0]; // ignore query string in the contextUrl	
-		if (url.charAt(0) != "?" && contextUrlPath.charAt(contextUrlPath.length - 1) != "/") {
-			contextUrlPath = contextUrlPath.substring(0, contextUrlPath.lastIndexOf("/") + 1);
-		}
-		
-		return contextUrlPath + url;
-	};
-	
-	// --[ parseStyleSheet() ]----------------------------------------------
-	// Downloads the stylesheet specified by the URL, removes it's comments
-	// and recursivly replaces @import rules with their contents, ultimately
-	// returning the full cssText.
-	function parseStyleSheet( url ) {
-		if (url) {
-			return loadStyleSheet(url).replace(RE_COMMENT, EMPTY_STRING).
-			replace(RE_IMPORT, function( match, quoteChar, importUrl, quoteChar2, importUrl2 ) { 
-				return parseStyleSheet(resolveUrl(importUrl || importUrl2, url));
-			}).
-			replace(RE_ASSET_URL, function( match, quoteChar, assetUrl ) { 
-				quoteChar = quoteChar || EMPTY_STRING;
-				return " url(" + quoteChar + resolveUrl(assetUrl, url) + quoteChar + ") "; 
-			});
-		}
-		return EMPTY_STRING;
-	};
-	
-	// --[ init() ]---------------------------------------------------------
-	function init() {
-		// honour the <base> tag
-		var url, stylesheet;
-		var baseTags = doc.getElementsByTagName("BASE");
-		var baseUrl = (baseTags.length > 0) ? baseTags[0].href : doc.location.href;
-		
-		/* Note: This code prevents IE from freezing / crashing when using 
-		@font-face .eot files but it modifies the <head> tag and could
-		trigger the IE stylesheet limit. It will also cause FOUC issues.
-		If you choose to use it, make sure you comment out the for loop 
-		directly below this comment.
-
-		var head = doc.getElementsByTagName("head")[0];
-		for (var c=doc.styleSheets.length-1; c>=0; c--) {
-			stylesheet = doc.styleSheets[c]
-			head.appendChild(doc.createElement("style"))
-			var patchedStylesheet = doc.styleSheets[doc.styleSheets.length-1];
-			
-			if (stylesheet.href != EMPTY_STRING) {
-				url = resolveUrl(stylesheet.href, baseUrl)
-				if (url) {
-					patchedStylesheet.cssText = patchStyleSheet( parseStyleSheet( url ) )
-					stylesheet.disabled = true
-					setTimeout( function () {
-						stylesheet.owningElement.parentNode.removeChild(stylesheet.owningElement)
-					})
-				}
-			}
-		}
-		*/
-		
-		for (var c = 0; c < doc.styleSheets.length; c++) {
-			stylesheet = doc.styleSheets[c]
-			if (stylesheet.href != EMPTY_STRING) {
-				url = resolveUrl(stylesheet.href, baseUrl);
-				if (url) {
-					stylesheet.cssText = patchStyleSheet( parseStyleSheet( url ) );
-				}
-			}
-		}
-		
-		// :enabled & :disabled polling script (since we can't hook 
-		// onpropertychange event when an element is disabled) 
-		if (enabledWatchers.length > 0) {
-			setInterval( function() {
-				for (var c = 0, cl = enabledWatchers.length; c < cl; c++) {
-					var e = enabledWatchers[c];
-					if (e.disabled !== e.$disabled) {
-						if (e.disabled) {
-							e.disabled = false;
-							e.$disabled = true;
-							e.disabled = true;
-						}
-						else {
-							e.$disabled = e.disabled;
-						}
-					}
-				}
-			},250)
-		}
-	};
-	
-	// Bind selectivizr to the ContentLoaded event. 
-	ContentLoaded(win, function() {
-		// Determine the "best fit" selector engine
-		for (var engine in selectorEngines) {
-			var members, member, context = win;
-			if (win[engine]) {
-				members = selectorEngines[engine].replace("*", engine).split(".");
-				while ((member = members.shift()) && (context = context[member])) {}
-				if (typeof context == "function") {
-					selectorMethod = context;
-					init();
-					return;
-				}
-			}
-		}
-	});
-	
-	
-	/*!
-	 * ContentLoaded.js by Diego Perini, modified for IE<9 only (to save space)
-	 *
-	 * Author: Diego Perini (diego.perini at gmail.com)
-	 * Summary: cross-browser wrapper for DOMContentLoaded
-	 * Updated: 20101020
-	 * License: MIT
-	 * Version: 1.2
-	 *
-	 * URL:
-	 * http://javascript.nwbox.com/ContentLoaded/
-	 * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
-	 *
-	 */
-
-	// @w window reference
-	// @f function reference
-	function ContentLoaded(win, fn) {
-
-		var done = false, top = true,
-		init = function(e) {
-			if (e.type == "readystatechange" && doc.readyState != "complete") return;
-			(e.type == "load" ? win : doc).detachEvent("on" + e.type, init, false);
-			if (!done && (done = true)) fn.call(win, e.type || e);
-		},
-		poll = function() {
-			try { root.doScroll("left"); } catch(e) { setTimeout(poll, 50); return; }
-			init('poll');
-		};
-
-		if (doc.readyState == "complete") fn.call(win, EMPTY_STRING);
-		else {
-			if (doc.createEventObject && root.doScroll) {
-				try { top = !win.frameElement; } catch(e) { }
-				if (top) poll();
-			}
-			addEvent(doc,"readystatechange", init);
-			addEvent(win,"load", init);
-		}
-	};
-})(this);
diff --git a/package.json b/package.json
index 5708ba3d703521f3e977769af40b039179ac10b1..0a1a1d74f341397db4fc8eeda1d3b5afb302e5f4 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,9 @@
     "grunt-contrib-watch": "^0.6.1",
     "grunt-styledocco": "^0.1.4",
     "load-grunt-tasks": "^1.0.0",
-    "time-grunt": "^1.0.0"
+    "time-grunt": "^1.0.0",
+    "underscore": "^1.7.0",
+    "node-minify": "^1.0.1"
   },
   "engines": {
     "node": ">=0.10.0"