diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 4c6874ea..00000000 --- a/.gitignore +++ /dev/null @@ -1,18 +0,0 @@ -*.gem -.sass-cache -Gemfile.lock -*.gemfile.lock -.rvmrc -.rbenv-version - -# Ignore bundler config -/.bundle -/vendor/cache -/vendor/bundle -tmp/ -test/screenshots/ -test/dummy_rails/log/*.log -test/dummy_rails/public/assets/ -.DS_Store -node_modules -bower_components diff --git a/.htaccess b/.htaccess new file mode 100644 index 00000000..ee80155b --- /dev/null +++ b/.htaccess @@ -0,0 +1,7 @@ +DirectoryIndex index.php +RewriteEngine on + +RewriteCond $1 !^(index\.php|(.*)\.swf|forums|img|css|downloads|jquery|js|grocery_curd|scss|robots\.txt|favicon\.ico) +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)$ ./index.php?$1 [L,QSA] diff --git a/.project b/.project new file mode 100644 index 00000000..a953c7dd --- /dev/null +++ b/.project @@ -0,0 +1,13 @@ + + + trunk + + + + + + + com.aptana.projects.webnature + com.aptana.editor.php.phpNature + + diff --git a/Gruntfile.js b/Gruntfile.js deleted file mode 100644 index 0dc0e2be..00000000 --- a/Gruntfile.js +++ /dev/null @@ -1,387 +0,0 @@ -// Generated on 2014-07-12 using generator-ember 0.8.4 -'use strict'; -var LIVERELOAD_PORT = 35729; -var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT}); -var mountFolder = function (connect, dir) { - return connect.static(require('path').resolve(dir)); -}; - -// # Globbing -// for performance reasons we're only matching one level down: -// 'test/spec/{,*/}*.js' -// use this if you want to match all subfolders: -// 'test/spec/**/*.js' - -module.exports = function (grunt) { - // show elapsed time at the end - require('time-grunt')(grunt); - // load all grunt tasks - require('load-grunt-tasks')(grunt); - - // configurable paths - var yeomanConfig = { - app: 'app', - dist: 'dist' - }; - - grunt.initConfig({ - yeoman: yeomanConfig, - watch: { - emberTemplates: { - files: '<%= yeoman.app %>/templates/**/*.hbs', - tasks: ['emberTemplates'] - }, - compass: { - files: ['<%= yeoman.app %>/styles/{,*/}*.{scss,sass}'], - tasks: ['compass:server'] - }, - neuter: { - files: ['<%= yeoman.app %>/scripts/{,*/}*.js'], - tasks: ['neuter'] - }, - livereload: { - options: { - livereload: LIVERELOAD_PORT - }, - files: [ - '.tmp/scripts/*.js', - '<%= yeoman.app %>/*.html', - '{.tmp,<%= yeoman.app %>}/styles/{,*/}*.css', - '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' - ] - } - }, - connect: { - options: { - port: 9000, - // change this to '0.0.0.0' to access the server from outside - hostname: 'localhost' - }, - livereload: { - options: { - middleware: function (connect) { - return [ - lrSnippet, - mountFolder(connect, '.tmp'), - mountFolder(connect, yeomanConfig.app) - ]; - } - } - }, - test: { - options: { - middleware: function (connect) { - return [ - mountFolder(connect, 'test'), - mountFolder(connect, '.tmp') - ]; - } - } - }, - dist: { - options: { - middleware: function (connect) { - return [ - mountFolder(connect, yeomanConfig.dist) - ]; - } - } - } - }, - open: { - server: { - path: 'http://localhost:<%= connect.options.port %>' - } - }, - clean: { - dist: { - files: [{ - dot: true, - src: [ - '.tmp', - '<%= yeoman.dist %>/*', - '!<%= yeoman.dist %>/.git*' - ] - }] - }, - server: '.tmp' - }, - jshint: { - options: { - jshintrc: '.jshintrc', - reporter: require('jshint-stylish') - }, - all: [ - 'Gruntfile.js', - '<%= yeoman.app %>/scripts/{,*/}*.js', - '!<%= yeoman.app %>/scripts/vendor/*', - 'test/spec/{,*/}*.js' - ] - }, - mocha: { - all: { - options: { - run: true, - urls: ['http://localhost:<%= connect.options.port %>/index.html'] - } - } - }, - compass: { - options: { - sassDir: '<%= yeoman.app %>/styles', - cssDir: '.tmp/styles', - generatedImagesDir: '.tmp/images/generated', - imagesDir: '<%= yeoman.app %>/images', - javascriptsDir: '<%= yeoman.app %>/scripts', - fontsDir: '<%= yeoman.app %>/styles/fonts', - importPath: '<%= yeoman.app %>/bower_components', - httpImagesPath: '/images', - httpGeneratedImagesPath: '/images/generated', - httpFontsPath: '/styles/fonts', - relativeAssets: false - }, - dist: {}, - server: { - options: { - debugInfo: true - } - } - }, - // not used since Uglify task does concat, - // but still available if needed - /*concat: { - dist: {} - },*/ - // not enabled since usemin task does concat and uglify - // check index.html to edit your build targets - // enable this task if you prefer defining your build targets here - /*uglify: { - dist: {} - },*/ - rev: { - dist: { - files: { - src: [ - '<%= yeoman.dist %>/scripts/{,*/}*.js', - '<%= yeoman.dist %>/styles/{,*/}*.css', - '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp}', - '<%= yeoman.dist %>/styles/fonts/*' - ] - } - } - }, - useminPrepare: { - html: '.tmp/index.html', - options: { - dest: '<%= yeoman.dist %>' - } - }, - usemin: { - html: ['<%= yeoman.dist %>/{,*/}*.html'], - css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], - options: { - dirs: ['<%= yeoman.dist %>'] - } - }, - imagemin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/images', - src: '{,*/}*.{png,jpg,jpeg}', - dest: '<%= yeoman.dist %>/images' - }] - } - }, - svgmin: { - dist: { - files: [{ - expand: true, - cwd: '<%= yeoman.app %>/images', - src: '{,*/}*.svg', - dest: '<%= yeoman.dist %>/images' - }] - } - }, - cssmin: { - dist: { - files: { - '<%= yeoman.dist %>/styles/main.css': [ - '.tmp/styles/{,*/}*.css', - '<%= yeoman.app %>/styles/{,*/}*.css' - ] - } - } - }, - htmlmin: { - dist: { - options: { - /*removeCommentsFromCDATA: true, - // https://github.com/yeoman/grunt-usemin/issues/44 - //collapseWhitespace: true, - collapseBooleanAttributes: true, - removeAttributeQuotes: true, - removeRedundantAttributes: true, - useShortDoctype: true, - removeEmptyAttributes: true, - removeOptionalTags: true*/ - }, - files: [{ - expand: true, - cwd: '<%= yeoman.app %>', - src: '*.html', - dest: '<%= yeoman.dist %>' - }] - } - }, - replace: { - app: { - options: { - variables: { - ember: 'bower_components/ember/ember.js', - ember_data: 'bower_components/ember-data/ember-data.js' - } - }, - files: [ - {src: '<%= yeoman.app %>/index.html', dest: '.tmp/index.html'} - ] - }, - dist: { - options: { - variables: { - ember: 'bower_components/ember/ember.prod.js', - ember_data: 'bower_components/ember-data/ember-data.prod.js' - } - }, - files: [ - {src: '<%= yeoman.app %>/index.html', dest: '.tmp/index.html'} - ] - } - }, - // Put files not handled in other tasks here - copy: { - fonts: { - files: [ - { - expand: true, - flatten: true, - filter: 'isFile', - cwd: '<%= yeoman.app %>/bower_components/', - dest: '<%= yeoman.app %>/styles/fonts/', - src: [ - 'bootstrap-sass-official/vendor/assets/fonts/bootstrap/**' - ] - } - ] - }, - dist: { - files: [ - { - expand: true, - dot: true, - cwd: '<%= yeoman.app %>', - dest: '<%= yeoman.dist %>', - src: [ - '*.{ico,txt}', - '.htaccess', - 'images/{,*/}*.{webp,gif}', - 'styles/fonts/*' - ] - } - ] - } - }, - concurrent: { - server: [ - 'emberTemplates', - 'compass:server' - ], - test: [ - 'emberTemplates', - 'compass' - ], - dist: [ - 'emberTemplates', - 'compass:dist', - 'imagemin', - 'svgmin', - 'htmlmin' - ] - }, - emberTemplates: { - options: { - templateName: function (sourceFile) { - var templatePath = yeomanConfig.app + '/templates/'; - return sourceFile.replace(templatePath, ''); - } - }, - dist: { - files: { - '.tmp/scripts/compiled-templates.js': '<%= yeoman.app %>/templates/**/*.hbs' - } - } - }, - neuter: { - app: { - options: { - filepathTransform: function (filepath) { - return yeomanConfig.app + '/' + filepath; - } - }, - src: '<%= yeoman.app %>/scripts/app.js', - dest: '.tmp/scripts/combined-scripts.js' - } - } - }); - - grunt.registerTask('server', function (target) { - grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); - grunt.task.run(['serve:' + target]); - }); - - grunt.registerTask('serve', function (target) { - if (target === 'dist') { - return grunt.task.run(['build', 'open', 'connect:dist:keepalive']); - } - - grunt.task.run([ - 'clean:server', - 'replace:app', - 'concurrent:server', - 'neuter:app', - 'copy:fonts', - 'connect:livereload', - 'open', - 'watch' - ]); - }); - - grunt.registerTask('test', [ - 'clean:server', - 'replace:app', - 'concurrent:test', - 'connect:test', - 'neuter:app', - 'mocha' - ]); - - grunt.registerTask('build', [ - 'clean:dist', - 'replace:dist', - 'useminPrepare', - 'concurrent:dist', - 'neuter:app', - 'concat', - 'cssmin', - 'uglify', - 'copy', - 'rev', - 'usemin' - ]); - - grunt.registerTask('default', [ - 'jshint', - 'test', - 'build' - ]); -}; diff --git a/Not working Asset code/addasset.php b/Not working Asset code/addasset.php new file mode 100644 index 00000000..2b03530b --- /dev/null +++ b/Not working Asset code/addasset.php @@ -0,0 +1,224 @@ +
+ +
+

+ Purchase Order + +

+
+ +
+ +
+ +
+ + + + +
+
+

Asset Details

+
+ + +
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + +
+
+ +
+ +
+
+
+
+
+ + +
+
+ +
+
+
+ + +
+
+
+
+ + +
+
+
+
+ + +
+
+
+ +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + + +
+
+ + +
+
+
+
+ + max= value="" class="form-control" placeholder="" /> +
+
+ +
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+ +
+
+
+ + +
+
+
+
+ load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
+ + session->flashdata('error'); ?> +
+ + session->flashdata('success'); + if($success) + { + ?> +
+ + session->flashdata('success'); ?> +
+ + +
+
+ ', '
'); ?> +
+
+
+
+ + + + \ No newline at end of file diff --git a/Not working Asset code/assetdetails.php b/Not working Asset code/assetdetails.php new file mode 100644 index 00000000..167fb61f --- /dev/null +++ b/Not working Asset code/assetdetails.php @@ -0,0 +1,240 @@ +load->model('assetdetails_model'); + $this->isLoggedIn(); + } + /** + * This function used to load the first screen of the user + */ + public function index() + { + $this->global['pageTitle'] = 'Siddharth : Asset Details'; + + $this->loadViews("assetlisting", $this->global, NULL , NULL); + } + + /** + * This function is used to load the Supplier list + */ + function assetListing() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('assetdetails_model'); + + $searchText = $this->input->post('searchText'); + $data['searchText'] = $searchText; + + $this->load->library('pagination'); + + $count = $this->assetdetails_model->assetListingCount($searchText); + + $returns = $this->paginationCompress ( "assetListing/", $count, 5 ); + + $data['userRecords'] = $this->assetdetails_model->assetListing($searchText, $returns["page"], $returns["segment"]); + + $this->global['pageTitle'] = 'Siddharth : Cost Listing'; + + $this->loadViews("costListing", $this->global, $data, NULL); + } + } + /** + * This function is used to load the add new supplier */ + function addasset() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('supplier_model'); + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : AddNew Asset'; + + $this->loadViews("addasset", $this->global, NULL); + } + } + + /** + * This function is used to add new user to the system + */ + function addNewasset() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + //$PO = $this->input->post('SupplierID'); + + //$this->form_validation->set_rules('CostCenterID','Supplier Name','trim'); + $this->form_validation->set_rules('CostName','Address','trim|required|'); + $this->form_validation->set_rules('Description','Contact Number','trim'); + + + + if($this->form_validation->run() == FALSE) + { + $this->addsupplier(); + } + else + { + $CostName = ucwords(strtolower($this->input->post('CostName'))); + $Description = $this->input->post('Description'); + + + + + $Cost = array('CostName'=>$CostName, 'Description'=>$Description,'createdDate'=>date('Y-m-d H:i:sa')); + + $this->load->model('assetdetails_model'); + $result = $this->assetdetails_model->addNewasset($asset); + + if($result > 0) + { + $this->session->set_flashdata('success', 'New PO created successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO Not Create'); + } + + redirect('codeListing'); + } + } + } + /** + * This function is used load user edit information + * @param number $userId : Optional : This is user id + */ + function editOldcost($CostCenterID = NULL) + { + if($this->isAdmin() == TRUE || $CostCenterID == 1) + { + $this->loadThis(); + } + else + { + if($CostCenterID == null) + { + redirect('costListing'); + } + + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'Siddharth : Edit User'; + + $this->loadViews("editOldcost", $this->global, NULL); + } + } + + /** + * This function is used to edit the user information + */ + function editcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + //$PO = $this->input->post('PO'); + + $this->form_validation->set_rules('CostName','Cost Name','trim|required|'); + $this->form_validation->set_rules('Description','Description','trim|required|'); + + + if($this->form_validation->run() == FALSE) + { + $this->editPO(); + } + else + { + $CostName = ucwords(strtolower($this->input->post('CostName'))); + $Description = $this->input->post('Description'); + + $Cost = array('CostName'=>$CostName, 'Description'=>$Description,'createdDtm'=>date('Y-m-d H:i:sa')); + + + + $Cost = array(); + + $result = $this->costcenter_model->editcost($Cost, $CostCentreID); + + if($result == true) + { + $this->session->set_flashdata('success', 'PO updated successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO updation failed'); + } + + redirect('costListing'); + } + } + } + + /** + * This function is used to delete the user using userId + * @return boolean $result : TRUE / FALSE + */ + function deleteUser() + { + if($this->isAdmin() == TRUE) + { + echo(json_encode(array('status'=>'access'))); + } + else + { + $userId = $this->input->post('userId'); + $userInfo = array('isDeleted'=>1,'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->deleteUser($userId, $userInfo); + + if ($result > 0) { echo(json_encode(array('status'=>TRUE))); } + else { echo(json_encode(array('status'=>FALSE))); } + } + } + + + function pageNotFound() + { + $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found'; + + $this->loadViews("404", $this->global, NULL, NULL); + } +} + +?> \ No newline at end of file diff --git a/Not working Asset code/assetdetails_model.php b/Not working Asset code/assetdetails_model.php new file mode 100644 index 00000000..12d6c1e6 --- /dev/null +++ b/Not working Asset code/assetdetails_model.php @@ -0,0 +1,130 @@ +db->select('BaseT.Asset_Code, BaseT.Asset_Name, BaseT.Description, ID.SupplierID,BaseT.Department, users.UserID,BaseT.Location,BaseT.AssetOwner,BaseT.DateOfCommission,BaseT.SupportVendor,BaseT.SupportFrom,BaseT.SupportTo,BaseT.CreatedDate,PO.PODate'); + $this->db->from('T_AssetDetails as BaseT'); + $this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + $this->db->join('T_SupplierDetails as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + $this->db->join('T_PurchaseOrderDetails as PO', 'PO.PODate = BaseT.PODate','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.Asset_Code LIKE '%".$searchText."%' + OR BaseT.Asset_Name LIKE '%".$searchText."%' + OR BaseT.Description LIKE '%".$searchText."%' + OR BaseT.SupplierID LIKE '%".$searchText."%' + OR BaseT.Department LIKE '%".$searchText."%' + OR BaseT.UserID LIKE '%".$searchText."%' + OR BaseT.Location LIKE '%".$searchText."%' + OR BaseT.AssetOwner LIKE '%".$searchText."%' + OR BaseT.DateOfCommission LIKE '%".$searchText."%' + OR BaseT.SupportVendor LIKE '%".$searchText."%' + OR BaseT.SupportFrom LIKE '%".$searchText."%' + OR BaseT.SupportTo LIKE '%".$searchText."%' + OR BaseT.CreatedDate LIKE '%".$searchText."%' + OR BaseT.PurchasingCategory LIKE '%".$searchText."%' + OR BaseT.PODate LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + } + /** + * This function is used to get the user listing count + * @param string $searchText : This is optional search text + * @param number $page : This is pagination offset + * @param number $segment : This is pagination limit + * @return array $result : This is result + */ + function assetListing($searchText = '', $page, $segment) + { + $this->db->select('BaseT.Asset_Code, BaseT.Asset_Name, BaseT.Description, ID.SupplierID,BaseT.Department, users.UserID,BaseT.Location,BaseT.AssetOwner,BaseT.DateOfCommission,BaseT.SupportVendor,BaseT.SupportFrom,BaseT.SupportTo,BaseT.CreatedDate,PO.PODate'); + $this->db->from('T_AssetDetails as BaseT'); + $this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + $this->db->join('T_SupplierDetails as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + $this->db->join('T_PurchaseOrderDetails as PO', 'PO.PODate = BaseT.PODate','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.Asset_Code LIKE '%".$searchText."%' + OR BaseT.Asset_Name LIKE '%".$searchText."%' + OR BaseT.Description LIKE '%".$searchText."%' + OR BaseT.SupplierID LIKE '%".$searchText."%' + OR BaseT.Department LIKE '%".$searchText."%' + OR BaseT.UserID LIKE '%".$searchText."%' + OR BaseT.Location LIKE '%".$searchText."%' + OR BaseT.AssetOwner LIKE '%".$searchText."%' + OR BaseT.DateOfCommission LIKE '%".$searchText."%' + OR BaseT.SupportVendor LIKE '%".$searchText."%' + OR BaseT.SupportFrom LIKE '%".$searchText."%' + OR BaseT.SupportTo LIKE '%".$searchText."%' + OR BaseT.CreatedDate LIKE '%".$searchText."%' + OR BaseT.PurchasingCategory LIKE '%".$searchText."%' + OR BaseT.PODate LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + //$this->db->where('BaseT.userId !=', 1); + $this->db->limit($page, $segment); + $query = $this->db->get(); + + $result = $query->result(); + return $result; + } + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + +function addNewasset($asset) + { + $this->db->trans_start(); + $this->db->insert('T_AssetDetails', $asset); + + $Asset_Code = $this->db->insert_id(); + + $this->db->trans_complete(); + + return $Asset_Code; + } + + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + function getuserInfo($assetcode) + { + $this->db->select('Asset_Code, Asset_Name,Description,Department,Location,AssetOwner,SupplierName,DateOfPurchase,DateOfCommission,SupportVendor,SupportFrom,SupportTo,CreatedDate'); + $this->db->from('T_AssetDetails'); + //$this->db->where('isDeleted', 0); + //$this->db->where('roleId !=', 1); + $this->db->where('Asset_Code', $assetcode); + $query = $this->db->get(); + + return $query->result(); + } + function editPO($asset, $assetcode) + { + $this->db->where('Asset_Code', $assetcode); + $this->db->update('T_AssetDetails', $asset); + + return TRUE; + } + /** + * This function is used to delete the user information + * @param number $userId : This is user id + * @return boolean $result : TRUE / FALSE + + function deletePO($PO, $POinfo) + { + $this->db->where('PO', $PO); + $this->db->update('T_PurchaseOrderDetails', $POInfo); + + return $this->db->affected_rows(); + }*/ +} +?> \ No newline at end of file diff --git a/README.md b/README.md index 15af4cca..2ff6251e 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,49 @@ -# inspinia -Bootstrap admin theme +# Admin Panel - User Management using CodeIgniter +#####Admin Panel - User Management Demo using CodeIgniter + AdminLTE Bootstrap Theme + +The code is uploaded to demonstrate the simple role based Admin Panel application using CodeIgniter(MVC Framework) + +## Installation + +Download the code from repository. +Unzip the zip file. + +Open browser; goto [localhost/phpmyadmin](http://localhost/phpmyadmin). + +Create a database with name "cias" and import the file "cias.sql" in that database. + +Copy the remaining code into your root directory: + +for example, for windows + +**WAMP : c:/wamp/www/cias** + +OR + +**XAMPP : c:/xampp/htdocs/cias** + +Open browser; goto [localhost/cias](http://localhost/cias) and press enter: + +The login screen will appear. + +To login, I am going to provide the user-email ids and password below. + +**System Administrator Account :** + +email : admin@codeinsect.com + +password : codeinsect + +**Manager Account :** + +email : manager@codeinsect.com + +password : codeinsect + +**Employee Account :** + +email : employee@codeinsect.com + +password : codeinsect + +Once you logged in with System Administrator account, you can create user or edit previous user if you want. diff --git a/app/CREDITS.md b/app/CREDITS.md new file mode 100644 index 00000000..b6c4dc3f --- /dev/null +++ b/app/CREDITS.md @@ -0,0 +1,49 @@ +# Credits + +The following products were used in the creation of Appunto-Auth. Trademarks and copyrights are property of their respective owners. + +## CodeIgniter +http://codeigniter.com/ + +CodeIgniter is a powerful PHP framework with a very small footprint, built for PHP coders who need a simple and elegant toolkit to +create full-featured web applications.

+ +For licensing information, please visit http://codeigniter.com/user_guide/license.html + +## Sencha Ext JS +http://www.sencha.com/products/extjs/ + +Ext JS is a JavaScript framework for building rich internet applications that work in any web browser. +Appunto-Auth uses the GPL version of Ext JS. + +For licensing information, please visit http://www.sencha.com/products/extjs/licensing/ + +## Silk Icons +http://www.famfamfam.com/lab/icons/silk/ + +Silk is a smooth, free icon set, containing over 700 16-by-16 pixel icons in strokably-soft PNG format. + +Silk is licensed under a Creative Commons Attribution 2.5 License. + +## Fugue Icons +http://p.yusukekamiyamane.com/ + +Icon set by Yusuke Kamiyamane. + +Fugue Icons are licensed under a Creative Commons Attribution 3.0 License. + +## Silk companion icon set +http://www.damieng.com/icons/silkcompanion + +Icon set by Damien Guard. + +Silk companion icon set is licensed under a Creative Commons Attribution 2.5 License. + +## Translations + +__portuguese-br__ + +CodeIgniter translation: https://github.com/CIBr/CodeIgniter-Portuguese-BR + +Appunto-Auth translation: Loanda Drew and Ricardo Silva + diff --git a/app/LICENSE.md b/app/LICENSE.md new file mode 100644 index 00000000..2a071986 --- /dev/null +++ b/app/LICENSE.md @@ -0,0 +1,32 @@ +# Appunto-Auth license + +####License for all files except for third party files, the app.js and theme.css files + +Appunto Auth is licensed under a version of the MIT license. +Please do not remove the copyright and permission notice contained in this file. + +Copyright (c) 2012-2014 Bill Clinton (bclinton@appunto.net) + +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 in the application/libraries/appunto-auth folder + +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. + +#### License for all third party files + +The license of all third party files are governed by the terms of their licenses. Please see +the CREDITS.MD file for a list of all third party files. + +#### License for app.js and theme.css files + +Per Sencha requirements, the app.js and theme.css files are governed by the terms of the GPLv3 license. diff --git a/app/README.md b/app/README.md new file mode 100644 index 00000000..f1c6213a --- /dev/null +++ b/app/README.md @@ -0,0 +1,284 @@ +# Appunto-Auth + +An authentication library for CodeIgniter with a Sencha Ext JS interface and a simple ACL. + +current release 0.1.3 + +The goal of Appunto-Auth is to provide the CodeIgniter developer with an authentication and user management +system that takes authentication code out of an application's individual controller classes and functions. + +For more information go to http://www.appunto.net/appunto-auth + + + +- [Features](#features) +- [Installing](#installing) + - [CodeIgniter Setup](#codeigniter-setup) + - [Download Appunto-Auth](#download-appunto-auth) + - [Update Codeigniter configuration files](#update-codeigniter-configuration-files) +- [Support for multiple languages](#support-for-multiple-languages) + - [Translating Appunto-Auth](#translating-appunto-auth) +- [Helpers](#helpers) +- [Public Library Functions](#public-library-functions) +- [Additional Notes](#additional-notes) + - [A note on removing index.php](#a-note-on-removing-indexphp) + - [A note on _remap (Remapping Function Calls)](#a-note-on-_remap-remapping-function-calls) + - [Limitations](#limitations) + + + +## Features + - Administrative interface using ExtJS + - Authentication performed in a hook rather than controller code + - Simple ACL with roles and permissions + - Restrict/Allow access using controller/function paths + - Hashes passwords in database using phpass library + - Multiple language support + +## Installing + +### CodeIgniter Setup + +Enable CodeIgniter to use the database to store sessions by following the instructions +in the _Saving Session Data to a Database_ section of the _Session Class_ page in the CodeIgniter +User Guide located at http://codeigniter.com/user_guide/libraries/sessions.html + + - set an __encryption_key__ in CodeIgniter's config/config.php + - create the ci_sessions database table + - enable the database option in your config.php by setting __sess_use_database__ to TRUE in CodeIgniter's config.php + +video walkthrough of this step here: https://www.youtube.com/watch?v=GlQSNBO2Eg4 + + +### Download Appunto-Auth + +The latest version of Appunto-Auth is available at http://www.appunto.net/appunto-auth/download + +You can download the most recent working build at https://github.com/BillClinton/Appunto-Auth + +The Appunto-Auth download contains 4 folders: +``` + . + |-application + |-resources + |-db + |-src +``` + +#### Copy the application and resources folders to your application folder + +The application folder contains controllers, models, views, helpers, libraries, and config folders. +While it is always a good idea to back up your application, the files contained in these folders are in +appunto-auth subfolders and should not overwrite anything in your existing CodeIgniter folder structure. + +The files in the language folder are not in an appunto-auth subfolder, but unless you already have a file +named appunto_auth_lang.php in one of your language folders (unlikely), you don't have to worry about any +language file overwriting + +The files in the resources folder contain javascript, css and images needed by the Appunto-Auth admin interface. + +Copy the downloaded __applications__ and __resources__ folders into your main Codeigniter folder (the folder that +contains the system and application folder) + +Your CodeIgniter folder should now look like this: +``` + . + |-application + |-resources + |-system + |-user_guide (if you haven't deleted it yet) +``` + +### Update Codeigniter configuration files + +#### Load the Appunto_auth.php library file in autoload.php +Include a reference to the Appunto_auth library in CodeIgniter's config/autoload.php file. CodeIgniter will be calling a method in this library in a post_controller_constructor hook, so it will be needed in every controller. Therefore there is no reason to load it in your individual controllers rather than in the autoload file. Example: + +``` +$autoload['libraries'] = array('appunto-auth/appunto_auth'); +``` + +#### Import the Appunto-Auth tables +Use the table creation script in the __db__ folder to create the Appunto-Auth tables. You can use the command line: + +``` +mysql -u [db username] -p [db name] < db/create_auth_db.sql +``` +Or just paste the contents of this file into PhpMyAdmin. + +Your database should already contain the ci_session table. + +#### Include Reference to Hook in hooks.php +Appunto-Auth authenticates the user in a post_controller_constructor hook. The hook function resides in the Appunto_auth.php +library file. A reference to this hook must be included in CodeIgniter's config/hooks.php file using the following format: + +``` +$hook['post_controller_constructor'] = array( + 'class' => 'Appunto_auth', + 'function' => 'require_authentication_hook', + 'filename' => 'appunto-auth/Appunto_auth.php', + 'filepath' => 'libraries', + 'params' => array() +); +``` +#### Enable CodeIgniter hooks +Enable CodeIgniter hooks by setting __enable_hooks__ to TRUE in your application's config.php + +## Support for multiple languages + +The current release of Appunto-Auth includes one additional language: Brazilian Portuguese. If you translate Appunto-Auth +to your native language, I would love to include it in future releases. Please send me the files at code@appunto.net +or fork the project and add them yourself using these instructions: http://kbroman.org/github_tutorial/pages/fork.html + +To try the Portuguese translation, change the value of the $config['language'] setting in the CodeIgniter config/config.php +file from __english__ to __portuguese-br__ + +### Translating Appunto-Auth + +#### Codeigniter language files + +The first step in translating Appunto-Auth is to create or find a translation of the CodeIgniter language files. +When you change the language via the $config['language'] setting in the CodeIgniter config/config.php, CodeIgniter +libraries will expect these files to be there and you will most likely experience PHP errors if they are not there. + +There are many translations out there for CodeIgniter's language files and you should be able to find one for your language. +If not, copy the English files from system/language/english into application/language/your-language to prevent PHP errors. You +can then change the text in these files where necessary. If you complete a full translation, please post it and share it with +other CodeIgniter developers. + +#### Appunto-Auth Codeigniter language file + +Appunto-Auth's CodeIgniter language files are included in the application/language/[language-name] folders. To add your own +translation, create a folder with the name of your language in the application/language/ folder. Copy the +appunto_auth_lang.php into your new folder from one of the other language folders and use it as a template. + + __The name of this folder must match the name of the value of the $config['language'] setting in the CodeIgniter config/config.php__ + + +#### Appunto-Auth admin interface language file + +The language files used to translate many of the elements of the admin interface are javascript files located +at resources/appunto-auth/lang/ . To translate this into your own language, start with the english.js file and rename it to +your-language.js. + + __The name of this file must match the name of the CodeIgniter language folder and the value of the $config['language'] +setting in the CodeIgniter config/config.php__ + +Change the text values from English to your native language, but be very careful about quotes and commas. Javascript can +be very finicky and a missed comma or misplaced quote can cause a javascript error that will prevent the application from +opening at all. If your admin interface does not load, check your syntax. Please convert all accented and special characters +to HTML safe entities using a converter like this: http://www.kidquick.com/JoomlaTools/frenchAccents.htm + +## Helpers + +__appunto_login_box()__ + +creates a login dialog + +__anchor_if_permitted($permission,$uri,$title,$attributes)__ + +Creates an anchor based on the local URL if user has the appropriate permission. The permission parameter is case +sensitive and must match the internal name of a permission you have created in the admin interface for this +function to return a link + +This helper uses the anchor() helper function from CodeIgniter's URL Helper so use the guidelines for that function for +the 2nd, 3rd and 4th parameters. + +__appunto_username()__ + +Returns the user's username, if logged in. + +__appunto_logout_link($show_if_logged_out,$attributes)__ + +Creates a logout link based on the logout path defined in the appunto_auth.php config file, using the logout text specified +in the appunto_auth_lang.php file. + +If the first parameter is true, a logout link will be returned even if the user is not logged in. Defaults to false. + +The second parameter can contain a list of attributes you would like added to the link. The attributes can be a simple +string or an associative array, as defined by the anchor() helper function from CodeIgniter's URL Helper. + +__is_logged_in()__ + +Returns true if the user is logged in, false if the user is not logged in. + +## Public Library Functions + +While one of the goals of Appunto-Auth is to take authentication code out of the application's controllers, +occasionally situations require some user control within the controller classes, for example if you want your +default controller to redirect to another controller depending on the user's permissions. + +These functions can be called using the following syntax: +``` +$this->appunto_auth->function_name() +``` + +__logged_in()__ + +Returns true if the user is logged in, false if the user is not logged in. + +__get_username()__ + +Returns the user's username if the user is logged in, false if the user is not logged in. + +__get_user_id()__ + +Returns the user's id if the user is logged in, false if the user is not logged in. + +__userHasPermission($permission)__ + +The $permission parameter is case sensitive and must match the internal name of a permission you have created in the admin interface. + +Returns true if the user has the specified permission, false if the user is not logged in or does not +have the specified permission. + + +## Additional Notes + +### A note on removing index.php + +You may remove the index.php from your URLs as described in the CodeIgniter user guide, but make sure you alter the rewrite rule to exclude the resources folder so the css and javascript files are not served by the index.php. If you are using the example .htaccess from the user guide: +``` +RewriteEngine on +RewriteCond $1 !^(index\.php|images|robots\.txt) +RewriteRule ^(.*)$ /index.php/$1 [L] +``` +add resources to the RewriteCond line like this: +``` +RewriteEngine on +RewriteCond $1 !^(index\.php|images|robots\.txt|resources) +RewriteRule ^(.*)$ /index.php/$1 [L] +``` +If your application is not being served from the root of your domain, be sure to alter the third line with the correct path: +``` +RewriteRule ^(.*)$ /myapplication/index.php/$1 [L] +``` + +### A note on _remap (Remapping Function Calls) + +CodeIgniter allows the developer to remap function calls as detailed here: https://ellislab.com/codeigniter/user-guide/general/controllers.html#remapping + +If a controller does contain a _remap function, AppuntoAuth's verification procedure will verify the user if the user has +necessary permissions to access a function in that controller that matches the user's request path (the normal procedure), +or if the user has the necessary permissions to access the _remap function. + +As noted in the CodeIgniter user guide: "If your controller contains a function named _remap(), it will always get called +regardless of what your URI contains. It overrides the normal behavior in which the URI determines which function is called, +allowing you to define your own function routing rules." Therefore AppuntoAuth assumes any call to a controller with a _remap +function could be a call to the _remap function and verifies the user's permissions for the _remap function. + +If additional access levels are desired in a controller with a _remap function, the developer must add them to the controller code. + +### Limitations + +#### MySQL only + +The current release has only been tested on MySQL. I hope to add support for other databases in future releases. + +#### Controllers with the same name + +CodeIgniter allows you to have controllers with the same name as long as they are located in different folders. This is not +currently supported by Appunto-Auth and all controller classes in your application must have unique names. + + + diff --git a/app/application/config/appunto-auth/appunto_auth.php b/app/application/config/appunto-auth/appunto_auth.php new file mode 100644 index 00000000..945e8b01 --- /dev/null +++ b/app/application/config/appunto-auth/appunto_auth.php @@ -0,0 +1,87 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/controllers/appunto-auth/ui.php b/app/application/controllers/appunto-auth/ui.php new file mode 100644 index 00000000..df9912ab --- /dev/null +++ b/app/application/controllers/appunto-auth/ui.php @@ -0,0 +1,706 @@ +load->library('appunto-auth/appunto_auth'); + $this->load->library('form_validation'); + $this->load->database(); + } + + public function _remap($method,$params = array()) + { + $result = array(); + + $func = 'index'; + if (array_key_exists(0,$params)) $func = $params[0]; + + $invalid_function = array ( 'success' => false, 'msg' => 'Invalid action.'); + + switch ($method) + { + case 'admin': + // $this->load->helper('appunto-auth_helper'); // helper is being loaded in library + switch ($func) + { + case 'index': + echo appunto_auth_admin(); // helper function + break; + default: $this->appunto_auth->sendResponse($invalid_function); + } + break; + + case 'user': + + // $this->load->model('usermodel'); // usermodel is being loaded in library + switch ($func) + { + case 'read': + $this->appunto_auth->controller_read($this->usermodel); + break; + case 'create': + $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); + $this->form_validation->set_rules('name', 'Name', 'trim|xss_clean'); + $this->form_validation->set_rules('surname', 'Last name', 'trim|xss_clean'); + $this->form_validation->set_rules('email', 'Email address', 'trim|required|valid_email|xss_clean'); + $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback__password_strength|callback__hash'); + + $this->appunto_auth->controller_create($this->usermodel); + break; + case 'update': + $this->form_validation->set_rules('id', 'ID', 'trim|required|xss_clean'); + $this->form_validation->set_rules('username', 'Username', 'trim|xss_clean'); + $this->form_validation->set_rules('name', 'Name', 'trim|xss_clean'); + $this->form_validation->set_rules('surname', 'Last name', 'trim|xss_clean'); + $this->form_validation->set_rules('email', 'Email address', 'trim|valid_email|xss_clean'); + + $this->appunto_auth->controller_update($this->usermodel); + break; + case 'update_pass': + $this->form_validation->set_rules('id', 'ID', 'trim|required|xss_clean'); + $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback__password_strength|callback__hash'); + + $this->appunto_auth->controller_update($this->usermodel); + break; + case 'destroy': + $this->form_validation->set_rules('id', 'Record ID', 'trim|required|numeric|xss_clean'); + + $this->appunto_auth->controller_destroy($this->usermodel); + break; + case 'roles': + $this->form_validation->set_rules('id', 'Record ID', 'trim|required|numeric|xss_clean'); + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $sort = $this->input->get_post('sort', TRUE); + + $id = $this->input->get_post('id', TRUE); + + $property = null; + $direction = null; + $active_filter = false; + + // get sort params + $sort_array = json_decode($sort); + if (count($sort_array) > 0) + { + $property = $sort_array[0]->property; + $direction = $sort_array[0]->direction; + } + + $result = $this->usermodel->get_user_roles($id,$property,$direction); + } + $this->appunto_auth->sendResponse($result); + break; + case 'permissions': + $this->form_validation->set_rules('id', 'Record ID', 'trim|required|numeric|xss_clean'); + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $sort = $this->input->get_post('sort', TRUE); + + $id = $this->input->get_post('id', TRUE); + + $property = null; + $direction = null; + $active_filter = false; + + // get sort params + $sort_array = json_decode($sort); + if (count($sort_array) > 0) + { + $property = $sort_array[0]->property; + $direction = $sort_array[0]->direction; + } + + $result = $this->usermodel->get_user_permissions($id,$property,$direction); + + } + $this->appunto_auth->sendResponse($result); + break; + case 'add_role': + $this->form_validation->set_rules('id', 'Role ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('user_id', 'User ID', 'trim|required|numeric|xss_clean'); + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $role_id = $this->input->get_post('id', TRUE); + $user_id = $this->input->get_post('user_id', TRUE); + + $result = $this->usermodel->add_role($role_id,$user_id); + } + $this->appunto_auth->sendResponse($result); + break; + case 'remove_role': + $this->form_validation->set_rules('id', 'Role ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('user_id', 'User ID', 'trim|required|numeric|xss_clean'); + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $role_id = $this->input->get_post('id', TRUE); + $user_id = $this->input->get_post('user_id', TRUE); + + $result = $this->usermodel->remove_role($role_id,$user_id); + } + $this->appunto_auth->sendResponse($result); + break; + case 'add_permission': + $this->form_validation->set_rules('id', 'Permission ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('user_id', 'User ID', 'trim|required|numeric|xss_clean'); + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $permission_id = $this->input->get_post('id', TRUE); + $user_id = $this->input->get_post('user_id', TRUE); + + $result = $this->usermodel->add_permission($permission_id,$user_id); + } + $this->appunto_auth->sendResponse($result); + break; + case 'remove_permission': + $this->form_validation->set_rules('id', 'Permission ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('user_id', 'User ID', 'trim|required|numeric|xss_clean'); + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $permission_id = $this->input->get_post('id', TRUE); + $user_id = $this->input->get_post('user_id', TRUE); + + $result = $this->usermodel->remove_permission($permission_id,$user_id); + } + $this->appunto_auth->sendResponse($result); + break; + default: $this->appunto_auth->sendResponse($invalid_function); + } + break; + + case 'role': + $this->load->model('appunto-auth/rolemodel'); + switch ($func) + { + case 'read': + $this->appunto_auth->controller_read($this->rolemodel); + break; + case 'create': + $this->form_validation->set_rules('name', 'Name', 'trim|required|min_length[3]|max_length[32]|xss_clean'); + $this->form_validation->set_rules('description', 'Description', 'trim|max_length[64]|xss_clean'); + + $this->appunto_auth->controller_create($this->rolemodel); + break; + case 'update': + $this->form_validation->set_rules('id', 'ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('name', 'Name', 'trim|min_length[3]|max_length[32]|xss_clean'); + $this->form_validation->set_rules('description', 'Description', 'trim|max_length[64]|xss_clean'); + + $this->appunto_auth->controller_update($this->rolemodel); + break; + case 'destroy': + $rules = 'trim|required|numeric|xss_clean'; + $rules .= '|callback__validate_role_in_use_by_user'; + $rules .= '|callback__validate_role_in_use_by_permission'; + + $this->form_validation->set_rules('id', 'Record ID', $rules); + + $this->appunto_auth->controller_destroy($this->rolemodel); + break; + case 'permissions': + $this->form_validation->set_rules('id', 'Record ID', 'trim|required|numeric|xss_clean'); + + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $sort = $this->input->get_post('sort', TRUE); + + $id = $this->input->get_post('id', TRUE); + + $property = null; + $direction = null; + $active_filter = false; + + // get sort params + $sort_array = json_decode($sort); + if (count($sort_array) > 0) + { + $property = $sort_array[0]->property; + $direction = $sort_array[0]->direction; + } + + $result = $this->rolemodel->get_role_permissions($id,$property,$direction); + } + $this->appunto_auth->sendResponse($result); + break; + case 'add_permission': + $this->form_validation->set_rules('id', 'Permission ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('role_id', 'Role ID', 'trim|required|numeric|xss_clean'); + + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $permission_id = $this->input->get_post('id', TRUE); + $role_id = $this->input->get_post('role_id', TRUE); + + $result = $this->rolemodel->add_permission($permission_id,$role_id); + } + + $this->appunto_auth->sendResponse($result); + break; + case 'remove_permission': + $this->form_validation->set_rules('id', 'Permission ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('role_id', 'Role ID', 'trim|required|numeric|xss_clean'); + + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $permission_id = $this->input->get_post('id', TRUE); + $role_id = $this->input->get_post('role_id', TRUE); + + $result = $this->rolemodel->remove_permission($permission_id,$role_id); + } + + $this->appunto_auth->sendResponse($result); + break; + default: $this->appunto_auth->sendResponse($invalid_function); + } + break; + + case 'permission': + $this->load->model('appunto-auth/permissionmodel'); + switch ($func) + { + case 'read': + $this->appunto_auth->controller_read($this->permissionmodel); + break; + case 'create': + $this->form_validation->set_rules('name', 'Name', 'trim|required|min_length[3]|max_length[32]|xss_clean'); + $this->form_validation->set_rules('description', 'Description', 'trim|max_length[64]|xss_clean'); + + $this->appunto_auth->controller_create($this->permissionmodel); + break; + case 'update': + $this->form_validation->set_rules('id', 'ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('name', 'Name', 'trim|min_length[3]|max_length[32]|xss_clean'); + $this->form_validation->set_rules('description', 'Description', 'trim|max_length[64]|xss_clean'); + + $this->appunto_auth->controller_update($this->permissionmodel); + break; + case 'destroy': + $rules = 'trim|required|numeric|xss_clean'; + $rules .= '|callback__validate_permission_in_use_by_user'; + $rules .= '|callback__validate_permission_in_use_by_role'; + $rules .= '|callback__validate_permission_in_use_by_path'; + + $this->form_validation->set_rules('id', 'Record ID', $rules); + + $this->appunto_auth->controller_destroy($this->permissionmodel); + break; + default: $this->appunto_auth->sendResponse($invalid_function); + } + break; + + case 'path': + $this->load->model('appunto-auth/pathmodel'); // pathmodel is being loaded in the library + switch ($func) + { + case 'read': + $this->appunto_auth->controller_read($this->pathmodel); + break; + + case 'verify_paths': + // start off by marking all paths unfound. + $this->pathmodel->mark_all_unfound(); + + $data = array(); + $controllers = array(); + + $dir = APPPATH.'controllers/'; + $files = scandir($dir); + + $controller_dirs = array_filter($files, function($filename) { + $dir = APPPATH.'controllers/'; // not worth making it a global and "use" is only php 5.3+ + return (is_dir($dir.$filename) && $filename != '..'); + }); + + $new_cnt = 0; + $newPaths = array(); + $failed = array(); + + foreach ($controller_dirs as $controller_dir) + { + // get files in this directory + $files = scandir($dir.$controller_dir); + $controller_files = array_filter($files, function($filename) { + return (substr(strrchr($filename, '.'), 1)=='php') ? true : false; + }); + foreach ($controller_files as $filename) + { + $this_dir = ($controller_dir == '.') ? $dir : $dir.$controller_dir.'/'; + + $classname = ucfirst(substr($filename, 0, strrpos($filename, '.'))); + + if (!class_exists($classname)||($classname == 'Ui')) + { + + if ($filename != 'ui.php') require_once($this_dir.$filename); + + $classname = ucfirst(substr($filename, 0, strrpos($filename, '.'))); + $controller = new $classname(); + $methods = get_class_methods($controller); + + foreach ($methods as $method) + { + + $full_path = ($controller_dir=='.') ? $filename : $controller_dir.'/'.$filename; + + if ($this->pathmodel->path_exists($controller_dir,$classname,$method)) + { + $this->pathmodel->mark_found($controller_dir,$classname,$method); + } + else + { + if ((substr($method,0,1)!='_' && $method!='get_instance') || $method=='_remap') { + $this->pathmodel->create_record($controller_dir,$filename,$full_path,$classname,$method,1); + $newPaths[$new_cnt] = $full_path; + $new_cnt++; + } + } + } + } + else + { + array_push($failed, $classname); + } + } + } + + + if (count($failed)>0) + { + $msg = 'You have '.count($failed).' controller'.((count($failed)>1) ? 's':'').' with a duplicate name: '; + $msg .= "
"; + $msg .= ''.implode(",", $failed).''; + $msg .= "
"; + $msg .= $this->lang->line('appunto_no_homonymous_controllers'); + $result = array ( + 'success' => false, + 'msg' => $msg + ); + } + else + { + $msg = 'No new paths found.'; + if ($new_cnt > 0) + { + $msg = $new_cnt.' new path'.($new_cnt > 1 ? "s":"").' found.'; + $msg .= ''; + } + $result = array ( + 'success' => true, + 'msg' => $msg, + 'total' => $new_cnt + ); + } + $this->appunto_auth->sendResponse($result); + break; + + case 'update': + $this->form_validation->set_rules('id', 'ID', 'trim|required|numeric|xss_clean'); + $this->form_validation->set_rules('public_flag', 'Visibility (public/private) ', 'trim|numeric|xss_clean'); + $this->form_validation->set_rules('permission_id', 'Permission ID', 'trim|numeric|xss_clean'); + + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + // return all POST items with XSS filter + $data = $this->input->post(NULL, TRUE); + + // disregard this field which may be sent with permission_id change + if (isset($data['permission_name'])) unset($data['permission_name']); + + // clear any permissions if we are making this a public path + if (isset($data['public_flag']) && $data['public_flag']==1) + { + $ignore = $this->pathmodel->clear_permissions($data); + } + + if (count($data)>1) + { + $result = $this->pathmodel->update_record($data); + } + else if (!isset($result)) + { + $result = array ( + 'success' => false, + 'msg' => 'No updates attempted.' + ); + } + } + $this->appunto_auth->sendResponse($result); + break; + + case 'destroy': + $this->form_validation->set_rules('id', 'ID', 'trim|required|numeric|xss_clean'); + + // create array from post data + $data = $this->input->post(NULL, TRUE); + + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + $this->appunto_auth->sendResponse($result); + } + else if ($this->pathmodel->is_marked_found($data)) + { + $result = array ( + 'success' => false, + 'msg' => $this->lang->line('appunto_path_found_in_filesystem') + ); + $this->appunto_auth->sendResponse($result); + } + else + { + $this->appunto_auth->controller_destroy($this->pathmodel); + } + break; + + case 'delete_not_found': + $result = $this->pathmodel->delete_not_found(); + $this->appunto_auth->sendResponse($result); + break; + + case 'remove_permission': + $this->form_validation->set_rules('id', 'ID', 'trim|required|numeric|xss_clean'); + + if ($this->form_validation->run()==FALSE) + { + $result = $this->_validation_error(); + } + else + { + $data = $this->input->post(NULL, TRUE); + $result = $this->pathmodel->clear_permissions($data); + } + $this->appunto_auth->sendResponse($result); + break; + + default: $this->appunto_auth->sendResponse($invalid_function); + } + break; + + case 'session': + $this->load->model('appunto-auth/sessionmodel'); + switch ($func) + { + case 'read': + $this->appunto_auth->controller_read($this->sessionmodel); + break; + case 'destroy': + $this->form_validation->set_rules('id', 'Record ID', 'trim|required|xss_clean'); + $this->appunto_auth->controller_destroy($this->sessionmodel); + break; + default: $this->appunto_auth->sendResponse($invalid_function); + } + break; + + case 'statusinfo': + $info_array = array(); + + array_push($info_array, array ( + 'info_item' => 'Codeigniter version', + 'info_val' => CI_VERSION + )); + array_push($info_array, array ( + 'info_item' => 'Appunto-Auth version', + 'info_val' => $this->config->item('appunto_auth_version', 'appunto-auth/appunto_auth') + )); + + $hooks_enabled = $this->config->item('enable_hooks'); + array_push($info_array, array ( + 'info_item' => 'Hooks enabled', + 'info_val' => $hooks_enabled, + 'info_note' => (!$hooks_enabled ? $this->lang->line('appunto_no_hook') : '') + )); + + $csrf_protection = $this->config->item('csrf_protection'); + array_push($info_array, array ( + 'info_item' => $this->lang->line('appunto_csrf_protection'), + 'info_val' => $csrf_protection, + 'info_note' => (!$csrf_protection ? $this->lang->line('appunto_set_true') : '') + )); + + + $sessions_using_database = $this->config->item('sess_use_database'); + array_push($info_array, array ( + 'info_item' => $this->lang->line('appunto_db_sessions'), + 'info_val' => $sessions_using_database, + 'info_note' => (!$sessions_using_database? $this->lang->line('appunto_set_true') : '') + )); + + $sessions_encrypted = $this->config->item('sess_encrypt_cookie'); + array_push($info_array, array ( + 'info_item' => $this->lang->line('appunto_encrypted_cookies'), + 'info_val' => $sessions_encrypted, + 'info_note' => (!$sessions_encrypted ? $this->lang->line('appunto_set_true') : '') + )); + + $allow_private_without_permission = $this->config->item('allow_private_without_permission', 'appunto-auth/appunto_auth'); + array_push($info_array, array ( + 'info_item' => $this->lang->line('appunto_private_sans_perm'), + 'info_val' => $allow_private_without_permission, + 'info_note' => ($allow_private_without_permission? $this->lang->line('appunto_private_sans_perm_warn') : '') + )); + + $result = array ( + 'success' => true, + 'rows' => $info_array + ); + $this->appunto_auth->sendResponse($result); + + break; + + case 'keep-alive': + $result = array ( + 'success' => true + ); + $this->appunto_auth->sendResponse($result); + break; + + default: + $result = array ( + 'success' => false, + 'msg' => 'Invalid method.' + ); + $this->appunto_auth->sendResponse($result); + } + } + + function _validation_error() + { + return array ( + 'success' => false, + 'msg' => $this->lang->line('appunto_errors_encountered'), + 'errors' => validation_errors() + ); + } + + function _password_strength($pass) + { + $pass_regex = $this->config->item('password_regex_php', 'appunto-auth/appunto_auth'); + + if (preg_match($pass_regex,$pass)!==1) + { + $this->form_validation->set_message( '_password_strength', $this->lang->line('appunto_password_strength_fail')); + return false; + } + + return true; + } + + function _validate_permission_in_use_by_user($id) + { + if ($this->permissionmodel->in_use_by_user($id)) + { + $this->form_validation->set_message( + '_validate_permission_in_use_by_user', + $this->lang->line('appunto_permission_in_use_by_user') + ); + return false; + } + return true; + } + + function _validate_permission_in_use_by_role($id) + { + if ($this->permissionmodel->in_use_by_role($id)) + { + $this->form_validation->set_message( + '_validate_permission_in_use_by_role', + $this->lang->line('appunto_permission_in_use_by_role') + ); + return false; + } + return true; + } + + function _validate_permission_in_use_by_path($id) + { + if ($this->permissionmodel->in_use_by_path($id)) + { + $this->form_validation->set_message( + '_validate_permission_in_use_by_path', + $this->lang->line('appunto_permission_in_use_by_path') + ); + return false; + } + return true; + } + + function _validate_role_in_use_by_user($id) + { + if ($this->rolemodel->in_use_by_user($id)) + { + $this->form_validation->set_message( + '_validate_role_in_use_by_user', + $this->lang->line('appunto_role_in_use_by_user') + ); + return false; + } + return true; + } + + function _validate_role_in_use_by_permission($id) + { + if ($this->rolemodel->in_use_by_permission($id)) + { + $this->form_validation->set_message( + '_validate_role_in_use_by_permission', + $this->lang->line('appunto_role_in_use_by_permission') + ); + return false; + } + return true; + } + + function _hash($str) + { + return $this->appunto_auth->hashPassword($str); + } +}; + diff --git a/app/application/controllers/appunto-auth/user.php b/app/application/controllers/appunto-auth/user.php new file mode 100644 index 00000000..90c5d591 --- /dev/null +++ b/app/application/controllers/appunto-auth/user.php @@ -0,0 +1,157 @@ +load->library('appunto-auth/appunto_auth'); + + $this->load->library('form_validation'); + } + + public function login() + { + if (isset($_SERVER['HTTP_REFERER'])) + { + $this->session->set_userdata('prev_url', $_SERVER['HTTP_REFERER']); + } + else + { + $this->session->set_userdata('prev_url', base_url()); + } + + + $this->load->helper('appunto-auth/appunto-auth'); + + if ($this->appunto_auth->logged_in()) redirect($this->router->default_controller); + + $data = array(); + $data['auth_message'] = $this->session->flashdata('auth_message'); + $data['site_name'] = $this->config->item('site_name', 'appunto-auth/appunto_auth'); + + if ($_SERVER['REQUEST_METHOD'] == 'GET') + { + $this->load->view('appunto-auth/login',$data); + } + else if ($_SERVER['REQUEST_METHOD'] == 'POST') + { + + $this->form_validation->set_rules('username', 'lang:appunto_form_username', 'trim|required|xss_clean'); + $this->form_validation->set_rules('password', 'lang:appunto_form_password', 'trim|required|xss_clean'); + + $username = $this->input->post('username', TRUE); + $ip_address = $this->input->ip_address(); + $user_agent = $this->input->user_agent(); + + if (!$this->form_validation->run()) + { + $this->usermodel->record_login_attempt($username, $ip_address, 0, $user_agent, 'form validation: '.validation_errors('[',']')); + //$uri = $this->input->post('url', TRUE); + $this->load->view('appunto-auth/login',$data); + } + else + { + $user = $this->usermodel->getLoginInfo( $this->input->post('username', TRUE) ); + $pass = $this->input->post('password', TRUE); + + if (($user != false) && $this->appunto_auth->checkPassword($pass,$user->password)) + { + $this->usermodel->record_login_attempt($username, $ip_address, 1, $user_agent, 'successful login'); + $this->usermodel->update_last_login($username,$ip_address); + + $this->session->set_userdata(array( + 'user_id' => $user->id, + 'username' => $user->username, + 'email' => $user->email, + 'logged_in' => true + )); + redirect($this->router->default_controller); + } + else + { + $this->form_validation->set_rules('password', 'lang:appunto_form_password', 'callback__invalid_password'); + $this->form_validation->run(); + $this->usermodel->record_login_attempt($username, $ip_address, 0, $user_agent, 'password check: '.validation_errors('[',']')); + $this->load->view('appunto-auth/login',$data); + } + } + } + else die('invalid request method:'.$_SERVER['REQUEST_METHOD']); + } + + public function error() + { + $data = array(); + $data['site_name'] = $this->config->item('site_name', 'appunto-auth/appunto_auth'); + $data['auth_message'] = lang('appunto_message_default_error'); + + $auth_message = $this->session->flashdata('auth_message'); + if (isset($auth_message) && strlen($auth_message)>3) + { + $data['auth_message'] = $auth_message; + } + + $this->load->view('error',$data); + } + + /* + * callback function for form validation + */ + public function _invalid_password($str) + { + $this->form_validation->set_message('_invalid_password', lang('appunto_form_invalid_login')); + return false; + } + + public function logout() + { + $this->session->set_userdata(array( + 'user_id' => '', + 'username' => '', + 'email' => '', + 'logged_in' => false + )); + $_SESSION = array(); + $this->session->set_flashdata('auth_message', lang('appunto_message_logout')); + redirect(rtrim(site_url(), "/").'/'.$this->config->item('login_url','appunto-auth/appunto_auth')); + } + + // Not yet implemented... will work on this for a future version + public function _forgotpassword() + { + //if ($this->appunto_auth->logged_in()) redirect($this->router->default_controller); + + if ($_SERVER['REQUEST_METHOD'] == 'GET') + { + $data = array(); + $data['site_name'] = $this->config->item('site_name', 'appunto-auth/appunto_auth'); + + $auth_message = $this->session->flashdata('auth_message'); + if (isset($auth_message) && strlen($auth_message)>3) + { + $data['auth_message'] = $auth_message; + } + + $this->load->view('forgotpass',$data); + } + else if ($_SERVER['REQUEST_METHOD'] == 'POST') + { + + $this->form_validation->set_rules('username', 'lang:appunto_form_forgot_pw_username', 'trim|required|xss_clean'); + + if (!$this->form_validation->run()) + { + $this->load->view('forgotpass'); + } + else + { + } + } + else die('invalid request method'); + } + +} +/* End of file application.php */ +/* Location: ./application/controllers/application.php */ diff --git a/app/application/helpers/appunto-auth/appunto-auth_helper.php b/app/application/helpers/appunto-auth/appunto-auth_helper.php new file mode 100644 index 00000000..88b15230 --- /dev/null +++ b/app/application/helpers/appunto-auth/appunto-auth_helper.php @@ -0,0 +1,274 @@ +appunto_auth)) $CI->load->library('appunto_auth'); + + $js_config = $CI->appunto_auth->jsConfigItems(); + + $base_url = base_url(); + $site_url = site_url(); + $site_name = $CI->config->item('site_name', 'appunto-auth/appunto_auth'); + $theme_dir = $CI->config->item('appunto_auth_theme', 'appunto-auth/appunto_auth'); + $lang = config_item('language'); + + + $html = << + + + + + + {$site_name} + + + + + + + + + + {$js_config} + + + + + + + + + + +APP; + return $html; + } +} + +if ( ! function_exists('appunto_login_box')) +{ + function appunto_login_box($auth_message = false, $css = 'login-form-box') + { + $CI =& get_instance(); + + if (!isset($CI->appunto_auth)) $CI->load->library('appunto-auth/appunto_auth'); + if (!isset($CI->form_validation)) $CI->load->library('form_validation'); + + $CI->load->config('appunto-auth/appunto_auth',true,false); // true to avoid naming collisions, false to not suppress errors + $site_name = "
".$CI->config->item('site_name', 'appunto-auth/appunto_auth')."
"; + + $base_url = base_url(); + $site_url = site_url(); + + $label_username = lang('appunto_form_username'); + $label_password = lang('appunto_form_password'); + $label_login_button = lang('appunto_form_login_button'); + $label_logout_button = lang('appunto_form_logout_button'); + + $login = array( + 'name' => 'username', + 'id' => 'username', + 'value' => set_value('username'), + 'maxlength' => 80 + ); + $password = array( + 'name' => 'password', + 'id' => 'password' + ); + + $message_div = ''; + if ($auth_message != false) { + $message_div = "
$auth_message
"; + } + else if ($CI->appunto_auth->logged_in()) { + $message_div = "
You are already logged in.
"; + } + + $validation_errors = validation_errors(); + + $field_username = form_input($login); + $field_password = form_password($password); + $field_uri = form_hidden('uri',set_value('uri',$CI->uri->uri_string())); + $login_button = form_submit(array('name'=>'login','value'=>$label_login_button,'id'=>'login-button')); + $logout_button = form_submit(array('name'=>'logout','value'=>$label_logout_button,'id'=>'logout-button')); + + $login_form_open = form_open($CI->config->item('login_url', 'appunto-auth/appunto_auth')); + $logout_form_open = form_open($CI->config->item('logout_url', 'appunto-auth/appunto_auth')); + $form_close = form_close(); + + if ($CI->appunto_auth->logged_in()) { + + $html = << + $site_name + $logout_form_open + $message_div + $logout_button + $form_close + +LOGINBOX; + + } else { + + $html = << + $site_name + $login_form_open + $message_div + + $field_uri + + + $login_button + $form_close + +LOGINBOX; + + } + + return $html; + } +} + + +/** + * Anchor Link (if permitted) + * + * Creates an anchor based on the local URL if user has the appropriate permission. + * + * @access public + * @param string the permission's internal name + * @param string the URL + * @param string the link title + * @param mixed any attributes + * @return string + */ +if ( ! function_exists('anchor_if_permitted')) +{ + function anchor_if_permitted($permission,$uri = '', $title = '', $attributes = '') + { + $CI =& get_instance(); + $CI->load->helper('url'); + + if (!isset($CI->appunto_auth)) $CI->load->library('appunto_auth'); + + if ($CI->appunto_auth->userHasPermission($permission)) + { + return anchor($uri,$title,$attributes); + } + else + { + return ''; + } + } +} + +/** + * Username (if logged in) + * + * @access public + * @return string + */ +if ( ! function_exists('appunto_username')) +{ + function appunto_username() + { + $CI =& get_instance(); + + if (!isset($CI->appunto_auth)) $CI->load->library('appunto_auth'); + + $username = $CI->appunto_auth->get_username(); + + if ($username != false) + { + return $username; + } + else + { + return ''; + } + } +} + +/** + * appunto_logout_link + * + * @access public + * @param boolean show even if user is logged out + * @param mixed any attributes for anchor helper + * @return string + */ +if ( ! function_exists('appunto_logout_link')) +{ + function appunto_logout_link($show_if_logged_out = false, $attributes = '') + { + $CI =& get_instance(); + $CI->load->helper('url'); + + if (!isset($CI->appunto_auth)) $CI->load->library('appunto_auth'); + + if ($show_if_logged_out == true || $CI->appunto_auth->logged_in() == true) + { + return anchor($CI->config->item('logout_url', 'appunto-auth/appunto_auth'), lang('appunto_form_logout_button'), $attributes); + } + else + { + return ''; + } + } +} + +/** + * is_logged_in + * + * @access public + * @return boolean + */ +if ( ! function_exists('is_logged_in')) +{ + function is_logged_in() + { + $CI =& get_instance(); + + if (!isset($CI->appunto_auth)) $CI->load->library('appunto_auth'); + + return ($CI->appunto_auth->logged_in() == true); + } +} + +/** + * has_permission + * + * @access public + * @param string the permission's internal name + * @return string + */ +if ( ! function_exists('has_permission')) +{ + function has_permission($permission) + { + $CI =& get_instance(); + + if (!isset($CI->appunto_auth)) $CI->load->library('appunto_auth'); + + return ($CI->appunto_auth->userHasPermission($permission) == true); + } +} + +?> diff --git a/app/application/helpers/appunto-auth/index.html b/app/application/helpers/appunto-auth/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/app/application/helpers/appunto-auth/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/language/english/appunto_auth_lang.php b/app/application/language/english/appunto_auth_lang.php new file mode 100644 index 00000000..b5099e84 --- /dev/null +++ b/app/application/language/english/appunto_auth_lang.php @@ -0,0 +1,50 @@ +
Please refresh paths if you believe you have received this message in error.'; +$lang['appunto_no_hook'] = 'No authentication is being performed!'; +$lang['appunto_set_true'] = 'Consider setting this value to true'; +$lang['appunto_db_sessions'] = 'Sessions using database'; +$lang['appunto_csrf_protection'] = 'CSRF protection enabled'; +$lang['appunto_encrypted_cookies'] = 'Sessions using encrypted cookies'; +$lang['appunto_private_sans_perm'] = 'Private paths without permissions viewable'; +$lang['appunto_private_sans_perm_warn'] = 'Private paths without defined permissions viewable to any logged in user'; +$lang['appunto_no_homonymous_controllers'] = 'AppuntoAuth does not support controller classes with the same name in different directories.'; diff --git a/app/application/language/english/index.html b/app/application/language/english/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/app/application/language/english/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/language/index.html b/app/application/language/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/app/application/language/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/language/portuguese-br/appunto_auth_lang.php b/app/application/language/portuguese-br/appunto_auth_lang.php new file mode 100644 index 00000000..c6f58255 --- /dev/null +++ b/app/application/language/portuguese-br/appunto_auth_lang.php @@ -0,0 +1,50 @@ +
Atualize caminhos, se você achar que recebeu esta mensagem por engano.'; +$lang['appunto_no_hook'] = 'Nenhuma autenticação está sendo realizada!'; +$lang['appunto_set_true'] = 'Defina este valor para "verdadeiro"'; +$lang['appunto_db_sessions'] = 'Sessões usando banco de dados'; +$lang['appunto_csrf_protection'] = 'CSRF protection enabled'; +$lang['appunto_encrypted_cookies'] = 'Sessões usando cookies criptografados'; +$lang['appunto_private_sans_perm'] = 'Caminhos privados sem permissões visíveis'; +$lang['appunto_private_sans_perm_warn'] = 'caminhos privados sem permissões definidas visíveis para qualquer usuário conectado'; +$lang['appunto_no_homonymous_controllers'] = 'AppuntoAuth não suporta classes do controlador com o mesmo nome em diferentes diretórios.'; diff --git a/app/application/language/portuguese-br/calendar_lang.php b/app/application/language/portuguese-br/calendar_lang.php new file mode 100644 index 00000000..b91ce001 --- /dev/null +++ b/app/application/language/portuguese-br/calendar_lang.php @@ -0,0 +1,51 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/language/portuguese-br/migration_lang.php b/app/application/language/portuguese-br/migration_lang.php new file mode 100644 index 00000000..4db5074b --- /dev/null +++ b/app/application/language/portuguese-br/migration_lang.php @@ -0,0 +1,13 @@ +CI =& get_instance(); + + $this->CI->load->config('appunto-auth/appunto_auth',true,false); // true to avoid naming collisions, false to not suppress errors + $this->CI->lang->load('appunto_auth'); + + $this->CI->load->database(); + $this->CI->load->library('session'); + $this->CI->load->helper('url'); + $this->CI->load->helper('language'); + $this->CI->load->helper('appunto-auth/appunto-auth_helper'); + + $this->CI->load->model('appunto-auth/pathmodel'); + $this->CI->load->model('appunto-auth/usermodel'); + } + + /** + * Check if user is logged in + * + * @return void + */ + public function logged_in() + { + return ($this->CI->session->userdata('logged_in') == true); + } + + /** + * Get username if user is logged in + * + * @return void + */ + public function get_username() + { + if ($this->CI->session->userdata('logged_in') == true) + { + return ($this->CI->session->userdata('username')); + } + return false; + } + + /** + * Get user id if user is logged in + * + * @return void + */ + public function get_user_id() + { + if ($this->CI->session->userdata('logged_in') == true) + { + return ($this->CI->session->userdata('user_id')); + } + return false; + } + + /** + * Hook to be executed before controller + * This hook must be included in CodeIgniter's config/hooks.php file using + * the following format: + * + * $hook['post_controller_constructor'] = array( + * 'class' => 'Appunto_auth', + * 'function' => 'require_authentication_hook', + * 'filename' => 'Appunto_auth.php', + * 'filepath' => 'libraries', + * 'params' => array() + * ); + * + * @return void + */ + public function require_authentication_hook() + { + $paths = $this->_getPaths(); + $ci_dir = $this->CI->router->fetch_directory(); + $ci_class = $this->CI->router->fetch_class(); + $ci_method = $this->CI->router->fetch_method(); + + $requested_path = $ci_dir.$ci_class.'/'.$ci_method; + //log_message('error','path: '.$requested_path); + + $this->CI->session->set_userdata('last_page',$ci_dir.$ci_class.'/'.$ci_method); + + // Test validity of path + if (array_key_exists($ci_class,$paths) && + (array_key_exists($ci_method,$paths[$ci_class]) || + array_key_exists('_remap',$paths[$ci_class]))) + { + // if method does not exist, but _remap does, we must authenticate against _remap + if (!array_key_exists($ci_method,$paths[$ci_class]) && array_key_exists('_remap',$paths[$ci_class])) + { + $ci_method = '_remap'; + } + + // Valid path - store it in a variable for brevity + $path = $paths[$ci_class][$ci_method]; + + // Test if path is public + if ($path['public_flag'] == 1) + { + // Valid, public path - return + return; + } + else + { + // Valid, private path - make sure user is logged in + if ($this->logged_in()) + { + // User is logged in, check if path has required permission + if (is_numeric($path['perm']) && $path['perm'] > 0) + { + // Path has a required permission - check if user has this permission + //$user_permissions = $this->_getPermissions(); + //if (in_array($path['perm'],$user_permissions,true)) + if ($this->_userHasPermissionId($path['perm'])) + { + // User has Permission - return + return; + } + else + { + // User does not have required permission + $this->_sendError($this->CI->lang->line('appunto_not_authorized')); + die; + } + } + else + { + // Path has no required permission - check if config allows private without permission + if ($this->CI->config->item('allow_private_without_permission','appunto-auth/appunto_auth')) + { + // Paths without permissions are viewable by logged-in users + return; + } + else + { + // User does not have required permission + $this->_sendError($this->CI->lang->line('appunto_not_authorized')); + die; + } + } + } + else + { + // User is not logged in + if ($requested_path == 'appunto-auth/user/login') + { + // If you are receiving this error, you have the login path set as private + // This must be set as public or users cannot log in + $msg = 'Logins are disabled. Contact an Administrator'; + } + else + { + $msg = $this->CI->lang->line('appunto_login_required'); + } + $this->_sendError($msg,true); + die; + } + } + } + else + { + // Path is not in database + $this->_sendError($this->CI->lang->line('appunto_invalid_path')); + die; + } + die; //shouldn't arrive here + } + + /** + * send auth error + * + * @param string + * @return void + */ + public function _sendError($msg, $login=false) + { + $ajax = $this->_isAjaxRequest(); + + if ($ajax) + { + $result = array ( + 'success' => false, + 'err' => 'LOGIN', + 'msg' => $msg + ); + $this->sendResponse($result); + } + else + { + $view = $login ? 'appunto-auth/login' : 'appunto-auth/error'; + $data['site_name'] = $this->CI->config->item('site_name', 'appunto-auth/appunto_auth'); + $data['auth_message'] = $msg; + + echo($this->CI->load->view($view,$data,true)); + } + } + + + /** + * Return an array of paths. + * + * @return array + */ + public function _getPaths() + { + $path_array = array(); + $result = $this->CI->pathmodel->getAll(); + + if (isset($result['rows']) && is_array($result['rows'])) + { + $rows = $result['rows']; + foreach ($rows as $row) + { + $perm_id = intval($row->permission_id); //tighten this up ******************************************************* + $path_array[strtolower($row->ci_controller)][strtolower($row->ci_method)] = array( + 'public_flag' => $row->public_flag, + 'perm' => $perm_id, + 'perm_string' => $row->internal_name + ); + } + } + return $path_array; + } + + /** + * check if user has role. + * + * @return boolean + */ + /* + public function userHasRole($role_id) + { + $user_id = $this->CI->session->userdata('user_id'); + + return ($this->CI->usermodel->verifyRoleById($user_id,$role_id) > 0); + } + **/ + + /** + * check if user has permission. + * + * @return boolean + */ + public function userHasPermission($permission) + { + if (!$this->logged_in()) return false; // user can't have the permission if not logged in + + $user_id = $this->CI->session->userdata('user_id'); + + return $this->CI->usermodel->verifyPermissionByInternalName($user_id,$permission); + return false; + } + + /** + * check if user has permission. + * + * @return boolean + */ + private function _userHasPermissionId($permission) + { + $user_id = $this->CI->session->userdata('user_id'); + + return $this->CI->usermodel->verifyPermissionById($user_id,$permission); + return false; + } + /** + * Return an array of user permissions. + * + * @return array + */ + private function _getPermissions() + { + $user_id = $this->CI->session->userdata('user_id'); + if (isset($user_id) && is_numeric($user_id) && $user_id > 0) + { + return $this->CI->usermodel->get_user_permission_array($user_id); + } + return array(); + } + + /** + * Return a Javascript snippet with items from the appunto_auth.php config file. + * + * @return string + */ + public function jsConfigItems() + { + $js = ''; + + return $js; + } + + /** + * Test to determine if request was submitted via Ajax + * + * This is a convenience method to identify Ajax requests so responses can be + * structured appropriately. It is not intended to provide any additional security. + * + * Specifically, authentication failures for normal controllers/views will + * redirect to the login page or show an error message while authentication + * failures for JSON requests will offer an ExtJS login dialog or return an + * error message in JSON format; + * + * This cannot be depended on to return an accurate result since headers can + * be faked and some servers may not provide the HTTP_X_REQUESTED_WITH variable. + * + * For servers that don't provide the HTTP_X_REQUESTED_WITH variable, I suggest + * including a flag with AJAX requests and rewritting this function to check for + * the flag. + * + * @return boolean + */ + private function _isAjaxRequest() + { + return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && + (strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest')); + } + + /** + * Create an array of URLs for use in helper. + * + * @return array + */ +/* + public function include_urls() + { + + $urls = array(); + + $urls['base'] = base_url(); + $urls['extjs'] = $this->CI->config->item('extjs_url', 'appunto_auth'); + + if (true === $this->CI->config->item('appunto_dev_mode', 'appunto_auth')) + { + $urls['extjs_lib'] = $urls['extjs'].'ext-dev.js'; + $urls['app'] = $urls['base'].'app.js'; + } + else + { + $urls['extjs_lib'] = $urls['extjs'].'ext.js'; + $urls['app'] = $urls['base'].'resources/appunto-auth/app-all.js'; + } + return $urls; + } +*/ + + /** + * return a hash of the user password. + * + * @param string + * @return string + */ + public function hashPassword($password) + { + $hasher = new PasswordHash( + $this->CI->config->item('hash_logarithm', 'appunto-auth/appunto_auth'), + $this->CI->config->item('hash_use_portable', 'appunto-auth/appunto_auth') + ); + return $hasher->HashPassword($password); + } + + /** + * compare a password to a hashed password. + * + * @param string + * @param string + * @return boolean + */ + public function checkPassword($password,$hash) + { + $hasher = new PasswordHash( + $this->CI->config->item('hash_logarithm', 'appunto-auth/appunto_auth'), + $this->CI->config->item('hash_use_portable', 'appunto-auth/appunto_auth') + ); + return $hasher->checkPassword($password,$hash); + } + + /** + * Check query validity and format result array for queries + * + * @param array results + * @param array callback + * @return string JSON encoded response + */ + function sendResponse($results, $cb = null) + { + // if callback was sent use it, otherwise check GET + $callback = $cb==null ? $this->CI->input->get('callback', TRUE) : $cb; + + if ($callback) + { + // wrap json encoded response in callback + // header('Content-Type: application/x-javascript; charset=utf-8'); + $result = $callback . '(' . json_encode($results) . ');'; + } else { + // send json encoded response + header('Content-Type: application/x-json; charset=utf-8'); + $result = json_encode($results); + } + echo $result; + } + + /** + * Check query validity and format result array for queries + * + * @param query + * @return array + */ + function formatQueryResult($query,$total) + { + if ($query) + { + $query_result = $query->result(); + $total = $total; + $result = array ( + 'success' => true, + 'total' => $total, + 'rows' => $query_result + ); + } + else + { + $result = array ( + 'success' => false, + 'msg' => 'Database Error: '.$this->db->_error_message(), + 'num' => $this->db->_error_number() + ); + } + return $result; + } + + /** + * Check query validity and format result array for operations + * + * @param query + * @return array + */ + function formatOperationResult($query, $record = array()) + { + //$this->chromephp->log($extra_params); + if ($query) + { + // query successful + $result = array( + 'success' => true, + 'msg' => 'Operation successful' + ); + + if (count($record)>0) + { + $rows = array( + 'rows' => $record + ); + $result = array_merge($result,$rows); + } + } + else + { + // database error + $result = array ( + 'success' => false, + 'msg' => 'Database Error: '.$this->db->_error_message(), + 'num' => $this->db->_error_number() + ); + } + return $result; + } + +/* + * ***** CONTROLLER CODE ****** O__o + * Putting code that would normally be controller functions in the library to keep the Paths/permissions + * manageable and to make it easier to distribute as a spark. + */ + function controller_read($model) + { + $start = $this->CI->input->get_post('start', TRUE); + $limit = $this->CI->input->get_post('limit', TRUE); + $sort = $this->CI->input->get_post('sort', TRUE); + $filter = $this->CI->input->get_post('filter', TRUE); + $search = $this->CI->input->get_post('search', TRUE); + + $property = null; + $direction = null; + $active_filter = false; + + // get sort params + $sort_array = json_decode($sort); + if (count($sort_array) > 0) + { + $property = $sort_array[0]->property; + $direction = $sort_array[0]->direction; + } + + $filters = json_decode($filter); + + $result = $model->enumerate($start,$limit,$property,$direction,$filters,$search); + + $this->sendResponse($result); + } + + function controller_create($model) + { + if ($this->CI->form_validation->run()==FALSE) + { + $result = array ( + 'success' => false, + 'msg' => $this->CI->lang->line('appunto_errors_encountered'), + 'errors' => validation_errors() + ); + } + else + { + // return all POST items with XSS filter + $data = $this->CI->input->post(NULL, TRUE); + + // get result + $result = $model->create_record($data); + } + $this->sendResponse($result); + } + + function controller_update($model) + { + if ($this->CI->form_validation->run()==FALSE) + { + $result = array ( + 'success' => false, + 'msg' => $this->CI->lang->line('appunto_errors_encountered'), + 'errors' => validation_errors(), + ); + } + else + { + // return all POST items with XSS filter + $data = $this->CI->input->post(NULL, TRUE); + + if (count($data)>1) + { + $result = $model->update_record($data); + } + else + { + $result = array ( + 'success' => false, + 'msg' => 'No updates attempted.' + ); + } + } + $this->sendResponse($result); + } + + function controller_destroy($model) + { + // create array from post data + $data = $this->CI->input->post(NULL, TRUE); + + if (!$this->CI->form_validation->run()) + { + $result = array ( + 'success' => false, + 'msg' => $this->CI->lang->line('appunto_errors_encountered'), + 'errors' => validation_errors() + ); + } + else + { + $result = $model->delete_record($data); + } + $this->sendResponse($result); + } +}; + diff --git a/app/application/libraries/appunto-auth/LICENSE.md b/app/application/libraries/appunto-auth/LICENSE.md new file mode 100644 index 00000000..2a071986 --- /dev/null +++ b/app/application/libraries/appunto-auth/LICENSE.md @@ -0,0 +1,32 @@ +# Appunto-Auth license + +####License for all files except for third party files, the app.js and theme.css files + +Appunto Auth is licensed under a version of the MIT license. +Please do not remove the copyright and permission notice contained in this file. + +Copyright (c) 2012-2014 Bill Clinton (bclinton@appunto.net) + +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 in the application/libraries/appunto-auth folder + +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. + +#### License for all third party files + +The license of all third party files are governed by the terms of their licenses. Please see +the CREDITS.MD file for a list of all third party files. + +#### License for app.js and theme.css files + +Per Sencha requirements, the app.js and theme.css files are governed by the terms of the GPLv3 license. diff --git a/app/application/libraries/appunto-auth/index.html b/app/application/libraries/appunto-auth/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/app/application/libraries/appunto-auth/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/libraries/appunto-auth/phpass-0.3/PasswordHash.php b/app/application/libraries/appunto-auth/phpass-0.3/PasswordHash.php new file mode 100644 index 00000000..12958c7f --- /dev/null +++ b/app/application/libraries/appunto-auth/phpass-0.3/PasswordHash.php @@ -0,0 +1,253 @@ + in 2004-2006 and placed in +# the public domain. Revised in subsequent years, still public domain. +# +# There's absolutely no warranty. +# +# The homepage URL for this framework is: +# +# http://www.openwall.com/phpass/ +# +# Please be sure to update the Version line if you edit this file in any way. +# It is suggested that you leave the main version number intact, but indicate +# your project name (after the slash) and add your own revision information. +# +# Please do not change the "private" password hashing method implemented in +# here, thereby making your hashes incompatible. However, if you must, please +# change the hash type identifier (the "$P$") to something different. +# +# Obviously, since this code is in the public domain, the above are not +# requirements (there can be none), but merely suggestions. +# +class PasswordHash { + var $itoa64; + var $iteration_count_log2; + var $portable_hashes; + var $random_state; + + function PasswordHash($iteration_count_log2, $portable_hashes) + { + $this->itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; + + if ($iteration_count_log2 < 4 || $iteration_count_log2 > 31) + $iteration_count_log2 = 8; + $this->iteration_count_log2 = $iteration_count_log2; + + $this->portable_hashes = $portable_hashes; + + $this->random_state = microtime(); + if (function_exists('getmypid')) + $this->random_state .= getmypid(); + } + + function get_random_bytes($count) + { + $output = ''; + if (is_readable('/dev/urandom') && + ($fh = @fopen('/dev/urandom', 'rb'))) { + $output = fread($fh, $count); + fclose($fh); + } + + if (strlen($output) < $count) { + $output = ''; + for ($i = 0; $i < $count; $i += 16) { + $this->random_state = + md5(microtime() . $this->random_state); + $output .= + pack('H*', md5($this->random_state)); + } + $output = substr($output, 0, $count); + } + + return $output; + } + + function encode64($input, $count) + { + $output = ''; + $i = 0; + do { + $value = ord($input[$i++]); + $output .= $this->itoa64[$value & 0x3f]; + if ($i < $count) + $value |= ord($input[$i]) << 8; + $output .= $this->itoa64[($value >> 6) & 0x3f]; + if ($i++ >= $count) + break; + if ($i < $count) + $value |= ord($input[$i]) << 16; + $output .= $this->itoa64[($value >> 12) & 0x3f]; + if ($i++ >= $count) + break; + $output .= $this->itoa64[($value >> 18) & 0x3f]; + } while ($i < $count); + + return $output; + } + + function gensalt_private($input) + { + $output = '$P$'; + $output .= $this->itoa64[min($this->iteration_count_log2 + + ((PHP_VERSION >= '5') ? 5 : 3), 30)]; + $output .= $this->encode64($input, 6); + + return $output; + } + + function crypt_private($password, $setting) + { + $output = '*0'; + if (substr($setting, 0, 2) == $output) + $output = '*1'; + + $id = substr($setting, 0, 3); + # We use "$P$", phpBB3 uses "$H$" for the same thing + if ($id != '$P$' && $id != '$H$') + return $output; + + $count_log2 = strpos($this->itoa64, $setting[3]); + if ($count_log2 < 7 || $count_log2 > 30) + return $output; + + $count = 1 << $count_log2; + + $salt = substr($setting, 4, 8); + if (strlen($salt) != 8) + return $output; + + # We're kind of forced to use MD5 here since it's the only + # cryptographic primitive available in all versions of PHP + # currently in use. To implement our own low-level crypto + # in PHP would result in much worse performance and + # consequently in lower iteration counts and hashes that are + # quicker to crack (by non-PHP code). + if (PHP_VERSION >= '5') { + $hash = md5($salt . $password, TRUE); + do { + $hash = md5($hash . $password, TRUE); + } while (--$count); + } else { + $hash = pack('H*', md5($salt . $password)); + do { + $hash = pack('H*', md5($hash . $password)); + } while (--$count); + } + + $output = substr($setting, 0, 12); + $output .= $this->encode64($hash, 16); + + return $output; + } + + function gensalt_extended($input) + { + $count_log2 = min($this->iteration_count_log2 + 8, 24); + # This should be odd to not reveal weak DES keys, and the + # maximum valid value is (2**24 - 1) which is odd anyway. + $count = (1 << $count_log2) - 1; + + $output = '_'; + $output .= $this->itoa64[$count & 0x3f]; + $output .= $this->itoa64[($count >> 6) & 0x3f]; + $output .= $this->itoa64[($count >> 12) & 0x3f]; + $output .= $this->itoa64[($count >> 18) & 0x3f]; + + $output .= $this->encode64($input, 3); + + return $output; + } + + function gensalt_blowfish($input) + { + # This one needs to use a different order of characters and a + # different encoding scheme from the one in encode64() above. + # We care because the last character in our encoded string will + # only represent 2 bits. While two known implementations of + # bcrypt will happily accept and correct a salt string which + # has the 4 unused bits set to non-zero, we do not want to take + # chances and we also do not want to waste an additional byte + # of entropy. + $itoa64 = './ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + + $output = '$2a$'; + $output .= chr(ord('0') + $this->iteration_count_log2 / 10); + $output .= chr(ord('0') + $this->iteration_count_log2 % 10); + $output .= '$'; + + $i = 0; + do { + $c1 = ord($input[$i++]); + $output .= $itoa64[$c1 >> 2]; + $c1 = ($c1 & 0x03) << 4; + if ($i >= 16) { + $output .= $itoa64[$c1]; + break; + } + + $c2 = ord($input[$i++]); + $c1 |= $c2 >> 4; + $output .= $itoa64[$c1]; + $c1 = ($c2 & 0x0f) << 2; + + $c2 = ord($input[$i++]); + $c1 |= $c2 >> 6; + $output .= $itoa64[$c1]; + $output .= $itoa64[$c2 & 0x3f]; + } while (1); + + return $output; + } + + function HashPassword($password) + { + $random = ''; + + if (CRYPT_BLOWFISH == 1 && !$this->portable_hashes) { + $random = $this->get_random_bytes(16); + $hash = + crypt($password, $this->gensalt_blowfish($random)); + if (strlen($hash) == 60) + return $hash; + } + + if (CRYPT_EXT_DES == 1 && !$this->portable_hashes) { + if (strlen($random) < 3) + $random = $this->get_random_bytes(3); + $hash = + crypt($password, $this->gensalt_extended($random)); + if (strlen($hash) == 20) + return $hash; + } + + if (strlen($random) < 6) + $random = $this->get_random_bytes(6); + $hash = + $this->crypt_private($password, + $this->gensalt_private($random)); + if (strlen($hash) == 34) + return $hash; + + # Returning '*' on error is safe here, but would _not_ be safe + # in a crypt(3)-like function used _both_ for generating new + # hashes and for validating passwords against existing hashes. + return '*'; + } + + function CheckPassword($password, $stored_hash) + { + $hash = $this->crypt_private($password, $stored_hash); + if ($hash[0] == '*') + $hash = crypt($password, $stored_hash); + + return $hash == $stored_hash; + } +} + +?> diff --git a/app/application/libraries/appunto-auth/phpass-0.3/c/Makefile b/app/application/libraries/appunto-auth/phpass-0.3/c/Makefile new file mode 100644 index 00000000..fe48917f --- /dev/null +++ b/app/application/libraries/appunto-auth/phpass-0.3/c/Makefile @@ -0,0 +1,21 @@ +# +# Written by Solar Designer and placed in the public domain. +# See crypt_private.c for more information. +# +CC = gcc +LD = $(CC) +RM = rm -f +CFLAGS = -Wall -O2 -fomit-frame-pointer -funroll-loops +LDFLAGS = -s +LIBS = -lcrypto + +all: crypt_private-test + +crypt_private-test: crypt_private-test.o + $(LD) $(LDFLAGS) $(LIBS) crypt_private-test.o -o $@ + +crypt_private-test.o: crypt_private.c + $(CC) -c $(CFLAGS) crypt_private.c -DTEST -o $@ + +clean: + $(RM) crypt_private-test* diff --git a/app/application/libraries/appunto-auth/phpass-0.3/c/crypt_private.c b/app/application/libraries/appunto-auth/phpass-0.3/c/crypt_private.c new file mode 100644 index 00000000..6abc05bc --- /dev/null +++ b/app/application/libraries/appunto-auth/phpass-0.3/c/crypt_private.c @@ -0,0 +1,106 @@ +/* + * This code exists for the sole purpose to serve as another implementation + * of the "private" password hashing method implemened in PasswordHash.php + * and thus to confirm that these password hashes are indeed calculated as + * intended. + * + * Other uses of this code are discouraged. There are much better password + * hashing algorithms available to C programmers; one of those is bcrypt: + * + * http://www.openwall.com/crypt/ + * + * Written by Solar Designer in 2005 and placed in + * the public domain. + * + * There's absolutely no warranty. + */ + +#include +#include + +#ifdef TEST +#include +#endif + +static char *itoa64 = + "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; + +static void encode64(char *dst, char *src, int count) +{ + int i, value; + + i = 0; + do { + value = (unsigned char)src[i++]; + *dst++ = itoa64[value & 0x3f]; + if (i < count) + value |= (unsigned char)src[i] << 8; + *dst++ = itoa64[(value >> 6) & 0x3f]; + if (i++ >= count) + break; + if (i < count) + value |= (unsigned char)src[i] << 16; + *dst++ = itoa64[(value >> 12) & 0x3f]; + if (i++ >= count) + break; + *dst++ = itoa64[(value >> 18) & 0x3f]; + } while (i < count); +} + +char *crypt_private(char *password, char *setting) +{ + static char output[35]; + MD5_CTX ctx; + char hash[MD5_DIGEST_LENGTH]; + char *p, *salt; + int count_log2, length, count; + + strcpy(output, "*0"); + if (!strncmp(setting, output, 2)) + output[1] = '1'; + + if (strncmp(setting, "$P$", 3)) + return output; + + p = strchr(itoa64, setting[3]); + if (!p) + return output; + count_log2 = p - itoa64; + if (count_log2 < 7 || count_log2 > 30) + return output; + + salt = setting + 4; + if (strlen(salt) < 8) + return output; + + length = strlen(password); + + MD5_Init(&ctx); + MD5_Update(&ctx, salt, 8); + MD5_Update(&ctx, password, length); + MD5_Final(hash, &ctx); + + count = 1 << count_log2; + do { + MD5_Init(&ctx); + MD5_Update(&ctx, hash, MD5_DIGEST_LENGTH); + MD5_Update(&ctx, password, length); + MD5_Final(hash, &ctx); + } while (--count); + + memcpy(output, setting, 12); + encode64(&output[12], hash, MD5_DIGEST_LENGTH); + + return output; +} + +#ifdef TEST +int main(int argc, char **argv) +{ + if (argc != 3) return 1; + + puts(crypt_private(argv[1], argv[2])); + + return 0; +} +#endif diff --git a/app/application/libraries/appunto-auth/phpass-0.3/index.html b/app/application/libraries/appunto-auth/phpass-0.3/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/app/application/libraries/appunto-auth/phpass-0.3/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/models/appunto-auth/groupmodel.php b/app/application/models/appunto-auth/groupmodel.php new file mode 100644 index 00000000..a0d78a55 --- /dev/null +++ b/app/application/models/appunto-auth/groupmodel.php @@ -0,0 +1,199 @@ +load->library('appunto-auth/Appunto_auth'); + $this->load->database(); + + $prefix = $this->config->item('db_table_prefix','appunto-auth/appunto_auth'); + + $this->table = $prefix.'appa_group'; + $this->user_table = $prefix.'appa_user'; + $this->group_user_table = $prefix.'appa_user_group'; + } + + + /** + * Get groups + * + * @return object + */ + function enumerate($offset,$rows,$sort,$dir,$filters) + { + // define table here for count all results + $this->db->from($this->table); + $total = $this->db->count_all_results(); + + $this->db->select('group.id, group.name,group.description'); + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('group.name','ASC'); + } + + // execute query + $query = $this->db->get($this->table. ' `group`'); + + // format and return result to controller + return $this->appunto_auth->formatQueryResult($query,$total); + } + + /** + * Get group + * + * @return group + */ + function get($id) + { + // define query + $this->db->select('group.id, group.name,group.description'); + + $this->db->where('group.id',$id); + + // execute query + $query = $this->db->get($this->table.' `group`'); + + // format and return result to controller + return $query->result(); + + } + + /** + * Get group users + * + * @return object + */ + function get_group_users($id,$sort,$dir) + { + $this->db->select('if(isnull(ug.group_id),0,1) as inGroup',false); + $this->db->select('u.id, u.username, u.email'); + + $this->db->join($this->user_table.' u','u.id = ug.user_id and ug.group_id ='.$id,'right'); + + // execute query + $query = $this->db->get($this->group_user_table.' ug'); + + return $this->appunto_auth->formatQueryResult($query,$query->num_rows()); + } + + /** + * Get user groups + * + * @return object + */ + function get_group_user($user_id,$group_id) + { + $this->db->select('if(isnull(ug.group_id),0,1) as inGroup',false); + $this->db->select('u.id, u.username, u.email'); + + $this->db->join($this->group_user_table.' ug','u.id = ug.user_id and ug.group_id ='.$group_id,'left'); + + $this->db->where('u.id',$user_id); + + // execute query + $query = $this->db->get($this->user_table.' u'); + + return $query->row() ; + } + + /** + * Create record + * + * @param array + * @return object + */ + function create_record($data) + { + // execute query + $query = $this->db->insert($this->table, $data); + + // get the id to select a full record to return to UI + $id = $this->db->insert_id(); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Update record + * + * @param array + * @return object + */ + function update_record($data) + { + // get/set the id and remove it from the data array + $id = $data['id']; + $this->db->where('id', $id); + unset($data['id']); + + // execute query + $query = $this->db->update($this->table, $data); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Delete record + * + * @param array + * @return object + */ + function delete_record($data) + { + // get/set the id + $this->db->where('id', $data['id']); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + /** + * Add a user to a group + * + * @param array + * @return object + */ + function add_user($user_id,$group_id) + { + // execute query + $query = $this->db->insert($this->group_user_table, array( + 'user_id' => $user_id, + 'group_id' => $group_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_group_user($user_id,$group_id)); + } + + /** + * Remove a user from a group + * + * @param array + * @return object + */ + function remove_user($user_id,$group_id) + { + // execute query + $query = $this->db->delete($this->group_user_table, array( + 'user_id' => $user_id, + 'group_id' => $group_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_group_user($user_id,$group_id)); + } +}; diff --git a/app/application/models/appunto-auth/index.html b/app/application/models/appunto-auth/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/app/application/models/appunto-auth/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/app/application/models/appunto-auth/pathmodel.php b/app/application/models/appunto-auth/pathmodel.php new file mode 100644 index 00000000..1b40c553 --- /dev/null +++ b/app/application/models/appunto-auth/pathmodel.php @@ -0,0 +1,264 @@ +load->library('appunto-auth/Appunto_auth'); + + $this->load->database(); + + $prefix = $this->config->item('db_table_prefix','appunto-auth/appunto_auth'); + + $this->table = $prefix.'appa_path'; + $this->permission_table = $prefix.'appa_permission'; + } + + /** + * Get paths for library auhentication verification + * + * @return object + */ + function getAll() + { + $this->db->select('path.ci_controller as ci_controller, path.ci_method as ci_method, path.public_flag as public_flag'); + $this->db->select('perm.id as permission_id, perm.internal_name as internal_name'); + + $this->db->join($this->permission_table.' perm','perm.id = path.permission_id','left'); + + // execute query + $query = $this->db->get($this->table.' path'); + + // return result + return $this->appunto_auth->formatQueryResult($query,$query->num_rows()); + } + + /** + * Get paths + * + * @return object + */ + function enumerate($offset,$rows,$sort,$dir,$filters) + { + $this->db->select('path.id, path.dir, path.full_path, path.ci_controller, path.ci_method, path.found, path.public_flag, path.note'); + $this->db->select('perm.id as permission_id, perm.name as permission_name, perm.internal_name as internal_name'); + + $this->db->join($this->permission_table.' perm','perm.id = path.permission_id','left'); + + // execute query + $query = $this->db->get($this->table.' path'); + + // add column for grouping by controller directory + if ($rows = $query->result()) + { + foreach ($rows as $row) + { + // directory name or controller name if in main controller dir + $row->dir_group = ($row->dir == '.') ? $row->ci_controller : $row->dir; + } + } + + // format and return result to controller + return $this->appunto_auth->formatQueryResult($query,$query->num_rows()); + } + + /** + * Get path + * + * @return path + */ + function get($id) + { + // define query + $this->db->select('path.id, path.dir, path.ci_controller, path.ci_method, path.found, path.public_flag, path.note'); + $this->db->select('perm.id as permission_id, perm.name as permission_name'); + + $this->db->join($this->permission_table.' perm','perm.id = path.permission_id','left'); + + $this->db->where('path.id',$id); + + // execute query + $query = $this->db->get($this->table.' path'); + + // format and return result to controller + return $query->result(); + } + + /** + * Create record + * + * @param int ci_controller + * @param int ci_method + * @return object + */ + function create_record($dir, $filename, $full_path, $ci_controller, $ci_method, $found = 0) + { + $this->db->set('dir', $dir); + $this->db->set('filename', $filename); + $this->db->set('full_path', $full_path); + $this->db->set('ci_controller', $ci_controller); + $this->db->set('ci_method', $ci_method); + $this->db->set('found', $found); + + // execute query + $query = $this->db->insert($this->table); + } + + /** + * Test to see if this path has already been recorded in db + * + * @param int ci_controller + * @param int ci_method + * @return boolean + */ + function path_exists($dir, $ci_controller, $ci_method) + { + // shouldn't have to reload the database library here but during the + // upgrade to 2.2.0 I started getting an error here if it was not present + // investigate further later + $this->load->database(); + + $this->db->where('dir', $dir); + $this->db->where('ci_controller', $ci_controller); + $this->db->where('ci_method', $ci_method); + $this->db->from($this->table); + + if ($this->db->count_all_results() > 0) + { + return true; + } + return false; + } + + /** + * Mark Found + * + * @param int ci_controller + * @param int ci_method + * @return void + */ + function mark_found($dir, $ci_controller, $ci_method) + { + $this->db->where('dir', $dir); + $this->db->where('ci_controller', $ci_controller); + $this->db->where('ci_method', $ci_method); + + // execute query + $query = $this->db->update($this->table, array('found'=>1)); + } + + /** + * Mark All Unfound + * + * @return void + */ + function mark_all_unfound() + { + // execute query + $query = $this->db->update($this->table, array('found'=>0)); + } + + /** + * Update record + * + * @param array + * @return object + */ + function update_record($data) + { + // get/set the id and remove it from the data array + $id = $data['id']; + $this->db->where('id', $id); + unset($data['id']); + + // execute query + $query = $this->db->update($this->table, $data); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Delete record + * + * @param array + * @return object + */ + function delete_record($data) + { + // get/set the id + $this->db->where('id', $data['id']); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + /** + * Delete all paths that are not found + * + * @return object + */ + function delete_not_found() + { + // get/set the id + $this->db->where('found', 0); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + /** + * Is Path marked Found + * + * @param array + * @return boolean + */ + function is_marked_found($data) + { + $this->db->select('found'); + + // get/set the id + $id = $data['id']; + $this->db->where('id', $id); + + // execute query + $query = $this->db->get($this->table); + + if ($query->num_rows() > 0) + { + $row = $query->row(); + if ($row->found == 0) return false; + } + return true; + } + + /** + * Clear permissions + * + * @param array + * @return void + */ + function clear_permissions($data) + { + // get/set the id and remove it from the data array + $id = $data['id']; + $this->db->where('id', $id); + unset($data['id']); + + // execute query + $query = $this->db->update($this->table, array('permission_id' => NULL)); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + +}; diff --git a/app/application/models/appunto-auth/permissionmodel.php b/app/application/models/appunto-auth/permissionmodel.php new file mode 100644 index 00000000..b1ef00e7 --- /dev/null +++ b/app/application/models/appunto-auth/permissionmodel.php @@ -0,0 +1,174 @@ +load->library('appunto-auth/Appunto_auth'); + $this->load->database(); + + $prefix = $this->config->item('db_table_prefix','appunto-auth/appunto_auth'); + + $this->table = $prefix.'appa_permission'; + $this->path_table = $prefix.'appa_path'; + $this->user_permission_table = $prefix.'appa_user_permission'; + $this->role_permission_table = $prefix.'appa_role_permission'; + } + + + /** + * Get permissions + * + * @return object + */ + function enumerate($offset,$rows,$sort,$dir,$filters) + { + // define table here for count all results + $this->db->from($this->table); + $total = $this->db->count_all_results(); + + $this->db->select('p.id, p.name, p.internal_name, p.description'); + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('p.name','ASC'); + } + + // execute query + $query = $this->db->get($this->table.' p'); + + // format and return result to controller + return $this->appunto_auth->formatQueryResult($query,$total); + } + + /** + * Get permission + * + * @return permission + */ + function get($id) + { + // define query + $this->db->select('p.id, p.name, p.internal_name, p.description'); + + $this->db->where('p.id',$id); + + // execute query + $query = $this->db->get($this->table.' p'); + + // format and return result to controller + return $query->result(); + + } + + /** + * Create record + * + * @param array + * @return object + */ + function create_record($data) + { + $data['internal_name'] = strtoupper(str_replace(' ','_',$data['name'])); + + // execute query + $query = $this->db->insert($this->table, $data); + + // get the id to select a full record to return to UI + $id = $this->db->insert_id(); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Update record + * + * @param array + * @return object + */ + function update_record($data) + { + // get/set the id and remove it from the data array + $id = $data['id']; + $this->db->where('id', $id); + unset($data['id']); + + // execute query + $query = $this->db->update($this->table, $data); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Delete record + * + * @param array + * @return object + */ + function delete_record($data) + { + // get/set the id + $this->db->where('id', $data['id']); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + function in_use_by_user($id) + { + $this->db->select('permission_id'); + $this->db->where('permission_id', $id); + + // execute query + $query = $this->db->get($this->user_permission_table); + + if ($query->num_rows() > 0) + { + return true; + } + return false; + } + + function in_use_by_role($id) + { + $this->db->select('permission_id'); + $this->db->where('permission_id', $id); + + // execute query + $query = $this->db->get($this->role_permission_table); + + if ($query->num_rows() > 0) + { + return true; + } + return false; + } + + function in_use_by_path($id) + { + $this->db->select('path.id'); + $this->db->where('permission_id', $id); + + // execute query + $query = $this->db->get($this->path_table.' path'); + + if ($query->num_rows() > 0) + { + return true; + } + return false; + } + +}; diff --git a/app/application/models/appunto-auth/rolemodel.php b/app/application/models/appunto-auth/rolemodel.php new file mode 100644 index 00000000..6c304222 --- /dev/null +++ b/app/application/models/appunto-auth/rolemodel.php @@ -0,0 +1,230 @@ +load->library('appunto-auth/Appunto_auth'); + $this->load->database(); + + $prefix = $this->config->item('db_table_prefix','appunto-auth/appunto_auth'); + + $this->table = $prefix.'appa_role'; + $this->permission_table = $prefix.'appa_permission'; + $this->user_role_table = $prefix.'appa_user_role'; + $this->role_permission_table = $prefix.'appa_role_permission'; + } + + + /** + * Get roles + * + * @return object + */ + function enumerate($offset,$rows,$sort,$dir,$filters) + { + // define table here for count all results + $this->db->from($this->table); + $total = $this->db->count_all_results(); + + $this->db->select('role.id, role.name,role.description'); + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('role.name','ASC'); + } + + // execute query + $query = $this->db->get($this->table. ' role'); + + // format and return result to controller + return $this->appunto_auth->formatQueryResult($query,$total); + } + + /** + * Get role + * + * @return role + */ + function get($id) + { + // define query + $this->db->select('role.id, role.name, role.description'); + + $this->db->where('role.id',$id); + + // execute query + $query = $this->db->get($this->table.' role'); + + // format and return result to controller + return $query->result(); + + } + + /** + * Get role permissions + * + * @return object + */ + function get_role_permissions($id,$sort,$dir) + { + $this->db->select('if(isnull(rp.role_id),0,1) as inRole',false); + $this->db->select('p.id, p.name, p.description'); + + $this->db->join($this->permission_table.' p','p.id = rp.permission_id and rp.role_id ='.$id,'right'); + + // execute query + $query = $this->db->get($this->role_permission_table.' rp'); + + return $this->appunto_auth->formatQueryResult($query,$query->num_rows()); + } + + /** + * Get user roles + * + * @return object + */ + function get_role_permission($permission_id,$role_id) + { + $this->db->select('if(isnull(rp.role_id),0,1) as inRole',false); + $this->db->select('p.id, p.name, p.description'); + + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id ='.$role_id,'left'); + + $this->db->where('p.id',$permission_id); + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + return $query->row() ; + } + + /** + * Create record + * + * @param array + * @return object + */ + function create_record($data) + { + // execute query + $query = $this->db->insert($this->table, $data); + + // get the id to select a full record to return to UI + $id = $this->db->insert_id(); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Update record + * + * @param array + * @return object + */ + function update_record($data) + { + // get/set the id and remove it from the data array + $id = $data['id']; + $this->db->where('id', $id); + unset($data['id']); + + // execute query + $query = $this->db->update($this->table, $data); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Delete record + * + * @param array + * @return object + */ + function delete_record($data) + { + // get/set the id + $this->db->where('id', $data['id']); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + /** + * Add a permission to a role + * + * @param array + * @return object + */ + function add_permission($permission_id,$role_id) + { + // execute query + $query = $this->db->insert($this->role_permission_table, array( + 'permission_id' => $permission_id, + 'role_id' => $role_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_role_permission($permission_id,$role_id)); + } + + /** + * Remove a permission from a role + * + * @param array + * @return object + */ + function remove_permission($permission_id,$role_id) + { + // execute query + $query = $this->db->delete($this->role_permission_table, array( + 'permission_id' => $permission_id, + 'role_id' => $role_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_role_permission($permission_id,$role_id)); + } + + function in_use_by_user($id) + { + $this->db->select('role_id'); + $this->db->where('role_id', $id); + + // execute query + $query = $this->db->get($this->user_role_table); + + if ($query->num_rows() > 0) + { + return true; + } + return false; + } + + function in_use_by_permission($id) + { + $this->db->select('role_id'); + $this->db->where('role_id', $id); + + // execute query + $query = $this->db->get($this->role_permission_table); + + if ($query->num_rows() > 0) + { + return true; + } + return false; + } +}; diff --git a/app/application/models/appunto-auth/sessionmodel.php b/app/application/models/appunto-auth/sessionmodel.php new file mode 100644 index 00000000..d027fa33 --- /dev/null +++ b/app/application/models/appunto-auth/sessionmodel.php @@ -0,0 +1,110 @@ +load->library('appunto-auth/Appunto_auth'); + $this->load->database(); + + $prefix = $this->config->item('db_table_prefix','appunto-auth/appunto_auth'); + + $this->table = $prefix.'ci_sessions'; + } + + /** + * Get sessions + * + * @return object + */ + function enumerate($offset,$rows=0,$sort,$dir,$filters) + { + // define table here for count all results + $this->db->from($this->table); + $total = 0; + + $this->db->select('session_id as id,ip_address,user_agent'); + $this->db->select("CONCAT( DATE( FROM_UNIXTIME( `last_activity` ) ),' ',TIME( FROM_UNIXTIME( `last_activity` ) ) ) AS last_activity",false); + $this->db->select('user_agent,user_data'); + + $show_all = 1; + if (count($filters)>0) + { + foreach($filters as $filter) + { + $property = $filter->property; + if ($property == 'show_all') $show_all = $filter->value; + } + } + + // add limit and get results + if ($rows>0) $this->db->limit($rows,$offset); + + $query = $this->db->get(); + + $result_array = array(); + + if ($rows = $query->result()) + { + foreach ($rows as $row) + { + $total++; + + $user_data = unserialize($row->user_data); + $user_name = isset($user_data['username']) ? $user_data['username'] : ''; + $last_page = isset($user_data['last_page']) ? $user_data['last_page'] : ''; + + if ( $show_all == 1 || is_array($user_data)) + { + $this_row = array ( + 'id' => $row->id, + 'username' => $user_name, + 'last_page' => $last_page, + 'last_activity' => $row->last_activity, + 'ip_address' => $row->ip_address, + 'user_agent' => $row->user_agent + ); + $result_array[] = $this_row; + } + } + + $result = array ( + 'success' => true, + 'total' => $total, + 'rows' => $result_array + ); + + } else { + + $result = array ( + 'success' => false, + 'msg' => 'Database Error: '.$this->db->_error_message(), + 'num' => $this->db->_error_number() + ); + + } + return $result; + } + + /** + * Delete record + * + * @param array + * @return object + */ + function delete_record($data) + { + // get/set the id + $this->db->where('session_id', $data['id']); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + +}; diff --git a/app/application/models/appunto-auth/usermodel.php b/app/application/models/appunto-auth/usermodel.php new file mode 100644 index 00000000..cda4a44d --- /dev/null +++ b/app/application/models/appunto-auth/usermodel.php @@ -0,0 +1,557 @@ +load->library('appunto-auth/Appunto_auth'); + $this->load->database(); + + $prefix = $this->config->item('db_table_prefix','appunto-auth/appunto_auth'); + + $this->table = $prefix.'appa_user'; + $this->role_table = $prefix.'appa_role'; + $this->user_role_table = $prefix.'appa_user_role'; + $this->permission_table = $prefix.'appa_permission'; + $this->user_permission_table = $prefix.'appa_user_permission'; + $this->role_permission_table = $prefix.'appa_role_permission'; + $this->user_login_attempt = $prefix.'appa_user_login_attempt'; + } + + + /** + * Get users + * + * @return object + */ + function enumerate($offset,$rows,$sort,$dir,$filters,$search) + { + + $this->_build_enumerate($offset,$rows,$sort,$dir,$filters,$search); + $this->db->from($this->table. ' user'); + $total = $this->db->count_all_results(); + $this->db->flush_cache(); + + + $this->_build_enumerate($offset,$rows,$sort,$dir,$filters,$search); + $this->db->limit($rows,$offset); + $query = $this->db->get($this->table. ' user'); + $this->db->flush_cache(); + + return $this->appunto_auth->formatQueryResult($query,$total); + } + + function _build_enumerate($offset,$rows,$sort,$dir,$filters,$search) + { + $this->db->start_cache(); + + $this->db->select('user.id, user.username, user.email, user.active'); + $this->db->select('user.last_ip, user.last_login, user.created, user.modified'); + $this->db->select('user.name, user.surname'); + + if (!empty($search)) + { + $this->db->like('UPPER(user.username)', strtoupper($search)); + $this->db->or_like('UPPER(user.name)', strtoupper($search)); + $this->db->or_like('UPPER(user.surname)', strtoupper($search)); + $this->db->or_like('UPPER(user.email)', strtoupper($search)); + } + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('username','ASC'); + } + + $this->db->stop_cache(); + + } + + /** + * Get user + * + * @return user + */ + function get($id) + { + // define query + $this->db->select('user.id, user.username, user.email, user.active'); + $this->db->select('user.last_ip, user.last_login, user.created, user.modified'); + $this->db->select('user.name, user.surname'); + + $this->db->where('user.id',$id); + + // execute query + $query = $this->db->get($this->table.' user'); + + // format and return result to controller + return $query->result(); + + } + + /** + * Get user roles + * + * @return object + */ + function get_user_roles($id,$sort,$dir) + { + $this->db->select('if(isnull(ur.user_id),0,1) as hasRole',false); + $this->db->select('r.id, r.name, r.description'); + + $this->db->join($this->role_table.' r','r.id = ur.role_id and ur.user_id ='.$id,'right'); + + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('hasRole','DESC'); + $this->db->order_by('role_id','ASC'); + } + + // execute query + $query = $this->db->get($this->user_role_table.' ur'); + + return $this->appunto_auth->formatQueryResult($query,$query->num_rows()); + } + + /** + * Get user roles + * + * @return object + */ + function get_user_role($role_id,$user_id) + { + $this->db->select('if(isnull(ur.user_id),0,1) as hasRole',false); + $this->db->select('r.id, r.name, r.description'); + + $this->db->join($this->user_role_table.' ur','r.id = ur.role_id and ur.user_id ='.$user_id,'left'); + + $this->db->where('r.id',$role_id); + + // execute query + $query = $this->db->get($this->role_table.' r'); + + return $query->row() ; + } + + /** + * Get user permissions + * + * @return object + */ + function get_user_permissions($id,$sort,$dir) + { + $this->db->select('p.id, p.name, p.description'); + $this->db->select('if(!isnull(up.user_id) || !isnull(rp.role_id),1,0) as hasPermission',false); + $this->db->select('if(isnull(up.user_id),0,1) as userHasPermission',false); + $this->db->select('if(isnull(rp.role_id),0,1) as userRoleHasPermission',false); + + $subquery = '(select ur.role_id from '.$this->user_role_table.' ur where ur.user_id ='.$id.')'; + + $this->db->join($this->user_permission_table.' up','p.id = up.permission_id and up.user_id ='.$id,'left'); + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id IN '.$subquery,'left'); + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('userHasPermission','DESC'); + $this->db->order_by('p.id','ASC'); + } + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + return $this->appunto_auth->formatQueryResult($query,$query->num_rows()); + } + + /** + * Get user permission array + * + * @return object + */ + function get_user_permission_array($id) + { + $this->db->select('p.id'); + + $subquery = '(select ur.role_id from '.$this->user_role_table. ' ur where ur.user_id ='.$id.')'; + + $this->db->join($this->user_permission_table.' up','p.id = up.permission_id and up.user_id ='.$id,'left'); + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id IN '.$subquery,'left'); + + $this->db->where('((up.user_id IS NOT NULL) || (rp.role_id IS NOT NULL))'); + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + $permissions = array(); + foreach ($query->result() as $row) + { + array_push($permissions,$row->id); + } + return $permissions; + } + + /** + * Get user permission array + * + * @return object + */ + function get_user_permission_internal_name_array($id) + { + $this->db->select('p.internal_name'); + + $subquery = '(select ur.role_id from '.$this->user_role_table. ' ur where ur.user_id ='.$id.')'; + + $this->db->join($this->user_permission_table.' up','p.id = up.permission_id and up.user_id ='.$id,'left'); + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id IN '.$subquery,'left'); + + $this->db->where('((up.user_id IS NOT NULL) || (rp.role_id IS NOT NULL))'); + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + $permissions = array(); + foreach ($query->result() as $row) + { + array_push($permissions,$row->internal_name); + } + return $permissions; + } + + /** + * + */ + function verifyPermissionById($u_id,$p_id) + { + $this->db->select('p.id, p.name'); + + $subquery = '(select ur.role_id from '.$this->user_role_table. ' ur where ur.user_id ='.$u_id.')'; + + $this->db->join($this->user_permission_table.' up','p.id = up.permission_id and up.user_id ='.$u_id,'left'); + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id IN '.$subquery,'left'); + + $this->db->where('((up.user_id IS NOT NULL) || (rp.role_id IS NOT NULL))'); + + $this->db->where('p.id',$p_id); + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + return ($query->num_rows() > 0); + } + + /** + * + */ + function verifyPermissionByInternalName($u_id,$p_name) + { + $this->db->select('p.id, p.name'); + + $subquery = '(select ur.role_id from '.$this->user_role_table. ' ur where ur.user_id ='.$u_id.')'; + + $this->db->join($this->user_permission_table.' up','p.id = up.permission_id and up.user_id ='.$u_id,'left'); + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id IN '.$subquery,'left'); + + $this->db->where('((up.user_id IS NOT NULL) || (rp.role_id IS NOT NULL))'); + + // Let's make this case sensitive + //$this->db->where('UPPER(p.internal_name) = UPPER("'.$p_name.'")'); + $this->db->where('p.internal_name = "'.$p_name.'"'); + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + return ($query->num_rows() > 0); + } + + /** + * Get user permission + * + * @return object + */ + function get_user_permission($permission_id,$id) + { + $this->db->select('p.id, p.name, p.description'); + $this->db->select('if(!isnull(up.user_id) || !isnull(rp.role_id),1,0) as hasPermission',false); + $this->db->select('if(isnull(up.user_id),0,1) as userHasPermission',false); + $this->db->select('if(isnull(rp.role_id),0,1) as userRoleHasPermission',false); + + $subquery = '(select ur.role_id from '.$this->user_role_table.' ur where ur.user_id ='.$id.')'; + + $this->db->join($this->user_permission_table.' up','p.id = up.permission_id and up.user_id ='.$id,'left'); + $this->db->join($this->role_permission_table.' rp','p.id = rp.permission_id and rp.role_id IN '.$subquery,'left'); + + $this->db->where('p.id',$permission_id); + + // execute query + $query = $this->db->get($this->permission_table.' p'); + + return $query->row() ; + } + + /** + * Get user with password for login verification + * + * @return user + */ + function getLoginInfo($login) + { + // define query + $this->db->select('user.id, user.username, user.email, user.password'); + + $this->db->where('user.username',$login); + + // execute query + $query = $this->db->get($this->table.' user'); + + // format and return result to controller + if ($query->num_rows() > 0) + { + return $query->row(); + } + return false; + } + /** + * Create record + * + * @param array + * @return object + */ + function create_record($data) + { + /** + * MySQL doesn't allow more than one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause + * (Error Code : 1293) in versions before 5.6. We can get around this by making the default of the created + * column "0000-00-00 00:00:00" and inserting null into this column. + * + * CodeIgniter Active Record doesn't like "nulls" when inserting an array of values, so we have to switch to + * the $this->db->set syntax + */ + $this->db->set('username',$data['username']); + $this->db->set('password',$data['password']); + $this->db->set('email',$data['email']); + $this->db->set('active',$data['active']); + $this->db->set('created', null); + + // optional fields + if (isset($data['name'])) $this->db->set('name',$data['name']); + if (isset($data['surname']))$this->db->set('surname',$data['surname']); + + // execute query + $query = $this->db->insert($this->table); + + // get newly created record + $record = $this->get($this->db->insert_id()); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,array($record[0])); + } + + /** + * Update record + * + * @param array + * @return object + */ + function update_record($data) + { + // get/set the id and remove it from the data array + $id = $data['id']; + $this->db->where('id', $id); + unset($data['id']); + + // remove password confirmation field + if (isset($data['password2'])) unset($data['password2']); + + // execute query + $query = $this->db->update($this->table, $data); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get($id)); + } + + /** + * Delete record + * + * @param array + * @return object + */ + function delete_record($data) + { + // get/set the id + $this->db->where('id', $data['id']); + + // execute query + $query = $this->db->delete($this->table); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + /** + * Add a role to a user + * + * @param array + * @return object + */ + function add_role($role_id,$user_id) + { + // execute query + $query = $this->db->insert($this->user_role_table, array( + 'role_id' => $role_id, + 'user_id' => $user_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_user_role($role_id,$user_id)); + } + + /** + * Remove a role from a user + * + * @param array + * @return object + */ + function remove_role($role_id,$user_id) + { + // execute query + $query = $this->db->delete($this->user_role_table, array( + 'role_id' => $role_id, + 'user_id' => $user_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_user_role($role_id,$user_id)); + } + + /** + * Add a permission to a user + * + * @param array + * @return object + */ + function add_permission($permission_id,$user_id) + { + // execute query + $query = $this->db->insert($this->user_permission_table, array( + 'permission_id' => $permission_id, + 'user_id' => $user_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_user_permission($permission_id,$user_id)); + } + + /** + * Remove a permission from a user + * + * @param array + * @return object + */ + function remove_permission($permission_id,$user_id) + { + // execute query + $query = $this->db->delete($this->user_permission_table, array( + 'permission_id' => $permission_id, + 'user_id' => $user_id + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query,$this->get_user_permission($permission_id,$user_id)); + } + + /** + * Add a permission to a user + * + * @param array + * @return object + */ + function record_login_attempt($username, $ip_address, $success, $user_agent, $note) + { + // execute query + $query = $this->db->insert($this->user_login_attempt, array( + 'username' => $username, + 'ip_address' => $ip_address, + 'success' => $success, + 'user_agent' => $user_agent, + 'note' => $note + )); + + // return formatted result + return $this->appunto_auth->formatOperationResult($query); + } + + /** + * Add a permission to a user + * + * @param array + * @return object + */ + function update_last_login($username,$ip_address) + { + $this->load->helper('date'); + + $this->db->set('last_ip',$ip_address); + $this->db->set('last_login',date('Y-m-d H:i:s',now())); + + $this->db->where('username',$username); + + $query = $this->db->update($this->table); + } + /** + * Get login attempts + * + * @return object + */ + function login_attempts($offset,$rows,$sort,$dir,$filters) + { + + $this->db->select('username, ip_address, success, user_agent, note, attempt_time'); + + if (count($filters)>0) + { + foreach($filters as $filter) + { + $property = $filter->property; + if ($property == 'active') $active = $filter->value; + } + } + + /* cache where clause to get around CI's active record _reset_select() + * see http://codeigniter.com/forums/viewthread/212111/#999732 + */ + $this->db->start_cache(); + + $total = $this->db->count_all_results($this->user_login_attempt); + + if (!empty($sort) && !empty($dir)) + { + $this->db->order_by('UPPER('.$sort.')',$dir); + } + else + { + $this->db->order_by('attempt_time','DESC'); + } + + // execute query + $query = $this->db->get($this->user_login_attempt,$rows,$offset); + + $this->db->flush_cache(); + + // format and return result to controller + return $this->appunto_auth->formatQueryResult($query,$total); + } +}; diff --git a/app/application/views/appunto-auth/error.php b/app/application/views/appunto-auth/error.php new file mode 100644 index 00000000..6fdb42f6 --- /dev/null +++ b/app/application/views/appunto-auth/error.php @@ -0,0 +1,16 @@ + + + + <?php if (isset($site_name)) echo $site_name ?><?php if (isset($auth_message)) echo ' - '.$auth_message ?> + + + + + + + + diff --git a/app/application/views/appunto-auth/login.php b/app/application/views/appunto-auth/login.php new file mode 100644 index 00000000..f6fff6a6 --- /dev/null +++ b/app/application/views/appunto-auth/login.php @@ -0,0 +1,10 @@ + + + + <?php if (isset($site_name)) echo $site_name ?> + + + + + + diff --git a/app/db/create_auth_db.sql b/app/db/create_auth_db.sql new file mode 100644 index 00000000..83a089d7 --- /dev/null +++ b/app/db/create_auth_db.sql @@ -0,0 +1,173 @@ +-- +-- Tables for Appunto Auth +-- + +-- -------------------------------------------------------- + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_path` +-- + +CREATE TABLE IF NOT EXISTS `appa_path` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `dir` varchar(256) NOT NULL, + `filename` varchar(120) NOT NULL, + `full_path` varchar(256) NOT NULL, + `ci_controller` varchar(256) NOT NULL, + `ci_method` varchar(256) NOT NULL, + `found` tinyint(1) NOT NULL, + `public_flag` tinyint(1) NOT NULL, + `permission_id` int(11) DEFAULT NULL, + `note` varchar(60) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `permission_id` (`permission_id`), + KEY `dir` (`dir`(255)), + KEY `ci_controller` (`ci_controller`(255)), + KEY `ci_method` (`ci_method`(255)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_permission` +-- + +CREATE TABLE IF NOT EXISTS `appa_permission` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(32) COLLATE utf8_bin NOT NULL, + `internal_name` varchar(60) COLLATE utf8_bin NOT NULL, + `description` varchar(64) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `internal_name` (`internal_name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_role` +-- + +CREATE TABLE IF NOT EXISTS `appa_role` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(32) NOT NULL, + `description` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_role_permission` +-- + +CREATE TABLE IF NOT EXISTS `appa_role_permission` ( + `role_id` int(11) NOT NULL, + `permission_id` int(11) NOT NULL, + KEY `role_id` (`role_id`), + KEY `permission_id` (`permission_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_user` +-- + +CREATE TABLE IF NOT EXISTS `appa_user` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `username` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `password` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `email` varchar(120) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `active` tinyint(1) NOT NULL DEFAULT '1', + `name` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `surname` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `last_ip` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL, + `last_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`id`), + UNIQUE KEY `username` (`username`), + KEY `email` (`email`), + KEY `name` (`name`), + KEY `surname` (`surname`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_user_login_attempt` +-- + +CREATE TABLE IF NOT EXISTS `appa_user_login_attempt` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `attempt_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `username` varchar(120) DEFAULT NULL, + `ip_address` varchar(120) NOT NULL, + `success` tinyint(1) NOT NULL, + `user_agent` varchar(180) DEFAULT NULL, + `note` varchar(80) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `attempt_time` (`attempt_time`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_user_permission` +-- + +CREATE TABLE IF NOT EXISTS `appa_user_permission` ( + `user_id` int(11) NOT NULL, + `permission_id` int(11) NOT NULL, + KEY `user_id` (`user_id`), + KEY `permission_id` (`permission_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `appa_user_role` +-- + +CREATE TABLE IF NOT EXISTS `appa_user_role` ( + `user_id` int(11) NOT NULL, + `role_id` int(11) NOT NULL, + KEY `user_id` (`user_id`), + KEY `role_id` (`role_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Constraints for dumped tables +-- + +-- +-- Constraints for table `appa_path` +-- +ALTER TABLE `appa_path` + ADD CONSTRAINT `appa_path_ibfk_1` FOREIGN KEY (`permission_id`) REFERENCES `appa_permission` (`id`) ON UPDATE CASCADE; + +-- +-- Constraints for table `appa_role_permission` +-- +ALTER TABLE `appa_role_permission` + ADD CONSTRAINT `appa_role_permission_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `appa_role` (`id`), + ADD CONSTRAINT `appa_role_permission_ibfk_2` FOREIGN KEY (`permission_id`) REFERENCES `appa_permission` (`id`); + +-- +-- Constraints for table `appa_user_permission` +-- +ALTER TABLE `appa_user_permission` + ADD CONSTRAINT `appa_user_permission_ibfk_1` FOREIGN KEY (`permission_id`) REFERENCES `appa_permission` (`id`), + ADD CONSTRAINT `appa_user_permission_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `appa_user` (`id`) ON DELETE CASCADE; + +-- +-- Constraints for table `appa_user_role` +-- +ALTER TABLE `appa_user_role` + ADD CONSTRAINT `appa_user_role_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `appa_role` (`id`), + ADD CONSTRAINT `appa_user_role_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `appa_user` (`id`) ON DELETE CASCADE; + diff --git a/app/resources/Readme.md b/app/resources/Readme.md new file mode 100644 index 00000000..bdacce48 --- /dev/null +++ b/app/resources/Readme.md @@ -0,0 +1,4 @@ +# AppuntoAuth/resources + +This folder contains resources (such as images) needed by the application. This file can +be removed if not needed. diff --git a/app/resources/appunto-auth/css/app.css b/app/resources/appunto-auth/css/app.css new file mode 100644 index 00000000..8e61dcaf --- /dev/null +++ b/app/resources/appunto-auth/css/app.css @@ -0,0 +1,144 @@ +.app-header { + background:#4F0101 url(logo/appunto_auth_logo_app_header.gif) 22px 6px no-repeat !important; +} +.controller-frame { + border-right: 1px solid #ccc; +} +.admin-logout-button { + color : #fff; + font-size: 15px; + margin : 12px 24px; +} +/* Status View Classes */ +.status-info { + margin: 30px 0 0 30px; + font-size: 15px; +} +.status-info td { + padding: 4px 12px; +} +.info-note { + background:url(icons/error.png) 3px 2px no-repeat !important; + padding-left: 24px !important; +} +/* User View Classes */ +.user-inactive div.x-grid-cell-inner { + background:url(icons/delete.png) 22px 3px no-repeat !important; + color: #777; +} +.user-active div.x-grid-cell-inner { + background:url(icons/accept.png) 22px 3px no-repeat !important; + color: #777; +} +.user-has-role div.x-grid-cell-inner { + background:url(icons/accept.png) 3px 3px no-repeat !important; +} +.has-permission div.x-grid-cell-inner { + background:url(icons/accept.png) 3px 3px no-repeat !important; +} +.user-has-permission div.x-grid-cell-inner { + background:url(icons/user.png) 22px 3px no-repeat !important; +} +.user-role-has-permission div.x-grid-cell-inner { + background:url(icons/shield.png) 22px 3px no-repeat !important; +} +.appunto-list .empty { + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + text-align: center; + padding-top: 20px; +} +/* Controller View Classes */ +.controller-view .ci-controller { + border: 1px solid #ccc; + width: 94%; + float: left; + font-family: arial, helvetica, sans-serif; + font-size: 13px; + margin: 8px 12px; + padding: 1px; + background: #e2e2e2; /* Old browsers */ + /* IE9 SVG, needs conditional override of 'filter' to 'none' */ + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UyZTJlMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #e2e2e2 0%, #ffffff 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e2e2e2), color-stop(100%,#ffffff)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #e2e2e2 0%,#ffffff 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #e2e2e2 0%,#ffffff 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #e2e2e2 0%,#ffffff 100%); /* IE10+ */ + background: linear-gradient(to bottom, #e2e2e2 0%,#ffffff 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e2e2e2', endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */ +} +.controller-selected{ +} +.controller-view .ci-controller div.selection{ + background: url(images/ci_unselected.gif) no-repeat; + margin-right:6px; + width: 54px; + height: 72px; + display: inline; + float: left; +} +.controller-view .controller-selected div.selection { + background: url(images/ci_selected.gif); + width: 54px; + height: 72px; + display: inline; + float: left; +} +.controller-view .ci-controller .controller-info { + display: inline; + overflow: hidden; + vertical-align: top; +} +.controller-view .ci-controller .method-info { + padding: 6px 0 10px 10px; + display: inline; +} +.controller-view .ci-controller .method-info { + float: right; + width: 108px; + border-left: 1px dotted #ccc; +} +.controller-view .ci-controller .method-info table td { + padding-right: 4px; +} +.controller-rollover{ + border: 1px solid #aaa !important; + padding: 1px !important; +} +.controller-view .ci-controller .controller-name, +.controller-view .ci-controller .controller-dir { + display: block; +} +.controller-view .ci-controller .controller-name { + font-weight: bold; + margin-top: 6px; +} +/* Path View Classes */ +.path-not-found div.x-grid-cell-inner { + background:url(icons/error.png) 3px 2px no-repeat !important; +} +.path-public div.x-grid-cell-inner { + background: url(icons/world_link.png) 2px 1px no-repeat !important; + padding-left: 24px; +} +.path-private div.x-grid-cell-inner { + background: url(icons/page_delete.png) 2px 1px no-repeat !important; + padding-left: 24px; +} +.menu-title { + display: block; + padding: 4px; + width: 100%; + color: #fff; + background-color: #4F0101; +} +/* Role View Classes */ +.permission-in-role div.x-grid-cell-inner { + background:url(icons/accept.png) 3px 2px no-repeat !important; +} +/* toolbar drop-down button */ +.view-selection-button span { + font-size: 11px !important; + font-weight: normal !important; +} diff --git a/app/resources/appunto-auth/css/appunto-auth/css/app.css b/app/resources/appunto-auth/css/appunto-auth/css/app.css new file mode 100644 index 00000000..da65b090 --- /dev/null +++ b/app/resources/appunto-auth/css/appunto-auth/css/app.css @@ -0,0 +1,125 @@ +.appunto-auth-viewport { + background-color: #4F4F4F; +} +.app-header { + background:#4F0101 url(images/appunto_auth_logo_app_header.gif) 22px 6px no-repeat !important; +} +.controller-frame { + border-right: 1px solid #ccc; +} +/* User View Classes */ +.user-inactive div.x-grid-cell-inner { + background:url(icons/delete.png) 22px 3px no-repeat !important; + color: #777; +} +.user-active div.x-grid-cell-inner { + background:url(icons/accept.png) 22px 3px no-repeat !important; + color: #777; +} +.user-has-role div.x-grid-cell-inner { + background:url(icons/accept.png) 3px 3px no-repeat !important; +} +.has-permission div.x-grid-cell-inner { + background:url(icons/accept.png) 3px 3px no-repeat !important; +} +.user-has-permission div.x-grid-cell-inner { + background:url(icons/user.png) 22px 3px no-repeat !important; +} +.user-role-has-permission div.x-grid-cell-inner { + background:url(icons/shield.png) 22px 3px no-repeat !important; +} +.appunto-list .empty { + font-family: tahoma, arial, verdana, sans-serif; + font-size: 11px; + text-align: center; + padding-top: 20px; +} +/* Controller View Classes */ +.controller-view .ci-controller { + border: 1px solid #ccc; + width: 94%; + float: left; + font-family: arial, helvetica, sans-serif; + font-size: 13px; + margin: 8px 12px; + padding: 1px; + background: #e2e2e2; /* Old browsers */ + /* IE9 SVG, needs conditional override of 'filter' to 'none' */ + background: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiA/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDEgMSIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJncmFkLXVjZ2ctZ2VuZXJhdGVkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjAlIiB5MT0iMCUiIHgyPSIwJSIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2UyZTJlMiIgc3RvcC1vcGFjaXR5PSIxIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiIHN0b3Atb3BhY2l0eT0iMSIvPgogIDwvbGluZWFyR3JhZGllbnQ+CiAgPHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSIgZmlsbD0idXJsKCNncmFkLXVjZ2ctZ2VuZXJhdGVkKSIgLz4KPC9zdmc+); + background: -moz-linear-gradient(top, #e2e2e2 0%, #ffffff 100%); /* FF3.6+ */ + background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#e2e2e2), color-stop(100%,#ffffff)); /* Chrome,Safari4+ */ + background: -webkit-linear-gradient(top, #e2e2e2 0%,#ffffff 100%); /* Chrome10+,Safari5.1+ */ + background: -o-linear-gradient(top, #e2e2e2 0%,#ffffff 100%); /* Opera 11.10+ */ + background: -ms-linear-gradient(top, #e2e2e2 0%,#ffffff 100%); /* IE10+ */ + background: linear-gradient(to bottom, #e2e2e2 0%,#ffffff 100%); /* W3C */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#e2e2e2', endColorstr='#ffffff',GradientType=0 ); /* IE6-8 */ +} +.controller-selected{ +} +.controller-view .ci-controller div.selection{ + background: url(images/ci_unselected.gif) no-repeat; + margin-right:6px; + width: 54px; + height: 72px; + display: inline; + float: left; +} +.controller-view .controller-selected div.selection { + background: url(images/ci_selected.gif); + width: 54px; + height: 72px; + display: inline; + float: left; +} +.controller-view .ci-controller .controller-info { + display: inline; + overflow: hidden; + vertical-align: top; +} +.controller-view .ci-controller .method-info { + padding: 6px 0 10px 10px; + display: inline; +} +.controller-view .ci-controller .method-info { + float: right; + width: 108px; + border-left: 1px dotted #ccc; +} +.controller-view .ci-controller .method-info table td { + padding-right: 4px; +} +.controller-rollover{ + border: 1px solid #aaa !important; + padding: 1px !important; +} +.controller-view .ci-controller .controller-name, +.controller-view .ci-controller .controller-dir { + display: block; +} +.controller-view .ci-controller .controller-name { + font-weight: bold; + margin-top: 6px; +} +/* Path View Classes */ +.path-not-found div.x-grid-cell-inner { + background:url(icons/error.png) 3px 2px no-repeat !important; +} +.path-public div.x-grid-cell-inner { + background: url(icons/world_link.png) 2px 1px no-repeat !important; + padding-left: 24px; +} +.path-private div.x-grid-cell-inner { + background: url(icons/page_delete.png) 2px 1px no-repeat !important; + padding-left: 24px; +} +.menu-title { + display: block; + padding: 4px; + width: 100%; + color: #fff; + background-color: #4F0101; +} +/* Role View Classes */ +.permission-in-role div.x-grid-cell-inner { + background:url(icons/accept.png) 3px 2px no-repeat !important; +} diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons.css b/app/resources/appunto-auth/css/appunto-auth/css/icons.css new file mode 100644 index 00000000..527bbac4 --- /dev/null +++ b/app/resources/appunto-auth/css/appunto-auth/css/icons.css @@ -0,0 +1,72 @@ +/* Tab icons */ +.transmit { + background-image:url(icons/transmit.png) !important; +} +.user { + background-image:url(icons/user.png) !important; +} +.shield { + background-image:url(icons/shield.png) !important; +} +.lock { + background-image:url(icons/lock.png) !important; +} +.map { + background-image:url(icons/map.png) !important; +} +.monitor { + background-image:url(icons/monitor.png) !important; +} +/* Users */ +.user-add { + background-image:url(icons/user_add.png) !important; +} +.user-edit { + background-image:url(icons/user_edit.png) !important; +} +.user-delete { + background-image:url(icons/user_delete.png) !important; +} +.key { + background-image:url(icons/key.png) !important; +} +/* Roles */ +.shield-add { + background-image:url(icons/shield_add.png) !important; +} +.shield-go { + background-image:url(icons/shield_go.png) !important; +} +.shield-delete { + background-image:url(icons/shield_delete.png) !important; +} +/* Permissions */ +.lock-add { + background-image:url(icons/lock_add.png) !important; +} +.lock-edit { + background-image:url(icons/lock_edit.png) !important; +} +.lock-delete { + background-image:url(icons/lock_delete.png) !important; +} +/* Sessions */ +.monitor-delete { + background-image:url(icons/monitor_delete.png) !important; +} +/* Misc */ +.exclamation { + background-image:url(icons/exclamation.png) !important; +} +.delete { + background-image:url(icons/delete.png) !important; +} +.accept { + background-image:url(icons/accept.png) !important; +} +.world-link { + background-image:url(icons/world_link.png) !important; +} +.page-delete { + background-image:url(icons/page_delete.png) !important; +} diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/accept.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/accept.png new file mode 100644 index 00000000..89c8129a Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/accept.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/delete.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/delete.png new file mode 100644 index 00000000..08f24936 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/delete.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/error.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/error.png new file mode 100644 index 00000000..628cf2da Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/error.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/exclamation.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/exclamation.png new file mode 100644 index 00000000..c37bd062 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/exclamation.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/key.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/key.png new file mode 100644 index 00000000..4ec1a928 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/key.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/lock.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock.png new file mode 100644 index 00000000..2ebc4f6f Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_add.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_add.png new file mode 100644 index 00000000..a7b566b1 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_add.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_delete.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_delete.png new file mode 100644 index 00000000..ecb50a93 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_delete.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_edit.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_edit.png new file mode 100644 index 00000000..116aa5b7 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/lock_edit.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/map.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/map.png new file mode 100644 index 00000000..f90ef25e Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/map.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/monitor.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/monitor.png new file mode 100644 index 00000000..d040bd02 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/monitor.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/monitor_delete.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/monitor_delete.png new file mode 100644 index 00000000..37332563 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/monitor_delete.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/page_delete.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/page_delete.png new file mode 100644 index 00000000..3141467c Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/page_delete.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/shield.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield.png new file mode 100644 index 00000000..3cb4e257 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_add.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_add.png new file mode 100644 index 00000000..e20a1b4a Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_add.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_delete.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_delete.png new file mode 100644 index 00000000..22823a70 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_delete.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_go.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_go.png new file mode 100644 index 00000000..e9bd8522 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/shield_go.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/transmit.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/transmit.png new file mode 100644 index 00000000..f54bf736 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/transmit.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/user.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/user.png new file mode 100644 index 00000000..79f35ccb Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/user.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/user_add.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/user_add.png new file mode 100644 index 00000000..deae99bc Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/user_add.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/user_delete.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/user_delete.png new file mode 100644 index 00000000..acbb5630 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/user_delete.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/user_edit.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/user_edit.png new file mode 100644 index 00000000..c1974cda Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/user_edit.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/icons/world_link.png b/app/resources/appunto-auth/css/appunto-auth/css/icons/world_link.png new file mode 100644 index 00000000..b8edc126 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/icons/world_link.png differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/images/appunto_auth_logo_app_header.gif b/app/resources/appunto-auth/css/appunto-auth/css/images/appunto_auth_logo_app_header.gif new file mode 100644 index 00000000..065fe56c Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/images/appunto_auth_logo_app_header.gif differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/images/ci_selected.gif b/app/resources/appunto-auth/css/appunto-auth/css/images/ci_selected.gif new file mode 100644 index 00000000..71816c54 Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/images/ci_selected.gif differ diff --git a/app/resources/appunto-auth/css/appunto-auth/css/images/ci_unselected.gif b/app/resources/appunto-auth/css/appunto-auth/css/images/ci_unselected.gif new file mode 100644 index 00000000..404db2db Binary files /dev/null and b/app/resources/appunto-auth/css/appunto-auth/css/images/ci_unselected.gif differ diff --git a/app/resources/appunto-auth/css/appunto-auth/lang/en.js b/app/resources/appunto-auth/css/appunto-auth/lang/en.js new file mode 100644 index 00000000..5fada793 --- /dev/null +++ b/app/resources/appunto-auth/css/appunto-auth/lang/en.js @@ -0,0 +1,127 @@ +var Language = +{ + override: + { + // Global + name : 'Name', //used in headers for various entities + description : 'Description', //used in headers for various entities + refresh : 'Refresh', // reload the data + result : 'Result', + save : 'Save', + cancel : 'Cancel', + yes : 'Yes', + no : 'No', + field_required : 'This field is required', + + // Application tabs + tab_status : 'Status', + tab_users : 'Users', + tab_user_roles : 'User Roles', + tab_permissions : 'Permissions yo', + tab_paths : 'Paths', + tab_sessions : 'Sessions', + + // User list + username : 'Username', + name : 'Name', + surname : 'Last name', + email : 'Email', + password : 'Password', + password_confirm : 'Confirm password', + password_change : 'Change password', + password_match : 'Passwords do not match', + user_set_active : 'Set user as active', + active : 'Active', // Whether or not this user has been activated or deactivated + user_add : 'Add user', + user_edit : 'Edit user', + user_delete : 'Delete user', + user_delete_confirm : 'Are you sure you want to delete this user?', + user_activate : 'Activate user', + user_deactivate : 'Deactivate user', + last_ip : 'Last IP', + last_login : 'Last Login', + created : 'Created', + modified : 'Modified', + never : 'Never', + user_select : 'Select a user', + user_select_or : 'Select a User or select Show All above.', + user_no_roles : 'No roles are assigned to this user. Select Show All for a list of available roles', + user_no_perm : 'No permissions are assigned to this user. Select Show All for a list of available permissions', + user_role_list : 'User roles', + user_role_list_for : 'User roles for', //will be followed by username + user_role_add : 'Add user to role', + user_role_remove : 'Remove user from role', + user_perm_list : 'Application permissions', + user_perm_list_for : 'Application permissions for', //wilbe followed by username + user_perm_add : 'Grant user permission', + user_perm_remove : 'Revoke user permission', + user_role_view_all : 'Show all roles', + user_role_view_selected : 'Show only roles for the selected user', + user_perm_view_all : 'Show all permissions', + user_perm_view_selected : 'Show only permissions for the selected user', + granted_to : 'Granted to', // permission is granted to user or to the user's role + grant_role : 'Role', + grant_user : 'User', + user_perm_granted_role : 'permission granted through role', + user_perm_granted_user : 'permission granted to user', + + + // Role list + role_add : 'Add role', + role_edit : 'Edit role', + role_delete : 'Delete role', + role_delete_confirm : 'Are you sure you want to delete this role?', + role_perm_view_all : 'Show all permissions', + role_perm_view_selected : 'Show only permissions for the selected role', + role_perm_for : 'Permissions for', + role_select : 'Select a Role or select Show All above.', + role_perm_add : 'Add permission to role', + role_perm_remove : 'Remove permission from role', + + // Permission list + perm_internal_name : 'Internal Name', + perm_add : 'Add permission', + perm_edit : 'Edit permission', + perm_delete : 'Delete permission', + perm_delete_confirm : 'Are you sure you want to delete this permission?', + + + // Path list + path_tab_controllers : 'Controllers', + path_tab_paths : 'Paths', + controller_methods : 'methods', + controller_public : 'public', + controller_private : 'private', + path_verify : 'Verifing application paths', + path_refreshing : 'Refreshing paths', + path_public : 'Public', + path_private : 'Private', + path_method : 'Method', // A Codeigniter function inside a controller + path_path : 'Path', + path_access : 'Access', // Header for public/private column + path_permission : 'Permission', + path_permissions : 'Permissions', + path_set_public : 'Make path public', + path_set_private : 'Make path private', + path_set_permission : 'Set Permission', + path_remove_permission : 'Remove Permission', + path_delete : 'Delete Path', + path_not_found_1 : 'This method was not found in the Controller but a record of it exists in the database.', + path_not_found_2 : 'You may delete the record of this path.', + + // Session List + session_username : 'Username', + session_last_activity : 'Last Activity', + session_ip_address : 'IP Address', + session_user_agent : 'User Agent', // User-Agent string returned by user's browser + session_view_all : 'Show all sessions', + session_view_logged_in : 'Show only logged in sessions', + session_delete : 'Delete Session', + session_delete_confirm : 'Are you sure you want to delete this session?', + session_delete_user : 'user', // used in delete confirmation window title eg: "user: Bob Jones" + + + // dummy val so I don't forget to remove trailing comma + dummy : '' + } +}; diff --git a/app/resources/appunto-auth/css/appunto-auth/lang/pt.js b/app/resources/appunto-auth/css/appunto-auth/lang/pt.js new file mode 100644 index 00000000..f73412f3 --- /dev/null +++ b/app/resources/appunto-auth/css/appunto-auth/lang/pt.js @@ -0,0 +1,129 @@ +/* + * Translation by Loanda Drew and Ricardo Silva + */ +var Language = +{ + override: + { + // Global + name : 'Nome', //used in headers for various entities + description : 'Descrição', //used in headers for various entities + refresh : 'Atualizar', // reload the data + result : 'Resultado', + save : 'Salvar', + cancel : 'Cancelar', + yes : 'Sim', + no : 'Não', + field_required : 'Este campo é obrigatório', + + // Application tabs + tab_status : 'Status', + tab_users : 'Usuários', + tab_user_roles : 'Funções do usuário', + tab_permissions : 'Permissões', + tab_paths : 'Caminhos', + tab_sessions : 'Sessões', + + // usuário list + username : 'Usuário', + name : 'Nome', + surname : 'Sobrenome', + email : 'Email', + password : 'Senha', + password_confirm : 'Confirmar senha', + password_change : 'Alterar senha', + password_match : 'Senhas não combinam', + user_set_active : 'Configurar usuário como ativo', + active : 'Ativo', // Whether or not this User has been activated or deactivated + user_add : 'Adicionar usuário', + user_edit : 'Editar usuário', + user_delete : 'Apagar usuário', + user_delete_confirm : 'Tem certeza que deseja apagar este usuário?', + user_activate : 'Ativar usuário', + user_deactivate : 'Desativar usuário', + last_ip : 'Último IP', + last_login : 'Último Login', + created : 'Criado', + modified : 'Modificado', + never : 'Nunca', + user_select : 'Selecione um usuário', + user_select_or : 'Selecione um usuário ou Mostre Todos acima.', + user_no_roles : 'Nenhuma função está associada a este usuário. Selecione Mostrar Todos para ver as funções disponíveis.', + user_no_perm : 'Nenhuma permissão está associada a este usuário. Selecione Mostrar Todos para ver as permissões disponíveis.', + user_role_list : 'funções de usuário', + user_role_list_for : 'funções de usuário para', //will be followed by username + user_role_add : 'Adicionar usuário a função', + user_role_remove : 'Remover usuário da função', + user_perm_list : 'Permissões do aplicativo', + user_perm_list_for : 'Permissões do aplicativo para', //will be followed by username + user_perm_add : 'Conceder permissão ao usuário', + user_perm_remove : 'Remover permissão do usuário', + user_role_view_all : 'Mostrar todas as funções', + user_role_view_selected : 'Mostrar apenas as funções do usuário selecionado', + user_perm_view_all : 'Mostrar todas as permissões', + user_perm_view_selected : 'Mostrar apenas as permissões do usuário selecionado', + granted_to : 'Concedido a', // permission is granted to user or to the user's role + grant_role : 'Função', + grant_user : 'Usuário', + user_perm_granted_role : 'permissão concedida via função', + user_perm_granted_user : 'permissão concedida ao usuário', + + + // Role list + role_add : 'Adicionar função', + role_edit : 'Editar função', + role_delete : 'Apagar função', + role_delete_confirm : 'Tem certeza que deseja apagar esta função?', + role_perm_view_all : 'Mostrar todas as permissões', + role_perm_view_selected : 'Mostrar apenas as permisões da função selecionada', + role_perm_for : 'Permissões para', + role_select : 'Selecionar uma Função ou Mostrar Todas acima.', + role_perm_add : 'Adicionar permissão à função', + role_perm_remove : 'Remover perissão da função', + + // Permission list + perm_internal_name : 'Nome Interno', + perm_add : 'Adicionar permissão', + perm_edit : 'Editar permissão', + perm_delete : 'Apagar permissão', + perm_delete_confirm : 'Tem certeza que deseja apagar esta permissão?', + + // Path list + path_tab_controllers : 'Controladores', + path_tab_paths : 'Caminhos', + controller_methods : 'métodos', + controller_public : 'público', + controller_private : 'privado', + path_verify : 'Verificando caminhos do aplicativo', + path_refreshing : 'Atualizando caminhos', + path_public : 'Público', + path_private : 'Privado', + path_method : 'Método', // A Codeigniter function inside a controller + path_path : 'Caminho', + path_access : 'Acesso', // Header for public/private column + path_permission : 'Permissão', + path_permissions : 'Permissões', + path_set_public : 'Tornar caminho público', + path_set_private : 'Tornar caminho privado', + path_set_permission : 'Configurar permissão', + path_remove_permission : 'Remover Permissão', + path_delete : 'Apagar caminho', + path_not_found_1 : 'Este método não foi encontrado no controlador, mas existe um registro dele no banco de dados.', + path_not_found_2 : 'Você pode apagar o registro deste caminho.', + + // Session List + session_username : 'usuário', + session_last_activity : 'Última Atividade', + session_ip_address : 'Endereço de IP', + session_user_agent : 'User Agent', // User Agent string returned by usuário's browser + session_view_all : 'Mostrar todas as sessões', + session_view_logged_in : 'Mostrar apenas as sessões ativas', + session_delete : 'Apagar sessão', + session_delete_confirm : 'Tem certeza que deseja apagar esta sessão?', + session_delete_user : 'usuário', // used in delete confirmation window title eg: "user: Bob Jones" + + + // dummy val so I don't forget to remove trailing comma + dummy : '' + } +}; diff --git a/app/resources/appunto-auth/css/icons.css b/app/resources/appunto-auth/css/icons.css new file mode 100644 index 00000000..527bbac4 --- /dev/null +++ b/app/resources/appunto-auth/css/icons.css @@ -0,0 +1,72 @@ +/* Tab icons */ +.transmit { + background-image:url(icons/transmit.png) !important; +} +.user { + background-image:url(icons/user.png) !important; +} +.shield { + background-image:url(icons/shield.png) !important; +} +.lock { + background-image:url(icons/lock.png) !important; +} +.map { + background-image:url(icons/map.png) !important; +} +.monitor { + background-image:url(icons/monitor.png) !important; +} +/* Users */ +.user-add { + background-image:url(icons/user_add.png) !important; +} +.user-edit { + background-image:url(icons/user_edit.png) !important; +} +.user-delete { + background-image:url(icons/user_delete.png) !important; +} +.key { + background-image:url(icons/key.png) !important; +} +/* Roles */ +.shield-add { + background-image:url(icons/shield_add.png) !important; +} +.shield-go { + background-image:url(icons/shield_go.png) !important; +} +.shield-delete { + background-image:url(icons/shield_delete.png) !important; +} +/* Permissions */ +.lock-add { + background-image:url(icons/lock_add.png) !important; +} +.lock-edit { + background-image:url(icons/lock_edit.png) !important; +} +.lock-delete { + background-image:url(icons/lock_delete.png) !important; +} +/* Sessions */ +.monitor-delete { + background-image:url(icons/monitor_delete.png) !important; +} +/* Misc */ +.exclamation { + background-image:url(icons/exclamation.png) !important; +} +.delete { + background-image:url(icons/delete.png) !important; +} +.accept { + background-image:url(icons/accept.png) !important; +} +.world-link { + background-image:url(icons/world_link.png) !important; +} +.page-delete { + background-image:url(icons/page_delete.png) !important; +} diff --git a/app/resources/appunto-auth/css/icons/accept.png b/app/resources/appunto-auth/css/icons/accept.png new file mode 100644 index 00000000..89c8129a Binary files /dev/null and b/app/resources/appunto-auth/css/icons/accept.png differ diff --git a/app/resources/appunto-auth/css/icons/delete.png b/app/resources/appunto-auth/css/icons/delete.png new file mode 100644 index 00000000..08f24936 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/delete.png differ diff --git a/app/resources/appunto-auth/css/icons/error.png b/app/resources/appunto-auth/css/icons/error.png new file mode 100644 index 00000000..628cf2da Binary files /dev/null and b/app/resources/appunto-auth/css/icons/error.png differ diff --git a/app/resources/appunto-auth/css/icons/exclamation.png b/app/resources/appunto-auth/css/icons/exclamation.png new file mode 100644 index 00000000..c37bd062 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/exclamation.png differ diff --git a/app/resources/appunto-auth/css/icons/key.png b/app/resources/appunto-auth/css/icons/key.png new file mode 100644 index 00000000..4ec1a928 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/key.png differ diff --git a/app/resources/appunto-auth/css/icons/lock.png b/app/resources/appunto-auth/css/icons/lock.png new file mode 100644 index 00000000..2ebc4f6f Binary files /dev/null and b/app/resources/appunto-auth/css/icons/lock.png differ diff --git a/app/resources/appunto-auth/css/icons/lock_add.png b/app/resources/appunto-auth/css/icons/lock_add.png new file mode 100644 index 00000000..a7b566b1 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/lock_add.png differ diff --git a/app/resources/appunto-auth/css/icons/lock_delete.png b/app/resources/appunto-auth/css/icons/lock_delete.png new file mode 100644 index 00000000..ecb50a93 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/lock_delete.png differ diff --git a/app/resources/appunto-auth/css/icons/lock_edit.png b/app/resources/appunto-auth/css/icons/lock_edit.png new file mode 100644 index 00000000..116aa5b7 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/lock_edit.png differ diff --git a/app/resources/appunto-auth/css/icons/map.png b/app/resources/appunto-auth/css/icons/map.png new file mode 100644 index 00000000..f90ef25e Binary files /dev/null and b/app/resources/appunto-auth/css/icons/map.png differ diff --git a/app/resources/appunto-auth/css/icons/monitor.png b/app/resources/appunto-auth/css/icons/monitor.png new file mode 100644 index 00000000..d040bd02 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/monitor.png differ diff --git a/app/resources/appunto-auth/css/icons/monitor_delete.png b/app/resources/appunto-auth/css/icons/monitor_delete.png new file mode 100644 index 00000000..37332563 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/monitor_delete.png differ diff --git a/app/resources/appunto-auth/css/icons/page_delete.png b/app/resources/appunto-auth/css/icons/page_delete.png new file mode 100644 index 00000000..3141467c Binary files /dev/null and b/app/resources/appunto-auth/css/icons/page_delete.png differ diff --git a/app/resources/appunto-auth/css/icons/shield.png b/app/resources/appunto-auth/css/icons/shield.png new file mode 100644 index 00000000..3cb4e257 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/shield.png differ diff --git a/app/resources/appunto-auth/css/icons/shield_add.png b/app/resources/appunto-auth/css/icons/shield_add.png new file mode 100644 index 00000000..e20a1b4a Binary files /dev/null and b/app/resources/appunto-auth/css/icons/shield_add.png differ diff --git a/app/resources/appunto-auth/css/icons/shield_delete.png b/app/resources/appunto-auth/css/icons/shield_delete.png new file mode 100644 index 00000000..22823a70 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/shield_delete.png differ diff --git a/app/resources/appunto-auth/css/icons/shield_go.png b/app/resources/appunto-auth/css/icons/shield_go.png new file mode 100644 index 00000000..e9bd8522 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/shield_go.png differ diff --git a/app/resources/appunto-auth/css/icons/transmit.png b/app/resources/appunto-auth/css/icons/transmit.png new file mode 100644 index 00000000..f54bf736 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/transmit.png differ diff --git a/app/resources/appunto-auth/css/icons/user.png b/app/resources/appunto-auth/css/icons/user.png new file mode 100644 index 00000000..79f35ccb Binary files /dev/null and b/app/resources/appunto-auth/css/icons/user.png differ diff --git a/app/resources/appunto-auth/css/icons/user_add.png b/app/resources/appunto-auth/css/icons/user_add.png new file mode 100644 index 00000000..deae99bc Binary files /dev/null and b/app/resources/appunto-auth/css/icons/user_add.png differ diff --git a/app/resources/appunto-auth/css/icons/user_delete.png b/app/resources/appunto-auth/css/icons/user_delete.png new file mode 100644 index 00000000..acbb5630 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/user_delete.png differ diff --git a/app/resources/appunto-auth/css/icons/user_edit.png b/app/resources/appunto-auth/css/icons/user_edit.png new file mode 100644 index 00000000..c1974cda Binary files /dev/null and b/app/resources/appunto-auth/css/icons/user_edit.png differ diff --git a/app/resources/appunto-auth/css/icons/world_link.png b/app/resources/appunto-auth/css/icons/world_link.png new file mode 100644 index 00000000..b8edc126 Binary files /dev/null and b/app/resources/appunto-auth/css/icons/world_link.png differ diff --git a/app/resources/appunto-auth/css/images/appunto_auth_logo_app_header.gif b/app/resources/appunto-auth/css/images/appunto_auth_logo_app_header.gif new file mode 100644 index 00000000..065fe56c Binary files /dev/null and b/app/resources/appunto-auth/css/images/appunto_auth_logo_app_header.gif differ diff --git a/app/resources/appunto-auth/css/images/ci_selected.gif b/app/resources/appunto-auth/css/images/ci_selected.gif new file mode 100644 index 00000000..71816c54 Binary files /dev/null and b/app/resources/appunto-auth/css/images/ci_selected.gif differ diff --git a/app/resources/appunto-auth/css/images/ci_unselected.gif b/app/resources/appunto-auth/css/images/ci_unselected.gif new file mode 100644 index 00000000..404db2db Binary files /dev/null and b/app/resources/appunto-auth/css/images/ci_unselected.gif differ diff --git a/app/resources/appunto-auth/css/images/magnify.png b/app/resources/appunto-auth/css/images/magnify.png new file mode 100644 index 00000000..b807c42a Binary files /dev/null and b/app/resources/appunto-auth/css/images/magnify.png differ diff --git a/app/resources/appunto-auth/css/login.css b/app/resources/appunto-auth/css/login.css new file mode 100644 index 00000000..cc4754d4 --- /dev/null +++ b/app/resources/appunto-auth/css/login.css @@ -0,0 +1,92 @@ + +/* Login Box */ +.login-form-box { + background: #4F0101 url(logo/appunto_auth_logo_small.png) 24px 18px no-repeat; + -moz-border-radius: 16px; + -webkit-border-radius: 16px; + border-radius: 16px; + padding: 48px 0 16px; + margin: 0 auto; + margin-top: 100px; + width: 360px; + font-size: 16px; + font-family: helvetica, tahoma, arial, verdana, sans-serif; + color: #fff; +} +.login-form-box label { + display: inline-block; + margin: 6px 28px; + width: 300px; +} +.login-form-box form #username, +.login-form-box form #password { + float: right; + width: 200px; + padding: 2px 6px; + margin: 1px 0 -1px -1px; + border-color: #99BCE8; + border-width: 1px; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; +} +.login-form-box .login-form-errors { + padding-bottom: 12px; +} +.login-form-box .login-form-errors p { + font-size: 12px; + text-align: left; + background: url(icons/error.png) 2px 2px no-repeat; + color: #fff; + padding-top: 3px; + padding-left: 24px; + margin: 10px 0 10px 48px; +} +.login-form-box .login-form-auth-message { + font-size: 13px; + width: 280px; + margin: 6px 32px 12px; + text-align: left; + clear: both; +} +.login-form-box form #login-button{ + margin: 6px 0 20px 262px; +} +.login-form-box form #logout-button{ + margin: 6px 0 20px 140px; +} +.login-form-box .site_name { + visibility: hidden; +} +/* Login Buttons */ +.login-form-box form #login-button, +.login-form-box form #logout-button { + margin-top: 12px; + -moz-box-shadow:inset 0px 1px 0px 0px #cccccc; + -webkit-box-shadow:inset 0px 1px 0px 0px #ffffff; + box-shadow:inset 0px 1px 0px 0px #ffffff; + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #cccccc), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #cccccc 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; + -moz-border-radius:16px; + -webkit-border-radius:16px; + border-radius:16px; + border:1px solid #cccccc; + display:inline-block; + color:#333333; + font-weight:normal; + padding:2px 12px; + text-decoration:none; + text-shadow:1px 1px 0px #ffffff; +} +.login-form-box form #login-button:hover { + background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #ededed), color-stop(1, #dfdfdf) ); + background:-moz-linear-gradient( center top, #ededed 5%, #dfdfdf 100% ); + filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#dfdfdf'); + background-color:#ededed; +} +.login-form-box form #login-button:active { + position:relative; + top:1px; +} diff --git a/app/resources/appunto-auth/css/logo/appunto_auth_logo_app_header.gif b/app/resources/appunto-auth/css/logo/appunto_auth_logo_app_header.gif new file mode 100644 index 00000000..065fe56c Binary files /dev/null and b/app/resources/appunto-auth/css/logo/appunto_auth_logo_app_header.gif differ diff --git a/app/resources/appunto-auth/css/logo/appunto_auth_logo_small.png b/app/resources/appunto-auth/css/logo/appunto_auth_logo_small.png new file mode 100644 index 00000000..dbe6203f Binary files /dev/null and b/app/resources/appunto-auth/css/logo/appunto_auth_logo_small.png differ diff --git a/app/resources/appunto-auth/favicon.ico b/app/resources/appunto-auth/favicon.ico new file mode 100644 index 00000000..7f705164 Binary files /dev/null and b/app/resources/appunto-auth/favicon.ico differ diff --git a/app/resources/appunto-auth/js/app.js b/app/resources/appunto-auth/js/app.js new file mode 100644 index 00000000..2656c36e --- /dev/null +++ b/app/resources/appunto-auth/js/app.js @@ -0,0 +1 @@ +var AppuntoAuth=AppuntoAuth||{};if(!AppuntoAuth.controller){AppuntoAuth.controller={}}if(!AppuntoAuth.lib){AppuntoAuth.lib={}}if(!AppuntoAuth.lib.lang){AppuntoAuth.lib.lang={}}if(!AppuntoAuth.lib.proxy){AppuntoAuth.lib.proxy={}}if(!AppuntoAuth.lib.util){AppuntoAuth.lib.util={}}if(!AppuntoAuth.model){AppuntoAuth.model={}}if(!AppuntoAuth.store){AppuntoAuth.store={}}if(!AppuntoAuth.view){AppuntoAuth.view={}}if(!AppuntoAuth.view.main){AppuntoAuth.view.main={}}if(!AppuntoAuth.view.path){AppuntoAuth.view.path={}}if(!AppuntoAuth.view.permission){AppuntoAuth.view.permission={}}if(!AppuntoAuth.view.role){AppuntoAuth.view.role={}}if(!AppuntoAuth.view.session){AppuntoAuth.view.session={}}if(!AppuntoAuth.view.status){AppuntoAuth.view.status={}}if(!AppuntoAuth.view.user){AppuntoAuth.view.user={}}var Ext=Ext||{};if(!Ext.Toolbar){Ext.Toolbar={}}if(!Ext.app){Ext.app={}}if(!Ext.app.bind){Ext.app.bind={}}if(!Ext.app.domain){Ext.app.domain={}}if(!Ext.app.route){Ext.app.route={}}if(!Ext.button){Ext.button={}}if(!Ext.container){Ext.container={}}if(!Ext.core){Ext.core={}}if(!Ext.data){Ext.data={}}if(!Ext.data.field){Ext.data.field={}}if(!Ext.data.flash){Ext.data.flash={}}if(!Ext.data.identifier){Ext.data.identifier={}}if(!Ext.data.matrix){Ext.data.matrix={}}if(!Ext.data.operation){Ext.data.operation={}}if(!Ext.data.proxy){Ext.data.proxy={}}if(!Ext.data.reader){Ext.data.reader={}}if(!Ext.data.schema){Ext.data.schema={}}if(!Ext.data.session){Ext.data.session={}}if(!Ext.data.validator){Ext.data.validator={}}if(!Ext.data.writer){Ext.data.writer={}}if(!Ext.dd){Ext.dd={}}if(!Ext.dom){Ext.dom={}}if(!Ext.dom.Element){Ext.dom.Element={}}if(!Ext.event){Ext.event={}}if(!Ext.event.gesture){Ext.event.gesture={}}if(!Ext.event.publisher){Ext.event.publisher={}}if(!Ext.form){Ext.form={}}if(!Ext.form.Action){Ext.form.Action={}}if(!Ext.form.action){Ext.form.action={}}if(!Ext.form.field){Ext.form.field={}}if(!Ext.form.trigger){Ext.form.trigger={}}if(!Ext.fx){Ext.fx={}}if(!Ext.fx.easing){Ext.fx.easing={}}if(!Ext.fx.target){Ext.fx.target={}}if(!Ext.grid){Ext.grid={}}if(!Ext.grid.column){Ext.grid.column={}}if(!Ext.grid.header){Ext.grid.header={}}if(!Ext.grid.locking){Ext.grid.locking={}}if(!Ext.grid.plugin){Ext.grid.plugin={}}if(!Ext.layout){Ext.layout={}}if(!Ext.layout.boxOverflow){Ext.layout.boxOverflow={}}if(!Ext.layout.component){Ext.layout.component={}}if(!Ext.layout.container){Ext.layout.container={}}if(!Ext.layout.container.border){Ext.layout.container.border={}}if(!Ext.layout.container.boxOverflow){Ext.layout.container.boxOverflow={}}if(!Ext.list){Ext.list={}}if(!Ext.menu){Ext.menu={}}if(!Ext.mixin){Ext.mixin={}}if(!Ext.overrides){Ext.overrides={}}if(!Ext.overrides.app){Ext.overrides.app={}}if(!Ext.overrides.dom){Ext.overrides.dom={}}if(!Ext.overrides.event){Ext.overrides.event={}}if(!Ext.overrides.event.publisher){Ext.overrides.event.publisher={}}if(!Ext.overrides.util){Ext.overrides.util={}}if(!Ext.panel){Ext.panel={}}if(!Ext.perf){Ext.perf={}}if(!Ext.plugin){Ext.plugin={}}if(!Ext.resizer){Ext.resizer={}}if(!Ext.scroll){Ext.scroll={}}if(!Ext.selection){Ext.selection={}}if(!Ext.state){Ext.state={}}if(!Ext.tab){Ext.tab={}}if(!Ext.tip){Ext.tip={}}if(!Ext.toolbar){Ext.toolbar={}}if(!Ext.util){Ext.util={}}if(!Ext.util.translatable){Ext.util.translatable={}}if(!Ext.view){Ext.view={}}if(!Ext.window){Ext.window={}}var ExtThemeNeptune=ExtThemeNeptune||{};if(!ExtThemeNeptune.layout){ExtThemeNeptune.layout={}}if(!ExtThemeNeptune.layout.component){ExtThemeNeptune.layout.component={}}if(!ExtThemeNeptune.menu){ExtThemeNeptune.menu={}}if(!ExtThemeNeptune.panel){ExtThemeNeptune.panel={}}if(!ExtThemeNeptune.resizer){ExtThemeNeptune.resizer={}}if(!ExtThemeNeptune.toolbar){ExtThemeNeptune.toolbar={}}var Lang=Lang||{};(function(z){var x,v=["constructor","toString","valueOf","toLocaleString"],y={},r={},F=0,A,E,s,B,w,t,G=function(){var a,b;E=Ext.Base;s=Ext.ClassManager;for(a=v.length;a-->0;){b=(1<0;){d=x[c];e[d]=E[d]}return e},D=function(ac,p,d,am,Y,Z,aa,g,ag,o,ak){var aj=function al(){return this.constructor.apply(this,arguments)||null},e=aj,ai={enumerableMembers:am&F,onCreated:ak,onBeforeCreated:C,aliases:g},ae=d.alternateClassName||[],j=Ext.global,n,k,h,af,l,a,b,ad,m,an,f,q,ah,c,ab=s.alternateToName||s.maps.alternateToName,ao=s.nameToAlternates||s.maps.nameToAlternates;if(t===undefined){t=!!(s&&s.addAlias)}for(h=x.length;h-->0;){b=x[h];aj[b]=E[b]}if(d.$isFunction){d=d(aj)}ai.data=d;an=d.statics;delete d.statics;d.$className=ac;if("$className" in d){aj.$className=d.$className}aj.extend(p);m=aj.prototype;aj.xtype=d.xtype=Y[0];if(Y){m.xtypes=Y}m.xtypesChain=Z;m.xtypesMap=aa;d.alias=g;e.triggerExtended(aj,d,ai);if(d.onClassExtended){aj.onExtended(d.onClassExtended,aj);delete d.onClassExtended}if(an){if(t){aj.addStatics(an)}else{for(f in an){if(an.hasOwnProperty(f)){c=an[f];if(c&&c.$isFunction&&!c.$isClass&&c!==Ext.emptyFn&&c!==Ext.identityFn){aj[f]=ah=c;ah.$owner=aj;ah.$name=f}aj[f]=c}}}}if(d.inheritableStatics){aj.addInheritableStatics(d.inheritableStatics);delete d.inheritableStatics}if(m.onClassExtended){e.onExtended(m.onClassExtended,e);delete m.onClassExtended}if(d.config){B.call(Ext.Class,aj,d)}if(d.cachedConfig&&w){w.call(Ext.Class,aj,d)}ai.onBeforeCreated(aj,ai.data,ai);for(h=0,l=ag&&ag.length;h0){b--;d[b]="var Ext=window."+Ext.name+";"+d[b]}}f=d.join("");c=e[f];if(!c){c=Function.prototype.constructor.apply(Function.prototype,d);e[f]=c}return c},functionFactory:function(){var b=Array.prototype.slice.call(arguments),a;if(Ext.isSandboxed){a=b.length;if(a>0){a--;b[a]="var Ext=window."+Ext.name+";"+b[a]}}return Function.prototype.constructor.apply(Function.prototype,b)},Logger:{verbose:p,log:p,info:p,warn:p,error:function(a){throw new Error(a)},deprecate:p},getElementById:function(a){return document.getElementById(a)},splitAndUnescape:(function(){var a={};return function(e,f){if(!e){return[]}else{if(!f){return[e]}}var c=a[f]||(a[f]=new RegExp("\\\\"+f,"g")),g=[],b,d;b=e.split(f);while((d=b.shift())!==undefined){while(d.charAt(d.length-1)==="\\"&&b.length>0){d=d+f+b.shift()}d=d.replace(c,f);g.push(d)}return g}})()});Ext.returnTrue.$nullFn=Ext.returnId.$nullFn=true}());(function(){function b(){var h=this,a=h.sourceClass,f=h.sourceMethod,g=h.msg;if(f){if(g){f+="(): ";f+=g}else{f+="()"}}if(a){f=f?(a+"."+f):a}return f||g||""}Ext.Error=function(d){if(Ext.isString(d)){d={msg:d}}var a=new Error();Ext.apply(a,d);a.message=a.message||a.msg;a.toString=b;return a};Ext.apply(Ext.Error,{ignore:false,raise:function(j){j=j||{};if(Ext.isString(j)){j={msg:j}}var k=this,g=k.raise.caller,h,a;if(g){if(!j.sourceMethod&&(a=g.$name)){j.sourceMethod=a}if(!j.sourceClass&&(a=g.$owner)&&(a=a.$className)){j.sourceClass=a}}if(k.handle(j)!==true){h=b.call(j);throw new Ext.Error(j)}},handle:function(){return this.ignore}})})();Ext.deprecated=function(b){return Ext.emptyFn};Ext.Array=new (function(){var I=Array.prototype,B=I.slice,z=(function(){var a=[],c,b=20;if(!a.splice){return false}while(b--){a.push("A")}a.splice(15,0,"F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F","F");c=a.length;a.splice(13,0,"XXX");if(c+1!==a.length){return false}return true}()),A="indexOf" in I,F=true;function C(g,c){var d=g.length,a=new Array(d),f=new Array(d),b;for(b=0;ba){for(h=f;h--;){c[l+h]=c[a+h]}}}if(n&&b===j){c.length=j;c.push.apply(c,o)}else{c.length=j+n;for(h=0;h>1;j=h(a,b[f]);if(j>=0){d=f+1}else{if(j<0){g=f-1}}}return d},defaultCompare:function(b,a){return(ba)?1:0)},lexicalCompare:function(b,a){b=String(b);a=String(a);return(ba)?1:0)},each:function(g,b,c,f){g=K.from(g);var d,a=g.length;if(f!==true){for(d=0;d-1;d--){if(b.call(c||g[d],g[d],d,g)===false){return d}}}return true},forEach:("forEach" in I)?function(a,b,c){return a.forEach(b,c)}:function(a,c,d){for(var f=0,b=a.length;ff){f=c}}}return f},mean:function(a){return a.length>0?K.sum(a)/a.length:undefined},sum:function(a){var d=0,f,b,c;for(f=0,b=a.length;f=d){c=0}else{c=d-c}}if(c===0){b=a+b}else{if(c>=b.length){b+=a}else{b=b.substr(0,c)+a+b.substr(c)}}return b},startsWith:function(b,a,c){var d=A(b,a);if(d){if(c){b=b.toLowerCase();a=a.toLowerCase()}d=b.lastIndexOf(a,0)===0}return d},endsWith:function(a,c,b){var d=A(a,c);if(d){if(b){a=a.toLowerCase();c=c.toLowerCase()}d=a.indexOf(c,a.length-c.length)!==-1}return d},createVarName:function(a){return a.replace(s,"")},htmlEncode:function(a){return(!a)?a:String(a).replace(w,x)},htmlDecode:function(a){return(!a)?a:String(a).replace(z,t)},hasHtmlCharacters:function(a){return w.test(a)},addCharacterEntities:function(d){var e=[],a=[],c,b;for(c in d){b=d[c];C[c]=b;y[b]=c;e.push(b);a.push(c)}w=new RegExp("("+e.join("|")+")","g");z=new RegExp("("+a.join("|")+"|&#[0-9]{1,5};)","g")},resetCharacterEntities:function(){y={};C={};this.addCharacterEntities({"&":"&",">":">","<":"<",""":'"',"'":"'"})},urlAppend:function(a,b){if(!Ext.isEmpty(b)){return a+(a.indexOf("?")===-1?"?":"&")+b}return a},trim:function(a){if(a){a=a.replace(v,"")}return a||""},capitalize:function(a){if(a){a=a.charAt(0).toUpperCase()+a.substr(1)}return a||""},uncapitalize:function(a){if(a){a=a.charAt(0).toLowerCase()+a.substr(1)}return a||""},ellipsis:function(c,d,b){if(c&&c.length>d){if(b){var a=c.substr(0,d-2),e=Math.max(a.lastIndexOf(" "),a.lastIndexOf("."),a.lastIndexOf("!"),a.lastIndexOf("?"));if(e!==-1&&e>=(d-15)){return a.substr(0,e)+"..."}}return c.substr(0,d-3)+"..."}return c},escapeRegex:function(a){return a.replace(B,"\\$1")},createRegex:function(a,b,d,e){var c=a;if(a!=null&&!a.exec){c=q.escapeRegex(String(a));if(b!==false){c="^"+c}if(d!==false){c+="$"}c=new RegExp(c,(e!==false)?"i":"")}return c},escape:function(a){return a.replace(r,"\\$1")},toggle:function(b,a,c){return b===a?c:a},leftPad:function(c,b,a){var d=String(c);a=a||" ";while(d.length daysInMonth) {","d = daysInMonth;","}","}","h = from(h, from(def.h, dt.getHours()));","i = from(i, from(def.i, dt.getMinutes()));","s = from(s, from(def.s, dt.getSeconds()));","ms = from(ms, from(def.ms, dt.getMilliseconds()));","if(z >= 0 && y >= 0){","v = me.add(new Date(y < 100 ? 100 : y, 0, 1, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);","v = !strict? v : (strict === true && (z <= 364 || (me.isLeapYear(v) && z <= 365))? me.add(v, me.DAY, z) : null);","}else if(strict === true && !me.isValid(y, m + 1, d, h, i, s, ms)){","v = null;","}else{","if (W) {","year = y || (new Date()).getFullYear();","jan4 = new Date(year, 0, 4, 0, 0, 0);","d = jan4.getDay();","week1monday = new Date(jan4.getTime() - ((d === 0 ? 6 : d - 1) * 86400000));","v = Ext.Date.clearTime(new Date(week1monday.getTime() + ((W - 1) * 604800000 + 43200000)));","} else {","v = me.add(new Date(y < 100 ? 100 : y, m, d, h, i, s, ms), me.YEAR, y < 100 ? y - 100 : 0);","}","}","}","}","if(v){","if(zz != null){","v = me.add(v, me.SECOND, -v.getTimezoneOffset() * 60 - zz);","}else if(o){","v = me.add(v, me.MINUTE, -v.getTimezoneOffset() + (sn == '+'? -1 : 1) * (hr * 60 + mn));","}","}","return v;"].join("\n");function m(a){var b=Array.prototype.slice.call(arguments,1);return a.replace(q,function(d,c){return b[c]})}return p={now:Date.now,toString:function(b){if(!b){b=new Date()}var a=Ext.String.leftPad;return b.getFullYear()+"-"+a(b.getMonth()+1,2,"0")+"-"+a(b.getDate(),2,"0")+"T"+a(b.getHours(),2,"0")+":"+a(b.getMinutes(),2,"0")+":"+a(b.getSeconds(),2,"0")},getElapsed:function(a,b){return Math.abs(a-(b||p.now()))},useStrict:false,formatCodeToRegex:function(b,c){var a=p.parseCodes[b];if(a){a=typeof a=="function"?a():a;p.parseCodes[b]=a}return a?Ext.applyIf({c:a.c?m(a.c,c||"{0}"):a.c},a):{g:0,c:null,s:Ext.String.escapeRegex(b)}},parseFunctions:{MS:function(b,c){var a=(b||"").match(n);return a?new Date(((a[1]||"")+a[2])*1):null},time:function(b,c){var a=parseInt(b,10);if(a||a===0){return new Date(a)}return null},timestamp:function(b,c){var a=parseInt(b,10);if(a||a===0){return new Date(a*1000)}return null}},parseRegexes:[],formatFunctions:{MS:function(){return"\\/Date("+this.getTime()+")\\/"},time:function(){return this.getTime().toString()},timestamp:function(){return p.format(this,"U")}},y2kYear:50,MILLI:"ms",SECOND:"s",MINUTE:"mi",HOUR:"h",DAY:"d",MONTH:"mo",YEAR:"y",defaults:{},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNumbers:{January:0,Jan:0,February:1,Feb:1,March:2,Mar:2,April:3,Apr:3,May:4,June:5,Jun:5,July:6,Jul:6,August:7,Aug:7,September:8,Sep:8,October:9,Oct:9,November:10,Nov:10,December:11,Dec:11},defaultFormat:"m/d/Y",getShortMonthName:function(a){return Ext.Date.monthNames[a].substring(0,3)},getShortDayName:function(a){return Ext.Date.dayNames[a].substring(0,3)},getMonthNumber:function(a){return Ext.Date.monthNumbers[a.substring(0,1).toUpperCase()+a.substring(1,3).toLowerCase()]},formatContainsHourInfo:function(a){return s.test(a.replace(k,""))},formatContainsDateInfo:function(a){return o.test(a.replace(k,""))},unescapeFormat:function(a){return a.replace(l,"")},formatCodes:{d:"Ext.String.leftPad(this.getDate(), 2, '0')",D:"Ext.Date.getShortDayName(this.getDay())",j:"this.getDate()",l:"Ext.Date.dayNames[this.getDay()]",N:"(this.getDay() ? this.getDay() : 7)",S:"Ext.Date.getSuffix(this)",w:"this.getDay()",z:"Ext.Date.getDayOfYear(this)",W:"Ext.String.leftPad(Ext.Date.getWeekOfYear(this), 2, '0')",F:"Ext.Date.monthNames[this.getMonth()]",m:"Ext.String.leftPad(this.getMonth() + 1, 2, '0')",M:"Ext.Date.getShortMonthName(this.getMonth())",n:"(this.getMonth() + 1)",t:"Ext.Date.getDaysInMonth(this)",L:"(Ext.Date.isLeapYear(this) ? 1 : 0)",o:"(this.getFullYear() + (Ext.Date.getWeekOfYear(this) == 1 && this.getMonth() > 0 ? +1 : (Ext.Date.getWeekOfYear(this) >= 52 && this.getMonth() < 11 ? -1 : 0)))",Y:"Ext.String.leftPad(this.getFullYear(), 4, '0')",y:"('' + this.getFullYear()).substring(2, 4)",a:"(this.getHours() < 12 ? 'am' : 'pm')",A:"(this.getHours() < 12 ? 'AM' : 'PM')",g:"((this.getHours() % 12) ? this.getHours() % 12 : 12)",G:"this.getHours()",h:"Ext.String.leftPad((this.getHours() % 12) ? this.getHours() % 12 : 12, 2, '0')",H:"Ext.String.leftPad(this.getHours(), 2, '0')",i:"Ext.String.leftPad(this.getMinutes(), 2, '0')",s:"Ext.String.leftPad(this.getSeconds(), 2, '0')",u:"Ext.String.leftPad(this.getMilliseconds(), 3, '0')",O:"Ext.Date.getGMTOffset(this)",P:"Ext.Date.getGMTOffset(this, true)",T:"Ext.Date.getTimezone(this)",Z:"(this.getTimezoneOffset() * -60)",c:function(){var c,e,a,b,d;for(c="Y-m-dTH:i:sP",e=[],a=0,b=c.length;a me.y2kYear ? 1900 + ty : 2000 + ty;\n",s:"(\\d{1,2})"},a:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(am|pm|AM|PM)",calcAtEnd:true},A:{g:1,c:"if (/(am)/i.test(results[{0}])) {\nif (!h || h == 12) { h = 0; }\n} else { if (!h || h < 12) { h = (h || 0) + 12; }}",s:"(AM|PM|am|pm)",calcAtEnd:true},g:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|[0-9])"},G:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|1[0-9]|[0-9])"},h:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(1[0-2]|0[1-9])"},H:{g:1,c:"h = parseInt(results[{0}], 10);\n",s:"(2[0-3]|[0-1][0-9])"},i:{g:1,c:"i = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},s:{g:1,c:"s = parseInt(results[{0}], 10);\n",s:"([0-5][0-9])"},u:{g:1,c:"ms = results[{0}]; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n",s:"(\\d+)"},O:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(3,5) / 60),","mn = o.substring(3,5) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{4})"},P:{g:1,c:["o = results[{0}];","var sn = o.substring(0,1),","hr = o.substring(1,3)*1 + Math.floor(o.substring(4,6) / 60),","mn = o.substring(4,6) % 60;","o = ((-12 <= (hr*60 + mn)/60) && ((hr*60 + mn)/60 <= 14))? (sn + Ext.String.leftPad(hr, 2, '0') + Ext.String.leftPad(mn, 2, '0')) : null;\n"].join("\n"),s:"([+-]\\d{2}:\\d{2})"},T:{g:0,c:null,s:"[A-Z]{1,5}"},Z:{g:1,c:"zz = results[{0}] * 1;\nzz = (-43200 <= zz && zz <= 50400)? zz : null;\n",s:"([+-]?\\d{1,5})"},c:function(){var d=[],b=[p.formatCodeToRegex("Y",1),p.formatCodeToRegex("m",2),p.formatCodeToRegex("d",3),p.formatCodeToRegex("H",4),p.formatCodeToRegex("i",5),p.formatCodeToRegex("s",6),{c:"ms = results[7] || '0'; ms = parseInt(ms, 10)/Math.pow(10, ms.length - 3);\n"},{c:["if(results[8]) {","if(results[8] == 'Z'){","zz = 0;","}else if (results[8].indexOf(':') > -1){",p.formatCodeToRegex("P",8).c,"}else{",p.formatCodeToRegex("O",8).c,"}","}"].join("\n")}],c,a;for(c=0,a=b.length;c0?"-":"+")+Ext.String.leftPad(Math.floor(Math.abs(a)/60),2,"0")+(b?":":"")+Ext.String.leftPad(Math.abs(a%60),2,"0")},getDayOfYear:function(e){var a=0,c=Ext.Date.clone(e),b=e.getMonth(),d;for(d=0,c.setDate(1),c.setMonth(0);d28){b=Math.min(b,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(h),Ext.Date.MONTH,e)).getDate())}d.setDate(b);d.setMonth(h.getMonth()+e);break;case Ext.Date.YEAR:b=h.getDate();if(b>28){b=Math.min(b,Ext.Date.getLastDateOfMonth(Ext.Date.add(Ext.Date.getFirstDateOfMonth(h),Ext.Date.YEAR,e)).getDate())}d.setDate(b);d.setFullYear(h.getFullYear()+e);break}}if(f){switch(a.toLowerCase()){case Ext.Date.MILLI:g=1;break;case Ext.Date.SECOND:g=1000;break;case Ext.Date.MINUTE:g=1000*60;break;case Ext.Date.HOUR:g=1000*60*60;break;case Ext.Date.DAY:g=1000*60*60*24;break;case Ext.Date.MONTH:b=p.getDaysInMonth(d);g=1000*60*60*24*b;break;case Ext.Date.YEAR:b=(p.isLeapYear(d)?366:365);g=1000*60*60*24*b;break}if(g){d.setTime(d.getTime()+g*f)}}return d},subtract:function(b,c,a){return p.add(b,c,-a)},between:function(b,d,c){var a=b.getTime();return d.getTime()<=a&&a<=c.getTime()},compat:function(){var f=window.Date,g,a=["useStrict","formatCodeToRegex","parseFunctions","parseRegexes","formatFunctions","y2kYear","MILLI","SECOND","MINUTE","HOUR","DAY","MONTH","YEAR","defaults","dayNames","monthNames","monthNumbers","getShortMonthName","getShortDayName","getMonthNumber","formatCodes","isValid","parseDate","getFormatCode","createFormat","createParser","parseCodes"],c=["dateFormat","format","getTimezone","getGMTOffset","getDayOfYear","getWeekOfYear","isLeapYear","getFirstDayOfMonth","getLastDayOfMonth","getDaysInMonth","getSuffix","clone","isDST","clearTime","add","between"],b=a.length,e=c.length,d,j,h;for(h=0;hc){return f-1}else{return f}case b.YEAR:f=c.getFullYear()-a.getFullYear();if(Ext.Date.add(a,e,f)>c){return f-1}else{return f}}},align:function(b,d,a){var c=new Date(+b);switch(d.toLowerCase()){case Ext.Date.MILLI:return c;break;case Ext.Date.SECOND:c.setUTCSeconds(c.getUTCSeconds()-c.getUTCSeconds()%a);c.setUTCMilliseconds(0);return c;break;case Ext.Date.MINUTE:c.setUTCMinutes(c.getUTCMinutes()-c.getUTCMinutes()%a);c.setUTCSeconds(0);c.setUTCMilliseconds(0);return c;break;case Ext.Date.HOUR:c.setUTCHours(c.getUTCHours()-c.getUTCHours()%a);c.setUTCMinutes(0);c.setUTCSeconds(0);c.setUTCMilliseconds(0);return c;break;case Ext.Date.DAY:if(a==7||a==14){c.setUTCDate(c.getUTCDate()-c.getUTCDay()+1)}c.setUTCHours(0);c.setUTCMinutes(0);c.setUTCSeconds(0);c.setUTCMilliseconds(0);return c;break;case Ext.Date.MONTH:c.setUTCMonth(c.getUTCMonth()-(c.getUTCMonth()-1)%a,1);c.setUTCHours(0);c.setUTCMinutes(0);c.setUTCSeconds(0);c.setUTCMilliseconds(0);return c;break;case Ext.Date.YEAR:c.setUTCFullYear(c.getUTCFullYear()-c.getUTCFullYear()%a,1,1);c.setUTCHours(0);c.setUTCMinutes(0);c.setUTCSeconds(0);c.setUTCMilliseconds(0);return b;break}}}}());Ext.Function=(function(){var v=0,n,t=[],m=[],r=0,q={},s=window,o=s.requestAnimationFrame||s.webkitRequestAnimationFrame||s.mozRequestAnimationFrame||s.oRequestAnimationFrame||function(b){var a=Ext.now(),d=Math.max(0,16-(a-v)),c=s.setTimeout(function(){b(a+d)},d);v=a+d;return c},u=function(){var a=t.length,b,d,c;n=null;for(d=0;d0){return setTimeout(function(){if(Ext.elevateFunction){Ext.elevateFunction(b)}else{b()}},d)}b();return 0},interval:function(b,d,c,e,a){b=Ext.Function.bind(b,c,e,a);return setInterval(function(){if(Ext.elevateFunction){Ext.elevateFunction(b)}else{b()}},d)},createSequence:function(c,b,a){if(!b){return c}else{return function(){var d=c.apply(this,arguments);b.apply(a||this,arguments);return d}}},createBuffered:function(b,e,c,d){var a;return function(){var f=d||Array.prototype.slice.call(arguments,0),g=c||this;if(a){clearTimeout(a)}a=setTimeout(function(){if(Ext.elevateFunction){Ext.elevateFunction(b,g,f)}else{b.apply(g,f)}},e)}},createAnimationFrame:function(c,d,e,b){var a;b=b||3;return function(){var f=e||Array.prototype.slice.call(arguments,0);d=d||this;if(b===3&&a){p.cancelAnimationFrame(a)}if((b&1)||!a){a=p.requestAnimationFrame(function(){a=null;c.apply(d,f)})}}},requestAnimationFrame:function(c,d,a){var b=++r,e=Array.prototype.slice.call(arguments,0);e[3]=b;q[b]=1;t.push(e);if(!n){n=o(Ext.elevateFunction?w:u)}return b},cancelAnimationFrame:function(a){delete q[a]},createThrottled:function(e,h,f){var d=0,a,g,b,c=function(){if(Ext.elevateFunction){Ext.elevateFunction(e,f,g)}else{e.apply(f,g)}d=Ext.now();b=null};return function(){if(!f){f=this}a=Ext.now()-d;g=arguments;if(a>=h){clearTimeout(b);c()}else{if(!b){b=Ext.defer(c,h-a)}}}},createBarrier:function(b,c,a){return function(){if(!--b){c.apply(a,arguments)}}},interceptBefore:function(e,a,c,d){var b=e[a]||Ext.emptyFn;return(e[a]=function(){var f=c.apply(d||this,arguments);b.apply(this,arguments);return f})},interceptAfter:function(e,a,c,d){var b=e[a]||Ext.emptyFn;return(e[a]=function(){b.apply(this,arguments);return c.apply(d||this,arguments)})},makeCallback:function(b,a){return function(){return a[b].apply(a,arguments)}}};Ext.defer=p.defer;Ext.interval=p.interval;Ext.pass=p.pass;Ext.bind=p.bind;Ext.deferCallback=p.requestAnimationFrame;return p})();Ext.Number=new function(){var g=this,h=(0.9).toFixed()!=="1",e=Math,f={count:false,inclusive:false,wrap:true};Ext.apply(g,{Clip:{DEFAULT:f,COUNT:Ext.applyIf({count:true},f),INCLUSIVE:Ext.applyIf({inclusive:true},f),NOWRAP:Ext.applyIf({wrap:false},f)},clipIndices:function(b,a,o){o=o||f;var p=0,c=o.wrap,d,q,n;a=a||[];for(n=0;n<2;++n){d=q;q=a[n];if(q==null){q=p}else{if(n&&o.count){q+=d;q=(q>b)?b:q}else{if(c){q=(q<0)?(b+q):q}if(n&&o.inclusive){++q}q=(q<0)?0:((q>b)?b:q)}}p=b}a[0]=d;a[1]=(qc)?c:d)},snap:function(b,d,c,a){var k;if(b===undefined||b=d){b+=d}else{if(k*2<-d){b-=d}}}}return g.constrain(b,c,a)},snapInRange:function(b,k,c,a){var d;c=(c||0);if(b===undefined||b=k){b+=k}}if(a!==undefined){if(b>(a=g.snapInRange(a,k,c))){b=a}}return b},toFixed:h?function(a,c){c=c||0;var b=e.pow(10,c);return(e.round(a*b)/b).toFixed(c)}:function(a,b){return a.toFixed(b)},from:function(a,b){if(isFinite(a)){a=parseFloat(a)}return !isNaN(a)?a:b},randomInt:function(a,b){return e.floor(e.random()*(b-a+1)+a)},correctFloat:function(a){return parseFloat(a.toPrecision(14))}});Ext.num=function(){return g.from.apply(this,arguments)}}();(function(){var d=function(){},c=Ext.Object={chain:Object.create||function(a){d.prototype=a;var b=new d();d.prototype=null;return b},clear:function(b){for(var a in b){delete b[a]}return b},freeze:Object.freeze?function(a,f){if(a&&typeof a==="object"&&!Object.isFrozen(a)){Object.freeze(a);if(f){for(var b in a){c.freeze(a[b],f)}}}return a}:Ext.identityFn,toQueryObjects:function(m,a,n){var o=c.toQueryObjects,b=[],l,k;if(Ext.isArray(a)){for(l=0,k=a.length;l0){F=B.split("=");a=decodeURIComponent(F[0]);C=(F[1]!==undefined)?decodeURIComponent(F[1]):"";if(!y){if(j.hasOwnProperty(a)){if(!Ext.isArray(j[a])){j[a]=[j[a]]}j[a].push(C)}else{j[a]=C}}else{G=a.match(/(\[):?([^\]]*)\]/g);w=a.match(/^([^\[]+)/);a=w[0];E=[];if(G===null){j[a]=C;continue}for(A=0,K=G.length;Aa){return 1}}v=z.releaseValue;a=g.releaseValue;if(va){return 1}return 0},toString:function(){return this.version},valueOf:function(){return this.version},getMajor:function(){return this.major},getMinor:function(){return this.minor},getPatch:function(){return this.patch},getBuild:function(){return this.build},getRelease:function(){return this.release},getReleaseValue:function(){return this.releaseValue},isGreaterThan:function(a){return this.compareTo(a)>0},isGreaterThanOrEqual:function(a){return this.compareTo(a)>=0},isLessThan:function(a){return this.compareTo(a)<0},isLessThanOrEqual:function(a){return this.compareTo(a)<=0},equals:function(a){return this.compareTo(a)===0},match:function(a){a=String(a);return this.version.substr(0,a.length)===a},toArray:function(){var a=this;return[a.getMajor(),a.getMinor(),a.getPatch(),a.getBuild(),a.getRelease()]},getShortVersion:function(){return this.shortVersion},gt:function(a){return this.compareTo(a)>0},lt:function(a){return this.compareTo(a)<0},gtEq:function(a){return this.compareTo(a)>=0},ltEq:function(a){return this.compareTo(a)<=0}};Ext.apply(m,{aliases:{from:{extjs:"ext",core:"sencha-core"},to:{ext:["extjs"],"sencha-core":["core"]}},releaseValueMap:{dev:-6,alpha:-5,a:-5,beta:-4,b:-4,rc:-3,"#":-2,p:-1,pl:-1},getComponentValue:function(a){return !a?0:(isNaN(a)?this.releaseValueMap[a]||a:parseInt(a,10))},compare:function(a,b){var c=a.isVersion?a:new m(a);return c.compareTo(b)},set:function(f,b,c){var d=m.aliases.to[b],e=c.isVersion?c:new m(c),a;f[b]=e;if(d){for(a=d.length;a-->0;){f[d[a]]=e}}return e}});Ext.apply(Ext,{compatVersions:{},versions:{},lastRegisteredVersion:null,getCompatVersion:function(b){var c=Ext.compatVersions,a;if(!b){a=c.ext||c.touch||c.core}else{a=c[m.aliases.from[b]||b]}return a||Ext.getVersion(b)},setCompatVersion:function(a,b){m.set(Ext.compatVersions,a,b)},setVersion:function(a,b){Ext.lastRegisteredVersion=m.set(Ext.versions,a,b);return this},getVersion:function(a){var b=Ext.versions;if(!a){return b.ext||b.touch||b.core}return b[m.aliases.from[a]||a]},checkVersion:function(d,E){var I=Ext.isArray(d),z=m.aliases.from,D=I?d:n,A=D.length,g=Ext.versions,F=g.ext||g.touch,c,G,a,f,e,B,C,b,H;if(!I){n[0]=d}for(c=0;c=0){C=C.replace(l,"")}G=C.indexOf("@");if(G<0){b=C;H=F}else{B=C.substring(0,G);if(!(H=g[z[B]||B])){if(E){return false}continue}b=C.substring(G+1)}G=b.indexOf("-");if(G<0){if(b.charAt(G=b.length-1)==="+"){f=b.substring(0,G);e=null}else{f=e=b}}else{if(G>0){f=b.substring(0,G);e=b.substring(G+1)}else{f=null;e=b.substring(G+1)}}a=true;if(f){f=new m(f,"~");a=f.ltEq(H)}if(a&&e){e=new m(e,"~");a=e.gtEq(H)}}if(a){if(!E){return true}}else{if(E){return false}}}return !!E},deprecate:function(d,b,a,c){if(m.compare(Ext.getVersion(d),b)<1){a.call(c)}}})}());(function(j){var h=(j&&j.packages)||{},k=j&&j.compatibility,f,g;for(f in h){g=h[f];Ext.setVersion(f,g.version)}if(k){if(Ext.isString(k)){Ext.setCompatVersion("core",k)}else{for(f in k){Ext.setCompatVersion(f,k[f])}}}if(!h.ext&&!h.touch){Ext.setVersion("ext","5")}})(Ext.manifest);Ext.Config=function(d){var f=this,e=d.charAt(0).toUpperCase()+d.substr(1);f.name=d;f.names={internal:"_"+d,initializing:"is"+e+"Initializing",apply:"apply"+e,update:"update"+e,get:"get"+e,set:"set"+e,initGet:"initGet"+e,doSet:"doSet"+e,changeEvent:d.toLowerCase()+"change"};f.root=f};Ext.Config.map={};Ext.Config.get=function(d){var f=Ext.Config.map,e=f[d]||(f[d]=new Ext.Config(d));return e};Ext.Config.prototype={self:Ext.Config,isConfig:true,getGetter:function(){return this.getter||(this.root.getter=this.makeGetter())},getInitGetter:function(){return this.initGetter||(this.root.initGetter=this.makeInitGetter())},getSetter:function(){return this.setter||(this.root.setter=this.makeSetter())},getInternalName:function(b){return b.$configPrefixed?this.names.internal:this.name},mergeNew:function(j,g,k,l){var h,m;if(!g){h=j}else{if(!j){h=g}else{h=Ext.Object.chain(g);for(m in j){if(!l||!(m in h)){h[m]=j[m]}}}}return h},mergeSets:function(k,m,h){var g=m?Ext.Object.chain(m):{},l,j;if(k instanceof Array){for(l=k.length;l--;){j=k[l];if(!h||!(j in g)){g[j]=true}}}else{if(k){if(k.constructor===Object){for(l in k){j=k[l];if(!h||!(l in g)){g[l]=j}}}else{if(!h||!(k in g)){g[k]=true}}}}return g},makeGetter:function(){var d=this.name,c=this.names.internal;return function(){var a=this.$configPrefixed?c:d;return this[a]}},makeInitGetter:function(){var g=this.name,h=this.names,j=h.set,f=h.get,k=h.initializing;return function(){var a=this;a[k]=true;delete a[f];a[j](a.config[g]);delete a[k];return a[f].apply(a,arguments)}},makeSetter:function(){var j=this.name,m=this.names,o=m.internal,n=m.get,h=m.apply,k=m.update,l;l=function(a){var b=this,c=b.$configPrefixed?o:j,d=b[c];delete b[n];if(!b[h]||(a=b[h](a,d))!==undefined){if(a!==(d=b[c])){b[c]=a;if(b[k]){b[k](a,d)}}}return b};l.$isDefault=true;return l}};(function(){var d=Ext.Config,f=d.map,e=Ext.Object;Ext.Configurator=function(h){var b=this,c=h.prototype,a=h.superclass?h.superclass.self.$config:null;b.cls=h;if(a){b.configs=e.chain(a.configs);b.cachedConfigs=e.chain(a.cachedConfigs);b.initMap=e.chain(a.initMap);b.values=e.chain(a.values)}else{b.configs={};b.cachedConfigs={};b.initMap={};b.values={}}c.config=c.defaultConfig=b.values;h.$config=b};Ext.Configurator.prototype={self:Ext.Configurator,initList:null,add:function(z,O){var s=this,K=s.cls,H=s.configs,c=s.cachedConfigs,F=s.initMap,C=K.prototype,b=O&&O.$config.configs,N=s.values,I,G,A,M,L,J,a,D,E,B;for(a in z){B=z[a];I=B&&B.constructor===Object;G=I&&"$value" in B?B:null;if(G){A=!!G.cached;B=G.$value}M=G&&G.merge;L=H[a];if(L){if(O){M=L.merge;if(!M){continue}G=null}else{M=M||L.merge}J=N[a];if(M){B=M.call(L,B,J,K,O)}else{if(I){if(J&&J.constructor===Object){B=e.merge({},J,B)}}}}else{if(b){L=b[a];G=null}else{L=d.get(a)}H[a]=L;if(L.cached||A){c[a]=true}D=L.names;if(!C[E=D.get]){C[E]=L.getGetter()}if(!C[E=D.set]){C[E]=L.getSetter()}}if(G){if(L.owner!==K){H[a]=L=Ext.Object.chain(L);L.owner=K}Ext.apply(L,G);delete L.$value}if(B!==null){F[a]=true}else{if(C.$configPrefixed){C[H[a].names.internal]=null}else{C[H[a].name]=null}if(a in F){F[a]=false}}N[a]=B}},configure:function(b,R){var M=this,S=M.configs,Q=M.initMap,O=M.initListMap,D=M.initList,N=M.cls.prototype,Y=e.fork(M.values),E=!b.$configStrict,L=0,H=!D,X,V,U,J,F,G,T,P,K,I,a,W,c;if(H){M.initList=D=[];M.initListMap=O={};b.isFirstInstance=true;for(K in Q){J=Q[K];V=S[K];a=V.cached;if(J){P=V.names;I=Y[K];if(!N[P.set].$isDefault||N[P.apply]||N[P.update]||typeof I==="object"){if(a){(X||(X=[])).push(V)}else{D.push(V);O[K]=true}b[P.get]=V.initGetter||V.getInitGetter()}else{N[V.getInternalName(N)]=I}}else{if(a){N[V.getInternalName(N)]=undefined}}}}T=X&&X.length;if(T){for(F=0;F0){for(d=0;d0){G=J.test(A[D])}A=L[n];if(A&&!G){D=A.length;while(!G&&D-->0){G=J.test(A[D])}}}if(G){x[n]=1;F.push(n)}}}}}return F},getPath:function(f){var k=this,h=k.paths,g="",j;if(f in h){g=h[f]}else{j=k.getPrefix(f);if(j){f=f.substring(j.length+1);g=h[j];if(g){g+="/"}}g+=f.replace(k.dotRe,"/")+".js"}return g},getPrefix:function(f){if(f in this.paths){return f}var h=this.getPrefixes(),g=h.length,k,j;while(g-->0){k=(j=h[g]).length;if(k=D){Ext[F+"p"]=true}}}if(x.is.Opera&&parseInt(N,10)<=12){Ext.isOpera12m=true}Ext.chromeVersion=Ext.isChrome?N:0;Ext.firefoxVersion=Ext.isFirefox?N:0;Ext.ieVersion=Ext.isIE?N:0;Ext.operaVersion=Ext.isOpera?N:0;Ext.safariVersion=Ext.isSafari?N:0;Ext.webKitVersion=Ext.isWebKit?N:0;this.setFlag(C+N,true,E);this.setFlag(C+G.getShortVersion())}for(D in O){if(O.hasOwnProperty(D)){w=O[D];this.setFlag(w,C===w)}}this.setFlag(w);if(L){this.setFlag(z+(L.getMajor()||""));this.setFlag(z+L.getShortVersion())}for(D in I){if(I.hasOwnProperty(D)){w=I[D];this.setFlag(w,z===w,E)}}this.setFlag("Standalone",!!navigator.standalone);this.setFlag("Ripple",!!document.getElementById("tinyhippos-injected")&&!Ext.isEmpty(window.top.ripple));this.setFlag("WebWorks",!!window.blackberry);if(typeof window.PhoneGap!="undefined"||typeof window.Cordova!="undefined"||typeof window.cordova!="undefined"){J=true;this.setFlag("PhoneGap");this.setFlag("Cordova")}else{if(!!window.isNK){J=true;this.setFlag("Sencha")}}if(/(Glass)/i.test(y)){this.setFlag("GoogleGlass")}if(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)(?!.*FBAN)/i.test(y)){J=true}this.setFlag("WebView",J);this.isStrict=Ext.isStrict=document.compatMode=="CSS1Compat";this.isSecure=/^https/i.test(window.location.protocol);this.identity=C+N+(this.isStrict?"Strict":"Quirks")};Ext.env.Browser.prototype={constructor:Ext.env.Browser,browserNames:{ie:"IE",firefox:"Firefox",safari:"Safari",chrome:"Chrome",opera:"Opera",dolfin:"Dolfin",webosbrowser:"webOSBrowser",chromeMobile:"ChromeMobile",chromeiOS:"ChromeiOS",silk:"Silk",other:"Other"},engineNames:{webkit:"WebKit",gecko:"Gecko",presto:"Presto",trident:"Trident",other:"Other"},enginePrefixes:{webkit:"AppleWebKit/",gecko:"Gecko/",presto:"Presto/",trident:"Trident/"},browserPrefixes:{ie:"MSIE ",firefox:"Firefox/",chrome:"Chrome/",safari:"Version/",opera:"OPR/",dolfin:"Dolfin/",webosbrowser:"wOSBrowser/",chromeMobile:"CrMo/",chromeiOS:"CriOS/",silk:"Silk/"},styleDashPrefixes:{WebKit:"-webkit-",Gecko:"-moz-",Trident:"-ms-",Presto:"-o-",Other:""},stylePrefixes:{WebKit:"Webkit",Gecko:"Moz",Trident:"ms",Presto:"O",Other:""},propertyPrefixes:{WebKit:"webkit",Gecko:"moz",Trident:"ms",Presto:"o",Other:""},is:function(b){return !!this.is[b]},name:null,version:null,engineName:null,engineVersion:null,setFlag:function(e,f,d){if(typeof f=="undefined"){f=true}this.is[e]=f;this.is[e.toLowerCase()]=f;if(d){Ext["is"+e]=f}return this},getStyleDashPrefix:function(){return this.styleDashPrefixes[this.engineName]},getStylePrefix:function(){return this.stylePrefixes[this.engineName]},getVendorProperyName:function(d){var c=this.propertyPrefixes[this.engineName];if(c.length>0){return c+Ext.String.capitalize(d)}return d},getPreferredTranslationMethod:function(b){if(typeof b=="object"&&"translationMethod" in b&&b.translationMethod!=="auto"){return b.translationMethod}else{if(this.is.AndroidStock2||this.is.IE){return"scrollposition"}else{return"csstransform"}}}};(function(b){Ext.browser=new Ext.env.Browser(b,true);Ext.userAgent=b.toLowerCase()}(Ext.global.navigator.userAgent));Ext.env.OS=function(p,B,s){var t=this,u=t.names,z=t.prefixes,C,v="",x=t.is,A,w,y,q,r;s=s||Ext.browser;for(A in z){if(z.hasOwnProperty(A)){w=z[A];y=p.match(new RegExp("(?:"+w+")([^\\s;]+)"));if(y){C=u[A];r=y[1];if(r&&r=="HTC_"){v=new Ext.Version("2.3")}else{if(r&&r=="Silk/"){v=new Ext.Version("2.3")}else{v=new Ext.Version(y[y.length-1])}}break}}}if(!C){C=u[(p.toLowerCase().match(/mac|win|linux/)||["other"])[0]];v=new Ext.Version("")}this.name=C;this.version=v;if(B){this.setFlag(B.replace(/ simulator$/i,""))}this.setFlag(C);if(v){this.setFlag(C+(v.getMajor()||""));this.setFlag(C+v.getShortVersion())}for(A in u){if(u.hasOwnProperty(A)){q=u[A];if(!x.hasOwnProperty(C)){this.setFlag(q,(C===q))}}}if(this.name=="iOS"&&window.screen.height==568){this.setFlag("iPhone5")}if(s.is.Safari||s.is.Silk){if(this.is.Android2||this.is.Android3||s.version.shortVersion==501){s.setFlag("AndroidStock");s.setFlag("AndroidStock2")}if(this.is.Android4){s.setFlag("AndroidStock");s.setFlag("AndroidStock4")}}};Ext.env.OS.prototype={constructor:Ext.env.OS,names:{ios:"iOS",android:"Android",windowsPhone:"WindowsPhone",webos:"webOS",blackberry:"BlackBerry",rimTablet:"RIMTablet",mac:"MacOS",win:"Windows",tizen:"Tizen",linux:"Linux",bada:"Bada",chrome:"ChromeOS",other:"Other"},prefixes:{tizen:"(Tizen )",ios:"i(?:Pad|Phone|Pod)(?:.*)CPU(?: iPhone)? OS ",android:"(Android |HTC_|Silk/)",windowsPhone:"Windows Phone ",blackberry:"(?:BlackBerry|BB)(?:.*)Version/",rimTablet:"RIM Tablet OS ",webos:"(?:webOS|hpwOS)/",bada:"Bada/",chrome:"CrOS "},is:function(b){return !!this[b]},name:null,version:null,setFlag:function(d,c){if(typeof c=="undefined"){c=true}if(this.flags){this.flags[d]=c}this.is[d]=c;this.is[d.toLowerCase()]=c;return this}};(function(){var s=Ext.global.navigator,m=s.userAgent,n=Ext.env.OS,o=(Ext.is||(Ext.is={})),l,p,r;n.prototype.flags=o;Ext.os=l=new n(m,s.platform);p=l.name;Ext["is"+p]=true;Ext.isMac=o.Mac=o.MacOS;var k=window.location.search.match(/deviceType=(Tablet|Phone)/),q=window.deviceType;if(k&&k[1]){r=k[1]}else{if(q==="iPhone"){r="Phone"}else{if(q==="iPad"){r="Tablet"}else{if(!l.is.Android&&!l.is.iOS&&!l.is.WindowsPhone&&/Windows|Linux|MacOS/.test(p)){r="Desktop";Ext.browser.is.WebView=!!Ext.browser.is.Ripple}else{if(l.is.iPad||l.is.RIMTablet||l.is.Android3||Ext.browser.is.Silk||(l.is.Android4&&m.search(/mobile/i)==-1)){r="Tablet"}else{r="Phone"}}}}}l.setFlag(r,true);l.deviceType=r;delete n.prototype.flags}());Ext.feature={has:function(b){return !!this.has[b]},testElements:{},getTestElement:function(d,c){if(d===undefined){d="div"}else{if(typeof d!=="string"){return d}}if(c){return document.createElement(d)}if(!this.testElements[d]){this.testElements[d]=document.createElement(d)}return this.testElements[d]},isStyleSupported:function(h,e){var g=this.getTestElement(e).style,f=Ext.String.capitalize(h);if(typeof g[h]!=="undefined"||typeof g[Ext.browser.getStylePrefix(h)+f]!=="undefined"){return true}return false},isStyleSupportedWithoutPrefix:function(d,e){var f=this.getTestElement(e).style;if(typeof f[d]!=="undefined"){return true}return false},isEventSupported:function(k,g){if(g===undefined){g=window}var h=this.getTestElement(g),f="on"+k.toLowerCase(),j=(f in h);if(!j){if(h.setAttribute&&h.removeAttribute){h.setAttribute(f,"");j=typeof h[f]==="function";if(typeof h[f]!=="undefined"){h[f]=undefined}h.removeAttribute(f)}}return j},getStyle:function(h,e){var f=h.ownerDocument.defaultView,g=(f?f.getComputedStyle(h,null):h.currentStyle)||h.style;return g[e]},getSupportedPropertyName:function(d,e){var f=Ext.browser.getVendorProperyName(e);if(f in d){return f}else{if(e in d){return e}}return null},detect:function(t){var s=this,q=document,v=s.toRun||s.tests,w=v.length,z=q.createElement("div"),y=[],n=Ext.supports,p=s.has,A,u,x,r;if(!Ext.theme){Ext.theme={name:"Default"}}Ext.theme.is={};Ext.theme.is[Ext.theme.name]=true;z.innerHTML='
';if(t){q.body.appendChild(z)}x=s.preDetected[Ext.browser.identity]||[];while(w--){u=v[w];r=x[w];A=u.name;if(r===undefined){if(!t&&u.ready){y.push(u);continue}r=u.fn.call(s,q,z)}n[A]=p[A]=r}if(t){q.body.removeChild(z)}s.toRun=y},report:function(){var d=[],e=this.tests.length,f;for(f=0;f
";d=(c.childNodes.length===1);c.innerHTML="";return d}},{name:"TouchEvents",fn:function(){return this.isEventSupported("touchend")}},{name:"Touch",fn:function(){var b=navigator.msMaxTouchPoints||navigator.maxTouchPoints;return(this.isEventSupported("touchend")&&b!==1)||b>1}},{name:"PointerEvents",fn:function(){return navigator.pointerEnabled}},{name:"MSPointerEvents",fn:function(){return navigator.msPointerEnabled}},{name:"Orientation",fn:function(){return("orientation" in window)&&this.isEventSupported("orientationchange")}},{name:"OrientationChange",fn:function(){return this.isEventSupported("orientationchange")}},{name:"DeviceMotion",fn:function(){return this.isEventSupported("devicemotion")}},{names:["Geolocation","GeoLocation"],fn:function(){return"geolocation" in window.navigator}},{name:"SqlDatabase",fn:function(){return"openDatabase" in window}},{name:"WebSockets",fn:function(){return"WebSocket" in window}},{name:"Range",fn:function(){return !!document.createRange}},{name:"CreateContextualFragment",fn:function(){var b=!!document.createRange?document.createRange():false;return b&&!!b.createContextualFragment}},{name:"History",fn:function(){return("history" in window&&"pushState" in window.history)}},{name:"CssTransforms",fn:function(){return this.isStyleSupported("transform")}},{name:"CssTransformNoPrefix",fn:function(){return this.isStyleSupportedWithoutPrefix("transform")}},{name:"Css3dTransforms",fn:function(){return this.has("CssTransforms")&&this.isStyleSupported("perspective")&&!Ext.browser.is.AndroidStock2}},{name:"CssAnimations",fn:function(){return this.isStyleSupported("animationName")}},{names:["CssTransitions","Transitions"],fn:function(){return this.isStyleSupported("transitionProperty")}},{names:["Audio","AudioTag"],fn:function(){return !!this.getTestElement("audio").canPlayType}},{name:"Video",fn:function(){return !!this.getTestElement("video").canPlayType}},{name:"LocalStorage",fn:function(){try{if("localStorage" in window&&window.localStorage!==null){localStorage.setItem("sencha-localstorage-test","test success");localStorage.removeItem("sencha-localstorage-test");return true}}catch(b){}return false}},{name:"XHR2",fn:function(){return window.ProgressEvent&&window.FormData&&window.XMLHttpRequest&&("withCredentials" in new XMLHttpRequest())}},{name:"XHRUploadProgress",fn:function(){if(window.XMLHttpRequest&&!Ext.browser.is.AndroidStock){var b=new XMLHttpRequest();return b&&("upload" in b)&&("onprogress" in b.upload)}return false}},{name:"NumericInputPlaceHolder",fn:function(){return !(Ext.browser.is.AndroidStock4&&Ext.os.version.getMinor()<2)}},{name:"ProperHBoxStretching",ready:true,fn:function(){var e=document.createElement("div"),h=e.appendChild(document.createElement("div")),g=h.appendChild(document.createElement("div")),f;e.setAttribute("style","width: 100px; height: 100px; position: relative;");h.setAttribute("style","position: absolute; display: -ms-flexbox; display: -webkit-flex; display: -moz-flexbox; display: flex; -ms-flex-direction: row; -webkit-flex-direction: row; -moz-flex-direction: row; flex-direction: row; min-width: 100%;");g.setAttribute("style","width: 200px; height: 50px;");document.body.appendChild(e);f=h.offsetWidth;document.body.removeChild(e);return(f>100)}},{name:"matchesSelector",fn:function(){var f=document.documentElement,h="matches",j="webkitMatchesSelector",g="msMatchesSelector",k="mozMatchesSelector";return f[h]?h:f[j]?j:f[g]?g:f[k]?k:null}},{name:"RightMargin",ready:true,fn:function(d,f){var e=d.defaultView;return !(e&&e.getComputedStyle(f.firstChild.firstChild,null).marginRight!="0px")}},{name:"DisplayChangeInputSelectionBug",fn:function(){var b=Ext.webKitVersion;return 0','
',""].join("");g.body.appendChild(e);if(e.firstChild.offsetHeight===50){f=true}g.body.removeChild(e)}return f}},{name:"xOriginBug",ready:true,fn:function(j,h){h.innerHTML='
';var k=document.getElementById("b1").getBoundingClientRect(),f=document.getElementById("b2").getBoundingClientRect(),g=document.getElementById("b3").getBoundingClientRect();return(f.left!==k.left&&g.right!==k.right)}},{name:"ScrollWidthInlinePaddingBug",ready:true,fn:function(g){var f=false,h,e;e=g.createElement("div");h=e.style;h.height="50px";h.width="50px";h.padding="10px";h.overflow="hidden";h.position="absolute";e.innerHTML='';g.body.appendChild(e);if(e.scrollWidth===70){f=true}g.body.removeChild(e);return f}},{name:"rtlVertScrollbarOnRight",ready:true,fn:function(h,g){g.innerHTML='
';var e=g.firstChild,f=e.firstChild;return(f.offsetLeft+f.offsetWidth!==e.offsetLeft+e.offsetWidth)}},{name:"rtlVertScrollbarOverflowBug",ready:true,fn:function(d,f){f.innerHTML='
';var e=f.firstChild;return e.clientHeight===e.offsetHeight}},{identity:"defineProperty",fn:function(){if(Ext.isIE8m){Ext.Object.defineProperty=Ext.emptyFn;return false}return true}},{identify:"nativeXhr",fn:function(){if(typeof XMLHttpRequest!=="undefined"){return true}XMLHttpRequest=function(){try{return new ActiveXObject("MSXML2.XMLHTTP.3.0")}catch(b){return null}};return false}},{name:"SpecialKeyDownRepeat",fn:function(){return Ext.isWebKit?parseInt(navigator.userAgent.match(/AppleWebKit\/(\d+)/)[1],10)>=525:!((Ext.isGecko&&!Ext.isWindows)||(Ext.isOpera&&Ext.operaVersion<12))}},{name:"EmulatedMouseOver",fn:function(){return Ext.os.is.iOS}},{name:"Hashchange",fn:function(){var b=document.documentMode;return"onhashchange" in window&&(b===undefined||b>7)}},{name:"FixedTableWidthBug",ready:true,fn:function(){if(Ext.isIE8){return false}var d=document.createElement("div"),e=document.createElement("div"),f;d.setAttribute("style","display:table;table-layout:fixed;");e.setAttribute("style","display:table-cell;min-width:50px;");d.appendChild(e);document.body.appendChild(d);d.offsetWidth;d.style.width="25px";f=d.offsetWidth;document.body.removeChild(d);return f===50}},{name:"FocusinFocusoutEvents",fn:function(){return !Ext.isGecko}}]};Ext.supports={};Ext.feature.detect();Ext.env.Ready={blocks:(location.search||"").indexOf("ext-pauseReadyFire")>0?1:0,bound:0,delay:1,firing:false,generation:0,listeners:[],nextId:0,sortGeneration:0,state:0,timer:null,bind:function(){var d=Ext.env.Ready,c=document;if(!d.bound){if(c.readyState=="complete"){d.onReadyEvent({type:c.readyState||"body"})}else{d.bound=1;if(Ext.browser.is.PhoneGap&&!Ext.os.is.Desktop){d.bound=2;c.addEventListener("deviceready",d.onReadyEvent,false)}c.addEventListener("DOMContentLoaded",d.onReadyEvent,false);window.addEventListener("load",d.onReadyEvent,false)}}},block:function(){++this.blocks;Ext.isReady=false},fireReady:function(){var b=Ext.env.Ready;if(!b.state){Ext._readyTime=Ext.now();Ext.isDomReady=true;b.state=1;Ext.feature.detect(true);if(!b.delay){b.handleReady()}else{if(navigator.standalone){b.timer=Ext.defer(function(){b.timer=null;b.handleReadySoon()},1)}else{b.handleReadySoon()}}}},handleReady:function(){var b=this;if(b.state===1){b.state=2;Ext._beforeReadyTime=Ext.now();b.invokeAll();Ext._afterReadytime=Ext.now()}},handleReadySoon:function(d){var c=this;if(!c.timer){c.timer=Ext.defer(function(){c.timer=null;c.handleReady()},d||c.delay)}},invoke:function(c){var d=c.delay;if(d){Ext.defer(function(){c.fn.call(c.scope)},d)}else{c.fn.call(c.scope)}},invokeAll:function(){var d=this,e=d.listeners,f;if(!d.blocks){Ext.isReady=true}d.firing=true;while(e.length){if(d.sortGeneration!==d.generation){d.sortGeneration=d.generation;e.sort(d.sortFn)}f=e.pop();if(d.blocks&&!f.dom){e.push(f);break}d.invoke(f)}d.firing=false},makeListener:function(g,h,e){var f={fn:g,id:++this.nextId,scope:h,dom:false,priority:0};if(e){Ext.apply(f,e)}f.phase=f.dom?0:1;return f},on:function(k,f,g){var j=Ext.env.Ready,h=j.makeListener(k,f,g);if(j.state===2&&!j.firing&&(h.dom||!j.blocks)){j.invoke(h)}else{j.listeners.push(h);++j.generation;if(!j.bound){j.bind()}}},onReadyEvent:function(c){var d=Ext.env.Ready;if(Ext.elevateFunction){Ext.elevateFunction(d.doReadyEvent,d,arguments)}else{d.doReadyEvent(c)}},doReadyEvent:function(c){var d=this;if(d.bound>0){d.unbind();d.bound=-1}if(!d.state){d.fireReady()}},sortFn:function(a,b){return -((a.phase-b.phase)||(b.priority-a.priority)||(a.id-b.id))},unblock:function(){var b=this;if(b.blocks){if(!--b.blocks){if(b.state===2&&!b.firing){b.invokeAll()}}}},unbind:function(){var d=this,c=document;if(d.bound>1){c.removeEventListener("deviceready",d.onReadyEvent,false)}c.removeEventListener("DOMContentLoaded",d.onReadyEvent,false);window.removeEventListener("load",d.onReadyEvent,false)}};(function(){var b=Ext.env.Ready;if(Ext.isIE9m){Ext.apply(b,{scrollTimer:null,readyStatesRe:/complete/i,pollScroll:function(){var a=true;try{document.documentElement.doScroll("left")}catch(d){a=false}if(a&&document.body){b.onReadyEvent({type:"doScroll"})}else{b.scrollTimer=Ext.defer(b.pollScroll,20)}return a},bind:function(){if(b.bound){return}var e=document,a;try{a=window.frameElement===undefined}catch(f){}if(!a||!e.documentElement.doScroll){b.pollScroll=Ext.emptyFn}else{if(b.pollScroll()){return}}if(e.readyState=="complete"){b.onReadyEvent({type:"already "+(e.readyState||"body")})}else{e.attachEvent("onreadystatechange",b.onReadyStateChange);window.attachEvent("onload",b.onReadyEvent);b.bound=1}},unbind:function(){document.detachEvent("onreadystatechange",b.onReadyStateChange);window.detachEvent("onload",b.onReadyEvent);if(Ext.isNumber(b.scrollTimer)){clearTimeout(b.scrollTimer);b.scrollTimer=null}},onReadyStateChange:function(){var a=document.readyState;if(b.readyStatesRe.test(a)){b.onReadyEvent({type:a})}}})}Ext.onDocumentReady=function(f,g,a){var h={dom:true};if(a){Ext.apply(h,a)}b.on(f,g,h)};Ext.onReady=function(e,f,a){b.on(e,f,a)};b.bind()}());Ext.Loader=new function(){var C=this,E=Ext.ClassManager,y=Ext.Boot,B=Ext.Class,w=Ext.env.Ready,x=Ext.Function.alias,z=["extend","mixins","requires"],s={},v=[],D=[],A=[],r={},t={},u={enabled:true,scriptChainDelay:false,disableCaching:true,disableCachingParam:"_dc",paths:E.paths,preserveScripts:true,scriptCharset:undefined},q={disableCaching:true,disableCachingParam:true,preserveScripts:true,scriptChainDelay:"loadDelay"};Ext.apply(C,{isInHistory:s,isLoading:false,history:v,config:u,readyListeners:D,optionalRequires:A,requiresMap:r,hasFileLoadError:false,scriptsLoading:0,syncModeEnabled:false,missingQueue:t,init:function(){var h=document.getElementsByTagName("script"),b=h[h.length-1].src,c=b.substring(0,b.lastIndexOf("/")+1),e=Ext._classPathMetadata,d=Ext.Microloader,l=Ext.manifest,k,g,f,j,a;if(!E.getPath("Ext")){E.setPath("Ext",c+"src")}if(e){Ext._classPathMetadata=null;C.addClassPathMappings(e)}if(l){k=l.loadOrder;g=Ext.Boot.baseUrl;if(k&&l.bootRelative){for(f=k.length,j=0;j1)?"es":"")+": "+j.join(", "))}if(e.length){C.loadScripts({url:e,_classNames:j})}else{C.checkReady()}}else{if(d){d.call(c)}C.checkReady()}if(C.syncModeEnabled){if(k===1){return E.get(b[0])}}return C},makeLoadCallback:function(b,a){return function(){var c=[],d=b.length;while(d-->0){c[d]=E.get(b[d])}return a.apply(this,c)}},onLoadFailure:function(){var b=this,a=b.onError;C.hasFileLoadError=true;--C.scriptsLoading;if(a){a.call(b.userScope,b)}C.checkReady()},onLoadSuccess:function(){var b=this,a=b.onLoad;--C.scriptsLoading;if(a){a.call(b.userScope,b)}C.checkReady()},onReady:function(c,d,a,e){if(a){w.on(c,d,e)}else{var b=w.makeListener(c,d,e);if(C.isLoading){D.push(b)}else{w.invoke(b)}}},addUsedClasses:function(b){var d,c,a;if(b){b=(typeof b==="string")?[b]:b;for(c=0,a=b.length;c0){C.loadScripts({url:k,sequential:true})}}}if(h.uses){k=h.uses;C.addUsedClasses(k)}});E.onCreated(C.historyPush);C.init()}();Ext._endTime=new Date().getTime();if(Ext._beforereadyhandler){Ext._beforereadyhandler()}(Ext.cmd.derive("Ext.event.ListenerStack",Ext.Base,{currentOrder:"current",length:0,constructor:function(){this.listeners={before:[],current:[],after:[]};this.lateBindingMap={};return this},add:function(q,p,o,v,y){var z=this.lateBindingMap,r=this.getAll(v),u=r.length,t=typeof q==="string",A,w,x,s;if(t&&p&&p.isIdentifiable){x=p.getId();A=z[x];if(A){if(A[q]){return false}else{A[q]=true}}else{z[x]=A={};A[q]=true}}else{if(u>0){while(u--){w=r[u];if(w.fn===q&&w.scope===p){w.options=o;return false}}}}if(!t){s=Ext._namedScopes[p];if(s&&s.isController){Ext.Error.raise("Cannot resolve scope 'controller' for '"+o.type+"' listener declared on Observable: '"+y.id+"'")}p=(p&&!s)?p:y}w=this.create(q,p,o,v,y);if(t&&(!p||p in Ext._namedScopes)){w.boundFn=this.bindDynamicScope(y,q,p);w.isLateBinding=false}if(o&&o.prepend){delete o.prepend;r.unshift(w)}else{r.push(w)}this.length++;return true},bindDynamicScope:function(f,d,e){return function(){var a=f.resolveListenerScope(e);return a[d].apply(a,arguments)}},getAt:function(c,d){return this.getAll(d)[c]},getAll:function(b){return this.listeners[b||this.currentOrder]},count:function(b){return this.getAll(b).length},create:function(j,k,f,g,h){f=f||{};return{stack:this,fn:j,firingFn:false,boundFn:false,isLateBinding:typeof j==="string",scope:k,options:f,order:g,observable:h,type:f.type}},remove:function(l,k,o){var m=this.getAll(o),n=m.length,r=false,s=this.lateBindingMap,p,q;if(n>0){while(n--){p=m[n];if(p.fn===l&&p.scope===k){m.splice(n,1);r=true;this.length--;if(k&&k.isIdentifiable&&typeof l==="string"){q=k.getId();if(s[q]&&s[q][l]){delete s[q][l]}}break}}}return r}},1,0,0,0,0,0,[Ext.event,"ListenerStack"],0));(Ext.cmd.derive("Ext.event.Controller",Ext.Base,{isFiring:false,listenerStack:null,constructor:function(b){this.firingListeners=[];this.firingArguments=[];this.dispatcher=b;return this},setInfo:function(b){this.info=b},getInfo:function(){return this.info},setListenerStacks:function(b){this.listenerStacks=b},fire:function(v,y){var q=this.listenerStacks,r=this.firingListeners,z=this.firingArguments,t=r.push,w=q.length,u,s,A,p,C=false,B=false,x;r.length=0;if(y){if(y.order!=="after"){C=true}else{B=true}}if(w===1){u=q[0].listeners;s=u.before;A=u.current;p=u.after;if(s.length>0){t.apply(r,s)}if(C){t.call(r,y)}if(A.length>0){t.apply(r,A)}if(B){t.call(r,y)}if(p.length>0){t.apply(r,p)}}else{for(x=0;x0){t.apply(r,s)}}if(C){t.call(r,y)}for(x=0;x0){t.apply(r,A)}}if(B){t.call(r,y)}for(x=0;x0){t.apply(r,p)}}}if(r.length===0){return this}if(!v){v=[]}z.length=0;z.push.apply(z,v);z.push(null,this);this.doFire();return this},doFire:function(){var w=this,I=w.firingListeners,A=w.firingArguments,E=A[1],D=A.length-2,F=I[0].observable,x=w.info,C,B,H,L,M,J,z,O,y,Q,P,G,N,K;if(F&&F.isElement){C=A[0];if(C&&!C.isEvent){C=null}}w.isPausing=w.isPaused=w.isStopped=false;w.isFiring=true;for(B=0,H=I.length;B0){this.isPaused=false;this.doFire()}if(b){b.resume()}return this},isInterrupted:function(){return this.isStopped||this.isPaused},stop:function(){var b=this.connectingController;this.isStopped=true;if(b){this.connectingController=null;b.stop()}this.isFiring=false;this.listenerStacks=null;return this},pause:function(){var b=this.connectingController;this.isPausing=true;if(b){b.pause()}return this}},1,0,0,0,0,0,[Ext.event,"Controller"],0));(Ext.cmd.derive("Ext.event.Dispatcher",Ext.Base,{statics:{getInstance:function(){if(!this.instance){this.instance=new this()}return this.instance},setInstance:function(b){this.instance=b;return this}},baseHasListeners:{_decr_:function(b){if(!--this[b]){delete this[b]}},_incr_:function(b){if(this.hasOwnProperty(b)){++this[b]}else{this[b]=1}}},hasListeners:{},config:{publishers:{}},wildcard:"*",constructor:function(b){this.listenerStacks={};this.captureListenerStacks={};this.directListenerStacks={};this.activePublishers={};this.publishersCache={};this.noActivePublishers=[];this.controller=null;this.initConfig(b);return this},getListenerStack:function(h,g,e,f){return this.doGetListenerStack(this.listenerStacks,h,g,e,f)},getCaptureListenerStack:function(h,g,e,f){return this.doGetListenerStack(this.captureListenerStacks,h,g,e,f)},getDirectListenerStack:function(h,g,e,f){return this.doGetListenerStack(this.directListenerStacks,h,g,e,f)},doGetListenerStack:function(n,m,k,o,h){var l=n[m],j;if(!l){if(h){n[m]=l={}}else{return null}}l=l[k];if(!l){if(h){n[m][k]=l={}}else{return null}}j=l[o];if(!j){if(h){l[o]=j=new Ext.event.ListenerStack()}else{return null}}return j},getController:function(m,k,o,h){var n=this,j=n.controller,l={targetType:m,target:k,eventName:o};if(!j){n.controller=j=new Ext.event.Controller(n)}if(j.isFiring){j=new Ext.event.Controller(n)}j.setInfo(l);if(h&&j!==h){j.connect(h)}return j},applyPublishers:function(f){var e,d;this.publishersCache={};for(e in f){if(f.hasOwnProperty(e)){d=f[e];this.registerPublisher(d)}}return f},registerPublisher:function(e){var f=this.activePublishers,h=e.getTargetType(),g=f[h];if(!g){f[h]=g=[]}g.push(e);e.setDispatcher(this);return this},getCachedActivePublishers:function(h,e){var f=this.publishersCache,g;if((g=f[h])&&(g=g[e])){return g}return null},cacheActivePublishers:function(h,e,g){var f=this.publishersCache;if(!f[h]){f[h]={}}f[h][e]=g;return g},getActivePublishers:function(m,j){var l=this.getCachedActivePublishers(m,j),k,n,q,o,p;if(l){return l}k=this.activePublishers[m];if(k){l=[];for(q=0,o=k.length;q0}if(!g&&k==="element"){g=l.count()>0}return g},getHasListeners:function(h,g){var e=this.hasListeners,f=g&&g.hasListeners;if(!f){f=e[h]||(e[h]=Ext.Object.chain(this.baseHasListeners));if(g){g.hasListeners=f=Ext.Object.chain(f)}}return f},addListener:function(x,t,u,r,p,n,w,y){n=n||{};var q=this.getActivePublishers(x,u),s=q.length,v,o;o=this.doAddListener(x,t,u,r,p,n,w,y);if(o){for(v=0;v0){for(g=0;g=8){b=new XDomainRequest()}else{Ext.Error.raise({msg:"Your browser does not support CORS"})}return b},getXhrInstance:(function(){var e=[function(){return new XMLHttpRequest()},function(){return new ActiveXObject("MSXML2.XMLHTTP.3.0")},function(){return new ActiveXObject("MSXML2.XMLHTTP")},function(){return new ActiveXObject("Microsoft.XMLHTTP")}],k=0,g=e.length,h;for(;k=200&&e<300)||e==304,d=false;if(!f){switch(e){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:d=true;break}}return{success:f,isException:d}},createResponse:function(u){var r=this,p=u.xhr,w=r.getIsXdr(),x={},o=w?[]:p.getAllResponseHeaders().replace(/\r\n/g,"\n").split("\n"),s=o.length,n,t,q,v,y;while(s--){n=o[s];t=n.indexOf(":");if(t>=0){q=n.substr(0,t).toLowerCase();if(n.charAt(t+1)==" "){++t}x[q]=n.substr(t+1)}}u.xhr=null;delete u.xhr;v={request:u,requestId:u.id,status:p.status,statusText:p.statusText,getResponseHeader:function(a){return x[a.toLowerCase()]},getAllResponseHeaders:function(){return x}};if(w){r.processXdrResponse(v,p)}if(u.binary){v.responseBytes=r.getByteArray(p)}else{v.responseText=p.responseText;v.responseXML=p.responseXML}p=null;return v},createException:function(b){return{request:b,requestId:b.id,status:b.aborted?-1:0,statusText:b.aborted?"transaction aborted":"communication failure",aborted:b.aborted,timedout:b.timedout}},getByteArray:function(l){var q=l.response,r=l.responseBody,e=Ext.data.flash&&Ext.data.flash.BinaryXhr,s,m,o,p;if(l instanceof e){s=l.responseBytes}else{if(window.Uint8Array){s=q?new Uint8Array(q):[]}else{if(Ext.isIE9p){try{s=new VBArray(r).toArray()}catch(n){s=[]}}else{if(Ext.isIE){if(!this.self.vbScriptInjected){this.injectVBScript()}getIEByteArray(l.responseBody,s=[])}else{s=[];m=l.responseText;o=m.length;for(p=0;p=500){this.run()}},run:function(){if(!this.isRunning){return}var e=this.runningQueue,d,f;this.lastRunTime=Ext.now();this.frameStartTime=Ext.now();e.push.apply(e,this.queue);for(d=0,f=e.length;d0){c=d.shift();this.invoke(c);this.processIdleQueue()}},processTaskQueue:function(){if(!this.hasOwnProperty("taskQueueTimer")){this.taskQueueTimer=Ext.defer(this.processTaskQueueItem,15,this)}},processTaskQueueItem:function(){delete this.taskQueueTimer;var d=this.taskQueue,c;if(d.length>0){c=d.shift();this.invoke(c);this.processTaskQueue()}},showFps:function(){Ext.onReady(function(){Ext.Viewport.add([{xtype:"component",bottom:50,left:0,width:50,height:20,html:"Average",style:"background-color: black; color: white; text-align: center; line-height: 20px; font-size: 8px;"},{id:"__averageFps",xtype:"component",bottom:0,left:0,width:50,height:50,html:"0",style:"background-color: red; color: white; text-align: center; line-height: 50px;"},{xtype:"component",bottom:50,left:50,width:50,height:20,html:"Min (Last 1k)",style:"background-color: black; color: white; text-align: center; line-height: 20px; font-size: 8px;"},{id:"__minFps",xtype:"component",bottom:0,left:50,width:50,height:50,html:"0",style:"background-color: orange; color: white; text-align: center; line-height: 50px;"},{xtype:"component",bottom:50,left:100,width:50,height:20,html:"Max (Last 1k)",style:"background-color: black; color: white; text-align: center; line-height: 20px; font-size: 8px;"},{id:"__maxFps",xtype:"component",bottom:0,left:100,width:50,height:50,html:"0",style:"background-color: yellow; color: black; text-align: center; line-height: 50px;"},{xtype:"component",bottom:50,left:150,width:50,height:20,html:"Current",style:"background-color: black; color: white; text-align: center; line-height: 20px; font-size: 8px;"},{id:"__currentFps",xtype:"component",bottom:0,left:150,width:50,height:50,html:"0",style:"background-color: green; color: white; text-align: center; line-height: 50px;"}]);Ext.AnimationQueue.resetFps()})},resetFps:function(){var q=Ext.getCmp("__currentFps"),j=Ext.getCmp("__averageFps"),l=Ext.getCmp("__minFps"),m=Ext.getCmp("__maxFps"),p=1000,k=0,n=0,o=0;Ext.AnimationQueue.onFpsChanged=function(a){n++;if(!(n%10)){p=1000;k=0}o+=a;p=Math.min(p,a);k=Math.max(k,a);q.setHtml(Math.round(a));j.setHtml(Math.round(o/n));l.setHtml(Math.round(p));m.setHtml(Math.round(k))}}},1,0,0,0,0,0,[Ext,"AnimationQueue"],function(){}));(Ext.cmd.derive("Ext.ComponentManager",Ext.Base,{alternateClassName:"Ext.ComponentMgr",singleton:true,count:0,typeName:"xtype",constructor:function(b){Ext.apply(this,b||{});this.all={};this.references={};this.onAvailableCallbacks={}},create:function(d,c){if(typeof d=="string"){return Ext.widget(d)}if(d.isComponent){return d}if("xclass" in d){return Ext.create(d.xclass,d)}return Ext.widget(d.xtype||c,d)},get:function(b){return this.all[b]},register:function(g){var h=this,j=h.all,k=g.getId(),f=h.onAvailableCallbacks;j[k]=g;if(g.reference){h.references[k]=g}++h.count;f=f&&f[k];if(f&&f.length){h.notifyAvailable(g)}},unregister:function(d){var c=d.getId();if(d.reference){delete this.references[c]}delete this.all[c];this.count--},markReferencesDirty:function(){this.referencesDirty=true},fixReferences:function(){var f=this,d=f.references,e;if(f.referencesDirty){for(e in d){if(d.hasOwnProperty(e)){d[e].fixReference()}}f.referencesDirty=false}},onAvailable:function(k,o,h){var l=this,m=l.onAvailableCallbacks,j=l.all,n;if(k in j){n=j[k];o.call(h||n,n)}else{if(k){if(!Ext.isArray(m[k])){m[k]=[]}m[k].push(function(a){o.call(h||a,a)})}}},notifyAvailable:function(c){var d=this.onAvailableCallbacks[c&&c.getId()]||[];while(d.length){(d.shift())(c)}},each:function(c,d){return Ext.Object.each(this.all,c,d)},getCount:function(){return this.count},getAll:function(){return Ext.Object.getValues(this.all)},deprecated:{5:{methods:{isRegistered:null,registerType:null}}}},1,0,0,0,0,0,[Ext,"ComponentManager",Ext,"ComponentMgr"],function(){Ext.getCmp=function(b){return Ext.ComponentManager.get(b)}}));Ext.ns("Ext.util").Operators={"=":function(a,d){return a==d},"!=":function(a,d){return a!=d},"^=":function(a,d){return a&&a.substr(0,d.length)==d},"$=":function(a,d){return a&&a.substr(a.length-d.length)==d},"*=":function(a,d){return a&&a.indexOf(d)!==-1},"%=":function(a,d){return(a%d)===0},"|=":function(a,d){return a&&(a==d||a.substr(0,d.length+1)==d+"-")},"~=":function(a,d){return a&&(" "+a+" ").indexOf(" "+d+" ")!=-1}};(Ext.cmd.derive("Ext.util.LruCache",Ext.util.HashMap,{config:{maxSize:null},add:function(f,h){var j=this,g=j.findKey(h),k;if(g){j.unlinkEntry(k=j.map[g]);k.prev=j.last;k.next=null}else{k={prev:j.last,next:null,key:f,value:h}}if(j.last){j.last.next=k}else{j.first=k}j.last=k;Ext.util.HashMap.prototype.add.call(this,f,k);j.prune();return h},insertBefore:function(g,j,m){var k=this,h,l;if(m=this.map[this.findKey(m)]){h=k.findKey(j);if(h){k.unlinkEntry(l=k.map[h])}else{l={prev:m.prev,next:m,key:g,value:j}}if(m.prev){l.prev.next=l}else{k.first=l}l.next=m;m.prev=l;k.prune();return j}else{return k.add(g,j)}},get:function(d){var c=this.map[d];if(c){if(c.next){this.moveToEnd(c)}return c.value}},removeAtKey:function(b){this.unlinkEntry(this.map[b]);return Ext.util.HashMap.prototype.removeAtKey.apply(this,arguments)},clear:function(b){this.first=this.last=null;return Ext.util.HashMap.prototype.clear.apply(this,arguments)},unlinkEntry:function(b){if(b){if(b.next){b.next.prev=b.prev}else{this.last=b.prev}if(b.prev){b.prev.next=b.next}else{this.first=b.next}b.prev=b.next=null}},moveToEnd:function(b){this.unlinkEntry(b);if(b.prev=this.last){this.last.next=b}else{this.first=b}this.last=b},getArray:function(f){var e=[],d=this.first;while(d){e.push(f?d.key:d.value);d=d.next}return e},each:function(m,g,h){var j=this,k=h?j.last:j.first,l=j.length;g=g||j;while(k){if(m.call(g,k.key,k.value,l)===false){break}k=h?k.prev:k.next}return j},findKey:function(d){var e,f=this.map;for(e in f){if(f.hasOwnProperty(e)&&f[e].value===d){return e}}return undefined},clone:function(){var e=new this.self(this.initialConfig),f=this.map,d;e.suspendEvents();for(d in f){if(f.hasOwnProperty(d)){e.add(d,f[d].value)}}e.resumeEvents();return e},prune:function(){var d=this,e=d.getMaxSize(),f=e?(d.length-e):0;if(f>0){for(;d.first&&f;f--){d.removeAtKey(d.first.key)}}}},0,0,0,0,0,0,[Ext.util,"LruCache"],0));(Ext.cmd.derive("Ext.ComponentQuery",Ext.Base,{singleton:true},0,0,0,0,0,0,[Ext,"ComponentQuery"],function(){var F=this,t=Ext.util.Operators,B=/(\d*)n\+?(\d*)/,G=/\D/,z=/^(\s)+/,A=/\\(.)/g,y=new Ext.util.LruCache({maxSize:100}),x=["var r = [],","i = 0,","it = items,","l = it.length,","c;","for (; i < l; i++) {","c = it[i];","if (c.{0}) {","r.push(c);","}","}","return r;"].join(""),w=function(a,b){return b.method.apply(this,[a].concat(b.args))},K=function(c,f){var e=[],b=0,g=c.length,a,d=f!==">";for(;b\^])\s?|\s|$)/,v=/^(#)?((?:\\\.|[\w\-])+|\*)(?:\((true|false)\))?/,I=[{re:/^\.((?:\\\.|[\w\-])+)(?:\((true|false)\))?/,method:H,argTransform:function(a){if(a[1]!==undefined){a[1]=a[1].replace(A,"$1")}return a.slice(1)}},{re:/^(?:\[((?:[@?$])?[\w\-]*)\s*(?:([\^$*~%!\/]?=)\s*(['"])?((?:\\\]|.)*?)\3)?(?!\\)\])/,method:J,argTransform:function(a){var e=a[0],g=a[1],c=a[2],d=a[3],b=a[4],f;if(b!==undefined){b=b.replace(A,"$1")}if(c==="/="){f=y.get(b);if(f){b=f}else{b=y.add(b,new RegExp(b))}}return[g,c,b]}},{re:/^#((?:\\\.|[\w\-])+)/,method:D},{re:/^\:([\w\-]+)(?:\(((?:\{[^\}]+\})|(?:(?!\{)[^\s>\/]*?(?!\})))\))?/,method:u,argTransform:function(a){if(a[2]!==undefined){a[2]=a[2].replace(A,"$1")}return a.slice(1)}},{re:/^(?:\{([^\}]+)\})/,method:x}];F.Query=Ext.extend(Object,{constructor:function(a){a=a||{};Ext.apply(this,a)},execute:function(c){var b=this.operations,d=[],f,a,e;for(a=0,e=b.length;a=0;--g){j=l[g];e=j.mode;if(e){if(e==="^"){k=K(k," ")}else{if(e===">"){c=[];for(h=0,d=k.length;h1}});Ext.apply(this,{cache:new Ext.util.LruCache({maxSize:100}),pseudos:{not:function(g,f){var b=Ext.ComponentQuery,a=0,h=g.length,c=[],d=-1,e;for(;a0){b.push(a[0])}return b},last:function(a){var c=a.length,b=[];if(c>0){b.push(a[c-1])}return b},focusable:function(d){var e=d.length,b=[],c=0,a;for(;c=C.left)&&((T=="t"&&N=="b")||(T=="b"&&N=="t"));F=(L=C.top)&&((S=="r"&&K=="l")||(S=="l"&&K=="r"));if(J+P>A.right){if(F){J=C.left-P;F=false}else{J=A.right-P}}if(JA.bottom){if(G){L=C.top-D;G=false}else{L=A.bottom-D}}if(Lm.right){k=true;p[0]=(m.right-s.right)}if(s.left+p[0]m.bottom){k=true;p[1]=(m.bottom-s.bottom)}if(s.top+p[1]aD.innerWidth)?"portrait":"landscape"},getViewportHeight:function(){return aD.innerHeight},getViewportWidth:function(){return aD.innerWidth},getViewSize:function(){return{width:aI.getViewportWidth(),height:aI.getViewportHeight()}},normalize:function(a){return aA[a]||(aA[a]=a.replace(ao,ai))},parseBox:function(b){b=b||0;var d=typeof b,a,c;if(d==="number"){return{top:b,right:b,bottom:b,left:b}}else{if(d!=="string"){return b}}a=b.split(" ");c=a.length;if(c===1){a[1]=a[2]=a[3]=a[0]}else{if(c===2){a[2]=a[0];a[3]=a[1]}else{if(c===3){a[3]=a[1]}}}return{top:parseFloat(a[0])||0,right:parseFloat(a[1])||0,bottom:parseFloat(a[2])||0,left:parseFloat(a[3])||0}},parseStyles:function(b){var c={},a;if(b){X.lastIndex=0;while((a=X.exec(b))){c[a[1]]=a[2]||""}}return c},select:function(c,a,b){return Ext.fly(b||al).select(c,a)},query:function(b,c,a){return Ext.fly(a||al).query(b,c)},unitizeBox:function(a,c){var b=this;a=b.parseBox(a);return b.addUnits(a.top,c)+" "+b.addUnits(a.right,c)+" "+b.addUnits(a.bottom,c)+" "+b.addUnits(a.left,c)},serializeForm:function(b){var a=b.elements||(al.forms[b]||Ext.getDom(b)).elements,g=false,h=encodeURIComponent,n="",o=a.length,m,d,j,e,f,l,p,k,c;for(l=0;l "+d,!!c)},createChild:function(b,c,a){b=b||{tag:"div"};if(c){return Ext.DomHelper.insertBefore(c,b,a!==true)}else{return Ext.DomHelper.append(this.dom,b,a!==true)}},createShim:function(){var b=al.createElement("iframe"),a;b.frameBorder="0";b.className=Ext.baseCSSPrefix+"shim";b.src=Ext.SSL_SECURE_URL;b.setAttribute("role","presentation");b.setAttribute("tabindex",-1);a=Ext.get(this.dom.parentNode.insertBefore(b,this.dom));return a},contains:function(c){if(!c){return false}var b=this,a=Ext.getDom(c);return(a===b.dom)||b.isAncestor(a)},destroy:function(){var b=this,a=b.dom;if(!b.isFly){b.clearListeners();delete Ext.cache[b.id];b.isDestroyed=true}if(a){if(a.parentNode){a.parentNode.removeChild(a)}a._extData=b.dom=null}},detach:function(){var a=this.dom;if(a&&a.parentNode&&a.tagName!=="BODY"){a.parentNode.removeChild(a)}return this},disableTouchContextMenu:function(){this._contextMenuListenerRemover=this.on({MSHoldVisual:function(a){a.preventDefault()},destroyable:true,delegated:false})},disableTouchScroll:function(){this.addCls(af);this.on({touchmove:function(a){a.preventDefault()},translate:false})},doAddListener:function(a,g,f,e){var h=this,d,c,b,j;if(!h.blockedEvents[a]){c=h.mixins.observable.doAddListener;e=e||{};if(h.longpressEvents[a]){h.disableTouchContextMenu()}if(h.normalizeEvent){d=h.normalizeEvent(a);if(d){a=d.eventName;e.beforeFn=d.normalizeFn}}if(aI.useDelegatedEvents===false){e.delegated=e.delegated||false}if(e.translate!==false){b=h.additiveEvents[a];if(b){e.type=a;a=b;c.apply(h,arguments)}j=h.eventMap[a];if(j){e.type=e.type||a;a=j}}c.apply(h,arguments);delete e.type}return h},doRemoveListener:function(a,g,f,e){var h=this,d,c,b,j;if(!h.blockedEvents[a]){c=h.mixins.observable.doRemoveListener;e=e||{};if(h.longpressEvents[a]){j=this._contextMenuListenerRemover;if(j){j.destroy()}}if(h.normalizeEvent){d=h.normalizeEvent(a);if(d){a=d.eventName}}if(aI.useDelegatedEvents===false){e.delegated=e.delegated||false}if(e.translate!==false){b=h.additiveEvents[a];if(b){a=b;c.apply(h,arguments)}a=h.eventMap[a]||a}c.apply(h,arguments)}return h},doReplaceWith:function(b){var a=this.dom;a.parentNode.replaceChild(Ext.getDom(b),a)},down:function(b,a){return this.selectNode(b,!!a)},findParent:function(a,f,g){var e=this,c=e.dom,d=al.documentElement,b=0;f=f||50;if(isNaN(f)){f=Number.MAX_VALUE}while(c&&c.nodeType===1&&b0&&a<0.5){f++}}}if(d){f-=c.getBorderWidth("tb")+c.getPadding("tb")}return(f<0)?0:f},getHtml:function(){return this.dom?this.dom.innerHTML:""},getLeft:function(a){return a?this.getLocalX():this.getX()},getLocalX:function(){var a=this,b,c=a.getStyle("left");if(!c||c==="auto"){c=0}else{if(aG.test(c)){c=parseFloat(c)}else{c=a.getX();b=a.dom.offsetParent;if(b){c-=Ext.fly(b).getX()}}}return c},getLocalXY:function(){var c=this,b,d=c.getStyle(["left","top"]),e=d.left,a=d.top;if(!e||e==="auto"){e=0}else{if(aG.test(e)){e=parseFloat(e)}else{e=c.getX();b=c.dom.offsetParent;if(b){e-=Ext.fly(b).getX()}}}if(!a||a==="auto"){a=0}else{if(aG.test(a)){a=parseFloat(a)}else{a=c.getY();b=c.dom.offsetParent;if(b){a-=Ext.fly(b).getY()}}}return[e,a]},getLocalY:function(){var b=this,c,a=b.getStyle("top");if(!a||a==="auto"){a=0}else{if(aG.test(a)){a=parseFloat(a)}else{a=b.getY();c=b.dom.offsetParent;if(c){a-=Ext.fly(c).getY()}}}return a},getMargin:function(d){var c=this,b={t:"top",l:"left",r:"right",b:"bottom"},e,a,f;if(!d){f=[];for(e in aL){f.push(aL[e])}a=c.getStyle(aL);if(a&&typeof a==="object"){for(e in aL){a[b[e]]=parseFloat(a[aL[e]])||0}}return a}else{return c.addStyles(d,aL)}},getPadding:function(a){return this.addStyles(a,ad)},getParent:function(){return Ext.get(this.dom.parentNode)},getRight:function(a){return(a?this.getLocalX():this.getX())+this.getWidth()},getSize:function(a){return{width:this.getWidth(a),height:this.getHeight(a)}},getStyle:function(h,n){var m=this,a=m.dom,e=typeof h!=="string",g=m.styleHooks,c=h,l=c,o=1,p,f,j,k,b,d,q;if(e){j={};c=l[0];q=0;if(!(o=l.length)){return j}}if(!a||a.documentElement){return j||""}p=a.style;if(n){d=p}else{d=a.ownerDocument.defaultView.getComputedStyle(a,null);if(!d){n=true;d=p}}do{k=g[c];if(!k){g[c]=k={name:aI.normalize(c)}}if(k.get){b=k.get(a,m,n,d)}else{f=k.name;b=d[f]}if(!e){return b}j[c]=b;c=l[++q]}while(q0&&a<0.5){g++}}}if(h){g-=f.getBorderWidth("lr")+f.getPadding("lr")}return(g<0)?0:g},getX:function(){return this.getXY()[0]},getXY:function(){var e=Math.round,b=this.dom,f=0,a=0,d;if(b!==al&&b!==al.body){try{d=b.getBoundingClientRect()}catch(c){d={left:0,top:0}}f=e(d.left);a=e(d.top)}return[f,a]},getY:function(){return this.getXY()[1]},hasCls:function(b){var a=this.getData();if(!a.isSynchronized){this.synchronize()}return a.classMap.hasOwnProperty(b)},hide:function(){this.setVisible(false);return this},insertAfter:function(a){a=Ext.getDom(a);a.parentNode.insertBefore(this.dom,a.nextSibling);return this},insertBefore:function(a){a=Ext.getDom(a);a.parentNode.insertBefore(this.dom,a);return this},insertFirst:function(a,b){a=a||{};if(a.nodeType||a.dom||typeof a==="string"){a=Ext.getDom(a);this.dom.insertBefore(a,this.dom.firstChild);return !b?Ext.get(a):a}else{return this.createChild(a,this.dom.firstChild,b)}},insertHtml:function(c,b,d){var a=Ext.DomHelper.insertHtml(c,this.dom,b);return d?Ext.get(a):a},insertSibling:function(c,k,g){var h=this,f=Ext.DomHelper,e=(k||"before").toLowerCase()==="after",a,d,b,j;if(Ext.isIterable(c)){b=c.length;d=Ext.fly(document.createDocumentFragment());if(Ext.isArray(c)){for(j=0;j0){c=a.className.split(aa);for(j=0,h=c.length;j-1){k=Ext.getDom(k);if(g){h=this.elements[d];h.parentNode.insertBefore(k,h);Ext.removeNode(h)}Ext.Array.splice(this.elements,d,1,k)}return this},clear:function(g){var h=this,e=h.elements,f=e.length-1;if(g){for(;f>=0;f--){Ext.removeNode(e[f])}}this.elements=[]},addElements:function(j,e){if(!j){return this}if(typeof j==="string"){j=Ext.dom.Element.selectorFunction(j,e)}var k=this.elements,g=j.length,h;for(h=0;h=":function(a){var b=this._value;return Ext.coerce(this.getPropertyValue(a),b)>=b},">":function(a){var b=this._value;return Ext.coerce(this.getPropertyValue(a),b)>b},"!=":function(a){var b=this._value;return Ext.coerce(this.getPropertyValue(a),b)!=b},"in":function(a){var b=this._value;return Ext.Array.contains(b,Ext.coerce(this.getPropertyValue(a),b))},like:function(a){var b=this._value;return b&&Ext.coerce(this.getPropertyValue(a),b).toLowerCase().indexOf(b.toLowerCase())>-1}}),j=function(){this._filterFn=null},k=["updateOperator","updateValue"],f;h["=="]=h["="];h.gt=h[">"];h.ge=h[">="];h.lt=h["<"];h.le=h["<="];h.eq=h["="];h.ne=h["!="];for(f=k.length;f-->0;){g[k[f]]=j}}));Ext.util=Ext.util||{};Ext.util.DelayedTask=function(o,p,j,l,m){var n=this,k,q=function(){var a=Ext.GlobalEvents;clearInterval(n.id);n.id=null;o.apply(p,j||[]);if(m!==false&&a.hasListeners.idle){a.fireEvent("idle")}};l=typeof l==="boolean"?l:true;n.id=null;n.delay=function(c,a,b,d){if(l){n.cancel()}if(typeof c==="number"){k=c}o=a||o;p=b||p;j=d||j;if(!n.id){n.id=Ext.interval(q,k)}};n.cancel=function(){if(n.id){clearInterval(n.id);n.id=null}}};(Ext.cmd.derive("Ext.util.Event",Ext.Base,function(){var g=Array.prototype.slice,f=Ext.Array.insert,h=Ext.Array.toArray,e={};return{isEvent:true,suspended:0,noOptions:{},constructor:function(a,b){this.name=b;this.observable=a;this.listeners=[]},addListener:function(c,a,D,z){var u=this,d,y,b,C,E,v,A,w,x,B;if(typeof c!=="string"){a=a||u.observable}if(!u.isListening(c,a)){y=u.createListener(c,a,D,z);if(u.firing){u.listeners=u.listeners.slice(0)}d=u.listeners;w=A=d.length;b=D&&D.priority;E=u._highestNegativePriorityIndex;v=(E!==undefined);if(b){C=(b<0);if(!C||v){for(x=(C?E:0);x0},fire:function(){var c=this,n=c.listeners,d=n.length,a,o,p,b,q;if(!c.suspended&&d>0){c.firing=true;p=arguments.length?g.call(arguments,0):[];q=p.length;for(o=0;o4?a:g;a=g;for(g in a){if(a.hasOwnProperty(g)){t=a[g];if(!f.eventOptionsRe.test(g)){f.addManagedListener(c,g,t.fn||t,t.scope||a.scope||b,t.fn?t:u,true)}}}if(a&&a.destroyable){return new h(f,c,a)}}else{if(e!==n){d.push({item:c,ename:g,fn:e,scope:b,options:a});if(c.isUtilObservable){c.on(g,e,b,a,f)}else{c.on(g,e,b,a)}if(!s&&a&&a.destroyable){return new h(f,c,g,e,b)}}}},removeManagedListener:function(c,s,e,b){var f=this,a,t,d,u,g;if(typeof s!=="string"){a=s;for(s in a){if(a.hasOwnProperty(s)){t=a[s];if(!f.eventOptionsRe.test(s)){f.removeManagedListener(c,s,t.fn||t,t.scope||a.scope||b)}}}}else{d=f.managedListeners?f.managedListeners.slice():[];for(g=0,u=d.length;g0,c=this.events;if(!b&&a&&c){a=c[a];if(a&&a.isEvent){return a.isSuspended()}}return b},suspendEvents:function(a){++this.eventsSuspended;if(a&&!this.eventQueue){this.eventQueue=[]}},suspendEvent:function(){var f=this,b=f.events||(f.events={}),e=arguments.length,c,a,d;for(c=0;c-1){h=m[l];delete m[l];delete o[l];m[k]=h;o[k]=j;n.keys[j]=k;n.indexGeneration=++n.generation}},addAll:function(f){var d=this,e;if(arguments.length>1||Ext.isArray(f)){d.insert(d.length,arguments.length>1?arguments:f)}else{for(e in f){if(f.hasOwnProperty(e)){if(d.allowFunctions||typeof f[e]!="function"){d.add(e,f[e])}}}}},each:function(k,l){var g=Ext.Array.push([],this.items),m=0,h=g.length,j;for(;m2){f=this.doInsert(e,[h],[g])}else{f=this.doInsert(e,[h])}f=f[0]}return f},doInsert:function(x,s,t){var v=this,D,C,z,w=s.length,E=w,A=v.hasListeners.add,B,y={},u,q,r;if(t!=null){v.useLinearSearch=true}else{t=s;s=new Array(w);for(z=0;z=0;--d){f.remove(e[d])}}else{while(f.length){f.removeAt(0)}}}else{f.length=f.items.length=f.keys.length=0;f.map={};f.indexMap={};f.generation++;f.indexGeneration=f.generation}},removeAt:function(f){var h=this,g,e;if(f=0){h.length--;g=h.items[f];Ext.Array.erase(h.items,f,1);e=h.keys[f];if(typeof e!="undefined"){delete h.map[e]}Ext.Array.erase(h.keys,f,1);if(h.hasListeners.remove){h.fireEvent("remove",g,e)}h.generation++;return g}return false},removeRange:function(m,s){var l=this,r,k,n,o,q,p;if(m=0){if(!s){s=1}o=Math.min(m+s,l.length);s=o-m;p=o===l.length;q=p&&l.indexGeneration===l.generation;for(n=m;n=0;f--){if(h[f]==null){g.removeAt(f)}}}else{return g.removeAt(g.indexOfKey(e))}},getCount:function(){return this.length},indexOf:function(f){var d=this,e;if(f!=null){if(!d.useLinearSearch&&(e=d.getKey(f))){return this.indexOfKey(e)}return Ext.Array.indexOf(d.items,f)}return -1},indexOfKey:function(b){if(!this.map.hasOwnProperty(b)){return -1}if(this.indexGeneration!==this.generation){this.rebuildIndexMap()}return this.indexMap[b]},rebuildIndexMap:function(){var h=this,j=h.indexMap={},k=h.keys,g=k.length,f;for(f=0;fj){o=true;n=l;l=j;j=n}if(l<0){l=0}if(j==null||j>=k){j=k-1}q=p.slice(l,j+1);if(o&&q.length){q.reverse()}return q},filter:function(j,k,h,g){var f=[];if(Ext.isString(j)){f.push(new Ext.util.Filter({property:j,value:k,anyMatch:h,caseSensitive:g}))}else{if(Ext.isArray(j)||j instanceof Ext.util.Filter){f=f.concat(j)}}return this.filterBy(Ext.util.Filter.createFilterFn(f))},filterBy:function(o,p){var l=this,k=new l.self(l.initialConfig),m=l.keys,j=l.items,n=j.length,q;k.getKey=l.getKey;for(q=0;ql)?1:(k0){q.removeRange(j.multiSortLimit,p)}break;case"prepend":q.insert(0,m);break;case"append":q.addAll(m);break;case undefined:case null:case"replace":q.clear();q.addAll(m);break;default:}}if(o!==false){j.fireEvent("beforesort",j,m);j.onBeforeSort(m);if(j.getSorterCount()){j.doSort(j.generateComparator())}}return m},getSorterCount:function(){return this.getSorters().items.length},generateComparator:function(){var b=this.getSorters().getRange();return b.length?this.createComparator(b):this.emptyComparator},emptyComparator:function(){return 0},onBeforeSort:Ext.emptyFn,decodeSorters:function(l){if(!Ext.isArray(l)){if(l===undefined){l=[]}else{l=[l]}}var n=l.length,k=Ext.util.Sorter,h=this.getModel?this.getModel():this.model,m,j,o;for(o=0;o>1;m=p(o,j[q]);if(m>=0){l=q+1}else{if(m<0){k=q-1}}}return l},reorder:function(p){var m=this,j=m.items,q=0,n=j.length,k=[],o=[],l;m.suspendEvents();for(l in p){k[p[l]]=j[l]}for(q=0;qb?1:(aC){s=C}}}if(r){t.tasks=r}t.firing=false;if(t.tasks.length){t.startTimer(s-E,Ext.Date.now())}if(q!==false&&B.hasListeners.idle){B.fireEvent("idle")}},startTimer:function(h,k){var j=this,f=k+h,g=j.timerId;if(g&&j.nextExpires-f>j.interval){clearTimeout(g);g=null}if(!g){if(h=o.duration),n,l;if(k){j=o.duration;q=true}n=this.collectTargetData(o,j,m,q);if(m){o.target.setAttr(n.anims[o.id].attributes,true);p.collectTargetData(o,o.duration,m,q);o.paused=true;n=o.target.target;if(o.target.isComposite){n=o.target.target.last()}l={};l[Ext.supports.CSS3TransitionEnd]=o.lastFrame;l.scope=o;l.single=true;n.on(l)}return n},jumpToEnd:function(d){var c=this.runAnim(d,true);this.applyAnimAttrs(c,c.anims[d.id])},collectTargetData:function(m,h,k,j){var g=m.target.getId(),l=this.targetArr[g];if(!l){l=this.targetArr[g]={id:g,el:m.target,anims:{}}}l.anims[m.id]={id:m.id,anim:m,elapsed:h,isLastFrame:j,attributes:[{duration:m.duration,easing:(k&&m.reverse)?m.easingFn.reverse().toCSS3():m.easing,attrs:m.runAnim(h)}]};return l},applyAnimAttrs:function(f,e){var d=e.anim;if(e.attributes&&d.isRunning()){f.el.setAttr(e.attributes,false,e.isLastFrame);if(e.isLastFrame){d.lastFrame()}}},applyPendingAttrs:function(){var k=this.targetArr,j,m,g,l,h;for(m in k){if(k.hasOwnProperty(m)){j=k[m];for(h in j.anims){if(j.anims.hasOwnProperty(h)){g=j.anims[h];l=g.anim;if(g.attributes&&l.isRunning()){j.el.setAttr(g.attributes,false,g.isLastFrame);if(g.isLastFrame){l.lastFrame()}}}}}}}},1,0,0,0,0,[["queue",Ext.fx.Queue]],[Ext.fx,"Manager"],0));(Ext.cmd.derive("Ext.fx.Animator",Ext.Base,{isAnimator:true,duration:250,delay:0,delayStart:0,dynamic:false,easing:"ease",running:false,paused:false,damper:1,iterations:1,currentIteration:0,keyframeStep:0,animKeyFramesRE:/^(from|to|\d+%?)$/,constructor:function(d){var c=this;d=Ext.apply(c,d||{});c.config=d;c.id=Ext.id(null,"ext-animator-");c.mixins.observable.constructor.call(c,d);c.timeline=[];c.createTimeline(c.keyframes);if(c.target){c.applyAnimator(c.target);Ext.fx.Manager.addAnim(c)}},sorter:function(a,b){return a.pct-b.pct},createTimeline:function(t){var q=this,n=[],p=q.to||{},v=q.duration,m,w,u,r,o,s;for(o in t){if(t.hasOwnProperty(o)&&q.animKeyFramesRE.test(o)){s={attrs:Ext.apply(t[o],p)};if(o=="from"){o=0}else{if(o=="to"){o=100}}s.pct=parseInt(o,10);n.push(s)}}Ext.Array.sort(n,q.sorter);r=n.length;for(u=0;u0},isRunning:function(){return false}},1,0,0,0,0,[["observable",Ext.util.Observable]],[Ext.fx,"Animator"],0));(Ext.cmd.derive("Ext.fx.CubicBezier",Ext.Base,{singleton:true,cubicBezierAtTime:function(r,B,D,s,t,x){var w=3*B,u=3*(s-B)-w,E=1-w-u,y=3*D,v=3*(t-D)-y,q=1-y-v;function z(a){return((E*a+u)*a+w)*a}function C(c,a){var b=A(c,a);return((q*b+v)*b+y)*b}function A(g,h){var a,b,d,f,c,e;for(d=g,e=0;e<8;e++){f=z(d)-g;if(Math.abs(f)b){return b}while(af){a=d}else{b=d}d=(b-a)/2+a}return d}return C(r,1/(200*x))},cubicBezier:function(f,h,g,k){var j=function(a){return Ext.fx.CubicBezier.cubicBezierAtTime(a,f,h,g,k,1)};j.toCSS3=function(){return"cubic-bezier("+[f,h,g,k].join(",")+")"};j.reverse=function(){return Ext.fx.CubicBezier.cubicBezier(1-g,1-k,1-f,1-h)};return j}},0,0,0,0,0,0,[Ext.fx,"CubicBezier"],0));Ext.require("Ext.fx.CubicBezier",function(){var m=Math,k=m.PI,n=m.pow,h=m.sin,l=m.sqrt,j=m.abs,o=1.70158;Ext.define("Ext.fx.Easing",{singleton:true,linear:Ext.identityFn,ease:function(e){var q=0.07813-e/2,d=-0.25,c=l(0.0066+q*q),a=c-q,f=n(j(a),1/3)*(a<0?-1:1),b=-c-q,g=n(j(b),1/3)*(b<0?-1:1),t=f+g+0.25;return n(1-t,2)*3*t*0.1+(1-t)*3*t*t+t*t*t},easeIn:function(a){return n(a,1.7)},easeOut:function(a){return n(a,0.48)},easeInOut:function(f){var b=0.48-f/1.04,c=l(0.1734+b*b),e=c-b,g=n(j(e),1/3)*(e<0?-1:1),q=-c-b,a=n(j(q),1/3)*(q<0?-1:1),d=g+a+0.5;return(1-d)*3*d*d+d*d*d},backIn:function(a){return a*a*((o+1)*a-o)},backOut:function(a){a=a-1;return a*a*((o+1)*a+o)+1},elasticIn:function(a){if(a===0||a===1){return a}var b=0.3,c=b/4;return n(2,-10*a)*h((a-c)*(2*k)/b)+1},elasticOut:function(a){return 1-Ext.fx.Easing.elasticIn(1-a)},bounceIn:function(a){return 1-Ext.fx.Easing.bounceOut(1-a)},bounceOut:function(a){var c=7.5625,b=2.75,d;if(a<(1/b)){d=c*a*a}else{if(a<(2/b)){a-=(1.5/b);d=c*a*a+0.75}else{if(a<(2.5/b)){a-=(2.25/b);d=c*a*a+0.9375}else{a-=(2.625/b);d=c*a*a+0.984375}}}return d}},function(){var a=Ext.fx.Easing.self,b=a.prototype;a.addMembers({"back-in":b.backIn,"back-out":b.backOut,"ease-in":b.easeIn,"ease-out":b.easeOut,"elastic-in":b.elasticIn,"elastic-out":b.elasticOut,"bounce-in":b.bounceIn,"bounce-out":b.bounceOut,"ease-in-out":b.easeInOut})})});(Ext.cmd.derive("Ext.fx.DrawPath",Ext.Base,{singleton:true,pathToStringRE:/,?([achlmqrstvxz]),?/gi,pathCommandRE:/([achlmqstvz])[\s,]*((-?\d*\.?\d*(?:e[-+]?\d+)?\s*,?\s*)+)/ig,pathValuesRE:/(-?\d*\.?\d*(?:e[-+]?\d+)?)\s*,?\s*/ig,stopsRE:/^(\d+%?)$/,radian:Math.PI/180,is:function(c,d){d=String(d).toLowerCase();return(d=="object"&&c===Object(c))||(d=="undefined"&&typeof c==d)||(d=="null"&&c===null)||(d=="array"&&Array.isArray&&Array.isArray(c))||(Object.prototype.toString.call(c).toLowerCase().slice(8,-1))==d},path2string:function(){return this.join(",").replace(Ext.fx.DrawPath.pathToStringRE,"$1")},pathToString:function(b){return b.join(",").replace(Ext.fx.DrawPath.pathToStringRE,"$1")},parsePathString:function(f){if(!f){return null}var g={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},h=[],e=this;if(e.is(f,"array")&&e.is(f[0],"array")){h=e.pathClone(f)}if(!h.length){String(f).replace(e.pathCommandRE,function(d,k,a){var b=[],c=k.toLowerCase();a.replace(e.pathValuesRE,function(j,m){m&&b.push(+m)});if(c=="m"&&b.length>2){h.push([k].concat(Ext.Array.splice(b,0,2)));c="l";k=(k=="m")?"l":"L"}while(b.length>=g[c]){h.push([k].concat(Ext.Array.splice(b,0,g[c])));if(!g[c]){break}}})}h.toString=e.path2string;return h},pathClone:function(j){var m=[],h,k,g,l;if(!this.is(j,"array")||!this.is(j&&j[0],"array")){j=this.parsePathString(j)}for(g=0,l=j.length;g7){c[b].shift();var a=c[b];while(a.length){Ext.Array.splice(c,b++,0,["C"].concat(Ext.Array.splice(a,0,6)))}Ext.Array.erase(c,b,1);s=Math.max(B.length,u.length||0)}},C=function(a,b,d,e,c){if(a&&b&&a[c][0]=="M"&&b[c][0]!="M"){Ext.Array.splice(b,c,0,["M",e.x,e.y]);d.bx=0;d.by=0;d.x=a[c][1];d.y=a[c][2];s=Math.max(B.length,u.length||0)}},y,s,z,r,A,w;for(y=0,s=Math.max(B.length,u.length||0);y1){h=af(h);au=h*au;aw=h*aw}aX=au*au;aj=aw*aw;ag=(aQ==aU?-1:1)*af(aK((aX*aj-aX*an*an-aj*am*am)/(aX*an*an+aj*am*am)));aC=ag*au*an/aw+(aL+aM)/2;aE=ag*-aw*am/au+(ax+aA)/2;aR=aP(((ax-aE)/aw).toFixed(7));aS=aP(((aA-aE)/aw).toFixed(7));aR=aLaS){aR=aR-aW*2}if(!aU&&aS>aR){aS=aS-aW*2}}else{aR=aG[0];aS=aG[1];aC=aG[2];aE=aG[3]}aN=aS-aR;if(aK(aN)>ay){az=aS;av=aM;aO=aA;aS=aR+ay*(aU&&aS>aR?1:-1);aM=aC+au*ah(aS);aA=aE+aw*aZ(aS);ao=aJ.arc2curve(aM,aA,au,aw,aH,0,aU,av,aO,[aS,az,aC,aE])}aN=aS-aR;aT=ah(aR);aB=aZ(aR);aV=ah(aS);aD=aZ(aS);al=ar.tan(aN/4);ai=4/3*au*al;ak=4/3*aw*al;aF=[aL,ax];k=[aL+ai*aB,ax-ak*aT];t=[aM+ai*aD,aA-ak*aV];y=[aM,aA];k[0]=2*aF[0]-k[0];k[1]=2*aF[1]-k[1];if(aG){return[k,t,y].concat(ao)}else{ao=[k,t,y].concat(ao).join().split(",");ap=[];aq=ao.length;for(x=0;x=t){m=t;w=true}if(p.reverse){m=t-m}for(s in n){if(n.hasOwnProperty(s)){o=n[s];q=w?1:u(m/t);r[s]=v[s].set(o,q)}}p.frameCount++;return r},lastFrame:function(){var f=this,e=f.iterations,d=f.currentIteration;d++;if(d0},isRunning:function(){return this.paused===false&&this.running===true&&this.isAnimator!==true}},1,0,0,0,0,[["observable",Ext.util.Observable]],[Ext.fx,"Anim"],0));Ext.enableFx=true;(Ext.cmd.derive("Ext.util.Animate",Ext.Base,{mixinId:"animate",isAnimate:true,animate:function(d){var c=this;if(Ext.fx.Manager.hasFxBlock(c.id)){return c}Ext.fx.Manager.queueFx(new Ext.fx.Anim(c.anim(d)));return this},anim:function(d){if(!Ext.isObject(d)){return(d)?{}:false}var c=this;if(d.stopAnimation){c.stopAnimation()}Ext.applyIf(d,Ext.fx.Manager.getFxDefaults(c.id));return Ext.apply({target:c,paused:true},d)},getAnimationProps:function(){var c=this,d=c.layout;return d&&d.animate?d.animate:{}},stopFx:Ext.Function.alias(Ext.util.Animate,"stopAnimation"),stopAnimation:function(){Ext.fx.Manager.stopAnimation(this.id);return this},syncFx:function(){Ext.fx.Manager.setFxDefaults(this.id,{concurrent:true});return this},sequenceFx:function(){Ext.fx.Manager.setFxDefaults(this.id,{concurrent:false});return this},hasActiveFx:Ext.Function.alias(Ext.util.Animate,"getActiveAnimation"),getActiveAnimation:function(){return Ext.fx.Manager.getActiveAnimation(this.id)}},0,0,0,0,0,0,[Ext.util,"Animate"],0));(Ext.cmd.derive("Ext.dom.GarbageCollector",Ext.Base,{singleton:true,interval:30000,constructor:function(){var b=this;b.collect=Ext.Function.bind(b.collect,b);b.resume()},collect:function(){var k=this,g=Ext.cache,h,j,l,m;if(!Ext.enableGarbageCollector){k.pause()}else{for(h in g){if(!g.hasOwnProperty(h)){continue}l=g[h];if(l.skipGarbageCollection){continue}j=l.dom;if(Ext.isGarbage(j)){l.clearListeners();delete g[h]}}if(Ext.isIE9m){m={};for(h in g){if(g.hasOwnProperty(h)){m[h]=g[h]}}g=Ext.cache=m}k.lastTime=Ext.now()}},pause:function(){clearTimeout(this.timerId)},resume:function(){var d=this,c=d.lastTime;if(c&&(Ext.now()-c>d.interval)){d.collect()}d.timerId=Ext.interval(d.collect,d.interval)}},1,0,0,0,0,0,[Ext.dom,"GarbageCollector"],0));Ext.define("Ext.overrides.dom.Element",(function(){var Element,WIN=window,DOC=document,HIDDEN="hidden",ISCLIPPED="isClipped",OVERFLOW="overflow",OVERFLOWX="overflow-x",OVERFLOWY="overflow-y",ORIGINALCLIP="originalClip",HEIGHT="height",WIDTH="width",VISIBILITY="visibility",DISPLAY="display",NONE="none",HIDDEN="hidden",OFFSETS="offsets",ORIGINALDISPLAY="originalDisplay",VISMODE="visibilityMode",ISVISIBLE="isVisible",OFFSETCLASS=Ext.baseCSSPrefix+"hidden-offsets",boxMarkup=['",'",'"].join(""),tabbableSelector="a[href],button,iframe,input,select,textarea,[tabindex]",tabbableRe=/^BUTTON|IFRAME|INPUT|SELECT|TEXTAREA$/,tabbableSavedFlagAttribute="data-tabindexsaved",tabbableSavedAttribute="data-savedtabindex",scriptTagRe=/(?:]*)?>)((\n|\r|.)*?)(?:<\/script>)/ig,replaceScriptTagRe=/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,srcRe=/\ssrc=([\'\"])(.*?)\1/i,focusRe=/^a|button|embed|iframe|input|object|select|textarea$/i,nonSpaceRe=/\S/,typeRe=/\stype=([\'\"])(.*?)\1/i,msRe=/^-ms-/,camelRe=/(-[a-z])/gi,camelReplaceFn=function(m,a){return a.charAt(1).toUpperCase()},XMASKED=Ext.baseCSSPrefix+"masked",XMASKEDRELATIVE=Ext.baseCSSPrefix+"masked-relative",EXTELMASKMSG=Ext.baseCSSPrefix+"mask-msg",mouseEnterLeaveRe=/^(?:mouseenter|mouseleave)$/,bodyRe=/^body/i,scrollFly,propertyCache={},getDisplay=function(el){var data=el.getData(),display=data[ORIGINALDISPLAY];if(display===undefined){data[ORIGINALDISPLAY]=display=""}return display},getVisMode=function(el){var data=el.getData(),visMode=data[VISMODE];if(visMode===undefined){data[VISMODE]=visMode=Element.VISIBILITY}return visMode},garbageBin,emptyRange=DOC.createRange?DOC.createRange():null;return{override:"Ext.dom.Element",mixins:["Ext.util.Animate"],skipGarbageCollection:false,_init:function(E){Element=E},statics:{selectableCls:Ext.baseCSSPrefix+"selectable",unselectableCls:Ext.baseCSSPrefix+"unselectable",normalize:function(prop){if(prop==="float"){prop=Ext.supports.Float?"cssFloat":"styleFloat"}return propertyCache[prop]||(propertyCache[prop]=prop.replace(msRe,"ms-").replace(camelRe,camelReplaceFn))},getViewportHeight:function(){return Ext.isIE9m?DOC.documentElement.clientHeight:WIN.innerHeight},getViewportWidth:function(){return(!Ext.isStrict&&!Ext.isOpera)?document.body.clientWidth:Ext.isIE9m?DOC.documentElement.clientWidth:WIN.innerWidth}},addClsOnClick:function(className,testFn,scope){var me=this,dom=me.dom,hasTest=Ext.isFunction(testFn);me.on("mousedown",function(){if(hasTest&&testFn.call(scope||me,me)===false){return false}Ext.fly(dom).addCls(className);var d=Ext.getDoc(),fn=function(){Ext.fly(dom).removeCls(className);d.removeListener("mouseup",fn)};d.on("mouseup",fn)});return me},addClsOnFocus:function(className,testFn,scope){var me=this,dom=me.dom,hasTest=Ext.isFunction(testFn);me.on("focus",function(){if(hasTest&&testFn.call(scope||me,me)===false){return false}Ext.fly(dom).addCls(className)});me.on("blur",function(){Ext.fly(dom).removeCls(className)});return me},addClsOnOver:function(className,testFn,scope){var me=this,dom=me.dom,hasTest=Ext.isFunction(testFn);me.hover(function(){if(hasTest&&testFn.call(scope||me,me)===false){return}Ext.fly(dom).addCls(className)},function(){Ext.fly(dom).removeCls(className)});return me},addKeyListener:function(key,fn,scope){var config;if(typeof key!=="object"||Ext.isArray(key)){config={target:this,key:key,fn:fn,scope:scope}}else{config={target:this,key:key.key,shift:key.shift,ctrl:key.ctrl,alt:key.alt,fn:fn,scope:scope}}return new Ext.util.KeyMap(config)},addKeyMap:function(config){return new Ext.util.KeyMap(Ext.apply({target:this},config))},anchorAnimX:function(anchor){var xName=(anchor==="l")?"right":"left";this.dom.style[xName]="0px"},anim:function(config){if(!Ext.isObject(config)){return(config)?{}:false}var me=this,duration=config.duration||Ext.fx.Anim.prototype.duration,easing=config.easing||"ease",animConfig;if(config.stopAnimation){me.stopAnimation()}Ext.applyIf(config,Ext.fx.Manager.getFxDefaults(me.id));Ext.fx.Manager.setFxDefaults(me.id,{delay:0});animConfig={target:me.dom,remove:config.remove,alternate:config.alternate||false,duration:duration,easing:easing,callback:config.callback,listeners:config.listeners,iterations:config.iterations||1,scope:config.scope,block:config.block,concurrent:config.concurrent,delay:config.delay||0,paused:true,keyframes:config.keyframes,from:config.from||{},to:Ext.apply({},config)};Ext.apply(animConfig.to,config.to);delete animConfig.to.to;delete animConfig.to.from;delete animConfig.to.remove;delete animConfig.to.alternate;delete animConfig.to.keyframes;delete animConfig.to.iterations;delete animConfig.to.listeners;delete animConfig.to.target;delete animConfig.to.paused;delete animConfig.to.callback;delete animConfig.to.scope;delete animConfig.to.duration;delete animConfig.to.easing;delete animConfig.to.concurrent;delete animConfig.to.block;delete animConfig.to.stopAnimation;delete animConfig.to.delay;return animConfig},animate:function(config){var me=this,animId=me.dom.id||Ext.id(me.dom),listeners,anim,end;if(!Ext.fx.Manager.hasFxBlock(animId)){if(config.listeners){listeners=config.listeners;delete config.listeners}if(config.internalListeners){config.listeners=config.internalListeners;delete config.internalListeners}end=config.autoEnd;delete config.autoEnd;anim=new Ext.fx.Anim(me.anim(config));if(listeners){anim.on(listeners)}Ext.fx.Manager.queueFx(anim);if(end){anim.jumpToEnd()}}return me},boxWrap:function(cls){cls=cls||Ext.baseCSSPrefix+"box";var el=Ext.get(this.insertHtml("beforeBegin",""));el.selectNode("."+cls+"-mc").appendChild(this.dom);return el},cacheScrollValues:function(){var me=this,scrollValues=[],scrolledDescendants=[],descendants,descendant,i,len;scrollFly=scrollFly||new Ext.dom.Fly();descendants=me.query("*");for(i=0,len=descendants.length;i0||descendant.scrollLeft!==0){scrolledDescendants.push(descendant);scrollValues.push(scrollFly.attach(descendant).getScroll())}}return function(){var scroll,i,len;for(i=0,len=scrolledDescendants.length;i5?color.toLowerCase():defaultValue)},getLoader:function(){var me=this,data=me.getData(),loader=data.loader;if(!loader){data.loader=loader=new Ext.ElementLoader({target:me})}return loader},getPositioning:function(autoPx){var styles=this.getStyle(["left","top","position","z-index"]),dom=this.dom;if(autoPx){if(styles.left==="auto"){styles.left=dom.offsetLeft+"px"}if(styles.top==="auto"){styles.top=dom.offsetTop+"px"}}return styles},getScroll:function(){var me=this,dom=me.dom,docElement=DOC.documentElement,left,top,body=document.body;if(dom===DOC||dom===body){left=docElement.scrollLeft||(body?body.scrollLeft:0);top=docElement.scrollTop||(body?body.scrollTop:0)}else{left=dom.scrollLeft;top=dom.scrollTop}return{left:left,top:top}},getScrollIntoViewXY:function(container,scrollX,scrollY){var me=this,dom=me.dom,ct=Ext.getDom(container),offsets=me.getOffsetsTo(ct),width=dom.offsetWidth,height=dom.offsetHeight,left=offsets[0]+scrollX,top=offsets[1]+scrollY,bottom=top+height,right=left+width,ctClientHeight=ct.clientHeight,ctClientWidth=ct.clientWidth,ctBottom=scrollY+ctClientHeight,ctRight=scrollX+ctClientWidth,scrollX,scrollY;if(height>ctClientHeight||topctBottom){scrollY=bottom-ctClientHeight}}if(width>ctClientWidth||leftctRight){scrollX=right-ctClientWidth}}return{x:scrollX,y:scrollY}},getScrollLeft:function(){var dom=this.dom;if(dom===DOC||dom===document.body){return this.getScroll().left}else{return dom.scrollLeft}},getScrollTop:function(){var dom=this.dom;if(dom===DOC||dom===document.body){return this.getScroll().top}else{return dom.scrollTop}},getXY:function(){var xy=arguments.callee.$previous.call(this),scroll=Ext.getDoc().getScroll();xy[0]+=scroll.left;xy[1]+=scroll.top;return xy},ghost:function(anchor,obj){var me=this,dom=me.dom,beforeAnim;anchor=anchor||"b";beforeAnim=function(){var el=Ext.fly(dom,"_anim"),width=el.getWidth(),height=el.getHeight(),xy=el.getXY(),position=el.getPositioning(),to={opacity:0};switch(anchor){case"t":to.y=xy[1]-height;break;case"l":to.x=xy[0]-width;break;case"r":to.x=xy[0]+width;break;case"b":to.y=xy[1]+height;break;case"tl":to.x=xy[0]-width;to.y=xy[1]-height;break;case"bl":to.x=xy[0]-width;to.y=xy[1]+height;break;case"br":to.x=xy[0]+width;to.y=xy[1]+height;break;case"tr":to.x=xy[0]+width;to.y=xy[1]-height;break}this.to=to;this.on("afteranimate",function(){var el=Ext.fly(dom,"_anim");if(el){el.hide();el.clearOpacity();el.setPositioning(position)}})};me.animate(Ext.applyIf(obj||{},{duration:500,easing:"ease-out",listeners:{beforeanimate:beforeAnim}}));return me},hide:function(animate){if(typeof animate==="string"){this.setVisible(false,animate);return this}this.setVisible(false,this.anim(animate));return this},highlight:function(color,o){var me=this,dom=me.dom,from={},restore,to,attr,lns,event,fn;o=o||{};lns=o.listeners||{};attr=o.attr||"backgroundColor";from[attr]=color||"ffff9c";if(!o.to){to={};to[attr]=o.endColor||me.getColor(attr,"ffffff","")}else{to=o.to}o.listeners=Ext.apply(Ext.apply({},lns),{beforeanimate:function(){restore=dom.style[attr];var el=Ext.fly(dom,"_anim");el.clearOpacity();el.show();event=lns.beforeanimate;if(event){fn=event.fn||event;return fn.apply(event.scope||lns.scope||WIN,arguments)}},afteranimate:function(){if(dom){dom.style[attr]=restore}event=lns.afteranimate;if(event){fn=event.fn||event;fn.apply(event.scope||lns.scope||WIN,arguments)}}});me.animate(Ext.apply({},o,{duration:1000,easing:"ease-in",from:from,to:to}));return me},hover:function(overFn,outFn,scope,options){var me=this;me.on("mouseenter",overFn,scope||me.dom,options);me.on("mouseleave",outFn,scope||me.dom,options);return me},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)},isFocusable:function(asFocusEl){var me=this,dom=me.dom,hasTabIndex=dom.hasAttribute("tabindex"),tabIndex=hasTabIndex&&dom.getAttribute("tabindex"),nodeName=dom.nodeName,canFocus=false;if(dom&&!dom.disabled){if(tabIndex=="-1"){canFocus=asFocusEl}else{if(focusRe.test(nodeName)){if((nodeName!=="A")||dom.href){canFocus=true}}else{canFocus=tabIndex!=null&&tabIndex>=0}}canFocus=canFocus&&me.isVisible(true)}return canFocus},isMasked:function(deep){var me=this,data=me.getData(),maskEl=data.maskEl,maskMsg=data.maskMsg,hasMask=false,parent;if(maskEl&&maskEl.isVisible()){if(maskMsg){maskMsg.center(me)}hasMask=true}else{if(deep){parent=me.findParentNode();if(parent){return Ext.fly(parent).isMasked(deep)}}}return hasMask},isScrollable:function(){var dom=this.dom;return dom.scrollHeight>dom.clientHeight||dom.scrollWidth>dom.clientWidth},load:function(options){this.getLoader().load(options);return this},mask:function(msg,msgCls,elHeight){var me=this,dom=me.dom,data=me.getData(),maskEl=data.maskEl,maskMsg=data.maskMsg;if(!(bodyRe.test(dom.tagName)&&me.getStyle("position")=="static")){me.addCls(XMASKEDRELATIVE)}if(maskEl){maskEl.destroy()}if(maskMsg){maskMsg.destroy()}Ext.DomHelper.append(dom,[{role:"presentation",cls:Ext.baseCSSPrefix+"mask",style:"top:0;left:0;"},{role:"presentation",cls:msgCls?EXTELMASKMSG+" "+msgCls:EXTELMASKMSG,cn:{tag:"div",role:"presentation",cls:Ext.baseCSSPrefix+"mask-msg-inner",cn:{tag:"div",role:"presentation",cls:Ext.baseCSSPrefix+"mask-msg-text",html:msg||""}}}]);maskMsg=Ext.get(dom.lastChild);maskEl=Ext.get(maskMsg.dom.previousSibling);data.maskMsg=maskMsg;data.maskEl=maskEl;me.addCls(XMASKED);maskEl.setDisplayed(true);if(typeof msg==="string"){maskMsg.setDisplayed(true);maskMsg.center(me)}else{maskMsg.setDisplayed(false)}if(dom===DOC.body){maskEl.addCls(Ext.baseCSSPrefix+"mask-fixed")}else{me.saveTabbableState()}me.saveChildrenTabbableState();if(Ext.isIE9m&&dom!==DOC.body&&me.isStyle("height","auto")){maskEl.setSize(undefined,elHeight||me.getHeight())}return maskEl},monitorMouseLeave:function(delay,handler,scope){var me=this,timer,listeners={mouseleave:function(e){if(Ext.isIE9m){e.enableIEAsync()}timer=Ext.defer(handler,delay,scope||me,[e])},mouseenter:function(){clearTimeout(timer)}};me.on(listeners);return listeners},needsTabIndex:function(){var me=this;if(me.dom){if((me.dom.nodeName==="A")&&(!me.dom.href)){return true}return !focusRe.test(me.dom.nodeName)}},normalizeEvent:function(eventName){var fn,newName;if(!Ext.supports.MouseEnterLeave&&mouseEnterLeaveRe.test(eventName)){fn=this.normalizeWithin;newName=eventName=="mouseenter"?"mouseover":"mouseout"}else{if(eventName=="mousewheel"&&!Ext.supports.MouseWheel&&!Ext.isOpera){newName="DOMMouseScroll"}}return newName?{eventName:newName,normalizeFn:fn}:null},normalizeWithin:function(event){var parent=event.currentTarget,child=event.getRelatedTarget();if(parent&&parent.firstChild){while(child){if(child===parent){return false}child=child.parentNode;if(child&&(child.nodeType!==1)){child=null}}}return true},puff:function(obj){var me=this,dom=me.dom,beforeAnim,box=me.getBox(),originalStyles=me.getStyle(["width","height","left","right","top","bottom","position","z-index","font-size","opacity"],true);obj=Ext.applyIf(obj||{},{easing:"ease-out",duration:500,useDisplay:false});beforeAnim=function(){var el=Ext.fly(dom,"_anim");el.clearOpacity();el.show();this.to={width:box.width*2,height:box.height*2,x:box.x-(box.width/2),y:box.y-(box.height/2),opacity:0,fontSize:"200%"};this.on("afteranimate",function(){var el=Ext.fly(dom,"_anim");if(el){if(obj.useDisplay){el.setDisplayed(false)}else{el.hide()}el.setStyle(originalStyles);Ext.callback(obj.callback,obj.scope)}})};me.animate({duration:obj.duration,easing:obj.easing,listeners:{beforeanimate:{fn:beforeAnim}}});return me},scroll:function(direction,distance,animate){if(!this.isScrollable()){return false}direction=direction.charAt(0);var me=this,dom=me.dom,side=direction==="r"||direction==="l"?"left":"top",scrolled=false,currentScroll,constrainedScroll;if(direction==="l"||direction==="t"||direction==="u"){distance=-distance}if(side==="left"){currentScroll=dom.scrollLeft;constrainedScroll=me.constrainScrollLeft(currentScroll+distance)}else{currentScroll=dom.scrollTop;constrainedScroll=me.constrainScrollTop(currentScroll+distance)}if(constrainedScroll!==currentScroll){this.scrollTo(side,constrainedScroll,animate);scrolled=true}return scrolled},scrollBy:function(deltaX,deltaY,animate){var me=this,dom=me.dom;if(deltaX.length){animate=deltaY;deltaY=deltaX[1];deltaX=deltaX[0]}else{if(typeof deltaX!="number"){animate=deltaY;deltaY=deltaX.y;deltaX=deltaX.x}}if(deltaX){me.scrollTo("left",me.constrainScrollLeft(dom.scrollLeft+deltaX),animate)}if(deltaY){me.scrollTo("top",me.constrainScrollTop(dom.scrollTop+deltaY),animate)}return me},scrollChildIntoView:function(child,hscroll){Ext.fly(child).scrollIntoView(this,hscroll)},scrollIntoView:function(container,hscroll,animate,highlight){container=Ext.getDom(container)||Ext.getBody().dom;return this.doScrollIntoView(container,hscroll,animate,highlight,"getScrollLeft","scrollTo")},scrollTo:function(side,value,animate){var top=/top/i.test(side),me=this,prop=top?"scrollTop":"scrollLeft",dom=me.dom,animCfg;if(!animate||!me.anim){dom[prop]=value;dom[prop]=value}else{animCfg={to:{}};animCfg.to[prop]=value;if(Ext.isObject(animate)){Ext.applyIf(animCfg,animate)}me.animate(animCfg)}return me},selectable:function(){var me=this;me.dom.unselectable="";me.removeCls(Element.unselectableCls);me.addCls(Element.selectableCls);return me},setCapture:function(){var dom=this.dom;if(Ext.isIE9m&&dom.setCapture){dom.setCapture()}},setDisplayed:function(value){if(typeof value==="boolean"){value=value?getDisplay(this):NONE}this.setStyle(DISPLAY,value);return this},setHeight:function(height,animate){var me=this;if(!animate||!me.anim){arguments.callee.$previous.apply(this,arguments)}else{if(!Ext.isObject(animate)){animate={}}me.animate(Ext.applyIf({to:{height:height}},animate))}return me},setHorizontal:function(){var me=this,cls=me.verticalCls;delete me.vertical;if(cls){delete me.verticalCls;me.removeCls(cls)}delete me.setWidth;delete me.setHeight;if(!Ext.isIE8){delete me.getWidth;delete me.getHeight}delete me.styleHooks},updateText:function(text){var me=this,dom,textNode;if(dom){textNode=dom.firstChild;if(!textNode||(textNode.nodeType!==3||textNode.nextSibling)){textNode=DOC.createTextNode();me.empty();dom.appendChild(textNode)}if(text){textNode.data=text}}},setHtml:function(html,loadScripts,callback){var me=this,id,dom,interval;if(!me.dom){return me}html=html||"";dom=me.dom;if(loadScripts!==true){dom.innerHTML=html;Ext.callback(callback,me);return me}id=Ext.id();html+='';interval=Ext.interval(function(){var hd,match,attrs,srcMatch,typeMatch,el,s;if(!(el=DOC.getElementById(id))){return false}clearInterval(interval);Ext.removeNode(el);hd=Ext.getHead().dom;while((match=scriptTagRe.exec(html))){attrs=match[1];srcMatch=attrs?attrs.match(srcRe):false;if(srcMatch&&srcMatch[2]){s=DOC.createElement("script");s.src=srcMatch[2];typeMatch=attrs.match(typeRe);if(typeMatch&&typeMatch[2]){s.type=typeMatch[2]}hd.appendChild(s)}else{if(match[2]&&match[2].length>0){if(WIN.execScript){WIN.execScript(match[2])}else{WIN.eval(match[2])}}}}Ext.callback(callback,me)},20);dom.innerHTML=html.replace(replaceScriptTagRe,"");return me},setOpacity:function(opacity,animate){var me=this;if(!me.dom){return me}if(!animate||!me.anim){me.setStyle("opacity",opacity)}else{if(typeof animate!="object"){animate={duration:350,easing:"ease-in"}}me.animate(Ext.applyIf({to:{opacity:opacity}},animate))}return me},setPositioning:function(pc){return this.setStyle(pc)},setScrollLeft:function(left){this.dom.scrollLeft=left;return this},setScrollTop:function(top){this.dom.scrollTop=top;return this},setVertical:function(angle,cls){var me=this,proto=Element.prototype;me.vertical=true;if(cls){me.addCls(me.verticalCls=cls)}me.setWidth=proto.setHeight;me.setHeight=proto.setWidth;if(!Ext.isIE8){me.getWidth=proto.getHeight;me.getHeight=proto.getWidth}me.styleHooks=(angle===270)?proto.verticalStyleHooks270:proto.verticalStyleHooks90},setSize:function(width,height,animate){var me=this;if(Ext.isObject(width)){animate=height;height=width.height;width=width.width}if(!animate||!me.anim){me.dom.style.width=Element.addUnits(width);me.dom.style.height=Element.addUnits(height)}else{if(animate===true){animate={}}me.animate(Ext.applyIf({to:{width:width,height:height}},animate))}return me},setVisible:function(visible,animate){var me=this,dom=me.dom,visMode=getVisMode(me);if(typeof animate==="string"){switch(animate){case DISPLAY:visMode=Element.DISPLAY;break;case VISIBILITY:visMode=Element.VISIBILITY;break;case OFFSETS:visMode=Element.OFFSETS;break}me.setVisibilityMode(visMode);animate=false}if(!animate||!me.anim){if(visMode===Element.DISPLAY){return me.setDisplayed(visible)}else{if(visMode===Element.OFFSETS){me[visible?"removeCls":"addCls"](OFFSETCLASS)}else{if(visMode===Element.VISIBILITY){me.fixDisplay();dom.style.visibility=visible?"":HIDDEN}}}}else{if(visible){me.setOpacity(0.01);me.setVisible(true)}if(!Ext.isObject(animate)){animate={duration:350,easing:"ease-in"}}me.animate(Ext.applyIf({callback:function(){if(!visible){Ext.fly(dom).setVisible(false).setOpacity(1)}},to:{opacity:(visible)?1:0}},animate))}me.getData()[ISVISIBLE]=visible;return me},setWidth:function(width,animate){var me=this;if(!animate||!me.anim){arguments.callee.$previous.apply(this,arguments)}else{if(!Ext.isObject(animate)){animate={}}me.animate(Ext.applyIf({to:{width:width}},animate))}return me},setX:function(x,animate){return this.setXY([x,this.getY()],animate)},setXY:function(xy,animate){var me=this;if(!animate||!me.anim){arguments.callee.$previous.call(this,xy)}else{if(!Ext.isObject(animate)){animate={}}me.animate(Ext.applyIf({to:{x:xy[0],y:xy[1]}},animate))}return this},setY:function(y,animate){return this.setXY([this.getX(),y],animate)},show:function(animate){if(typeof animate==="string"){this.setVisible(true,animate);return this}this.setVisible(true,this.anim(animate));return this},slideIn:function(anchor,obj,slideOut){var me=this,dom=me.dom,elStyle=dom.style,beforeAnim,wrapAnim,restoreScroll,wrapDomParentNode;anchor=anchor||"t";obj=obj||{};beforeAnim=function(){var animScope=this,listeners=obj.listeners,el=Ext.fly(dom,"_anim"),box,originalStyles,anim,wrap;if(!slideOut){el.fixDisplay()}box=el.getBox();if((anchor=="t"||anchor=="b")&&box.height===0){box.height=dom.scrollHeight}else{if((anchor=="l"||anchor=="r")&&box.width===0){box.width=dom.scrollWidth}}originalStyles=el.getStyle(["width","height","left","right","top","bottom","position","z-index"],true);el.setSize(box.width,box.height);if(obj.preserveScroll){restoreScroll=el.cacheScrollValues()}wrap=el.wrap({role:"presentation",id:Ext.id()+"-anim-wrap-for-"+el.dom.id,style:{visibility:slideOut?"visible":"hidden"}});wrapDomParentNode=wrap.dom.parentNode;wrap.setPositioning(el.getPositioning(true));if(wrap.isStyle("position","static")){wrap.position("relative")}el.clearPositioning("auto");wrap.clip();if(restoreScroll){restoreScroll()}el.setStyle({visibility:"",position:"absolute"});if(slideOut){wrap.setSize(box.width,box.height)}switch(anchor){case"t":anim={from:{width:box.width+"px",height:"0px"},to:{width:box.width+"px",height:box.height+"px"}};elStyle.bottom="0px";break;case"l":anim={from:{width:"0px",height:box.height+"px"},to:{width:box.width+"px",height:box.height+"px"}};me.anchorAnimX(anchor);break;case"r":anim={from:{x:box.x+box.width,width:"0px",height:box.height+"px"},to:{x:box.x,width:box.width+"px",height:box.height+"px"}};me.anchorAnimX(anchor);break;case"b":anim={from:{y:box.y+box.height,width:box.width+"px",height:"0px"},to:{y:box.y,width:box.width+"px",height:box.height+"px"}};break;case"tl":anim={from:{x:box.x,y:box.y,width:"0px",height:"0px"},to:{width:box.width+"px",height:box.height+"px"}};elStyle.bottom="0px";me.anchorAnimX("l");break;case"bl":anim={from:{y:box.y+box.height,width:"0px",height:"0px"},to:{y:box.y,width:box.width+"px",height:box.height+"px"}};me.anchorAnimX("l");break;case"br":anim={from:{x:box.x+box.width,y:box.y+box.height,width:"0px",height:"0px"},to:{x:box.x,y:box.y,width:box.width+"px",height:box.height+"px"}};me.anchorAnimX("r");break;case"tr":anim={from:{x:box.x+box.width,width:"0px",height:"0px"},to:{x:box.x,width:box.width+"px",height:box.height+"px"}};elStyle.bottom="0px";me.anchorAnimX("r");break}wrap.show();wrapAnim=Ext.apply({},obj);delete wrapAnim.listeners;wrapAnim=new Ext.fx.Anim(Ext.applyIf(wrapAnim,{target:wrap,duration:500,easing:"ease-out",from:slideOut?anim.to:anim.from,to:slideOut?anim.from:anim.to}));wrapAnim.on("afteranimate",function(){var el=Ext.fly(dom,"_anim");el.setStyle(originalStyles);if(slideOut){if(obj.useDisplay){el.setDisplayed(false)}else{el.hide()}}if(wrap.dom){if(wrap.dom.parentNode){wrap.dom.parentNode.insertBefore(el.dom,wrap.dom)}else{wrapDomParentNode.appendChild(el.dom)}wrap.destroy()}if(restoreScroll){restoreScroll()}animScope.end()});if(listeners){wrapAnim.on(listeners)}};me.animate({duration:obj.duration?Math.max(obj.duration,500)*2:1000,listeners:{beforeanimate:beforeAnim}});return me},slideOut:function(anchor,o){return this.slideIn(anchor,o,true)},swallowEvent:function(eventName,preventDefault){var me=this,e,eLen,fn=function(e){e.stopPropagation();if(preventDefault){e.preventDefault()}};if(Ext.isArray(eventName)){eLen=eventName.length;for(e=0;e=0)?true:false}else{return hasIdx&&idx>=0?true:false}}}else{if(editable||tabbableRe.test(tag)||(Ext.isIE8&&tag==="OBJECT")){return hasIdx&&idx<0?false:true}else{if(hasIdx&&idx>=0){return true}}}return false},selectTabbableElements:function(asDom,selector,limit,backward){var selection,nodes,node,el,i,len,to,step;asDom=asDom!=undefined?asDom:true;nodes=this.dom.querySelectorAll(selector||tabbableSelector);len=nodes.length;if(!len){return nodes}if(backward){i=len-1;to=0;step=-1}else{i=0;to=len-1;step=1}selection=[];for(;;i+=step){if((step>0&&i>to)||(step<0&&i=limit){return selection}}return selection},selectFirstTabbableElement:function(asDom,selector){var els=this.selectTabbableElements(asDom,selector,1,false);return els[0]},selectLastTabbableElement:function(asDom,selector){var els=this.selectTabbableElements(asDom,selector,1,true);return els[0]},saveTabbableState:function(attribute){var dom=this.dom;if(dom.hasAttribute(tabbableSavedFlagAttribute)){return}attribute=attribute||tabbableSavedAttribute;if(dom.hasAttribute("tabindex")){dom.setAttribute(attribute,dom.getAttribute("tabindex"))}else{dom.setAttribute(attribute,"none")}dom.setAttribute("tabindex",-1);dom.setAttribute(tabbableSavedFlagAttribute,true);return this},restoreTabbableState:function(attribute){var dom=this.dom,idx;attribute=attribute||tabbableSavedAttribute;if(!dom.hasAttribute(tabbableSavedFlagAttribute)||!dom.hasAttribute(attribute)){return}idx=dom.getAttribute(attribute);if(idx==="none"){dom.removeAttribute("tabindex")}else{dom.setAttribute("tabindex",idx)}dom.removeAttribute(attribute);dom.removeAttribute(tabbableSavedFlagAttribute);return this},saveChildrenTabbableState:function(attribute){var children,child,i,len;if(this.dom){children=this.selectTabbableElements();for(i=0,len=children.length;i=0&&d<1){d*=100;a.filter=c+(c.length?" ":"")+"alpha(opacity="+d+")"}else{a.filter=c}}})}if(!E.matchesSelector){var P=/^([a-z]+|\*)?(?:\.([a-z][a-z\-_0-9]*))?$/i,O=/\-/g,Y,D=function(a,c){var b=new RegExp("(?:^|\\s+)"+c.replace(O,"\\-")+"(?:\\s+|$)");if(a&&a!=="*"){a=a.toUpperCase();return function(d){return d.tagName===a&&b.test(d.className)}}return function(d){return b.test(d.className)}},H=function(a){a=a.toUpperCase();return function(b){return b.tagName===a}},M={};J.matcherCache=M;J.is=function(d){if(!d){return true}var c=this.dom,f,a,g,h,j,b,e;if(c.nodeType!==1){return false}if(!(g=Ext.isFunction(d)?d:M[d])){if(!(a=d.match(P))){h=c.parentNode;if(!h){j=true;h=Y||(Y=X.createDocumentFragment());Y.appendChild(c)}b=Ext.Array.indexOf(Ext.fly(h,"_is").query(d),c)!==-1;if(j){Y.removeChild(c)}return b}e=a[1];f=a[2];M[d]=g=f?D(e,f):H(e)}return g(c)}}if(!N||!N.getComputedStyle){J.getStyle=function(g,n){var m=this,r=m.dom,e=typeof g!=="string",b=g,l=b,o=1,a=n,c=m.styleHooks,f,p,h,j,s,d,q;if(e){h={};b=l[0];q=0;if(!(o=l.length)){return h}}if(!r||r.documentElement){return h||""}p=r.style;if(n){d=p}else{d=r.currentStyle;if(!d){a=true;d=p}}do{j=c[b];if(!j){c[b]=j={name:I.normalize(b)}}if(j.get){s=j.get(r,m,a,d)}else{f=j.name;s=d[f]}if(!e){return s}h[b]=s;b=l[++q]}while(q=9)){J.getAttribute=function(a,c){var b=this.dom,d;if(c){d=typeof b[c+":"+a];if(d!="undefined"&&d!="unknown"){return b[c+":"+a]||null}return null}if(a==="for"){a="htmlFor"}return b[a]||null}}Ext.onReady(function(){var a=/^(?:transparent|(?:rgba[(](?:\s*\d+\s*[,]){3}\s*0\s*[)]))$/i,c=[],m=J.setWidth,l=J.setHeight,f=J.setSize,e=/^\d+(?:\.\d*)?px$/i,n,p,d,g;if(E.FixedTableWidthBug){k.width={name:"width",set:function(r,s,u){var v=r.style,w=u._needsTableWidthFix,t=v.display;if(w){v.display="none"}v.width=s;if(w){r.scrollWidth;v.display=t}}};J.setWidth=function(u,w){var s=this,r=s.dom,v=r.style,x=s._needsTableWidthFix,t=v.display;if(x&&!w){v.display="none"}m.call(s,u,w);if(x&&!w){r.scrollWidth;v.display=t}return s};J.setSize=function(u,x,w){var s=this,r=s.dom,v=r.style,y=s._needsTableWidthFix,t=v.display;if(y&&!w){v.display="none"}f.call(s,u,x,w);if(y&&!w){r.scrollWidth;v.display=t}return s}}if(Ext.isIE8){k.height={name:"height",set:function(r,s,u){var v=u.component,t,w;if(v&&v._syncFrameHeight&&this===v.el){w=v.frameBody.dom.style;if(e.test(s)){t=v.getFrameInfo();if(t){w.height=(parseInt(s,10)-t.height)+"px"}}else{if(!s||s==="auto"){w.height=""}}}r.style.height=s}};J.setHeight=function(v,t){var s=this.component,r,u;if(s&&s._syncFrameHeight&&this===s.el){u=s.frameBody.dom.style;if(!v||v==="auto"){u.height=""}else{r=s.getFrameInfo();if(r){u.height=(v-r.height)+"px"}}}return l.call(this,v,t)};J.setSize=function(s,w,u){var t=this.component,r,v;if(t&&t._syncFrameHeight&&this===t.el){v=t.frameBody.dom.style;if(!w||w==="auto"){v.height=""}else{r=t.getFrameInfo();if(r){v.height=(w-r.height)+"px"}}}return f.call(this,s,w,u)}}Ext.getDoc().on("selectstart",function(s,r){var t=I.selectableCls,u=I.unselectableCls,w=r&&r.tagName;w=w&&w.toLowerCase();if(w==="input"||w==="textarea"){return}while(r&&r.nodeType===1&&r!==X.documentElement){var v=Ext.fly(r);if(v.hasCls(t)){return}if(v.hasCls(u)){s.stopEvent();return}r=r.parentNode}});function o(r,u,s,v){var t=v[this.name]||"";return a.test(t)?"transparent":t}function h(s,r,t){return function(){s.selectionStart=r;s.selectionEnd=t}}function j(t){var v=E.DisplayChangeInputSelectionBug,u=E.DisplayChangeTextAreaSelectionBug,s,x,r,w;if(v||u){s=I.getActiveElement();x=s&&s.tagName;if((u&&x==="TEXTAREA")||(v&&x==="INPUT"&&s.type==="text")){if(Ext.fly(t).isAncestor(s)){r=s.selectionStart;w=s.selectionEnd;if(Ext.isNumber(r)&&Ext.isNumber(w)){return h(s,r,w)}}}}return Ext.emptyFn}function q(r,u,s,v){var x=v.marginRight,w,t;if(x!=="0px"){w=r.style;t=w.display;w.display="inline-block";x=(s?v:r.ownerDocument.defaultView.getComputedStyle(r,null)).marginRight;w.display=t}return x}function b(r,u,s,v){var y=v.marginRight,w,x,t;if(y!=="0px"){w=r.style;x=j(r);t=w.display;w.display="inline-block";y=(s?v:r.ownerDocument.defaultView.getComputedStyle(r,"")).marginRight;w.display=t;x()}return y}if(!E.RightMargin){k.marginRight=k["margin-right"]={name:"marginRight",get:(E.DisplayChangeInputSelectionBug||E.DisplayChangeTextAreaSelectionBug)?b:q}}if(!E.TransparentColor){n=["background-color","border-color","color","outline-color"];for(p=n.length;p--;){d=n[p];g=I.normalize(d);k[d]=k[g]={name:g,get:o}}}J.verticalStyleHooks90=T=Ext.Object.chain(k);J.verticalStyleHooks270=L=Ext.Object.chain(k);T.width=k.height||{name:"height"};T.height=k.width||{name:"width"};T["margin-top"]={name:"marginLeft"};T["margin-right"]={name:"marginTop"};T["margin-bottom"]={name:"marginRight"};T["margin-left"]={name:"marginBottom"};T["padding-top"]={name:"paddingLeft"};T["padding-right"]={name:"paddingTop"};T["padding-bottom"]={name:"paddingRight"};T["padding-left"]={name:"paddingBottom"};T["border-top"]={name:"borderLeft"};T["border-right"]={name:"borderTop"};T["border-bottom"]={name:"borderRight"};T["border-left"]={name:"borderBottom"};L.width=k.height||{name:"height"};L.height=k.width||{name:"width"};L["margin-top"]={name:"marginRight"};L["margin-right"]={name:"marginBottom"};L["margin-bottom"]={name:"marginLeft"};L["margin-left"]={name:"marginTop"};L["padding-top"]={name:"paddingRight"};L["padding-right"]={name:"paddingBottom"};L["padding-bottom"]={name:"paddingLeft"};L["padding-left"]={name:"paddingTop"};L["border-top"]={name:"borderRight"};L["border-right"]={name:"borderBottom"};L["border-bottom"]={name:"borderLeft"};L["border-left"]={name:"borderTop"};if(!Ext.scopeCss){c.push(Ext.baseCSSPrefix+"body")}if(E.Touch){c.push(Ext.baseCSSPrefix+"touch")}if(Ext.isIE&&Ext.isIE9m){c.push(Ext.baseCSSPrefix+"ie",Ext.baseCSSPrefix+"ie9m");c.push(Ext.baseCSSPrefix+"ie8p");if(Ext.isIE8){c.push(Ext.baseCSSPrefix+"ie8")}else{c.push(Ext.baseCSSPrefix+"ie9",Ext.baseCSSPrefix+"ie9p")}if(Ext.isIE8m){c.push(Ext.baseCSSPrefix+"ie8m")}}if(Ext.isIE10){c.push(Ext.baseCSSPrefix+"ie10")}if(Ext.isIE11){c.push(Ext.baseCSSPrefix+"ie11")}if(Ext.isGecko){c.push(Ext.baseCSSPrefix+"gecko")}if(Ext.isOpera){c.push(Ext.baseCSSPrefix+"opera")}if(Ext.isOpera12m){c.push(Ext.baseCSSPrefix+"opera12m")}if(Ext.isWebKit){c.push(Ext.baseCSSPrefix+"webkit")}if(Ext.isSafari){c.push(Ext.baseCSSPrefix+"safari")}if(Ext.isChrome){c.push(Ext.baseCSSPrefix+"chrome")}if(Ext.isMac){c.push(Ext.baseCSSPrefix+"mac")}if(Ext.isLinux){c.push(Ext.baseCSSPrefix+"linux")}if(!E.CSS3BorderRadius){c.push(Ext.baseCSSPrefix+"nbr")}if(!E.CSS3LinearGradient){c.push(Ext.baseCSSPrefix+"nlg")}if(E.Touch){c.push(Ext.baseCSSPrefix+"touch")}Ext.getBody().addCls(c)},null,{priority:1500})});Ext.define("Ext.overrides.GlobalEvents",{override:"Ext.GlobalEvents",attachListeners:function(){this.callParent();Ext.getDoc().on("mousedown",this.fireMouseDown,this)},fireMouseDown:function(b){this.fireEvent("mousedown",b)},deprecated:{5:{methods:{addListener:function(m,k,l,g){var h,j;if(m==="ready"){j=k}else{if(typeof m!=="string"){for(h in m){if(h==="ready"){j=m[h]}}}}if(j){Ext.onReady(j)}this.callParent([m,k,l,g])}}}}});Ext.USE_NATIVE_JSON=false;Ext.JSON=(new (function(){var me=this,hasNative=window.JSON&&JSON.toString()=="[object JSON]",useHasOwn=!!{}.hasOwnProperty,pad=function(n){return n<10?"0"+n:n},doDecode=function(json){return eval("("+json+")")},doEncode=function(o,newline){if(o===null||o===undefined){return"null"}else{if(Ext.isDate(o)){return me.encodeDate(o)}else{if(Ext.isString(o)){if(Ext.isMSDate(o)){return me.encodeMSDate(o)}else{return me.encodeString(o)}}else{if(typeof o=="number"){return isFinite(o)?String(o):"null"}else{if(Ext.isBoolean(o)){return String(o)}else{if(o.toJSON){return o.toJSON()}else{if(Ext.isArray(o)){return encodeArray(o,newline)}else{if(Ext.isObject(o)){return encodeObject(o,newline)}else{if(typeof o==="function"){return"null"}}}}}}}}}return"undefined"},m={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\","\v":"\\u000b"},charToReplace=/[\\\"\x00-\x1f\x7f-\uffff]/g,encodeString=function(s){return'"'+s.replace(charToReplace,function(a){var c=m[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"'},encodeMSDate=function(o){return'"'+o+'"'},encodeArrayPretty=function(o,newline){var len=o.length,cnewline=newline+" ",sep=","+cnewline,a=["[",cnewline],i;for(i=0;i]+>/gi,stripScriptsRe:/(?:)((\n|\r|.)*?)(?:<\/script>)/ig,nl2brRe:/\r?\n/g,hashRe:/#+$/,allHashes:/^#+$/,formatPattern:/[\d,\.#]+/,formatCleanRe:/[^\d\.#]/g,I18NFormatCleanRe:null,formatFns:{},constructor:function(){b=this},undef:function(a){return a!==undefined?a:""},defaultValue:function(d,a){return d!==undefined&&d!==""?d:a},substr:"ab".substr(-1)!="b"?function(h,f,a){var g=String(h);return(f<0)?g.substr(Math.max(g.length+f,0),a):g.substr(f,a)}:function(f,e,a){return String(f).substr(e,a)},lowercase:function(a){return String(a).toLowerCase()},uppercase:function(a){return String(a).toUpperCase()},usMoney:function(a){return b.currency(a,"$",2)},currency:function(n,l,o,a){var j="",k=",0",m=0;n=n-0;if(n<0){n=-n;j="-"}o=Ext.isDefined(o)?o:b.currencyPrecision;k+=(o>0?".":"");for(;mf){a=a.substring(a.length-f)}}while(a.length2){}else{if(u.length===2){x=u[1].length;q=u[1].match(b.hashRe);if(q){w=q[0].length;A='trailingZeroes=new RegExp(Ext.String.escapeRegex(utilFormat.decimalSeparator) + "*0{0,'+w+'}$")'}}}C=["var utilFormat=Ext.util.Format,extNumber=Ext.Number,neg,absVal,fnum,parts"+(B?",thousandSeparator,thousands=[],j,n,i":"")+(t?',formatString="'+y+'",formatPattern=/[\\d,\\.#]+/':"")+',trailingZeroes;return function(v){if(typeof v!=="number"&&isNaN(v=extNumber.from(v,NaN)))return"";neg=v<0;',"absVal=Math.abs(v);","fnum=Ext.Number.toFixed(absVal, "+x+");",A,";"];if(B){if(x){C[C.length]='parts=fnum.split(".");';C[C.length]="fnum=parts[0];"}C[C.length]="if(absVal>=1000) {";C[C.length]="thousandSeparator=utilFormat.thousandSeparator;thousands.length=0;j=fnum.length;n=fnum.length%3||3;for(i=0;i")},capitalize:Ext.String.capitalize,uncapitalize:Ext.String.uncapitalize,ellipsis:Ext.String.ellipsis,escape:Ext.String.escape,escapeRegex:Ext.String.escapeRegex,htmlDecode:Ext.String.htmlDecode,htmlEncode:Ext.String.htmlEncode,leftPad:Ext.String.leftPad,toggle:Ext.String.toggle,trim:Ext.String.trim,parseBox:function(f){f=f||0;if(typeof f==="number"){return{top:f,right:f,bottom:f,left:f}}var e=f.split(" "),a=e.length;if(a===1){e[1]=e[2]=e[3]=e[0]}else{if(a===2){e[2]=e[0];e[3]=e[1]}else{if(a===3){e[3]=e[1]}}}return{top:parseInt(e[0],10)||0,right:parseInt(e[1],10)||0,bottom:parseInt(e[2],10)||0,left:parseInt(e[3],10)||0}}}},1,0,0,0,0,0,[Ext.util,"Format"],0));(Ext.cmd.derive("Ext.Template",Ext.Base,{inheritableStatics:{from:function(c,d){c=Ext.getDom(c);return new this(c.value||c.innerHTML,d||"")}},useEval:Ext.isGecko,constructor:function(n){var l=this,h=arguments,j=[],o,m=h.length,k;l.initialConfig={};if(m===1&&Ext.isArray(n)){h=n;m=h.length}if(m>1){for(o=0;o','
{parent.baseCls}-{parent.ui}-{.}-tl{frameElCls}" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-tr{frameElCls}" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-tc{frameElCls}" role="presentation">
','
','
',"",'
{parent.baseCls}-{parent.ui}-{.}-ml{frameElCls}" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-mr{frameElCls}" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-mc{frameElCls}" role="presentation">',"{%this.applyRenderTpl(out, values)%}","
",'
','
','','
{parent.baseCls}-{parent.ui}-{.}-bl{frameElCls}" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-br{frameElCls}" role="presentation">','
{parent.baseCls}-{parent.ui}-{.}-bc{frameElCls}" role="presentation">
','
','
',"
","{%this.renderDockedItems(out,values,1);%}"],frameTableTpl:["{%this.renderDockedItems(out,values,0);%}",'','','','','','',"","",'','','",'',"",'','','','','',"","","","{%this.renderDockedItems(out,values,1);%}"],_renderState:0,statics:{makeRenderSetter:function(e,f){var d=e.name;return function(c){var h=this,a=(h.renderConfigs||(h.renderConfigs={})),b=a[f];if(h._renderState>=f){(e.setter||e.getSetter()).call(h,c)}else{if(!b){a[f]=b={}}if(!(d in b)){b[d]=h[d]}h[d]=c}return h}},processRenderConfig:function(y,o,w){var s=this.prototype,u=this.getConfigurator(),n=Ext.util.Renderable,p=n.makeRenderSetter,v=y[o],r,q,x,t;for(x in v){q=Ext.Config.get(x);if(!s[t=q.names.set]){r=(q.renderSetter||(q.renderSetter={}));s[t]=r[w]||(r[w]=p(q,w))}}delete y[o];u.add(v)}},onClassMixedIn:function(k){var g=k.override,h=this.processRenderConfig,j=function(a){if(a.beforeRenderConfig){this.processRenderConfig(a,"beforeRenderConfig",1)}if(a.renderConfig){this.processRenderConfig(a,"renderConfig",3)}g.call(this,a)},f=function(a,b){a.override=j;a.processRenderConfig=h;if(b.beforeRenderConfig){a.processRenderConfig(b,"beforeRenderConfig",1)}if(b.renderConfig){a.processRenderConfig(b,"renderConfig",3)}};f(k,k.prototype);k.onExtended(f)},afterRender:function(){var q=this,o={},l=q.protoEl,m=q.el,j,n,p,k;q.finishRenderChildren();q._renderState=4;if(q.contentEl){n=Ext.baseCSSPrefix;p=n+"hidden-";k=Ext.get(q.contentEl);k.component=q;k.removeCls([n+"hidden",p+"display",p+"offsets"]);q.getContentTarget().appendChild(k.dom)}l.writeTo(o);j=o.removed;if(j){m.removeCls(j)}j=o.cls;if(j.length){m.addCls(j)}j=o.style;if(o.style){m.setStyle(j)}q.protoEl=null;if(!q.ownerCt){q.updateLayout()}if(!(q.x&&q.y)&&(q.pageX||q.pageY)){q.setPagePosition(q.pageX,q.pageY)}if(q.disableOnRender){q.onDisable()}else{if(q.enableOnRender){q.onEnable()}}if(Ext.enableAria){q.ariaApplyAfterRenderAttributes()}},afterFirstLayout:function(u,n){var s=this,o=s.x,q=s.y,t,v,p,m,r=s.defaultAlign,w=s.alignOffset;if(!s.ownerLayout){t=o!==undefined;v=q!==undefined}if(s.floating&&(!t||!v)){if(s.floatParent){p=s.floatParent.getTargetEl().getViewRegion();m=s.el.getAlignToXY(s.alignTarget||s.floatParent.getTargetEl(),r,w);p.x=m[0]-p.x;p.y=m[1]-p.y}else{m=s.el.getAlignToXY(s.alignTarget||s.container,r,w);p=s.container.translateXY(m[0],m[1])}o=t?o:p.x;q=v?q:p.y;t=v=true}if(t||v){s.setPosition(o,q)}s.onBoxReady(u,n)},beforeRender:function(){var h=this,g=h.floating,e=h.getComponentLayout(),f;h._renderState=1;h.initBindable();if(h.renderConfigs){h.flushRenderConfigs()}if(h.reference){h.publishState()}if(g){h.addCls(Ext.baseCSSPrefix+"layer");f=g.cls;if(f){h.addCls(f)}}h.frame=h.frame||h.alwaysFramed;if(!e.initialized){e.initLayout()}h.initOverflow();h.setUI(h.ui);if(h.disabled){h.disable(true)}},doApplyRenderTpl:function(h,f){var g=f.$comp,e;if(!g.rendered){e=g.initRenderTpl();e.applyOut(f.renderData,h)}},getElConfig:function(){var l=this,j=l.autoEl,m=l.getFrameInfo(),h={tag:"div",tpl:m?l.initFramingTpl(m.table):l.initRenderTpl()},k=l.protoEl,g;l.initStyles(k);k.writeTo(h);k.flush();if(Ext.isString(j)){h.tag=j}else{Ext.apply(h,j)}if(Ext.enableAria&&l.ariaRenderAttributesToElement){Ext.apply(h,l.ariaGetRenderAttributes())}h.id=l.id;if(h.tpl){if(m){h.tplData=g=l.getFrameRenderData();g.renderData=l.initRenderData()}else{h.tplData=l.initRenderData()}}return h},getInsertPosition:function(b){if(b!==undefined){if(Ext.isNumber(b)){b=this.container.dom.childNodes[b]}else{b=Ext.getDom(b)}}return b},getRenderTree:function(){var c=this,d=null;if(!c.hasListeners.beforerender||c.fireEvent("beforerender",c)!==false){c._renderState=1;c.beforeRender();c.rendering=true;c._renderState=2;d=c.getElConfig();if(c.el){d.id=c.$pid=Ext.id(null,c.el.identifiablePrefix)}}return d},initRenderData:function(){var b=this;return Ext.apply({$comp:b,id:b.id,ui:b.ui,uiCls:b.uiCls,baseCls:b.baseCls,componentCls:b.componentCls,frame:b.frame,renderScroller:b.touchScroll,scrollerCls:b.scrollerCls,role:b.ariaRole,childElCls:""},b.renderData)},onRender:function(p,o){var n=this,l=n.x,m=n.y,q=null,r=n.el,s,k;n.applyRenderSelectors();n.rendering=null;n.rendered=true;n._renderState=3;if(n.renderConfigs){n.flushRenderConfigs()}if(l!=null){q={x:l}}if(m!=null){(q=q||{}).y=m}if(!n.getFrameInfo()){s=n.width;k=n.height;if(typeof s==="number"){q=q||{};q.width=s}if(typeof k==="number"){q=q||{};q.height=k}}if(n.touchScroll===1){n.getOverflowEl().disableTouchScroll()}n.lastBox=r.lastBox=q},render:function(q,j){var o=this,p=o.el,l=o.ownerLayout,m,k,n;if(p&&!p.isElement){o.el=p=o.wrapPrimaryEl(p)}Ext.suspendLayouts();q=o.initContainer(q);n=o.getInsertPosition(j);if(!p){k=o.getRenderTree();if(l&&l.transformItemRenderTree){k=l.transformItemRenderTree(k)}if(k){if(n){p=Ext.DomHelper.insertBefore(n,k)}else{p=Ext.DomHelper.append(q,k)}o.wrapPrimaryEl(p);o.cacheRefEls(p)}}else{if(!o.hasListeners.beforerender||o.fireEvent("beforerender",o)!==false){o.beforeRender();o.needsRenderTpl=o.rendering=true;o._renderState=2;o.initStyles(p);if(o.allowDomMove!==false){if(n){q.dom.insertBefore(p.dom,n)}else{q.dom.appendChild(p.dom)}}}else{m=true}}if(p&&!m){o.finishRender(j)}Ext.resumeLayouts(!o.hidden&&!q.isDetachedBody)},ensureAttachedToBody:function(f){var d=this,e;while(d.ownerCt){d=d.ownerCt}if(d.container.isDetachedBody){d.container=e=Ext.getBody();e.appendChild(d.el.dom);if(f){d.updateLayout()}if(typeof d.x=="number"||typeof d.y=="number"){d.setPosition(d.x,d.y)}}},privates:{applyRenderSelectors:function(){var j=this,f=j.renderSelectors,k=j.el,h,g;j.attachChildEls(k);if(f){for(g in f){h=f[g];if(h){j[g]=k.selectNode(h,false)}}}},cacheRefEls:function(o){o=o||this.el;var q=Ext.cache,m=Ext.dom.Element,l=o.isElement?o.dom:o,j=l.querySelectorAll("[data-ref]"),k=j.length,n,p;for(p=0;p','
',"","{%this.renderContent(out,values)%}",'
'],resizeHandles:"all",shrinkWrap:2,toFrontOnShow:true,synthetic:false,tplWriteMode:"overwrite",ui:"default",uiCls:[],weight:null,allowDomMove:true,autoGenId:false,borderBoxCls:Ext.baseCSSPrefix+"border-box",componentLayoutCounter:0,contentPaddingProperty:"padding",deferLayouts:false,frameSize:null,horizontalPosProp:"left",isComponent:true,_isLayoutRoot:false,layoutSuspendCount:0,liquidLayout:false,maskOnDisable:true,offsetsCls:Ext.baseCSSPrefix+"hidden-offsets",rendered:false,rootCls:Ext.baseCSSPrefix+"body",scrollerCls:Ext.baseCSSPrefix+"touch-scroller",scrollerSelector:"."+Ext.baseCSSPrefix+"touch-scroller",validIdRe:Ext.validIdRe,constructor:function(l){var j=this,k,h,m,g;l=l||{};if(l.initialConfig){if(l.isAction){j.baseAction=l}l=l.initialConfig}else{if(l.tagName||l.dom||Ext.isString(l)){l={applyTo:l,id:l.id||l}}}j.initialConfig=l;j.getId();j.protoEl=new Ext.util.ProtoElement();j.initConfig(l);m=j.xhooks;if(m){delete j.xhooks;Ext.override(j,m)}j.mixins.elementCt.constructor.call(j);j.setupProtoEl();if(j.cls){j.initialCls=j.cls;j.protoEl.addCls(j.cls)}if(j.style){j.initialStyle=j.style;j.protoEl.setStyle(j.style)}j.renderData=j.renderData||{};j.initComponent();if(!j.preventRegister){Ext.ComponentManager.register(j)}j.mixins.state.constructor.call(j);j.addStateEvents("resize");g=j.getController();if(g){g.init(j)}if(j.plugins){for(k=0,h=j.plugins.length;kG){w=C;z=true}if(F&&K>x){A=K;z=true}if(B||F){D=h.el.getStyle("overflow");if(D!=="hidden"){h.el.setStyle("overflow","hidden")}}if(z){J=!Ext.isNumber(h.width);u=!Ext.isNumber(h.height);h.setSize(A,w);h.el.setSize(x,G);if(J){delete h.width}if(u){delete h.height}}if(F){H.width=K}if(B){H.height=C}}E=h.constrain;y=h.constrainHeader;if(E||y){h.constrain=h.constrainHeader=false;v=I.callback;I.callback=function(){h.constrain=E;h.constrainHeader=y;if(v){v.call(I.scope||h,arguments)}if(D!=="hidden"){h.el.setStyle("overflow",D)}}}return h.mixins.animate.animate.apply(h,arguments)},beforeComponentLayout:function(){return true},beforeDestroy:Ext.emptyFn,beforeLayout:function(){if(this.floating){this.onBeforeFloatLayout()}},beforeSetPosition:function(k,m,r){var n=this,l=null,p,q,s,o;if(k){if(Ext.isNumber(p=k[0])){r=m;m=k[1];k=p}else{if((p=k.x)!==undefined){r=m;m=k.y;k=p}}}if(n.constrain||n.constrainHeader){l=n.calculateConstrainedPosition(null,[k,m],true);if(l){k=l[0];m=l[1]}}q=(k!==undefined);s=(m!==undefined);if(q||s){n.x=k;n.y=m;o=n.adjustPosition(k,m);l={x:o.x,y:o.y,anim:r,hasX:q,hasY:s}}return l},beforeShow:Ext.emptyFn,bubble:function(h,e,f){var g=this;while(g){if(h.apply(e||g,f||[g])===false){break}g=g.getBubbleTarget()}return this},cloneConfig:function(h){h=h||{};var g=h.id||Ext.id(),f=Ext.applyIf(h,this.initialConfig),e;f.id=g;e=Ext.getClass(this);return new e(f)},destroy:function(){var l=this,o=l.renderSelectors,h=l.getConfig("viewModel",true),k=l.getConfig("session",true),j,m,n;if(!l.isDestroyed){if(!l.hasListeners.beforedestroy||l.fireEvent("beforedestroy",l)!==false){l.destroying=true;m=l.floatParent||l.ownerCt;if(l.floating){delete l.floatParent;if(l.zIndexManager){l.zIndexManager.unregister(l);l.zIndexManager=null}}l.removeBindings();l.beforeDestroy();if(h&&h.isViewModel){h.destroy();l.viewModel=null}if(k&&k.isSession){if(k.getAutoDestroy()){k.destroy()}l.session=null}if(m&&m.remove){m.remove(l,false)}l.stopAnimation();l.onDestroy();Ext.destroy(l.plugins);l.componentLayout=null;if(l.hasListeners.destroy){l.fireEvent("destroy",l)}if(!l.preventRegister){Ext.ComponentManager.unregister(l)}l.mixins.state.destroy.call(l);l.clearListeners();if(l.rendered){if(!l.preserveElOnDestroy){l.el.destroy()}l.mixins.elementCt.destroy.call(l);if(o){for(j in o){if(o.hasOwnProperty(j)){n=l[j];if(n){delete l[j];n.destroy()}}}}l.data=l.el=l.frameBody=l.rendered=null}l.destroying=false;l.isDestroyed=true}}},disable:function(d){var f=this,e=f.focusableContainer;f.enableOnRender=false;f.addCls(f.disabledCls);if(f.rendered){f.onDisable()}else{f.disableOnRender=true}f.disabled=true;if(d!==true){delete f.resetDisable;f.fireEvent("disable",f)}if(e){e.onFocusableChildDisable(f)}return f},enable:function(d){var f=this,e=f.focusableContainer;f.disableOnRender=false;f.removeCls(f.disabledCls);if(f.rendered){f.onEnable()}else{f.enableOnRender=true}f.disabled=false;delete f.resetDisable;if(d!==true){f.fireEvent("enable",f)}if(e){e.onFocusableChildEnable(f)}return f},findParentBy:function(d){var c;for(c=this.getRefOwner();c&&!d(c,this);c=c.getRefOwner()){}return c||null},findParentByType:function(b){return Ext.isFunction(b)?this.findParentBy(function(a){return a.constructor===b}):this.up(b)},findPlugin:function(g){var e,f=this.plugins,h=f&&f.length;for(e=0;e-1;o--){q=n[o];if(q.query){k=q.query(j);k=k[k.length-1];if(k){return k}}if(q.is(j)){return q}}return m.previousNode(j,true)}return null},previousSibling:function(c){var j=this.ownerCt,k,g,h;if(j){k=j.items;g=k.indexOf(this);if(g!=-1){if(c){for(--g;g>=0;g--){if((h=k.getAt(g)).is(c)){return h}}}else{if(g){return k.getAt(--g)}}}}return null},registerFloatingItem:function(c){var d=this;if(!d.floatingDescendants){d.floatingDescendants=new Ext.ZIndexManager(d)}d.floatingDescendants.register(c)},removeCls:function(e){var f=this,d=f.rendered?f.el:f.protoEl;d.removeCls.apply(d,arguments);return f},removeClsWithUI:function(t,n){var o=this,p=[],r=0,w=Ext.Array,q=w.remove,s=o.uiCls=w.clone(o.uiCls),u=o.activeUI,v,m;if(typeof t==="string"){t=(t.indexOf(" ")<0)?[t]:Ext.String.splitWords(t)}v=t.length;for(r=0;r1){j.overflowY=g||""}}if(j.rendered){j.getOverflowEl().setStyle(j.getOverflowStyle())}(k||j).updateLayout();return j},setPagePosition:function(h,j,g){var m=this,l,k;if(Ext.isArray(h)){j=h[1];h=h[0]}m.pageX=h;m.pageY=j;if(m.floating){if(m.isContainedFloater()){k=m.floatParent.getTargetEl().getViewRegion();if(Ext.isNumber(h)&&Ext.isNumber(k.left)){h-=k.left}if(Ext.isNumber(j)&&Ext.isNumber(k.top)){j-=k.top}}else{l=m.el.translateXY(h,j);h=l.x;j=l.y}m.setPosition(h,j,g)}else{l=m.el.translateXY(h,j);m.setPosition(l.x,l.y,g)}return m},setPosition:function(g,h,f){var k=this,j=k.beforeSetPosition.apply(k,arguments);if(j&&k.rendered){g=j.x;h=j.y;if(f){if(g!==k.getLocalX()||h!==k.getLocalY()){k.stopAnimation();k.animate(Ext.apply({duration:1000,listeners:{afteranimate:Ext.Function.bind(k.afterSetPosition,k,[g,h])},to:{left:g,top:h}},f))}}else{k.setLocalXY(g,h);k.afterSetPosition(g,h)}}return k},setScrollX:function(e){var d=this,f=d.scrollManager;if(f){f.scrollTo(e,f.getPosition().y)}else{d.setScrollLeft(e)}},setScrollY:function(f){var e=this,d=e.scrollManager;if(d){d.scrollTo(d.getPosition().x,f)}else{e.getOverflowEl().setScrollTop(f)}},setSize:function(d,e){var f=this;if(d&&typeof d=="object"){e=d.height;d=d.width}if(typeof d=="number"){f.width=Ext.Number.constrain(d,f.minWidth,f.maxWidth)}else{if(d===null){delete f.width}}if(typeof e=="number"){f.height=Ext.Number.constrain(e,f.minHeight,f.maxHeight)}else{if(e===null){delete f.height}}if(f.rendered&&f.isVisible()){if(f.liquidLayout){f.el.setSize(f.width,f.height)}f.updateLayout(f._notAsLayoutRoot)}return f},setStyle:function(g,h){var e=this,f=e.el||e.protoEl;f.setStyle(g,h);return e},setUI:function(k){var f=this,h=f.uiCls,j=f.activeUI,g;if(k===j){return}if(j){g=f.removeClsWithUI(h,true);if(g.length){f.removeCls(g)}f.removeUIFromElement()}else{f.uiCls=[]}f.ui=k;f.activeUI=k;f.addUIToElement();g=f.addClsWithUI(h,true);if(g.length){f.addCls(g)}if(f.rendered){f.updateLayout()}},setVisible:function(b){return this[b?"show":"hide"]()},setHidden:function(b){return this.setVisible(!b)},setWidth:function(b){return this.setSize(b)},show:function(j,g,f){var k=this,h=k.rendered;if(k.hierarchicallyHidden||(k.floating&&!h&&k.isHierarchicallyHidden())){if(!h){k.initHierarchyEvents()}if(arguments.length>1){arguments[0]=null;k.pendingShow=arguments}else{k.pendingShow=true}}else{if(h&&k.isVisible()){if(k.floating){k.onFloatShow()}}else{if(k.fireEvent("beforeshow",k)!==false){k.hidden=false;delete this.getInherited().hidden;Ext.suspendLayouts();if(!h&&(k.autoRender||k.floating)){k.doAutoRender();h=k.rendered}if(h){k.beforeShow();Ext.resumeLayouts();k.onShow.apply(k,arguments);k.afterShow.apply(k,arguments)}else{Ext.resumeLayouts(true)}}else{k.onShowVeto()}}}return k},showAt:function(f,g,e){var h=this;if(!h.rendered&&(h.autoRender||h.floating)){h.x=f;h.y=g;return h.show()}if(h.floating){h.setPosition(f,g,e)}else{h.setPagePosition(f,g,e)}h.show()},showBy:function(e,g,h){var f=this;if(f.floating&&e){f.alignTarget=e;if(g){f.defaultAlign=g}if(h){f.alignOffset=h}f.show();if(!f.hidden){f.alignTo(e,g||f.defaultAlign,h||f.alignOffset)}}return f},suspendLayouts:function(){var b=this;if(!b.rendered){return}if(++b.layoutSuspendCount===1){b.suspendLayout=true}},unitizeBox:function(b){return Ext.Element.unitizeBox(b)},unmask:function(){(this.getMaskTarget()||this.el).unmask();this.setMasked(false)},unregisterFloatingItem:function(c){var d=this;if(d.floatingDescendants){d.floatingDescendants.unregister(c)}},up:function(n,m){var o=this.getRefOwner(),h=typeof m==="string",k=typeof m==="number",j=m&&m.isComponent,l=0;if(n){for(;o;o=o.getRefOwner()){l++;if(n.isComponent){if(o===n){return o}}else{if(Ext.ComponentQuery.is(o,n)){return o}}if(h&&o.is(m)){return}if(k&&l===m){return}if(j&&o===m){return}}}return o},update:function(s,p,m){var n=this,l=(n.tpl&&!Ext.isString(s)),o=n.scrollManager,t=n.focusableContainer,q,u,r;if(l){n.data=(s&&s.isEntity)?s.getData(true):s}else{n.html=Ext.isObject(s)?Ext.DomHelper.markup(s):s}if(n.rendered){q=n.getSizeModel();u=q.width.shrinkWrap||q.height.shrinkWrap;if(n.isContainer){r=n.layout.getRenderTarget();u=u||n.items.items.length>0}else{r=n.touchScroll?n.getScrollerEl():n.getTargetEl()}if(l){n.tpl[n.tplWriteMode](r,n.data||{})}else{r.setHtml(n.html,p,m)}if(u){n.updateLayout()}if(o){o.refresh()}if(t){t.onFocusableChildUpdate(n)}}},setHtml:function(b){this.update(b)},applyData:function(b){this.update(b)},updateBox:function(b){this.setSize(b.width,b.height);this.setPagePosition(b.x,b.y);return this},_asLayoutRoot:{isRoot:true},_notAsLayoutRoot:{isRoot:false},updateLayout:function(k){var j=this,h,f=j.lastBox,g=k&&k.isRoot;if(f){f.invalid=true}if(!j.rendered||j.layoutSuspendCount||j.suspendLayout){return}if(j.hidden){Ext.Component.cancelLayout(j)}else{if(typeof g!="boolean"){g=j.isLayoutRoot()}}if(g||!j.ownerLayout||!j.ownerLayout.onContentChange(j)){if(!j.isLayoutSuspended()){h=(k&&k.hasOwnProperty("defer"))?k.defer:j.deferLayouts;Ext.Component.updateLayout(j,h)}}},updateMaxHeight:function(c,d){this.changeConstraint(c,d,"min","max-height","height")},updateMaxWidth:function(c,d){this.changeConstraint(c,d,"min","max-width","width")},updateMinHeight:function(c,d){this.changeConstraint(c,d,"max","min-height","height")},updateMinWidth:function(d,c){this.changeConstraint(d,c,"max","min-width","width")},getAnchorToXY:function(g,f,h,e){return g.getAnchorXY(f,h,e)},getBorderPadding:function(){return this.el.getBorderPadding()},getLocalX:function(){return this.el.getLocalX()},getLocalXY:function(){return this.el.getLocalXY()},getLocalY:function(){return this.el.getLocalY()},getX:function(){return this.el.getX()},getXY:function(){return this.el.getXY()},getY:function(){return this.el.getY()},setLocalX:function(b){this.el.setLocalX(b)},setLocalXY:function(d,c){this.el.setLocalXY(d,c)},setLocalY:function(b){this.el.setLocalY(b)},setX:function(d,c){this.el.setX(d,c)},setXY:function(c,d){this.el.setXY(c,d)},setY:function(c,d){this.el.setY(c,d)},privates:{statics:{findComponentByElement:function(h){var f=document.body,g=h,e;while(g&&g.nodeType===1&&g!==f){e=Ext.getCmp(g.id);if(e){return e}g=g.parentNode}return null},getComponentByElement:function(e){var f=Ext.Component.componentIdAttribute,d;e=Ext.fly(e);if(!e){return null}d=e.getAttribute(f);if(d){return Ext.getCmp(d)}else{return Ext.Component.findComponentByElement(e.dom)}},getActiveComponent:function(){var b=Ext.dom.Element.getActiveElement();return Ext.Component.getComponentByElement(b)}},addOverCls:function(){var b=this;if(!b.disabled){b.el.addCls(b.overCls)}},addUIToElement:function(){var l=this,h=l.baseCls+"-"+l.ui,m,j,g,k;l.addCls(h);if(l.rendered&&l.frame&&!Ext.supports.CSS3BorderRadius){h+="-";m=l.getChildEls();for(j in m){k=m[j].frame;if(k&&k!==true){g=l[j];if(g){g.addCls(h+k)}}}}},changeConstraint:function(k,o,j,m,h){var l=this,n=l[h];if(k!=null&&typeof n==="number"){l[h]=Math[j](n,k)}if(l.liquidLayout){if(k!=null){l.setStyle(m,k+"px")}else{if(o){l.setStyle(m,"")}}}if(l.rendered){l.updateLayout()}},constructPlugin:function(c){var d=this;if(typeof c==="string"){c=Ext.PluginManager.create({},c,d)}else{c=Ext.PluginManager.create(c,null,d)}return c},constructPlugins:function(){var h=this,k=h.plugins,f,j,g;if(k){f=[];f.processed=true;if(!Ext.isArray(k)){k=[k]}for(j=0,g=k.length;j=0){p=o[r].splitterDelta;if(t.getAt(u+p)!==A){t.remove(A);u=t.indexOf(s);if(p>0){++u}t.insert(u,A)}}}if(q){if(w){s.expand(false)}z.remove(q);s.placeholder=null;if(w){s.collapse(null,false)}}z.updateLayout();Ext.resumeLayouts(true);s.fireEventArgs("changeregion",[s,x])}else{s.region=r}}return x},setWeight:function(j){var k=this,f=k.getOwningBorderContainer(),h=k.placeholder,g=k.weight;if(j!==g){if(k.fireEventArgs("beforechangeweight",[k,j])!==false){k.weight=j;if(h){h.weight=j}if(f){f.updateLayout()}k.fireEventArgs("changeweight",[k,g])}}return g}},function(d){var c=d.prototype;c.setBorderRegion=c.setRegion;c.setRegionWeight=c.setWeight});Ext.define("Ext.overrides.Widget",{override:"Ext.Widget",$configStrict:false,isComponent:true,liquidLayout:true,rendered:true,rendering:true,cachedConfig:{baseCls:Ext.baseCSSPrefix+"widget"},constructor:function(b){(arguments.callee.$previous||Ext.Evented.prototype.constructor).call(this,b);this.getComponentLayout()},addCls:function(b){this.el.addCls(b)},addClsWithUI:function(b){this.el.addCls(b)},afterComponentLayout:Ext.emptyFn,finishRender:function(){this.rendering=false;this.initBindable()},getComponentLayout:function(){var c=this,d=c.componentLayout;if(!d){d=c.componentLayout=new Ext.layout.component.Auto();d.setOwner(c)}return d},getTdCls:function(){return Ext.baseCSSPrefix+this.getTdType()+"-"+(this.ui||"default")+"-cell"},getTdType:function(){return this.xtype},getItemId:function(){return this.itemId||this.id},getSizeModel:function(){return Ext.Component.prototype.getSizeModel.apply(this,arguments)},onAdded:function(f,h,g){var j=this,k=j.inheritedState;j.ownerCt=f;if(k&&g){j.invalidateInheritedState()}if(j.reference){j.fixReference()}},onRemoved:function(d){var e=this,f;if(e.reference){f=e.lookupReferenceHolder();if(f){f.clearReference(e)}}if(!d){e.removeBindings()}if(e.inheritedState&&!d){e.invalidateInheritedState()}e.ownerCt=e.ownerLayout=null},parseBox:function(b){return Ext.Element.parseBox(b)},render:function(e,f){var h=this.element,g;if(f){nextSibiling=e.childNodes[f];if(g){e.insertBefore(h,g);return}}e.appendChild(h)},setPosition:function(d,c){this.el.setLocalXY(d,c)}},function(){var b;if(Ext.isIE8){b=Ext.Widget.prototype;b.addElementReferenceOnDemand=b.addElementReference}this.borrow(Ext.Component,["up"])});(Ext.cmd.derive("Ext.event.gesture.Recognizer",Ext.Base,{handledEvents:[],config:{onRecognized:Ext.emptyFn,callbackScope:null},constructor:function(b){this.initConfig(b);return this},getHandledEvents:function(){return this.handledEvents},onStart:Ext.emptyFn,onEnd:Ext.emptyFn,onTouchStart:Ext.emptyFn,onTouchMove:Ext.emptyFn,onTouchEnd:Ext.emptyFn,onTouchCancel:Ext.emptyFn,fail:function(){return false},fire:function(){this.getOnRecognized().apply(this.getCallbackScope(),arguments)},debugHooks:{$enabled:false,fail:function(b){Ext.log.info(this.$className+" Gesture Failed: "+b);return false}}},1,0,0,0,0,[[Ext.mixin.Identifiable.prototype.mixinId||Ext.mixin.Identifiable.$className,Ext.mixin.Identifiable]],[Ext.event.gesture,"Recognizer"],0));(Ext.cmd.derive("Ext.event.gesture.SingleTouch",Ext.event.gesture.Recognizer,{inheritableStatics:{NOT_SINGLE_TOUCH:"Not Single Touch",TOUCH_MOVED:"Touch Moved",EVENT_CANCELED:"Event Canceled"},onTouchStart:function(b){if(b.touches.length>1){return this.fail(this.self.NOT_SINGLE_TOUCH)}},onTouchCancel:function(){return false}},0,0,0,0,0,0,[Ext.event.gesture,"SingleTouch"],0));(Ext.cmd.derive("Ext.event.gesture.DoubleTap",Ext.event.gesture.SingleTouch,{inheritableStatics:{DIFFERENT_TARGET:"Different Target"},config:{moveDistance:8,tapDistance:24,maxDuration:300},handledEvents:["singletap","doubletap"],singleTapTimer:null,startTime:0,lastTapTime:0,onTouchStart:function(f){var d=this,e;if(Ext.event.gesture.SingleTouch.prototype.onTouchStart.apply(this,arguments)===false){return false}e=d.lastStartPoint=f.changedTouches[0].point;d.startPoint=d.startPoint||e;d.startTime=f.time;clearTimeout(d.singleTapTimer)},onTouchMove:function(f){var d=this,e=f.changedTouches[0].point;if(Math.abs(e.getDistanceTo(d.lastStartPoint))>=d.getMoveDistance()){d.startPoint=null;return d.fail(d.self.TOUCH_MOVED)}},onTouchEnd:function(o){var m=this,p=m.getMaxDuration(),s=o.time,n=o.target,l=m.lastTapTime,r=m.lastTarget,e=o.changedTouches[0].point,q;m.lastTapTime=s;m.lastTarget=n;if(l){q=s-l;if(q<=p&&Math.abs(e.getDistanceTo(m.startPoint))<=m.getTapDistance()){if(n!==r){return m.fail(m.self.DIFFERENT_TARGET)}m.lastTarget=null;m.lastTapTime=0;m.fire("doubletap",o,{touch:o.changedTouches[0],duration:q});m.startPoint=null;return}}if(s-m.startTime>p){m.fireSingleTap(o)}else{m.setSingleTapTimer(o)}},setSingleTapTimer:function(c){var d=this;d.singleTapTimer=Ext.defer(function(){d.fireSingleTap(c)},d.getMaxDuration())},fireSingleTap:function(d,c){this.fire("singletap",d,{touch:c});this.startPoint=null}},0,0,0,0,0,0,[Ext.event.gesture,"DoubleTap"],0));Ext.define("ExtThemeNeptune.Component",{override:"Ext.Component",initComponent:function(){arguments.callee.$previous.call(this);if(this.dock&&this.border===undefined){this.border=false}},privates:{initStyles:function(){var f=this,d=f.hasOwnProperty("border"),e=f.border;if(f.dock){f.border=null}arguments.callee.$previous.apply(this,arguments);if(d){f.border=e}else{delete f.border}}}});(Ext.cmd.derive("Ext.event.gesture.Drag",Ext.event.gesture.SingleTouch,{isStarted:false,startPoint:null,previousPoint:null,lastPoint:null,handledEvents:["dragstart","drag","dragend","dragcancel"],config:{minDistance:8},constructor:function(){Ext.event.gesture.SingleTouch.prototype.constructor.apply(this,arguments);this.info={touch:null,previous:{x:0,y:0},x:0,y:0,delta:{x:0,y:0},absDelta:{x:0,y:0},flick:{velocity:{x:0,y:0}},direction:{x:0,y:0},time:0,previousTime:{x:0,y:0}}},onTouchStart:function(b){if(Ext.event.gesture.SingleTouch.prototype.onTouchStart.apply(this,arguments)===false){if(this.isStarted&&this.lastMoveEvent!==null){this.lastMoveEvent.isStopped=false;this.onTouchEnd(this.lastMoveEvent)}return false}this.startTime=b.time;this.startPoint=b.changedTouches[0].point},tryDragStart:function(l){var e=this.startPoint,j=l.changedTouches[0],h=j.point,k=this.getMinDistance(),m=this.info;if(Math.abs(h.getDistanceTo(e))>=k){this.isStarted=true;this.previousPoint=this.lastPoint=h;this.resetInfo("x",l,j);this.resetInfo("y",l,j);m.time=l.time;this.fire("dragstart",l,m)}},onTouchMove:function(d){if(!this.isStarted){this.tryDragStart(d)}if(!this.isStarted){return}var f=d.changedTouches[0],e=f.point;if(this.lastPoint){this.previousPoint=this.lastPoint}this.lastPoint=e;this.lastMoveEvent=d;this.updateInfo("x",d,f);this.updateInfo("y",d,f);this.info.time=d.time;this.fire("drag",d,this.info)},onAxisDragEnd:function(e,f){var d=f.time-f.previousTime[e];if(d>0){f.flick.velocity[e]=(f[e]-f.previous[e])/d}},resetInfo:function(q,n,l){var p=this.lastPoint[q],e=this.startPoint[q],m=p-e,k=q.toUpperCase(),o=this.info;o.touch=l;o.delta[q]=m;o.absDelta[q]=Math.abs(m);o.previousTime[q]=this.startTime;o.previous[q]=e;o[q]=p;o.direction[q]=0;o["start"+k]=this.startPoint[q];o["previous"+k]=o.previous[q];o["page"+k]=o[q];o["delta"+k]=o.delta[q];o["absDelta"+k]=o.absDelta[q];o["previousDelta"+k]=0;o.startTime=this.startTime},updateInfo:function(v,r,s){var q=this,o=q.lastPoint[v],u=q.previousPoint[v],y=q.startPoint[v],e=o-y,w=q.info,p=w.direction,t=v.toUpperCase(),x=w.previous[v];w.touch=s;w.delta[v]=e;w.absDelta[v]=Math.abs(e);if(o!==x&&o!==w[v]){w.previous[v]=w[v];w.previousTime[v]=w.time}w[v]=o;if(o>u){p[v]=1}else{if(othis.getMaxDuration()){return this.fail(this.self.MAX_DURATION_EXCEEDED)}if(this.isHorizontal&&y>this.getMaxOffset()){this.isHorizontal=false}if(this.isVertical&&x>this.getMaxOffset()){this.isVertical=false}if(!this.isVertical||!this.isHorizontal){if(this.isHorizontal&&xA){this.isVertical=false}if(this.isHorizontal&&D>A){this.isHorizontal=false}if(this.isVertical&&this.isHorizontal){if(D>C){this.isHorizontal=false}else{this.isVertical=false}}if(this.isHorizontal){t=(y<0)?"left":"right";E=y}else{if(this.isVertical){t=(z<0)?"up":"down";E=z}}this.direction=this.direction||t;if(this.direction=="up"){E=z*-1}else{if(this.direction=="left"){E=y*-1}}this.distance=E;if(E==0){return this.fail(this.self.DISTANCE_NOT_ENOUGH)}if(!this.started){if(this.direction=="right"&&this.startX>e){return this.fail(this.self.NOT_NEAR_EDGE)}else{if(this.direction=="down"&&this.startY>e){return this.fail(this.self.NOT_NEAR_EDGE)}else{if(this.direction=="left"&&(s-this.startX)>e){return this.fail(this.self.NOT_NEAR_EDGE)}else{if(this.direction=="up"&&(w-this.startY)>e){return this.fail(this.self.NOT_NEAR_EDGE)}}}}this.started=true;this.startTime=v.time;this.fire("edgeswipestart",v,{touch:x,direction:this.direction,distance:this.distance,duration:B})}else{this.fire("edgeswipe",v,{touch:x,direction:this.direction,distance:this.distance,duration:B})}},onTouchEnd:function(c){var d;if(this.onTouchMove(c)!==false){d=c.time-this.startTime;this.fire("edgeswipeend",c,{touch:c.changedTouches[0],direction:this.direction,distance:this.distance,duration:d})}},onTouchCancel:function(b){this.fire("edgeswipecancel",b,{touch:b.changedTouches[0]});return false}},0,0,0,0,0,0,[Ext.event.gesture,"EdgeSwipe"],0));(Ext.cmd.derive("Ext.event.gesture.LongPress",Ext.event.gesture.SingleTouch,{inheritableStatics:{DURATION_NOT_ENOUGH:"Duration Not Enough"},config:{moveDistance:8,minDuration:1000},handledEvents:["longpress"],fireLongPress:function(b){this.fire("longpress",b,{touch:b.changedTouches[0],duration:this.getMinDuration()});this.isLongPress=true},onTouchStart:function(b){if(Ext.event.gesture.SingleTouch.prototype.onTouchStart.apply(this,arguments)===false){return false}this.startPoint=b.changedTouches[0].point;this.isLongPress=false;this.setLongPressTimer(b)},setLongPressTimer:function(c){var d=this;d.timer=Ext.defer(function(){d.fireLongPress(c)},d.getMinDuration())},onTouchMove:function(c){var d=c.changedTouches[0].point;if(Math.abs(d.getDistanceTo(this.startPoint))>=this.getMoveDistance()){return this.fail(this.self.TOUCH_MOVED)}},onTouchEnd:function(){if(!this.isLongPress){return this.fail(this.self.DURATION_NOT_ENOUGH)}},fail:function(){clearTimeout(this.timer);return Ext.event.gesture.SingleTouch.prototype.fail.apply(this,arguments)}},0,0,0,0,0,0,[Ext.event.gesture,"LongPress"],function(){this.override({handledEvents:["longpress","taphold"],fire:function(d){if(d==="longpress"){var c=Array.prototype.slice.call(arguments);c[0]="taphold";this.fire.apply(this,c)}return this.callOverridden(arguments)}})}));(Ext.cmd.derive("Ext.event.gesture.MultiTouch",Ext.event.gesture.Recognizer,{requiredTouchesCount:2,isTracking:false,isStarted:false,onTouchStart:function(g){var f=this.requiredTouchesCount,h=g.touches,e=h.length;if(e===f){this.start(g)}else{if(e>f){this.end(g)}}},onTouchEnd:function(b){this.end(b)},onTouchCancel:function(b){this.end(b,true);return false},start:function(){if(!this.isTracking){this.isTracking=true;this.isStarted=false}},end:function(c,d){if(this.isTracking){this.isTracking=false;if(this.isStarted){this.isStarted=false;this[d?"fireCancel":"fireEnd"](c)}}}},0,0,0,0,0,0,[Ext.event.gesture,"MultiTouch"],0));(Ext.cmd.derive("Ext.event.gesture.Pinch",Ext.event.gesture.MultiTouch,{handledEvents:["pinchstart","pinch","pinchend","pinchcancel"],startDistance:0,lastTouches:null,onTouchMove:function(k){if(!this.isTracking){return}var e=k.touches,j,g,h;j=e[0].point;g=e[1].point;h=j.getDistanceTo(g);if(h===0){return}if(!this.isStarted){this.isStarted=true;this.startDistance=h;this.fire("pinchstart",k,{touches:e,distance:h,scale:1})}else{this.fire("pinch",k,{touches:e,distance:h,scale:h/this.startDistance})}},fireEnd:function(b){this.fire("pinchend",b)},fireCancel:function(b){this.fire("pinchcancel",b)},fail:function(){return Ext.event.gesture.MultiTouch.prototype.fail.apply(this,arguments)}},0,0,0,0,0,0,[Ext.event.gesture,"Pinch"],0));(Ext.cmd.derive("Ext.event.gesture.Rotate",Ext.event.gesture.MultiTouch,{handledEvents:["rotatestart","rotate","rotateend","rotatecancel"],startAngle:0,lastTouches:null,lastAngle:null,onTouchMove:function(m){if(!this.isTracking){return}var n=m.touches,r=this.lastAngle,p,o,q,s,l,e;p=n[0].point;o=n[1].point;q=p.getAngleTo(o);if(r!==null){e=Math.abs(r-q);s=q+360;l=q-360;if(Math.abs(s-r)=this.getMoveDistance()){this.fire("tapcancel",d,{touch:f});return this.fail(this.self.TOUCH_MOVED)}},onTouchEnd:function(b){this.fire("tap",b,{touch:b.changedTouches[0]})},onTouchCancel:function(b){this.fire("tapcancel",b,{touch:b.changedTouches[0]});return false}},0,0,0,0,0,0,[Ext.event.gesture,"Tap"],0));(Ext.cmd.derive("Ext.event.publisher.Publisher",Ext.Base,{targetType:"",idSelectorRegex:/^#([\w\-]+)$/i,constructor:function(){var f=this.handledEvents||[],g,k,h,j;g=this.handledEventsMap={};for(k=0,h=f.length;k=d.x&&c.right<=d.right&&c.y>=d.y&&c.bottom<=d.bottom)},intersect:function(h){var j=this,l=Math.max(j.y,h.y),k=Math.min(j.right,h.right),b=Math.min(j.bottom,h.bottom),m=Math.max(j.x,h.x);if(b>l&&k>m){return new this.self(l,k,b,m)}else{return false}},union:function(h){var j=this,l=Math.min(j.y,h.y),k=Math.max(j.right,h.right),b=Math.max(j.bottom,h.bottom),m=Math.min(j.x,h.x);return new this.self(l,k,b,m)},constrainTo:function(d){var e=this,f=Ext.Number.constrain;e.top=e.y=f(e.top,d.y,d.bottom);e.bottom=f(e.bottom,d.y,d.bottom);e.left=e.x=f(e.left,d.x,d.right);e.right=f(e.right,d.x,d.right);return e},adjust:function(j,g,b,k){var h=this;h.top=h.y+=j;h.left=h.x+=k;h.right+=g;h.bottom+=b;return h},getOutOfBoundOffset:function(e,d){if(!Ext.isObject(e)){if(e=="x"){return this.getOutOfBoundOffsetX(d)}else{return this.getOutOfBoundOffsetY(d)}}else{d=e;var f=new Ext.util.Offset();f.x=this.getOutOfBoundOffsetX(d.x);f.y=this.getOutOfBoundOffsetY(d.y);return f}},getOutOfBoundOffsetX:function(b){if(b<=this.x){return this.x-b}else{if(b>=this.right){return this.right-b}}return 0},getOutOfBoundOffsetY:function(b){if(b<=this.y){return this.y-b}else{if(b>=this.bottom){return this.bottom-b}}return 0},isOutOfBound:function(d,c){if(!Ext.isObject(d)){if(d=="x"){return this.isOutOfBoundX(c)}else{return this.isOutOfBoundY(c)}}else{c=d;return(this.isOutOfBoundX(c.x)||this.isOutOfBoundY(c.y))}},isOutOfBoundX:function(b){return(bthis.right)},isOutOfBoundY:function(b){return(bthis.bottom)},restrict:function(e,g,f){if(Ext.isObject(e)){var h;f=g;g=e;if(g.copy){h=g.copy()}else{h={x:g.x,y:g.y}}h.x=this.restrictX(g.x,f);h.y=this.restrictY(g.y,f);return h}else{if(e=="x"){return this.restrictX(g,f)}else{return this.restrictY(g,f)}}},restrictX:function(c,d){if(!d){d=1}if(c<=this.x){c-=(c-this.x)*d}else{if(c>=this.right){c-=(c-this.right)*d}}return c},restrictY:function(c,d){if(!d){d=1}if(c<=this.y){c-=(c-this.y)*d}else{if(c>=this.bottom){c-=(c-this.bottom)*d}}return c},getSize:function(){return{width:this.right-this.x,height:this.bottom-this.y}},copy:function(){return new this.self(this.y,this.right,this.bottom,this.x)},copyFrom:function(c){var d=this;d.top=d.y=d[1]=c.y;d.right=c.right;d.bottom=c.bottom;d.left=d.x=d[0]=c.x;return this},toString:function(){return"Region["+this.top+","+this.right+","+this.bottom+","+this.left+"]"},translateBy:function(e,f){if(arguments.length==1){f=e.y;e=e.x}var d=this;d.top=d.y+=f;d.right+=e;d.bottom+=f;d.left=d.x+=e;return d},round:function(){var b=this;b.top=b.y=Math.round(b.y);b.right=Math.round(b.right);b.bottom=Math.round(b.bottom);b.left=b.x=Math.round(b.x);return b},equals:function(b){return(this.top===b.top&&this.right===b.right&&this.bottom===b.bottom&&this.left===b.left)}},3,0,0,0,0,0,[Ext.util,"Region"],0));(Ext.cmd.derive("Ext.util.Point",Ext.util.Region,{radianToDegreeConstant:180/Math.PI,origin:{x:0,y:0},statics:{fromEvent:function(d){var e=d.changedTouches,f=(e&&e.length>0)?e[0]:d;return this.fromTouch(f)},fromTouch:function(b){return new this(b.pageX,b.pageY)},from:function(b){if(!b){return new this(0,0)}if(!(b instanceof this)){return new this(b.x,b.y)}return b}},constructor:function(d,c){if(d==null){d=0}if(c==null){c=0}Ext.util.Region.prototype.constructor.call(this,c,d,c,d)},clone:function(){return new this.self(this.x,this.y)},copy:function(){return this.clone.apply(this,arguments)},copyFrom:function(b){this.x=b.x;this.y=b.y;return this},toString:function(){return"Point["+this.x+","+this.y+"]"},isCloseTo:function(m,g){if(typeof g=="number"){return this.getDistanceTo(m)<=g}var h=m.x,j=m.y,k=g.x,l=g.y;return(this.x<=h+k&&this.x>=h-k&&this.y<=j+l&&this.y>=j-l)},isWithin:function(){return this.isCloseTo.apply(this,arguments)},isContainedBy:function(b){if(!(b instanceof Ext.util.Region)){b=Ext.get(b.el||b).getRegion()}return b.contains(this)},roundedEquals:function(b){if(typeof b!="object"){b=this.origin}return(Math.round(this.x)===Math.round(b.x)&&Math.round(this.y)===Math.round(b.y))},getDistanceTo:function(d){if(typeof d!="object"){d=this.origin}var f=this.x-d.x,e=this.y-d.y;return Math.sqrt(f*f+e*e)},getAngleTo:function(d){if(typeof d!="object"){d=this.origin}var f=this.x-d.x,e=this.y-d.y;return Math.atan2(e,f)*this.radianToDegreeConstant}},3,0,0,0,0,0,[Ext.util,"Point"],function(){this.prototype.translate=this.prototype.translateBy}));(Ext.cmd.derive("Ext.event.Event",Ext.Base,{alternateClassName:"Ext.EventObjectImpl",isStopped:false,isEvent:true,statics:{resolveTextNode:function(b){return(b&&b.nodeType===3)?b.parentNode:b},pointerEvents:{pointerdown:1,pointermove:1,pointerup:1,pointercancel:1,pointerover:1,pointerout:1,pointerenter:1,pointerleave:1,MSPointerDown:1,MSPointerMove:1,MSPointerUp:1,MSPointerOver:1,MSPointerOut:1,MSPointerCancel:1,MSPointerEnter:1,MSPointerLeave:1},mouseEvents:{mousedown:1,mousemove:1,mouseup:1,mouseover:1,mouseout:1,mouseenter:1,mouseleave:1},touchEvents:{touchstart:1,touchmove:1,touchend:1,touchcancel:1},focusEvents:{focus:1,blur:1,focusin:1,focusout:1,focusenter:1,focusleave:1},pointerTypes:{2:"touch",3:"pen",4:"mouse",touch:"touch",pen:"pen",mouse:"mouse"}},constructor:function(r){var n=this,k=n.self,o=n.self.resolveTextNode,l=r.changedTouches,q=l?l[0]:r,m=r.type,s,p;n.pageX=q.pageX;n.pageY=q.pageY;n.target=n.delegatedTarget=o(r.target);p=r.relatedTarget;if(p){n.relatedTarget=o(p)}n.browserEvent=n.event=r;n.type=m;n.button=r.button||0;n.shiftKey=r.shiftKey;n.ctrlKey=r.ctrlKey||r.metaKey||false;n.altKey=r.altKey;n.charCode=r.charCode;n.keyCode=r.keyCode;if(k.forwardTab!==undefined&&k.focusEvents[m]){n.forwardTab=k.forwardTab}if(k.mouseEvents[m]){s="mouse"}else{if(k.pointerEvents[m]){s=k.pointerTypes[r.pointerType]}else{if(k.touchEvents[m]){s="touch"}}}if(s){n.pointerType=s}n.timeStamp=n.time=+(r.timeStamp||new Date())},chain:function(d){var c=Ext.Object.chain(this);c.parentEvent=this;return Ext.apply(c,d)},correctWheelDelta:function(f){var d=this.WHEEL_SCALE,e=Math.round(f/d);if(!e&&f){e=(f<0)?-1:1}return e},getCharCode:function(){return this.charCode||this.keyCode},getKey:function(){return this.keyCode||this.charCode},getPoint:function(){var b=this.getXY();return new Ext.util.Point(b[0],b[1])},getRelatedTarget:function(f,h,g){var k=this.relatedTarget,j=null;if(k){if(f){j=Ext.fly(k).findParent(f,h,g)}else{j=g?Ext.get(k):k}}return j},getTarget:function(d,f,e){return d?Ext.fly(this.target).findParent(d,f,e):(e?Ext.get(this.target):this.target)},getTime:function(){return this.time},getWheelDelta:function(){var b=this.getWheelDeltas();return b.y},getWheelDeltas:function(){var g=this,h=g.browserEvent,e=0,f=0;if(Ext.isDefined(h.wheelDeltaX)){e=h.wheelDeltaX;f=h.wheelDeltaY}else{if(h.wheelDelta){f=h.wheelDelta}else{if(h.detail){f=-h.detail;if(f>100){f=3}else{if(f<-100){f=-3}}if(Ext.isDefined(h.axis)&&h.axis===h.HORIZONTAL_AXIS){e=f;f=0}}}}return{x:g.correctWheelDelta(e),y:g.correctWheelDelta(f)}},getX:function(){return this.getXY()[0]},getXY:function(){var o=this,m=o.xy;if(!m){m=o.xy=[o.pageX,o.pageY];var h=m[0],k,n,l,j;if(!h&&h!==0){k=o.browserEvent;n=document;l=n.documentElement;j=n.body;m[0]=k.clientX+(l&&l.scrollLeft||j&&j.scrollLeft||0)-(l&&l.clientLeft||j&&j.clientLeft||0);m[1]=k.clientY+(l&&l.scrollTop||j&&j.scrollTop||0)-(l&&l.clientTop||j&&j.clientTop||0)}}return m},getY:function(){return this.getXY()[1]},hasModifier:function(){var b=this;return !!(b.ctrlKey||b.altKey||b.shiftKey||b.metaKey)},isNavKeyPress:function(){var c=this,d=c.keyCode;return(d>=33&&d<=40)||d===c.RETURN||d===c.TAB||d===c.ESC},isSpecialKey:function(){var b=this.keyCode;return(this.type==="keypress"&&this.ctrlKey)||this.isNavKeyPress()||(b===this.BACKSPACE)||(b>=16&&b<=20)||(b>=44&&b<=46)},makeUnpreventable:function(){this.browserEvent.preventDefault=Ext.emptyFn},preventDefault:function(){this.browserEvent.preventDefault();return this},setCurrentTarget:function(b){this.currentTarget=this.delegatedTarget=b},stopEvent:function(){return this.preventDefault().stopPropagation()},stopPropagation:function(){var d=this,f=d.browserEvent,e=d.parentEvent;d.isStopped=true;if(e){e.isStopped=true}if(!f.stopPropagation){f.cancelBubble=true;return d}f.stopPropagation();return d},within:function(h,g,f){if(h){var e=g?this.getRelatedTarget():this.getTarget()}return e?Ext.fly(h).contains(e)||!!(f&&e===Ext.getDom(h)):false},deprecated:{"4.0":{methods:{getPageX:"getX",getPageY:"getY"}}}},1,0,0,0,0,0,[Ext.event,"Event",Ext,"EventObjectImpl"],function(e){var d=e.prototype,f={BACKSPACE:8,TAB:9,NUM_CENTER:12,ENTER:13,RETURN:13,SHIFT:16,CTRL:17,ALT:18,PAUSE:19,CAPS_LOCK:20,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,PRINT_SCREEN:44,INSERT:45,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,CONTEXT_MENU:93,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,WHEEL_SCALE:(function(){var a;if(Ext.isGecko){a=3}else{if(Ext.isMac){if(Ext.isSafari&&Ext.webKitVersion>=532){a=120}else{a=12}a*=3}else{a=120}}return a}())};Ext.apply(e,f);Ext.apply(d,f);d.getTrueXY=d.getXY}));(Ext.cmd.derive("Ext.event.publisher.Dom",Ext.event.publisher.Publisher,{reEnterCount:0,targetType:"element",idOrClassSelectorRegex:/^([#|\.])([\w\-]+)$/,classNameSplitRegex:/\s+/,SELECTOR_ALL:"*",captureEvents:{resize:1,focus:1,blur:1,paste:1,input:1,change:1,animationstart:1,animationend:1,scroll:1},directEvents:{mouseenter:1,mouseleave:1,pointerenter:1,pointerleave:1,MSPointerEnter:1,MSPointerLeave:1,load:1,unload:1,beforeunload:1,error:1,DOMContentLoaded:1,DOMFrameContentLoaded:1,hashchange:1},blockedPointerEvents:{pointerover:1,pointerout:1,pointerenter:1,pointerleave:1,MSPointerOver:1,MSPointerOut:1,MSPointerEnter:1,MSPointerLeave:1},blockedCompatibilityMouseEvents:{mouseenter:1,mouseleave:1},constructor:function(){var n=this,m=document,p=m.defaultView,l=n.eventToVendorMap={},q=n.vendorToEventMap={},u=n.handledEvents,r=Ext.browser,s,o,t;n.captureSubscribers={};n.directSubscribers={};n.globalListeners={};if((Ext.os.is.iOS&&Ext.os.version.getMajor()<5)||!(p&&p.addEventListener)){n.target=m;n.isTargetWin=false}else{n.target=p;n.isTargetWin=true}n.initHandlers();if(u){for(s=0,o=u.length;s0)){return}delete E[v];E.$length--}else{if(!D.hasOwnProperty(v)||(!u&&--D[v]>0)){return}delete D[v];D.$length--}}else{if(y===w.SELECTOR_ALL){if(u){I.all=0}else{I.all--}}else{if(!G.hasOwnProperty(y)||(!u&&--G[y]>0)){return}delete G[y];Ext.Array.remove(G,y)}}I.$length--},getPropagatingTargets:function(c){var d=[];if(!c){return d}do{d[d.length]=c;c=c.parentNode}while(c);return d},dispatch:function(f,e,d){d.push(d[0].target);Ext.event.publisher.Publisher.prototype.dispatch.apply(this,arguments)},publish:function(t,r,y){var p=this.getSubscribers(t,true),w=this.getSubscribers(t),x=this.getSubscribers("*",true),n=this.getSubscribers("*"),q=p.$length,u=w.$length,v=x.$length,o=n.$length,s;if(!q&&!u&&!v&&!o){return}if(Ext.isArray(r)){s=r}else{if(this.captureEvents[t]){s=[r]}else{s=this.getPropagatingTargets(r)}}if(!q||!this.doPublish(p,t,s,y,true)){if(v){this.doPublish(x,t,s,y,true)}}if(!y.isStopped&&(!u||!this.doPublish(w,t,s,y))){if(o){this.doPublish(n,t,s,y)}}return this},doPublish:function(Z,V,O,F,I){var J=Z.id,X=Z.className,ad=Z.selector,N=J.$length>0,ae=X.$length>0,T=ad.length>0,P=Z.all>0,M={},aa=[F],L=false,S=this.classNameSplitRegex,W=0,Y=O.length,R=1,E,U,G,ab,K,Q,ac,j,H;if(I){W=Y-1;Y=R=-1}for(E=W;E!==Y;E+=R){K=O[E];F.setCurrentTarget(K);if(N){Q=(K.tagName==="FORM")?K.getAttribute("id"):(K===window)?"ext-window":K.id;if(Q){if(J.hasOwnProperty(Q)){L=true;this.dispatch("#"+Q,V,aa,I)}}}if(ae){ac=K.className;if(ac){j=ac.split(S);for(G=0,ab=j.length;G111&&d.keyCode<124){d.keyCode=-1}}}return c},stopPropagation:function(){var c=this,d=c.browserEvent;if(typeof d.type!=="unknown"){if(c.mousedownEvents[c.type]){Ext.GlobalEvents.fireMouseDown(c)}arguments.callee.$previous.call(this)}return c},deprecated:{"5.0":{methods:{clone:function(){return new this.self(this.browserEvent,this)}}}}},function(){var f=this,g,h=function(a){if(a.keyCode===9){f.forwardTab=!a.shiftKey}},e=function(a){if(a.keyCode===9){delete f.forwardTab}};if(Ext.isIE9m){g={1:0,4:1,2:2};f.override({statics:{enableIEAsync:function(a){var c,b={};for(c in a){b[c]=a[c]}return b}},constructor:function(b,a,d,k){var c=this;c.callParent([b,a,d,k]);c.button=g[b.button];c.toElement=b.toElement;c.fromElement=b.fromElement},mouseLeaveRe:/(mouseout|mouseleave)/,mouseEnterRe:/(mouseover|mouseenter)/,enableIEAsync:function(a){this.browserEvent=this.self.enableIEAsync(a)},getRelatedTarget:function(l,a,m){var c=this,d,b;if(!c.relatedTarget){d=c.type;if(c.mouseLeaveRe.test(d)){b=c.toElement}else{if(c.mouseEnterRe.test(d)){b=c.fromElement}}if(b){c.relatedTarget=c.self.resolveTextNode(b)}}return c.callParent([l,a,m])}});document.attachEvent("onkeydown",h);document.attachEvent("onkeyup",e);window.attachEvent("onunload",function(){document.detachEvent("onkeydown",h);document.detachEvent("onkeyup",e)})}else{if(document.addEventListener){document.addEventListener("keydown",h,true);document.addEventListener("keyup",e,true)}}});Ext.define("Ext.overrides.event.publisher.Dom",{override:"Ext.event.publisher.Dom"},function(){var c=Ext.event.publisher.Dom,d=c.prototype;if(Ext.isIE9m){c.override({initHandlers:function(){var b=this,g=document.body,a,h;b.callParent();a=b.onDelegatedEvent;h=b.onDirectEvent;b.target=document;b.targetIsWin=false;b.onDelegatedEvent=function(e){e.target=e.srcElement||window;if(e.type==="focusin"){e.relatedTarget=e.fromElement===g?null:e.fromElement}else{if(e.type==="focusout"){e.relatedTarget=e.toElement===g?null:e.toElement}}a.call(b,e)};b.onDirectEvent=function(e){e.target=e.srcElement||window;e.currentTarget=this;h.call(b,e)}},addDelegatedListener:function(a){this.target.attachEvent("on"+a,this.onDelegatedEvent)},removeDelegatedListener:function(a){this.target.detachEvent("on"+a,this.onDelegatedEvent)},addDirectListener:function(h,g){var a=this,b=Ext.Function.bind(a.onDirectEvent,g);a.directSubscribers[g.id][h].fn=b;if(g.attachEvent){g.attachEvent("on"+h,b)}else{a.callParent(arguments)}},removeDirectListener:function(b,a){if(a.detachEvent){a.detachEvent("on"+b,this.directSubscribers[a.id][b].fn)}else{this.callParent(arguments)}}});Ext.apply(d.directEvents,d.captureEvents);d.captureEvents={}}});(Ext.cmd.derive("Ext.event.publisher.Gesture",Ext.event.publisher.Dom,{alternateClassName:"Ext.event.publisher.TouchGesture",config:{recognizers:{}},isCancelEvent:{touchcancel:1,pointercancel:1,MSPointerCancel:1},constructor:function(g){var k=this,j=k.onTouchStart,f=k.onTouchMove=Ext.Function.createAnimationFrame(k.onTouchMove,k),h=k.onTouchEnd=Ext.Function.createAnimationFrame(k.onTouchEnd,k,null,1);k.handlers={touchstart:j,touchmove:f,touchend:h,touchcancel:h,pointerdown:j,pointermove:f,pointerup:h,pointercancel:h,MSPointerDown:j,MSPointerMove:f,MSPointerUp:h,MSPointerCancel:h,mousedown:j,mousemove:f,mouseup:h};k.recognizedEvents={};k.activeTouchesMap={};k.activeTouches=[];k.changedTouches=[];if(Ext.supports.TouchEvents){k.onTargetTouchMove=k.onTargetTouchMove.bind(k);k.onTargetTouchEnd=k.onTargetTouchEnd.bind(k)}k.initConfig(g);return Ext.event.publisher.Dom.prototype.constructor.call(this)},applyRecognizers:function(d){var f,e;for(f in d){e=d[f];if(e){this.registerRecognizer(e)}}return d},handles:function(d){var c=this.handledEventsMap;return !!c[d]||!!c["*"]||d==="*"||this.recognizedEvents.hasOwnProperty(d)},registerRecognizer:function(h){var k=this,j=k.recognizedEvents,g=h.getHandledEvents(),m,l;h.setOnRecognized(k.onRecognized);h.setCallbackScope(k);for(m=0,l=g.length;m1){e=[];for(s=0;s0){this.invokeRecognizers("onTouchMove",b)}}},onTouchEnd:function(c){var d=this;if(!d.isStarted){return}d.updateTouches(c,true);d.invokeRecognizers(d.isCancelEvent[c.type]?"onTouchCancel":"onTouchEnd",c);if(!d.activeTouches.length){d.isStarted=false;d.invokeRecognizers("onEnd",c);if(Ext.enableGarbageCollector){Ext.dom.GarbageCollector.resume()}}},onTargetTouchMove:function(b){if(Ext.elevateFunction){Ext.elevateFunction(this.doTargetTouchMove,this,[b])}else{this.doTargetTouchMove(b)}},doTargetTouchMove:function(b){if(!Ext.getBody().contains(b.target)){this.onTouchMove(new Ext.event.Event(b))}},onTargetTouchEnd:function(b){if(Ext.elevateFunction){Ext.elevateFunction(this.doTargetTouchEnd,this,[b])}else{this.doTargetTouchEnd(b)}},doTargetTouchEnd:function(f){var e=this,d=f.target;d.removeEventListener("touchmove",e.onTargetTouchMove);d.removeEventListener("touchend",e.onTargetTouchEnd);d.removeEventListener("touchcancel",e.onTargetTouchEnd);if(!Ext.getBody().contains(d)){e.onTouchEnd(new Ext.event.Event(f))}}},1,0,0,0,0,0,[Ext.event.publisher,"Gesture",Ext.event.publisher,"TouchGesture"],function(){var d=[],e=Ext.supports,f=e.TouchEvents;if(e.PointerEvents){d.push("pointerdown","pointermove","pointerup","pointercancel")}else{if(e.MSPointerEvents){d.push("MSPointerDown","MSPointerMove","MSPointerUp","MSPointerCancel")}else{if(f){d.push("touchstart","touchmove","touchend","touchcancel")}}}if(!d.length||(f&&Ext.isWebKit&&Ext.os.is.Desktop)){d.push("mousedown","mousemove","mouseup")}this.prototype.handledEvents=d}));Ext.define("Ext.overrides.event.publisher.Gesture",{override:"Ext.event.publisher.Gesture"},function(){if(Ext.isIE9m){this.override({updateTouches:function(h,f){var g=h.browserEvent,e=h.getXY();g.pageX=e[0];g.pageY=e[1];this.callParent([h,f])},initHandlers:function(){var d=this,c;d.callParent();c=d.onDelegatedEvent;d.onDelegatedEvent=function(a){c.call(d,Ext.event.Event.enableIEAsync(a))}}})}});(Ext.cmd.derive("Ext.event.publisher.Focus",Ext.event.publisher.Dom,{handledEvents:["focusin","focusout"],syntheticEvents:{focusenter:true,focusleave:true},eventMap:{focus:"focusenter",focusin:"focusenter",blur:"focusleave",focusout:"focusleave"},handles:function(b){return this.syntheticEvents[b]},doDelegatedEvent:function(f,d){var e=this;f=Ext.event.publisher.Dom.prototype.doDelegatedEvent.call(this,f,false);if(f){e.processSyntheticEvent(e.eventMap[f.type],f);if(d){e.afterEvent(f)}}},createSyntheticEvent:function(e,f,h){var g=new Ext.event.Event(f.browserEvent);g.type=e;if(h){g.relatedTarget=g.target;g.target=h}else{g.target=f.target;g.relatedTarget=f.relatedTarget||null}return g},processSyntheticEvent:function(q,n,e){var m=this,u,t,s,r,o,p;u=m.getSubscribers(q);if(u.$length){t=m.gatherSubscriberNodes(q,u);p=[];for(r=0,o=t.length;r0,q=s.$length>0,u=v.$length>0,m=[],n,o;if(p){for(o in t){if(o==="$length"){continue}n=document.getElementById(o);if(n){m.push(n)}}}if(q){Ext.Error.raise("Class name subscribers in Focus publisher")}if(u){Ext.Error.raise("Selector subscribers in Focus publisher")}return m},isEventTarget:function(h,f,g,e){return f==="focusenter"?this.isFocusEnterTarget(h,g,e):f==="focusleave"?this.isFocusLeaveTarget(h,g,e):null},isFocusEnterTarget:function(o,m,n){var e=m.browserEvent,k=n||e.relatedTarget,l=e.target,j;if(l===window){return false}j=Ext.fly(o);if(!j.isAncestor(l)){return false}if(!k){return true}if(!j.isAncestor(k)){return true}return false},isFocusLeaveTarget:function(o,m,n){var e=m.browserEvent,k=n!==undefined?n:e.target,l=n!==undefined?e.target:e.relatedTarget,j;if(k===window||l===window){return false}j=Ext.fly(o);if(!j.isAncestor(k)){return false}if(!l){return true}if(!j.isAncestor(l)){return true}return false},fireNodeEvent:function(j,e,g,k){var h=this.createSyntheticEvent(e,g,k);h.setCurrentTarget(j);this.dispatch("#"+j.id,e,[h,j])}},0,0,0,0,0,0,[Ext.event.publisher,"Focus"],function(){if(!Ext.supports.FocusinFocusoutEvents){document.addEventListener("blur",function(b){if(b.target===window||b.target===document){delete document.previousActiveElement}else{document.previousActiveElement=b.target}},true);this.override({handledEvents:["focus"],doDelegatedEvent:function(g,h){var e=this,f;g=e.callSuper([g,false]);if(g){f=document.previousActiveElement;if(f!==undefined){e.processSyntheticEvent("focusleave",g,f)}e.processSyntheticEvent(e.eventMap[g.type],g,f||null);if(h){e.afterEvent(g)}}}})}}));Ext.require(["Ext.event.gesture.*","Ext.event.publisher.Dom","Ext.event.publisher.Gesture","Ext.event.publisher.Focus","Ext.event.Dispatcher"]);Ext.onReady(function(){var b=Ext.event.Dispatcher.getInstance();b.setPublishers({dom:new Ext.event.publisher.Dom(),gesture:new Ext.event.publisher.Gesture({recognizers:{drag:new Ext.event.gesture.Drag(),tap:new Ext.event.gesture.Tap(),doubleTap:new Ext.event.gesture.DoubleTap(),longPress:new Ext.event.gesture.LongPress(),swipe:new Ext.event.gesture.Swipe(),pinch:new Ext.event.gesture.Pinch(),rotate:new Ext.event.gesture.Rotate(),edgeSwipe:new Ext.event.gesture.EdgeSwipe()}}),focus:new Ext.event.publisher.Focus()});Ext.get(window).on("unload",b.destroy,b)},null,{priority:2000});Ext.apply(Ext,{SSL_SECURE_URL:Ext.isSecure&&Ext.isIE?"javascript:''":"about:blank",BLANK_IMAGE_URL:"data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="});(Ext.cmd.derive("Ext.util.XTemplateParser",Ext.Base,{constructor:function(b){Ext.apply(this,b)},doTpl:Ext.emptyFn,parse:function(B){var m=this,y=B.length,z={elseif:"elif"},x=m.topRe,K=m.actionsRe,I,J,E,A,G,D,F,s,t,L,H,M,C;m.level=0;m.stack=J=[];for(I=0;I]*)\>)|(?:<\/tpl>)/g,actionsRe:/\s*(elif|elseif|if|for|foreach|exec|switch|case|eval|between)\s*\=\s*(?:(?:"([^"]*)")|(?:'([^']*)'))\s*/g,propRe:/prop=(?:(?:"([^"]*)")|(?:'([^']*)'))/,defaultRe:/^\s*default\s*$/,elseRe:/^\s*else\s*$/},1,0,0,0,0,0,[Ext.util,"XTemplateParser"],0));(Ext.cmd.derive("Ext.util.XTemplateCompiler",Ext.util.XTemplateParser,{useEval:Ext.isGecko,useIndex:Ext.isIE8m,useFormat:true,propNameRe:/^[\w\d\$]*$/,compile:function(e){var f=this,d=f.generate(e);return f.useEval?f.evalTpl(d):(new Function("Ext",d))(Ext)},generate:function(f){var g=this,e="var fm=Ext.util.Format,ts=Object.prototype.toString;",h;g.maxLevel=0;g.body=["var c0=values, a0="+g.createArrayTest(0)+", p0=parent, n0=xcount, i0=xindex, k0, v;\n"];if(g.definitions){if(typeof g.definitions==="string"){g.definitions=[g.definitions,e]}else{g.definitions.push(e)}}else{g.definitions=[e]}g.switches=[];g.parse(f);g.definitions.push((g.useEval?"$=":"return")+" function ("+g.fnArgs+") {",g.body.join(""),"}");h=g.definitions.join("\n");g.definitions.length=g.body.length=g.switches.length=0;delete g.definitions;delete g.body;delete g.switches;return h},doText:function(f){var d=this,e=d.body;f=f.replace(d.aposRe,"\\'").replace(d.newLineRe,"\\n");if(d.useIndex){e.push("out[out.length]='",f,"'\n")}else{e.push("out.push('",f,"')\n")}},doExpr:function(c){var d=this.body;d.push("if ((v="+c+") != null) out");if(this.useIndex){d.push("[out.length]=v+''\n")}else{d.push(".push(v+'')\n")}},doTag:function(d){var c=this.parseTag(d);if(c){this.doExpr(c)}else{this.doText("{"+d+"}")}},doElse:function(){this.body.push("} else {\n")},doEval:function(b){this.body.push(b,"\n")},doIf:function(d,f){var e=this;if(d==="."){e.body.push("if (values) {\n")}else{if(e.propNameRe.test(d)){e.body.push("if (",e.parseTag(d),") {\n")}else{e.body.push("if (",e.addFn(d),e.callFn,") {\n")}}if(f.exec){e.doExec(f.exec)}},doElseIf:function(d,f){var e=this;if(d==="."){e.body.push("else if (values) {\n")}else{if(e.propNameRe.test(d)){e.body.push("} else if (",e.parseTag(d),") {\n")}else{e.body.push("} else if (",e.addFn(d),e.callFn,") {\n")}}if(f.exec){e.doExec(f.exec)}},doSwitch:function(f){var d=this,e;if(f==="."||f==="#"){e=f==="."?"values":"xindex";d.body.push("switch (",e,") {\n")}else{if(d.propNameRe.test(f)){d.body.push("switch (",d.parseTag(f),") {\n")}else{d.body.push("switch (",d.addFn(f),d.callFn,") {\n")}}d.switches.push(0)},doCase:function(k){var l=this,m=Ext.isArray(k)?k:[k],j=l.switches.length-1,h,g;if(l.switches[j]){l.body.push("break;\n")}else{l.switches[j]++}for(g=0,j=m.length;g1){ out.push("',k.between,'"); } \n')}},doForEach:function(m,k){var n=this,o,h=n.level,j=h-1,l;if(m==="."){o="values"}else{if(n.propNameRe.test(m)){o=n.parseTag(m)}else{o=n.addFn(m)+n.callFn}}if(n.maxLevel1){ out.push("',k.between,'"); } \n')}},createArrayTest:("isArray" in Array)?function(b){return"Array.isArray(c"+b+")"}:function(b){return"ts.call(c"+b+')==="[object Array]"'},doExec:function(j,h){var k=this,g="f"+k.definitions.length,f=k.guards[k.strict?0:1];k.definitions.push("function "+g+"("+k.fnArgs+") {",f.doTry," var $v = values; with($v) {"," "+j," }",f.doCatch,"}");k.body.push(g+k.callFn+"\n")},guards:[{doTry:"",doCatch:""},{doTry:"try { ",doCatch:" } catch(e) {\n}"}],addFn:function(f){var g=this,e="f"+g.definitions.length,h=g.guards[g.strict?0:1];if(f==="."){g.definitions.push("function "+e+"("+g.fnArgs+") {"," return values","}")}else{if(f===".."){g.definitions.push("function "+e+"("+g.fnArgs+") {"," return parent","}")}else{g.definitions.push("function "+e+"("+g.fnArgs+") {",h.doTry," var $v = values; with($v) {"," return("+f+")"," }",h.doCatch,"}")}}return e},parseTag:function(j){var m=this,k=m.tagRe.exec(j),o,l,p,n,q;if(!k){return null}o=k[1];l=k[2];p=k[3];n=k[4];if(o=="."){if(!m.validTypes){m.definitions.push("var validTypes={string:1,number:1,boolean:1};");m.validTypes=true}q='validTypes[typeof values] || ts.call(values) === "[object Date]" ? values : ""'}else{if(o=="#"){q="xindex"}else{if(o=="$"){q="xkey"}else{if(o.substr(0,7)=="parent."){q=o}else{if(isNaN(o)&&o.indexOf("-")==-1&&o.indexOf(".")!=-1){q="values."+o}else{q="values['"+o+"']"}}}}}if(n){q="("+q+n+")"}if(l&&m.useFormat){p=p?","+p:"";if(l.substr(0,5)!="this."){l="fm."+l+"("}else{l+="("}}else{return q}return l+q+p+")"},evalTpl:function($){eval($);return $},newLineRe:/\r\n|\r|\n/g,aposRe:/[']/g,intRe:/^\s*(\d+)\s*$/,tagRe:/^([\w-\.\#\$]+)(?:\:([\w\.]*)(?:\((.*?)?\))?)?(\s?[\+\-\*\/]\s?[\d\.\+\-\*\/\(\)]+)?$/},0,0,0,0,0,0,[Ext.util,"XTemplateCompiler"],function(){var b=this.prototype;b.fnArgs="out,values,parent,xindex,xcount,xkey";b.callFn=".call(this,"+b.fnArgs+")"}));(Ext.cmd.derive("Ext.XTemplate",Ext.Template,{emptyObj:{},fn:null,strict:false,apply:function(d,c){return this.applyOut(d,[],c).join("")},applyOut:function(h,e,l){var k=this,m;if(!k.fn){m=new Ext.util.XTemplateCompiler({useFormat:k.disableFormats!==true,definitions:k.definitions,strict:k.strict});k.fn=m.compile(k.html)}if(k.strict){k.fn(e,h,l||k.emptyObj,1,1)}else{try{k.fn(e,h,l||k.emptyObj,1,1)}catch(j){}}return e},compile:function(){return this},statics:{getTpl:function(e,g){var h=e[g],f;if(h&&!h.isTemplate){h=Ext.ClassManager.dynInstantiate("Ext.XTemplate",h);if(e.hasOwnProperty(g)){f=e}else{for(f=e.self.prototype;f&&!f.hasOwnProperty(g);f=f.superclass){}}f[g]=h;h.owner=f}return h||null}}},0,0,0,0,0,0,[Ext,"XTemplate"],0));Ext.Factory=function(d){var c=this;c.aliasPrefix=d+".";c.cache={};c.name=d.replace(c.fixNameRe,c.fixNameFn);c.type=d};Ext.Factory.prototype={defaultProperty:"type",instanceProp:"isInstance",create:function(q,o){var l=this,s=Ext.ClassManager,r=l.cache,p,m,n,k;if(q){if(q[l.instanceProp]){return q}if(typeof q==="string"){k=q;q={};q[l.defaultProperty]=k}m=q.xclass;k=q.type}if(m){if(!(n=s.get(m))){return s.instantiate(m,q)}}else{if(!(k=k||o||l.defaultType)){n=l.defaultClass}if(!n&&!(n=r[k])){p=l.aliasPrefix+k;m=s.getNameByAlias(p);if(!(n=m&&s.get(m))){return s.instantiateByAlias(p,q)}r[k]=n}}return n.isInstance?n:new n(q)},fixNameRe:/\.[a-z]/ig,fixNameFn:function(b){return b.substring(1).toUpperCase()},clearCache:function(){this.cache={}}};Ext.Factory.define=function(j,l){var h=Ext.Factory,g,m,k;if(j.constructor===Object){Ext.Object.each(j,h.define,h)}else{m=new Ext.Factory(j);if(l){if(l.constructor===Object){Ext.apply(m,l);if(typeof(g=m.xclass)==="string"){m.defaultClass=Ext.ClassManager.get(g)}}else{m.defaultType=l}}h[m.name]=k=m.create.bind(m);k.instance=m}return k};(Ext.cmd.derive("Ext.mixin.Factoryable",Ext.Base,{mixinId:"factoryable",onClassMixedIn:function(k){var l=k.prototype,j=l.factoryConfig,m=l.alias,g={},h;m=m&&m.length&&m[0];if(m&&(h=m.lastIndexOf("."))>0){g.type=m.substring(0,h);g.defaultType=m.substring(h+1)}if(j){delete l.factoryConfig;Ext.apply(g,j)}k.create=Ext.Factory.define(g.type,g)}},0,0,0,0,0,0,[Ext.mixin,"Factoryable"],0));(Ext.cmd.derive("Ext.util.CollectionKey",Ext.Base,{config:{collection:null,keyFn:null,property:null,rootProperty:null,unique:true},generation:0,map:null,mapRebuilds:0,constructor:function(b){this.initConfig(b)},get:function(d){var c=this.map||this.getMap();return c[d]||null},getRootProperty:function(){var c=this,d=(arguments.callee.$previous||Ext.Base.prototype.getRootProperty).call(this);return d!==null?d:c.getCollection().getRootProperty()},indexOf:function(m,q){var u=this.map||this.getMap(),l=u[m],p=this.getCollection(),t=p.length,r,o,n,s;if(!l){return -1}if(q===undefined){q=-1}if(l instanceof Array){n=l;o=t;for(s=n.length;s-->0;){r=p.indexOf(n[s]);if(rq){o=r}}if(o===t){return -1}}else{o=p.indexOf(l)}return(o>q)?o:-1},updateKey:function(m,k){var g=this,l=g.map,j,h;if(l){j=l[k];if(j instanceof Array){h=Ext.Array.indexOf(j,m);if(h>=0){if(j.length>2){j.splice(h,1)}else{l[k]=j[1-h]}}}else{if(j){delete l[k]}}g.add([m])}},onCollectionAdd:function(c,d){if(this.map){this.add(d.items)}},onCollectionItemChange:function(c,d){this.map=null},onCollectionRefresh:function(){this.map=null},onCollectionRemove:function(o,p){var m=this,s=m.map,n=p.items,r=n.length,q,k,l;if(s){if(m.getUnique()&&ro)?1:(r0,C=y.getSource(),x,D=0,L,J=false,R,F=false,A,B,N;if(C&&!C.updating){C.itemChanged(z,M,H,G)}else{B=y.getKey(z);if(K){L=y.indexOfKey(Q?H:B);F=(L<0);J=y.isItemFiltered(z);O=(F!==J)}if(O){if(J){D=[z];R=-1}else{x=[z];R=y.length}}else{if(S&&!J){if(!K){L=y.indexOfKey(Q?H:B)}N=y.getSortFn();if(L&&N(E[L-1],E[L])>0){P=-1;R=Ext.Array.binarySearch(E,z,0,L,N)}else{if(L0){P=1;R=Ext.Array.binarySearch(E,z,L+1,N)}}if(P){x=[z]}}}A={item:z,key:B,index:R,filterChanged:O,keyChanged:Q,indexChanged:!!P,filtered:J,oldIndex:L,newIndex:R,wasFiltered:F,meta:G};if(Q){A.oldKey=H}if(M){A.modified=M}y.beginUpdate();y.notify("beforeitemchange",[A]);if(Q){y.updateKey(z,H)}if(x||D){y.splice(R,D,x)}if(P>0){A.newIndex--}else{if(P<0){A.oldIndex++}}y.notify(J?"filtereditemchange":"itemchange",[A]);y.endUpdate()}},remove:function(g){var h=this,f=h.decodeRemoveItems(arguments,0),e=h.length;h.splice(0,f);return e-h.length},removeAll:function(){var c=this,d=c.length;if(c.generation&&d){c.splice(0,d)}return c},removeAt:function(n,o){var m=this,t=m.length,q=Ext.Number,r=q.clipIndices(t,[n,(o===undefined)?1:o],q.Clip.COUNT),s=r[0],u=r[1]-s,l=(u===1)&&m.getAt(s),p;m.splice(s,u);p=m.length-t;return(l&&p)?l:p},removeByKey:function(d){var c=this.getByKey(d);if(!c||!this.remove(c)){return false}return c},splice:function(Y,ao,aa){var ap=this,aw=ap.sorted&&ap.getAutoSort(),ac=ap.map,ak=ap.items,am=ap.length,ag=(ao instanceof Array)?ap.decodeRemoveItems(ao):null,af=!ag,X=Ext.Number,av=X.clipIndices(am,[Y,af?ao:0],X.Clip.COUNT),at=av[0],aq=av[1],R=aq-at,ai=ap.decodeItems(arguments,2),S=ai?ai.length:0,Z,ae,ah,ax=at,ay=ap.indices||((S||ag)?ap.getIndices():null),al=null,ar=R?[at]:null,au=null,aj=ap.getSource(),az,V,U,P,ab,W,Q,an,ad,T,k,n;if(aj&&!aj.updating){if(af){ag=[];for(P=0;P1){if(!Z.$cloned){ai=Z=Z.slice(0)}ap.sortData(Z)}}for(P=0;P0;){an=ap.getKey(ag[P]);if((W=ay[an])!==undefined){(ar||(ar=[])).push(W)}}if(!al&&!ar){return ap}ap.beginUpdate();if(ar){az=null;U=[];ah={};if(ar.length>1){ar.sort(Ext.Array.numericSortFn)}for(P=0,T=ar.length;P(az.at+V.length)){U.push(az={at:W,items:(V=[]),keys:(ad=[]),map:ah,next:az,replacement:al});if(al){al.replaced=az}}V.push(ah[an]=ab);ad.push(an);if(W1&&W===at){--R;ar[P--]=++at}}if(al){al.at=ax}for(Q=U.length;Q-->0;){az=U[Q];P=az.at;T=az.items.length;if(P+T1&&am){ap.spliceMerge(Z)}else{if(aw){if(S>1){ax=0;ap.indices=ay=null}else{ax=n.findInsertionIndex(al.items[0],ak,ap.getSortFn())}}if(ax===am){ak.push.apply(ak,Z);ay=ap.indices;if(ay){for(P=0;P-1){m=j[g];h=this.indexOf(m);if(h>-1){return h+1}--g}return 0},onCollectionAdd:function(w,v){var o=this,m=v.atItem,p=v.items,q,r,u,s,n,t;if(m){r=o.indexOf(m);if(r===-1){r=o.findInsertIndex(p[0])}else{++r}}else{r=0}if(o.getAutoFilter()&&o.filtered){for(s=0,t=p.length;sq)){q=l}}return[q,m]},count:function(b){return b.length},extremes:function(t,y,w,o,q){var s=null,x=null,u,n,r,v,p;for(u=y;uv)){v=p;x=n}}return[x,s]},max:function(k,j,l,h,m){var b=this._aggregators.bounds.call(this,k,j,l,h,m);return b[1]},maxItem:function(k,j,l,h,m){var b=this._aggregators.extremes.call(this,k,j,l,h,m);return b[1]},min:function(k,j,l,h,m){var b=this._aggregators.bounds.call(this,k,j,l,h,m);return b[0]},minItem:function(k,j,l,h,m){var b=this._aggregators.extremes.call(this,k,j,l,h,m);return b[0]},sum:function(q,n,j,l,k){for(var m,o=0,p=n;po+1||!Ext.isIterable(h);if(j){h=Ext.Array.slice(n,o);if(h.length===1&&h[0]===undefined){h.length=0}}k=l.getDecoder();if(k){if(!j){h=h.slice(0);j=true}for(m=h.length;m-->0;){if((h[m]=k.call(l,h[m]))===false){h.splice(m,1)}}}if(j){h.$cloned=true}}return h},getIndices:function(){var l=this,k=l.indices,h=l.items,j=h.length,m,g;if(!k){l.indices=k={};++l.indexRebuilds;for(m=0;m0);if(g||f){e.filtered=f;e.onFilterChange(h)}},getSortFn:function(){return this._sortFn||this.createSortFn()},getSorters:function(c){var d=this._sorters;if(!d&&c!==false){d=new Ext.util.SorterCollection();this.setSorters(d)}return d},onSortChange:function(){if(this.sorted){this.sortItems()}},sort:function(f,h,g){var e=this.getSorters();e.addSort.apply(e,arguments);return this},sortData:function(b){Ext.Array.sort(b,this.getSortFn());return b},sortItems:function(c){var d=this;if(d.sorted){c=d.getSortFn()}d.indices=null;d.notify("beforesort",[d.getSorters()]);if(d.length){Ext.Array.sort(d.items,c)}d.notify("sort")},sortBy:function(b){return this.sortItems(b)},findInsertionIndex:function(f,e,d){if(!e){e=this.items}if(!d){d=this.getSortFn()}return Ext.Array.binarySearch(e,f,d)},applySorters:function(d,c){if(d==null||(d&&d.isSorterCollection)){return d}if(d){if(!c){c=this.getSorters()}c.splice(0,c.length,d)}return c},createSortFn:function(){var f=this,e=f.getGrouper(),d=f.getSorters().getSortFn();if(!e){return d}return function(b,a){return e.sort(b,a)||d(b,a)}},updateGrouper:function(g){var l=this,h=l.getGroups(),j=l.getSorters(),k,m;l.onSorterChange();l.grouped=!!g;if(g){if(!h){h=new Ext.util.GroupCollection({itemRoot:l.getRootProperty()});l.addObserver(h);l.setGroups(h)}m=h.getSorters();m.splice(0,m.length,{property:"_groupKey",direction:g.getDirection()});k=true}else{if(h){l.removeObserver(h);h.destroy()}l.setGroups(null)}if(!j.updating){l.onEndUpdateSorters(j)}if(k){h.onCollectionRefresh(l)}},updateSorters:function(e,d){var f=this;if(d){d.un("endupdate","onEndUpdateSorters",f)}if(e){e.on("endupdate","onEndUpdateSorters",f,{prepend:true});e.$sortable=f}f.onSorterChange();f.onEndUpdateSorters(e)},onSorterChange:function(){this._sortFn=null},onEndUpdateSorters:function(h){var e=this,g=e.sorted,f=e.grouped||(h&&(h.length>0));if(g||f){e.sorted=!!f;e.onSortChange(h)}},removeObserver:function(d){var c=this.observers;if(c){Ext.Array.remove(c,d);delete this.observerMap[d.getId()]}},spliceMerge:function(s){var x=this,u,F=s.length,w=0,v=x.items,G=v.length,z=[],B=0,A=[],y=x.getSorters(),t,E,D,C,r;x.items=A;for(u=0;u1){z[B-2].next=z[B-1]}for(;u1){z[B-2].next=z[B-1]}A.push(C);for(E=u+1;E=0){break}A.push(C);t.push(C)}}for(;w0){q=p[n];r=!q.isEqual(s,q.get(m));if(r!==k){q.changingKey=true;if(o){q[o](k?null:l)}else{q.set(m,k?null:s)}q.changingKey=false}}}}),Right:Ext.define(null,{extend:"Ext.data.schema.Role",left:false,side:"right",onDrop:function(f,d){var e=this.association.field;if(e){f.set(e.name,null)}f[this.role]=null},createGetter:function(){var b=this;return function(a,d){return b.doGetFK(this,a,d)}},createSetter:function(){var b=this;return function(a,f,e){return b.doSetFK(this,a,f,e)}},checkMembership:function(h,g){var e=this.association.field,f;f=this.getSessionStore(h,g.get(e.name));if(f&&!f.contains(g)){f.add(g)}},onValueChange:function(s,p,t,u){var o=this,l,m,r,q,n;if(!s.changingKey){if(p){m=o.getSessionStore(p,u);if(m){m.remove(s)}if(t||t===0){m=o.getSessionStore(p,t);if(m&&!m.isLoading()){m.add(s)}}}else{l=s.joined;if(l){for(r=0,q=l.length;r=0){j.remove([h])}}else{if(h<0){o=j.getSession().getEntry(this.type,k);l=o&&o.record;if(l){j.add(l)}}}j.matrixUpdate=0}}},function(){var b=this;Ext.ClassManager.onCreated(function(){Ext.data.schema.ManyToMany.prototype.Right=Ext.define(null,{extend:b,left:false,side:"right"})},null,"Ext.data.schema.ManyToMany")})},0,0,0,0,0,0,[Ext.data.schema,"ManyToMany"],0));(Ext.cmd.derive("Ext.util.Inflector",Ext.Base,{singleton:true,plurals:[[(/(quiz)$/i),"$1zes"],[(/^(ox)$/i),"$1en"],[(/([m|l])ouse$/i),"$1ice"],[(/(matr|vert|ind)ix|ex$/i),"$1ices"],[(/(x|ch|ss|sh)$/i),"$1es"],[(/([^aeiouy]|qu)y$/i),"$1ies"],[(/(hive)$/i),"$1s"],[(/(?:([^f])fe|([lr])f)$/i),"$1$2ves"],[(/sis$/i),"ses"],[(/([ti])um$/i),"$1a"],[(/(buffal|tomat|potat)o$/i),"$1oes"],[(/(bu)s$/i),"$1ses"],[(/(alias|status|sex)$/i),"$1es"],[(/(octop|vir)us$/i),"$1i"],[(/(ax|test)is$/i),"$1es"],[(/^(p)erson$/i),"$1eople"],[(/^(m)an$/i),"$1en"],[(/(.*)(child)(ren)?$/i),"$1$2ren"],[(/s$/i),"s"],[(/$/),"s"]],singulars:[[(/(address)$/i),"$1"],[(/(quiz)zes$/i),"$1"],[(/(matr)ices$/i),"$1ix"],[(/(vert|ind)ices$/i),"$1ex"],[(/^(ox)en/i),"$1"],[(/(alias|status)es$/i),"$1"],[(/(octop|vir)i$/i),"$1us"],[(/(cris|ax|test)es$/i),"$1is"],[(/(shoe)s$/i),"$1"],[(/(o)es$/i),"$1"],[(/(bus)es$/i),"$1"],[(/([m|l])ice$/i),"$1ouse"],[(/(x|ch|ss|sh)es$/i),"$1"],[(/(m)ovies$/i),"$1ovie"],[(/(s)eries$/i),"$1eries"],[(/([^aeiouy]|qu)ies$/i),"$1y"],[(/([lr])ves$/i),"$1f"],[(/(tive)s$/i),"$1"],[(/(hive)s$/i),"$1"],[(/([^f])ves$/i),"$1fe"],[(/(^analy)ses$/i),"$1sis"],[(/((a)naly|(b)a|(d)iagno|(p)arenthe|(p)rogno|(s)ynop|(t)he)ses$/i),"$1$2sis"],[(/([ti])a$/i),"$1um"],[(/(n)ews$/i),"$1ews"],[(/(p)eople$/i),"$1erson"],[(/s$/i),""]],uncountable:["sheep","fish","series","species","money","rice","information","equipment","grass","mud","offspring","deer","means"],singular:function(c,d){this.singulars.unshift([c,d])},plural:function(c,d){this.plurals.unshift([c,d])},clearSingulars:function(){this.singulars=[]},clearPlurals:function(){this.plurals=[]},isTransnumeral:function(b){return Ext.Array.indexOf(this.uncountable,b)!=-1},pluralize:function(j){if(this.isTransnumeral(j)){return j}var k=this.plurals,l=k.length,h,m,g;for(g=0;g1){f[e]=this.apply("capitalize",f[e])}return f.join("")},getterName:function(c){var d=c.role;if(c&&c.isMany){return d}return"get"+this.apply("capitalize",d)},inverseFieldRole:function(m,l,o,j){var n=this,k=n.apply(l?"uniRole":"multiRole",m),p=n.apply("pluralize",o),q=n.apply("undotted,pluralize",j);if(p.toLowerCase()!==q.toLowerCase()){k=o+n.apply("capitalize",k)}return k},manyToMany:function(h,j,g){var k=this,f=k.apply("undotted,capitalize,singularize",j)+k.apply("undotted,capitalize,pluralize",g);if(h){f=k.apply("capitalize",h+f)}return f},manyToOne:function(g,e,f,h){return this.apply("capitalize,singularize",f)+this.apply("capitalize",e)},matrixRole:function(f,d){var e=this.apply(f?"multiRole,capitalize":"multiRole",d);return f?f+e:e},oneToOne:function(g,e,f,h){return this.apply("undotted,capitalize,singularize",f)+this.apply("capitalize",e)},setterName:function(b){return"set"+this.apply("capitalize",b.role)},endsWithIdRe:/(?:(_id)|[^A-Z](Id))$/,cache:{},apply:function(o,q){var l=this,r=l.cache,k=r[q]||(r[q]={}),m=k[o],n,p,s;if(!m){if(o.indexOf(",")<0){m=l[o](q)}else{p=(s=o.split(",")).length;m=q;for(n=0;n0;){h[f].stub=k}}return k},isDescendantOf:function(c){for(var d=this;d=d.parent;){if(d===c){return true}}return false},onSchedule:function(){for(var f,g,j,h,k=this.parent;k;k=k.parent){h=k.bindings;if(h){for(f=0,g=h.length;f "+b.binding.getFullName()+")")},getDataObject:function(){var b=this.binding;return b&&b.getDataObject()},getRawValue:function(){var b=this.binding;return b&&b.getRawValue()},getValue:function(){var b=this.binding;return b&&b.getValue()},getTargetStub:function(){var b=this.binding;return b&&b.stub},isLoading:function(){var b=this.binding;return b?b.isLoading():false},link:function(g,e){var f=this,h=f.binding;if(h){h.destroy()}e=f.target=e||f.owner;f.linkDescriptor=g;f.binding=e.bind(g,f.onChange,f);f.binding.deep=true},onChange:function(){this.invalidate(true)},react:function(){var c=this,d=c.owner.linkData;d[c.name]=c.getValue();Ext.app.bind.Stub.prototype.react.call(this)},privates:{collect:function(){var d=this,e=Ext.app.bind.Stub.prototype.collect.call(this),f=d.binding?1:0;return e+f},sort:function(){var b=this.binding;if(b){this.scheduler.sortItem(b)}}}},0,0,0,0,0,0,[Ext.app.bind,"LinkStub"],0));(Ext.cmd.derive("Ext.app.bind.RootStub",Ext.app.bind.AbstractStub,{isRootStub:true,depth:0,createRootChild:function(u,q){var m=this,t=m.owner,p=t.getData(),s=m.children,n=s&&s[u],o=n?null:m,l,r;if(q||p.hasOwnProperty(u)||!(l=t.getParent())){r=new Ext.app.bind.Stub(t,u,o)}else{r=new Ext.app.bind.LinkStub(t,u,n?null:o);r.link("{"+u+"}",l)}if(n){n.graft(r)}return r},createStubChild:function(b){return this.createRootChild(b,true)},descend:function(l,o){var m=this,n=m.children,k=o||0,h=l[k++],j=(n&&n[h])||m.createRootChild(h);if(k0;){if(c[d].isLoading()){return true}}return false},isStatic:function(){var g=this.bindings,f=g.length,e,h;for(e=0;e=Math.max(c,d)},find:function(n,o,m,l,k,p){var q=!l,j=q&&p;return this.getData().findIndex(n,o,m,q,j,!k)},findRecord:function(){var c=this,d=c.find.apply(c,arguments);return d!==-1?c.getAt(d):null},findExact:function(d,e,f){return this.getData().findIndexBy(function(a){return a.isEqual(a.get(d),e)},this,f)},findBy:function(d,e,f){return this.getData().findIndexBy(d,e,f)},getAt:function(b){return this.getData().getAt(b)||null},getRange:function(g,e,h){var f=this.getData().getRange(g,Ext.isNumber(e)?e+1:e);if(h&&h.callback){h.callback.call(h.scope||this,f,g,e,h)}return f},applyFilters:function(c,d){if(!d){d=this.createFiltersCollection();d.setRootProperty("data")}d.add(c);return d},applySorters:function(c,d){if(!d){d=this.createSortersCollection();d.setRootProperty("data")}d.add(c);return d},updateAutoFilter:function(c){var d=this.getData();if(d.setAutoFilter){d.setAutoFilter(c)}},updateAutoSort:function(d){var c=this.getData();if(c.setAutoSort){c.setAutoSort(d)}},filter:function(d,c){if(Ext.isString(d)){d={property:d,value:c}}this.getFilters().add(d)},removeFilter:function(e){var f=this,d=f.getFilters();if(e instanceof Ext.util.Filter){d.remove(e)}else{d.removeByKey(e)}},updateRemoteSort:function(h){var f=this,g=f.getSorters(),e=f.getData();if(h){g.on("endupdate",f.onSorterEndUpdate,f);e.un("beforesort",f.onBeforeCollectionSort,f)}else{g.un("endupdate",f.onSorterEndUpdate,f);e.on("beforesort",f.onBeforeCollectionSort,f)}},updateRemoteFilter:function(f){var d=this,e=d.getFilters();if(f){e.on("endupdate",d.onFilterEndUpdate,d)}else{e.un("endupdate",d.onFilterEndUpdate,d)}},addFilter:function(b){this.getFilters().add(b)},filterBy:function(c,d){this.getFilters().add({filterFn:c,scope:d||this})},clearFilter:function(f){var d=this,e=d.getFilters(false);if(!e||e.getCount()===0){return}d.suppressNextFilter=!!f;e.removeAll();d.suppressNextFilter=false},isFiltered:function(){return this.getFilters().getCount()>0},isSorted:function(){return this.getSorters().getCount()>0||this.isGrouped()},addFieldTransform:function(h){if(h.getTransform()){return}var j=h.getProperty(),k=this.getModel(),g,f;if(k){g=k.getField(j);f=g?g.getSortType():null}if(f&&f!==Ext.identityFn){h.setTransform(f)}},beginUpdate:function(){if(!this.updating++){this.fireEvent("beginupdate")}},endUpdate:function(){if(this.updating&&!--this.updating){this.fireEvent("endupdate");this.onEndUpdate()}},getState:function(){var n=this,m=[],o=n.getFilters(),j=n.getGrouper(),l,p,q,k;n.getSorters().each(function(a){m[m.length]=a.getState();p=true});if(n.statefulFilters&&n.saveStatefulFilters){p=true;l=[];o.each(function(a){l[l.length]=a.getState()})}if(j){p=true}if(p){k={};if(m.length){k.sorters=m}if(l){k.filters=l}if(j){k.grouper=j.getState()}}return k},applyState:function(l){var n=this,k=n.getSorters(),o=n.getFilters(),h=l.sorters,j=l.filters,m=l.grouper;if(h){k.replaceAll(h)}if(j){n.saveStatefulFilters=true;o.replaceAll(j)}if(m){this.setGrouper(m)}},hasPendingLoad:Ext.emptyFn,isLoading:Ext.emptyFn,destroy:function(){var b=this;b.clearListeners();if(b.getStoreId()){Ext.data.StoreManager.unregister(b)}b.onDestroy();b.callParent()},sort:function(h,e,g){var f=this;if(arguments.length===0){if(f.getRemoteSort()){f.attemptLoad()}else{f.forceLocalSort()}}else{f.getSorters().addSort(h,e,g)}},onBeforeCollectionSort:function(d,c){this.fireEvent("beforesort",this,c.getRange())},onSorterEndUpdate:function(){var d=this,c=d.getSorters().getRange();if(c.length){if(d.getRemoteSort()){d.attemptLoad({callback:function(){d.fireEvent("sort",d,c)}})}else{d.fireEvent("datachanged",d);d.fireEvent("refresh",d);d.fireEvent("sort",d,c)}}else{d.fireEvent("sort",d,c)}},onFilterEndUpdate:function(){var c=this,d=c.suppressNextFilter;if(c.getAutoFilter()){if(c.getRemoteFilter()){c.currentPage=1;if(!d){c.attemptLoad()}}else{if(!d){c.fireEvent("datachanged",c);c.fireEvent("refresh",c)}}}if(c.trackStateChanges){c.saveStatefulFilters=true}c.fireEvent("filterchange",c,c.getFilters().getRange())},updateGroupField:function(c){var d=this.getData();if(c){d.setGrouper({property:c,direction:this.getGroupDir()})}else{d.setGrouper(null)}},getGrouper:function(){return this.getData().getGrouper()},group:function(g,j,f){var k=this,h=g||k.getSorters().getCount()>0;if(g&&typeof g==="string"){g={property:g,direction:j||k.getGroupDir()}}k.getData().setGrouper(g);if(k.isLoadBlocked()){return}if(h){if(k.getRemoteSort()){k.attemptLoad({callback:function(){k.fireEvent("groupchange",k,k.getGrouper())}})}else{k.fireEvent("datachanged",k);k.fireEvent("refresh",k);k.fireEvent("groupchange",k,k.getGrouper())}}else{k.fireEvent("groupchange",k,k.getGrouper())}},clearGrouping:function(){this.group(null)},getGroupField:function(){var d=this.getGrouper(),c="";if(d){c=d.getProperty()}return c},isGrouped:function(){return !!this.getGrouper()},applyGrouper:function(b){this.group(b);return this.getData().getGrouper()},getGroups:function(){return this.getData().getGroups()},onEndUpdate:Ext.emptyFn,deprecated:{5:{methods:{destroyStore:function(){this.destroy()}}}}},1,0,0,0,0,[[Ext.mixin.Observable.prototype.mixinId||Ext.mixin.Observable.$className,Ext.mixin.Observable],[Ext.mixin.Factoryable.prototype.mixinId||Ext.mixin.Factoryable.$className,Ext.mixin.Factoryable]],[Ext.data,"AbstractStore"],0));(Ext.cmd.derive("Ext.data.LocalStore",Ext.Mixin,{mixinConfig:{id:"localstore"},constructDataCollection:function(){var d=new Ext.util.Collection({rootProperty:"data",extraKeys:{byInternalId:{property:"internalId",rootProperty:""}}}),c;c=d.getSorters();c.setSorterConfigure(this.addFieldTransform,this);return d},createFiltersCollection:function(){return this.getData().getFilters()},createSortersCollection:function(){return this.getData().getSorters()},onCollectionSort:function(){this.onSorterEndUpdate()},onCollectionFilter:function(){this.onFilterEndUpdate()},notifySorterChange:function(){this.getData().onSorterChange()},forceLocalSort:function(){this.getData().onSortChange()},contains:function(b){return this.indexOf(b)>-1},each:function(k,l){var j=this.data.items,h=j.length,g,m;for(m=0;m]+>/gi,asText:function(b){return String(b).replace(this.stripTagsRE,"")},asUCText:function(b){return String(b).toUpperCase().replace(this.stripTagsRE,"")},asUCString:function(b){return String(b).toUpperCase()},asDate:function(b){if(!b){return 0}if(Ext.isDate(b)){return b.getTime()}return Date.parse(String(b))},asFloat:function(d){var c=parseFloat(String(d).replace(/,/g,""));return isNaN(c)?0:c},asInt:function(d){var c=parseInt(String(d).replace(/,/g,""),10);return isNaN(c)?0:c}},0,0,0,0,0,0,[Ext.data,"SortTypes"],0));(Ext.cmd.derive("Ext.data.validator.Validator",Ext.Base,{isValidator:true,type:"base",statics:{all:{},register:function(d,e){var f=this.all;f[d.toUpperCase()]=f[d.toLowerCase()]=f[d]=e.prototype}},onClassExtended:function(d,c){if(c.type){Ext.data.validator.Validator.register(c.type,d)}},constructor:function(b){if(typeof b==="function"){this.fnOnly=true;this.validate=b}else{this.initConfig(b)}},validate:function(){return true},clone:function(){var b=this;if(b.fnOnly){return new Ext.data.validator.Validator(b.validate)}return new b.self(b.getCurrentConfig())}},1,0,0,0,["data.validator.base"],[[Ext.mixin.Factoryable.prototype.mixinId||Ext.mixin.Factoryable.$className,Ext.mixin.Factoryable]],[Ext.data.validator,"Validator"],function(){this.register(this.prototype.type,this)}));(Ext.cmd.derive("Ext.data.field.Field",Ext.Base,{alternateClassName:"Ext.data.Field",aliasPrefix:"data.field.",type:"auto",factoryConfig:{defaultProperty:"name"},isDataField:true,isField:true,allowBlank:true,allowNull:false,critical:false,defaultInvalidMessage:"This field is invalid",defaultValue:undefined,definedBy:null,depends:null,dependents:null,mapping:null,name:null,ordinal:undefined,persist:null,reference:null,sortDir:"ASC",unique:false,rank:null,stripRe:/[\$,%]/g,calculated:false,evil:false,identifier:false,onClassExtended:function(m,k){var j=k.sortType,l=m.prototype,h=l.validators,g=k.validators;if(j&&Ext.isString(j)){l.sortType=Ext.data.SortTypes[j]}if(g){if(!Ext.isArray(g)){g=[g]}delete k.validators;if(h){g=h.concat(g)}l.validators=g}},argumentNamesRe:/^function\s+\(\s*([^,\)\s]+)/,calculateRe:/[^\.a-z0-9_]([a-z_][a-z_0-9]*)\.([a-z_][a-z_0-9]*)/gi,constructor:function(z){var s=this,q=s.calculateRe,w,p,r,v,A,C,u,B,t,y,x;if(z){if(Ext.isString(z)){s.name=z}else{x=z.validators;if(x){delete z.validators;s.instanceValidators=x}Ext.apply(s,z)}}if(!s.allowNull){s.allowNull=!!s.reference}w=s.calculate;A=s.depends;if(w){s.convert=s.doCalculate;if(!A){if(!(A=w.$depends)){C={};t=w.toString();w.$depends=A=[];u=s.argumentNamesRe.exec(t);B=u?u[1]:"data";while((u=q.exec(t))){if(B===u[1]&&!C[y=u[2]]){C[y]=1;A.push(y)}}}s.depends=A}}r=s.defaultValue;if(s.convert){if(r!==undefined){s.defaultValue=r=s.convert(r)}s.calculated=p=s.convert.length>1;s.evil=p&&!A}if(s.persist===null){s.persist=!p}v=s.sortType;if(!s.sortType){s.sortType=Ext.data.SortTypes.none}else{if(Ext.isString(v)){s.sortType=Ext.data.SortTypes[v]}}if(A&&typeof A==="string"){s.depends=[A]}s.cloneDefaultValue=r!==undefined&&(Ext.isDate(r)||Ext.isArray(r)||Ext.isObject(r))},setModelValidators:function(b){this._validators=null;this.modelValidators=b},compileValidators:function(){var b=this;b._validators=[];b.constructValidators(b.validators);b.constructValidators(b.modelValidators);b.constructValidators(b.instanceValidators)},constructValidators:function(g){if(g){if(!(g instanceof Array)){g=[g]}var h=g.length,k=this._validators,f,j;for(f=0;fh)?1:0)},compare:function(d,c){return(d===c)?0:((d0){(ah=P[ab]).dirty=true;L=L?Math.min(L,ah.rank):ah.rank}if(!aq||aq.persist){if(ag&&ag.hasOwnProperty(O)){if(!af||al.isEqual(ag[O],K)){delete ag[O];R.dirty=-1}}else{if(af){if(!ag){R.modified=ag={}}R.dirty=true;ag[O]=X}}}if(O===R.idField.name){Z=true;N=X;V=K}}if(!L){break}aq=ai[L-1];aq.dirty=false;if(T){delete ao[an]}else{ao=R._singleProp;T=true}an=aq.name;ao[an]=Q[an];ac=true;for(;L0;){G=(w=F[E]).name;if(!(G in z)){t=D[G];if(n&&w.serialize){t=w.serialize(t,y)}z[G]=t}}}if(x){y.getAssociatedData(z)}return z},getTransientFields:function(){var d=this.self,c=d.transientFields;if(!c){d.rankFields();c=d.transientFields}return c},isLoading:function(){return !!this.loadOperation},abort:function(){var b=this.loadOperation;if(b){b.abort()}},load:function(j){j=Ext.apply({},j);var n=this,o=j.scope||n,q=n.getProxy(),l=j.callback,k=n.loadOperation,m=n.getId(),p;if(k){p=k.extraCalls;if(!p){p=k.extraCalls=[]}p.push(j);return k}j.id=m;j.recordCreator=function(b,d,c){var a=n.session;c.recordCreator=a?a.recordCreator:null;n.set(b,n._commitOptions);return n};j.internalCallback=function(b){var f=b.wasSuccessful()&&b.getRecords().length>0,e=n.loadOperation,h=e.extraCalls,c=[n,b],g=[n,b,f],a,d;n.loadOperation=null;if(f){Ext.callback(j.success,o,c)}else{Ext.callback(j.failure,o,c)}Ext.callback(l,o,g);if(h){for(a=0,d=h.length;a0;){C=u[z];if(C in A){delete A[C];delete s[C]}}for(z=0,w=x.length;z=k.getTotal()){k.setConfig({success:false,records:[],total:0})}else{k.setRecords(Ext.Array.slice(p,r,r+o))}}n.setCompleted()}},clear:Ext.emptyFn},0,0,0,0,["proxy.memory"],0,[Ext.data.proxy,"Memory",Ext.data,"MemoryProxy"],0));(Ext.cmd.derive("Ext.data.ProxyStore",Ext.data.AbstractStore,{config:{model:undefined,fields:null,proxy:undefined,autoLoad:undefined,autoSync:false,batchUpdateMode:"operation",sortOnLoad:true,trackRemoved:true},onClassExtended:function(f,j,g){var k=j.model,h;if(typeof k==="string"){h=g.onBeforeCreated;g.onBeforeCreated=function(){var a=this,b=arguments;Ext.require(k,function(){h.apply(a,b)})}}},implicitModel:false,blockLoadCounter:0,autoSyncSuspended:0,constructor:function(d){var c=this;c.removed=[];c.blockLoad();Ext.data.AbstractStore.prototype.constructor.apply(this,arguments);c.unblockLoad()},updateAutoLoad:function(d){var f=this,e;f.getData();if(d){e=f.loadTask||(f.loadTask=new Ext.util.DelayedTask(null,null,null,null,false));e.delay(1,f.attemptLoad,f,Ext.isObject(d)?[d]:undefined)}},getTotalCount:function(){return this.totalCount||0},applyFields:function(f){var g=this,e,h;if(f){g.implicitModel=true;g.setModel(e=Ext.define(null,{extend:"Ext.data.Model",fields:f,proxy:(h=g.getProxy())}));if(h&&!h.getModel()){h.setModel(e)}}},applyModel:function(b){if(b){b=Ext.data.schema.Schema.lookupEntity(b)}else{this.getFields();return this.getModel()}return b},applyProxy:function(d){var f=this,e=f.getModel();if(d){if(d.isProxy){d.setModel(e)}else{if(Ext.isString(d)){d={type:d,model:e}}else{if(!d.model){d=Ext.apply({model:e},d)}}d=Ext.createByAlias("proxy."+d.type,d)}}else{if(e){d=e.getProxy()}}if(!d){d=Ext.createByAlias("proxy.memory")}if(!f.disableMetaChangeEvent){d.on("metachange",f.onMetaChange,f)}return d},updateTrackRemoved:function(b){this.removed=b?[]:null},onMetaChange:function(d,c){this.fireEvent("metachange",this,c)},create:function(j,m){var k=this,h=new k.model(j),l=k.getProxy(),g;m=Ext.apply({},m);if(!m.records){m.records=[h]}m.internalScope=k;m.internalCallback=k.onProxyWrite;g=l.createOperation("create",m);return g.execute()},read:function(){return this.load.apply(this,arguments)},update:function(e){var g=this,h=g.getProxy(),f;e=Ext.apply({},e);if(!e.records){e.records=g.getUpdatedRecords()}e.internalScope=g;e.internalCallback=g.onProxyWrite;f=h.createOperation("update",e);return f.execute()},onProxyWrite:function(e){var h=this,g=e.wasSuccessful(),f=e.getRecords();switch(e.getAction()){case"create":h.onCreateRecords(f,e,g);break;case"update":h.onUpdateRecords(f,e,g);break;case"destroy":h.onDestroyRecords(f,e,g);break}if(g){h.fireEvent("write",h,e);h.fireEvent("datachanged",h);h.fireEvent("refresh",h)}},onCreateRecords:Ext.emptyFn,onUpdateRecords:Ext.emptyFn,onDestroyRecords:function(d,e,f){if(f){this.removed.length=0}},erase:function(e){var g=this,h=g.getProxy(),f;e=Ext.apply({},e);if(!e.records){e.records=g.getRemovedRecords()}e.internalScope=g;e.internalCallback=g.onProxyWrite;f=h.createOperation("destroy",e);return f.execute()},onBatchOperationComplete:function(c,d){return this.onProxyWrite(d)},onBatchComplete:function(m,h){var j=this,g=m.operations,k=g.length,l;if(j.batchUpdateMode!="operation"){j.suspendEvents();for(l=0;l0){h.create=l;k=true}if(n.length>0){h.update=n;k=true}if(j.length>0){h.destroy=j;k=true}if(k&&m.fireEvent("beforesync",h)!==false){m.isSyncing=true;o=o||{};m.proxy.batch(Ext.apply(o,{operations:h,listeners:m.getBatchListeners()}))}return m},getBatchListeners:function(){var c=this,d={scope:c,exception:c.onBatchException,complete:c.onBatchComplete};if(c.batchUpdateMode=="operation"){d.operationcomplete=c.onBatchOperationComplete}return d},save:function(){return this.sync.apply(this,arguments)},blockLoad:function(b){if(b!==undefined){this.blockLoadCounter=b}else{++this.blockLoadCounter}},unblockLoad:function(d){var f=this,e=f.blockLoadCounter;if(d){f.blockLoadCounter=0}else{if(e){--f.blockLoadCounter}}return e},isLoadBlocked:function(){return !!this.blockLoadCounter},attemptLoad:function(b){if(!this.isLoadBlocked()){this.load(b)}},load:function(h){if(this.isLoadBlocked()){return}var l=this,o=l.getProxy(),m=l.loadTask,j={internalScope:l,internalCallback:l.onProxyLoad},n,k;if(l.getRemoteFilter()){n=l.getFilters();if(n.getCount()){j.filters=n.getRange()}}if(l.getRemoteSort()){k=l.getSorters();if(k.getCount()){j.sorters=k.getRange()}l.fireEvent("beforesort",l,j.sorters)}Ext.apply(j,h);j.scope=j.scope||l;l.lastOptions=j;j=o.createOperation("read",j);if(l.fireEvent("beforeload",l,j)!==false){l.loading=true;if(m){m.cancel();l.loadTask=null}j.execute()}return l},reload:function(d){var c=Ext.apply({},d,this.lastOptions);return this.load(c)},onEndUpdate:function(){var b=this;if(b.needsSync&&b.autoSync&&!b.autoSyncSuspended){b.sync()}},afterReject:function(d){var c=this;if(c.contains(d)){c.onUpdate(d,Ext.data.Model.REJECT,null);c.fireEvent("update",c,d,Ext.data.Model.REJECT,null)}},afterCommit:function(e,f){var d=this;if(!f){f=null}if(d.contains(e)){d.onUpdate(e,Ext.data.Model.COMMIT,f);d.fireEvent("update",d,e,Ext.data.Model.COMMIT,f)}},afterErase:function(b){this.onErase(b)},onErase:Ext.emptyFn,onUpdate:Ext.emptyFn,onDestroy:function(){var b=this;b.blockLoad();b.clearData();b.setProxy(null);b.setModel(null)},hasPendingLoad:function(){return !!this.loadTask||this.isLoading()},isLoading:function(){return !!this.loading},isLoaded:function(){return this.loadCount>0},suspendAutoSync:function(){++this.autoSyncSuspended},resumeAutoSync:function(c){var d=this;if(d.autoSyncSuspended&&!--d.autoSyncSuspended){if(c){d.sync()}}},removeAll:Ext.emptyFn,clearData:Ext.emptyFn},1,0,0,0,0,0,[Ext.data,"ProxyStore"],0));(Ext.cmd.derive("Ext.data.proxy.Server",Ext.data.proxy.Proxy,{alternateClassName:"Ext.data.ServerProxy",isRemote:true,config:{url:"",pageParam:"page",startParam:"start",limitParam:"limit",groupParam:"group",groupDirectionParam:"groupDir",sortParam:"sort",filterParam:"filter",directionParam:"dir",idParam:"id",simpleSortMode:false,simpleGroupMode:false,noCache:true,cacheString:"_dc",timeout:30000,api:{create:undefined,read:undefined,update:undefined,destroy:undefined},extraParams:{}},create:function(){return this.doRequest.apply(this,arguments)},read:function(){return this.doRequest.apply(this,arguments)},update:function(){return this.doRequest.apply(this,arguments)},erase:function(){return this.doRequest.apply(this,arguments)},setExtraParam:function(d,c){this.getExtraParams()[d]=c},buildRequest:function(j){var l=this,h=Ext.apply({},j.getParams()),k=Ext.applyIf(h,l.getExtraParams()||{}),m,n,o;Ext.applyIf(k,l.getParams(j));n=j.getId();o=l.getIdParam();if(n!==undefined&&k[o]===undefined){k[o]=n}m=new Ext.data.Request({params:k,action:j.getAction(),records:j.getRecords(),url:j.getUrl(),operation:j,proxy:l});m.setUrl(l.buildUrl(m));j.setRequest(m);return m},processResponse:function(l,q,m,j){var n=this,p,k,o;if(l===true){k=n.getReader();if(j.status===204){o=k.getNullResultSet()}else{o=k.read(n.extractResponseData(j),{recordCreator:q.getRecordCreator()})}q.process(o,m,j);p=!q.wasSuccessful()}else{n.setException(q,j);p=true}if(p){n.fireEvent("exception",n,j,q)}n.afterRequest(m,l)},setException:function(c,d){c.setException({status:d.status,statusText:d.statusText,response:d})},extractResponseData:Ext.identityFn,applyEncoding:function(b){return Ext.encode(b)},encodeSorters:function(h,k){var g=[],j=h.length,f;for(f=0;f0){if(G){I=0;if(Q.length>1&&H){I=1}x[L]=Q[I].getProperty();x[D]=Q[I].getDirection()}else{x[L]=w.encodeSorters(Q)}}if(B&&E&&E.length>0){x[B]=w.encodeFilters(E)}return x},buildUrl:function(f){var d=this,e=d.getUrl(f);if(d.getNoCache()){e=Ext.urlAppend(e,Ext.String.format("{0}={1}",d.getCacheString(),Ext.Date.now()))}return e},getUrl:function(c){var d;if(c){d=c.getUrl()||this.getApi()[c.getAction()]}return d?d:(arguments.callee.$previous||Ext.data.proxy.Proxy.prototype.getUrl).call(this)},doRequest:function(b){},afterRequest:Ext.emptyFn,onDestroy:function(){Ext.destroy(this.getReader(),this.getWriter())}},0,0,0,0,["proxy.server"],0,[Ext.data.proxy,"Server",Ext.data,"ServerProxy"],0));(Ext.cmd.derive("Ext.data.proxy.Ajax",Ext.data.proxy.Server,{alternateClassName:["Ext.data.HttpProxy","Ext.data.AjaxProxy"],defaultActionMethods:{create:"POST",read:"GET",update:"POST",destroy:"POST"},config:{binary:false,headers:undefined,paramsAsJson:false,withCredentials:false,useDefaultXhrHeader:true,username:null,password:null,actionMethods:{create:"POST",read:"GET",update:"POST",destroy:"POST"}},doRequest:function(j){var n=this,m=n.getWriter(),o=n.buildRequest(j),k=n.getMethod(o),h,l;if(m&&j.allowWrite()){o=m.write(o)}o.setConfig({binary:n.getBinary(),headers:n.getHeaders(),timeout:n.getTimeout(),scope:n,callback:n.createRequestCallback(o,j),method:k,useDefaultXhrHeader:n.getUseDefaultXhrHeader(),disableCaching:false});if(k.toUpperCase()!=="GET"&&n.getParamsAsJson()){l=o.getParams();if(l){h=o.getJsonData();if(h){h=Ext.Object.merge({},h,l)}else{h=l}o.setJsonData(h);o.setParams(undefined)}}if(n.getWithCredentials()){o.setWithCredentials(true);o.setUsername(n.getUsername());o.setPassword(n.getPassword())}return n.sendRequest(o)},sendRequest:function(b){b.setRawRequest(Ext.Ajax.request(b.getCurrentConfig()));this.lastRequest=b;return b},abort:function(b){b=b||this.lastRequest;if(b){Ext.Ajax.abort(b.getRawRequest())}},getMethod:function(f){var h=this.getActionMethods(),e=f.getAction(),g;if(h){g=h[e]}return g||this.defaultActionMethods[e]},createRequestCallback:function(f,e){var d=this;return function(b,a,c){if(f===d.lastRequest){d.lastRequest=null}d.processResponse(a,e,f,c)}}},0,0,0,0,["proxy.ajax"],0,[Ext.data.proxy,"Ajax",Ext.data,"HttpProxy",Ext.data,"AjaxProxy"],0));(Ext.cmd.derive("Ext.data.reader.Json",Ext.data.reader.Reader,{alternateClassName:"Ext.data.JsonReader",config:{record:null,metaProperty:"metaData",useSimpleAccessors:false,preserveRawData:false},updateRootProperty:function(){this.forceBuildExtractors()},updateMetaProperty:function(){this.forceBuildExtractors()},readRecords:function(h,e){var f=this,g;if(f.getMeta){g=f.getMeta(h);if(g){f.onMetaChange(g)}}else{if(h.metaData){f.onMetaChange(h.metaData)}}return Ext.data.reader.Reader.prototype.readRecords.call(this,h,e)},getResponseData:function(d){try{return Ext.decode(d.responseText)}catch(c){Ext.Logger.warn("Unable to parse the JSON returned by the server");return this.createReadError(c.message)}},buildExtractors:function(){var f=this,d=f.getMetaProperty(),e=f.getRootProperty();if(f.callParent(arguments)){if(e){f.getRoot=f.createAccessor(e)}else{f.getRoot=Ext.identityFn}if(d){f.getMeta=f.createAccessor(d)}}},extractData:function(h,k){var j=this.getRecord(),l=[],m,g;if(j){m=h.length;if(!m&&Ext.isObject(h)){m=1;h=[h]}for(g=0;g1||(u&&!w)){F+=y}else{if(z){a=false;if(v){++u}else{if(w){--u;a=true}}if(F){if(a){F="["+F+"]"}else{F="."+F}A+=F;D.push(""+A);F=""}}}}H=D.join(" && ");H=Ext.functionFactory("raw","return "+H)}return H}}()),createFieldAccessor:function(h){var f=this,g=h.mapping,k=g||g===0,j=k?g:h.name;if(k){if(typeof j==="function"){return function(a){return h.mapping(a,f)}}else{return f.createAccessor(j)}}}},0,0,0,0,["reader.json"],0,[Ext.data.reader,"Json",Ext.data,"JsonReader"],0));(Ext.cmd.derive("Ext.data.writer.Json",Ext.data.writer.Writer,{alternateClassName:"Ext.data.JsonWriter",config:{rootProperty:undefined,encode:false,allowSingle:true,expandData:false},getExpandedData:function(p){var r=p.length,o=0,l,s,n,q,m,j=function(c,b){var a={};a[c]=b;return a};for(;o0){m=l[s];for(;q>0;q--){m=j(n[q],m)}l[n[0]]=l[n[0]]||{};Ext.Object.merge(l[n[0]],m);delete l[s]}}}}return p},writeRecords:function(m,l){var n=this,j=n.getRootProperty(),o,k,h;if(n.getExpandData()){l=n.getExpandedData(l)}if(n.getAllowSingle()&&l.length===1){l=l[0];k=true}h=this.getTransform();if(h){l=h(l,m);m.setJsonData(l)}if(n.getEncode()){if(j){m.setParam(j,Ext.encode(l))}else{}}else{if(k||(l&&l.length)){o=m.getJsonData()||{};if(j){o[j]=l}else{o=l}m.setJsonData(o)}}return m}},0,0,0,0,["writer.json"],0,[Ext.data.writer,"Json",Ext.data,"JsonWriter"],0));(Ext.cmd.derive("Ext.util.Group",Ext.util.Collection,{config:{groupKey:null}},0,0,0,0,0,0,[Ext.util,"Group"],0));(Ext.cmd.derive("Ext.util.SorterCollection",Ext.util.Collection,{isSorterCollection:true,$sortable:null,sortFn:null,config:{sorterOptionsFn:null,sorterOptionsScope:null},constructor:function(d){var c=this;c.sortFn=Ext.util.Sorter.createComparator(c);Ext.util.Collection.prototype.constructor.call(this,d);c.setDecoder(c.decodeSorter)},addSort:function(o,p,u){var q=this,t,s,v,m,w,n,r;if(!o){q.beginUpdate();q.endUpdate()}else{m=q.getOptions();if(o instanceof Array){r=o;u=p;p=null}else{if(Ext.isString(o)){if(!(n=q.get(o))){r=[{property:o,direction:p||m.getDefaultSortDirection()}]}else{r=[n]}}else{if(Ext.isFunction(o)){r=[{sorterFn:o,direction:p||m.getDefaultSortDirection()}]}else{r=[o];u=p;p=null}}}u=q._sortModes[u||"replace"];w=q.getAt(0);t=q.length;s=u.append?t:0;q.beginUpdate();q.splice(s,u.replace?t:0,r);if(u.multi){t=q.length;v=m.getMultiSortLimit();if(t>v){q.removeAt(v,t)}}if(n&&p){n.setDirection(p)}else{if(s===0&&w&&w===q.getAt(0)){w.toggle()}}q.endUpdate()}},getSortFn:function(){return this.sortFn},getByProperty:function(h){var f=this.items,g=f.length,k,j;for(k=0;kv+1||!Ext.isIterable(u)){u=Ext.Array.slice(s,v)}var p=q.items,t=u.length,w=[],x,o,y,n,r;for(x=0;x0;){o=p[y];if(o.getSorterFn()===n){w.push(o)}}}}}}u=w;u.$cloned=true}return u},getOptions:function(){return this.$sortable||this}},1,0,0,0,0,0,[Ext.util,"SorterCollection"],0));(Ext.cmd.derive("Ext.util.FilterCollection",Ext.util.Collection,{isFilterCollection:true,$filterable:null,filterFn:null,constructor:function(d){var c=this;c.filterFn=Ext.util.Filter.createFilterFn(c);Ext.util.Collection.prototype.constructor.call(this,d);c.setDecoder(c.decodeFilter)},filterData:function(b){return this.filtered?Ext.Array.filter(b,this.filterFn):b},getFilterFn:function(){return this.filterFn},isItemFiltered:function(b){return !this.filterFn(b)},decodeFilter:function(h){var e=this.getOptions(),f=e.getRootProperty(),g;if(h.isFilter){if(!h.getRoot()){h.setRoot(f)}}else{g={root:f};if(Ext.isFunction(h)){g.filterFn=h}else{g=Ext.apply(g,h);if(g.fn){g.filterFn=g.fn;delete g.fn}if(Ext.util.Filter.isInvalid(g)){return false}}h=new Ext.util.Filter(g)}return h},decodeRemoveItems:function(u,y){var s=this,x=(y===undefined)?u:u[y];if(!x.$cloned){if(u.length>y+1||!Ext.isIterable(x)){x=Ext.Array.slice(u,y)}var C=s.items,v=x.length,A=[],F,B,E,w,G,n,z,D,t;for(B=0;B0;){n=C[D];z=false;if(G){z=n.getProperty()===F}else{if(E){z=n.getFilterFn()===F}else{if(w){z=n.getProperty()===F.property&&n.getValue()===F.value}}}if(z){A.push(n)}}}}x=A;x.$cloned=true}return x},getOptions:function(){return this.$filterable||this}},1,0,0,0,0,0,[Ext.util,"FilterCollection"],0));(Ext.cmd.derive("Ext.util.GroupCollection",Ext.util.Collection,{isGroupCollection:true,config:{itemRoot:null},observerPriority:-100,onCollectionAdd:function(c,d){this.addItemsToGroups(c,d.items)},onCollectionBeforeItemChange:function(j,g){var k=this,f=g.item,h=j.getKey(f);k.onCollectionAdd=k.onCollectionRemove=k.onCollectionUpdateKey=null;k.syncItemGrouping(j,f,h,g.oldKey)},onCollectionBeginUpdate:function(){this.beginUpdate()},onCollectionEndUpdate:function(){this.endUpdate()},onCollectionItemChange:function(c,d){delete this.onCollectionAdd;delete this.onCollectionRemove;delete this.onCollectionUpdateKey},onCollectionRefresh:function(b){this.removeAll();this.addItemsToGroups(b,b.items)},onCollectionRemove:function(s,r){var m=this,n=m.groupItems(s,r.items,false),l,k,o,q,p;for(o=0,q=n.length;o-1){s=[r];n=1}else{n=0}}else{s=[];for(p=0,n=r.length;p=0;f--){h=j[f];k.insert(h.removedFrom||0,h);h.reject()}j.length=0}},onDestroy:function(){var e=this,f=e.loadTask,g=e.getData(),h=g.getSource();Ext.data.ProxyStore.prototype.onDestroy.call(this);e.setSession(null);e.observers=null;if(f){f.cancel();e.loadTask=null}e.clearData(false,h||g);g.destroy();if(h){h.destroy()}e.setData(null)}},1,0,0,0,["store.store"],[[Ext.data.LocalStore.prototype.mixinId||Ext.data.LocalStore.$className,Ext.data.LocalStore]],[Ext.data,"Store"],0));(Ext.cmd.derive("Ext.data.reader.Array",Ext.data.reader.Json,{alternateClassName:"Ext.data.ArrayReader",config:{totalProperty:undefined,successProperty:undefined},createFieldAccessor:function(g){var e=g.mapping,h=g.hasMapping()?e:g.ordinal,f;g.mapping=h;f=Ext.data.reader.Json.prototype.createFieldAccessor.apply(this,arguments);g.mapping=e;return f},getModelData:function(b){return{}}},0,0,0,0,["reader.array"],0,[Ext.data.reader,"Array",Ext.data,"ArrayReader"],0));(Ext.cmd.derive("Ext.data.ArrayStore",Ext.data.Store,{alternateClassName:["Ext.data.SimpleStore"],config:{proxy:{type:"memory",reader:"array"}},loadData:function(h,g){if(this.expandData){var j=[],f=0,k=h.length;for(;f=o.totalCount)?t:r;p=u===0?0:u-1;w=r===t?r:r+1;o.lastRequestStart=u;o.lastRequestEnd=r;if(o.rangeCached(p,w)){o.onRangeAvailable(n);m=q.getRange(u,r+1)}else{o.fireEvent("cachemiss",o,u,r);v=function(b,a){if(o.rangeCached(p,w)){o.fireEvent("cachefilled",o,u,r);q.un("pageadded",v);o.onRangeAvailable(n)}};q.on("pageadded",v);o.prefetchRange(u,r)}o.primeCache(u,r,ug-1)?g-1:l.prefetchEnd,m;h=Math.max(0,h);m=k.getData().getRange(j,h+1);if(l.fireEvent!==false){k.fireEvent("guaranteedrange",m,j,h,l)}if(l.callback){l.callback.call(l.scope||k,m,j,h,l)}},guaranteeRange:function(h,g,j,k,f){f=Ext.apply({callback:j,scope:k},f);this.getRange(h,g+1,f)},prefetchRange:function(k,h){var m=this,n=m.getPurgePageCount(),o,j,l;if(!m.rangeCached(k,h)){o=m.getPageFromRecordIndex(k);j=m.getPageFromRecordIndex(h);m.getData().setMaxSize(n?(j-o+1)+n:0);for(l=o;l<=j;l++){if(!m.pageCached(l)){m.prefetchPage(l)}}}},primeCache:function(l,q,m){var n=this,o=n.getLeadingBufferZone(),p=n.getTrailingBufferZone(),j=n.getPageSize(),k=n.totalCount;if(m===-1){l=Math.max(l-o,0);q=Math.min(q+p,k-1)}else{if(m===1){l=Math.max(Math.min(l-p,k-j),0);q=Math.min(q+o,k-1)}else{l=Math.min(Math.max(Math.floor(l-((o+p)/2)),0),k-n.pageSize);q=Math.min(Math.max(Math.ceil(q+((o+p)/2)),0),k-1)}}n.prefetchRange(l,q)},sort:function(d,e,f){if(arguments.length===0){this.clearAndLoad()}else{this.getSorters().addSort(d,e,f)}},onSorterEndUpdate:function(){var d=this,c=d.getSorters().getRange();if(c.length){d.clearAndLoad({callback:function(){d.fireEvent("sort",d,c)}})}else{d.fireEvent("sort",d,c)}},clearAndLoad:function(b){this.getData().clear();this.loadPage(1,b)}},0,0,0,0,["store.buffered"],0,[Ext.data,"BufferedStore"],0));(Ext.cmd.derive("Ext.data.Request",Ext.Base,{config:{action:undefined,params:undefined,method:"GET",url:null,operation:null,proxy:null,disableCaching:false,headers:{},callbackKey:null,rawRequest:null,jsonData:undefined,xmlData:undefined,withCredentials:false,username:null,password:null,binary:false,callback:null,scope:null,timeout:30000,records:null,directFn:null,args:null,useDefaultXhrHeader:null},constructor:function(b){this.initConfig(b)},getParam:function(e){var f=this.getParams(),d;if(f){return f[e]}return d},setParam:function(e,d){var f=this.getParams()||{};f[e]=d;this.setParams(f)}},1,0,0,0,0,0,[Ext.data,"Request"],0));(Ext.cmd.derive("Ext.data.StoreManager",Ext.util.MixedCollection,{alternateClassName:["Ext.StoreMgr","Ext.data.StoreMgr","Ext.StoreManager"],singleton:true,register:function(){for(var d=0,c;(c=arguments[d]);d++){this.add(c)}},unregister:function(){for(var d=0,c;(c=arguments[d]);d++){this.remove(this.lookup(c))}},lookup:function(m){if(Ext.isArray(m)){var g=["field1"],k=!Ext.isArray(m[0]),j=m,l,h;if(k){j=[];for(l=0,h=m.length;l")}else{h.push(">");if((s=b.tpl)){s.applyOut(b.tplData,h)}if((s=b.html)){h.push(s)}if((s=b.cn||b.children)){c.generateMarkup(s,h)}g=c.closeTags;h.push(g[a]||(g[a]=""))}}}return h},generateStyles:function(f,c,a){var d=c||[],b,e;for(b in f){if(f.hasOwnProperty(b)){e=f[b];b=this.decamelizeName(b);if(a&&Ext.String.hasHtmlCharacters(e)){e=Ext.String.htmlEncode(e)}d.push(b,":",e,";")}}return c||d.join("")},markup:function(b){if(typeof b==="string"){return b}var a=this.generateMarkup(b,[]);return a.join("")},applyStyles:function(b,a){Ext.fly(b).applyStyles(a)},createContextualFragment:function(c){var e=this.detachedDiv,d=document.createDocumentFragment(),b,a;e.innerHTML=c;a=e.childNodes;b=a.length;while(b--){d.appendChild(a[0])}return d},createDom:function(a,d){var b=this,c=b.markup(a),e=b.detachedDiv;e.innerHTML=c;return e.firstChild},insertHtml:function(f,t,e){var a=this,h,d,g,b,u;f=f.toLowerCase();if(t.insertAdjacentHTML){if(a.ieInsertHtml){u=a.ieInsertHtml(f,t,e);if(u){return u}}h=j[f];if(h){t.insertAdjacentHTML(h[0],e);return t[h[1]]}}else{if(t.nodeType===3){f=f===k?m:f;f=f===p?n:f}d=Ext.supports.CreateContextualFragment?t.ownerDocument.createRange():undefined;b="setStart"+(this.endRe.test(f)?"After":"Before");if(q[f]){if(d){d[b](t);u=d.createContextualFragment(e)}else{u=this.createContextualFragment(e)}t.parentNode.insertBefore(u,f===m?t:t.nextSibling);return t[(f===m?"previous":"next")+"Sibling"]}else{g=(f===k?"first":"last")+"Child";if(t.firstChild){if(d){try{d[b](t[g]);u=d.createContextualFragment(e)}catch(c){u=this.createContextualFragment(e)}}else{u=this.createContextualFragment(e)}if(f===k){t.insertBefore(u,t.firstChild)}else{t.appendChild(u)}}else{t.innerHTML=e}return t[g]}}},insertBefore:function(c,a,b){return this.doInsert(c,a,b,m)},insertAfter:function(c,a,b){return this.doInsert(c,a,b,n)},insertFirst:function(c,a,b){return this.doInsert(c,a,b,k)},append:function(c,a,b){return this.doInsert(c,a,b,p)},overwrite:function(b,c,e){var a=this,d;b=Ext.getDom(b);c=a.markup(c);if(a.ieOverwrite){d=a.ieOverwrite(b,c)}if(!d){b.innerHTML=c;d=b.firstChild}return e?Ext.get(d):d},doInsert:function(b,e,f,d){var a=this,c;b=b.dom||Ext.getDom(b);if("innerHTML" in b){c=a.insertHtml(d,b,a.markup(e))}else{c=a.createDom(e,null);if(b.nodeType===3){d=d===k?m:d;d=d===p?n:d}if(q[d]){b.parentNode.insertBefore(c,d===m?b:b.nextSibling)}else{if(b.firstChild&&d===k){b.insertBefore(c,b.firstChild)}else{b.appendChild(c)}}}return f?Ext.get(c):c},createTemplate:function(a){var b=this.markup(a);return new Ext.Template(b)},createHtml:function(a){return this.markup(a)}}},0,0,0,0,0,0,[Ext.dom,"Helper",Ext,"DomHelper",Ext.core,"DomHelper"],0));Ext.define("Ext.overrides.dom.Helper",(function(){var q=/^(?:table|thead|tbody|tr|td)$/i,m=/td|tr|tbody|thead/i,n="",l="
",j=n+"",o=""+l,k=j+"",p=""+o;return{override:"Ext.dom.Helper",ieInsertHtml:function(d,b,c){var a=null;if(Ext.isIE9m&&q.test(b.tagName)){a=this.insertIntoTable(b.tagName.toLowerCase(),d,b,c)}return a},ieOverwrite:function(a,b){if(Ext.isIE9m&&q.test(a.tagName)){while(a.firstChild){a.removeChild(a.firstChild)}if(b){return this.insertHtml("afterbegin",a,b)}}},ieTable:function(f,c,e,g){var b=-1,h=this.detachedDiv,a,d;h.innerHTML=[c,e,g].join("");while(++b0?1:-1,o=this.getMinMomentumValue(),r=this.getMaxMomentumValue(),s=(p==1)?r:o,n=this.lastValue,m,t;if(q===0){return this.getStartValue()}if(!this.isOutOfBound){m=u.getValue();t=u.getVelocity();if(Math.abs(t)=o&&m<=r){return m}this.isOutOfBound=true;l.setStartTime(Ext.Date.now()).setStartVelocity(t).setStartValue(s)}m=l.getValue();if(!this.isEnded){if(!this.isBouncingBack){if(n!==null){if((p==1&&mn)){this.isBouncingBack=true}}}else{if(Math.round(m)==s){this.isEnded=true}}}this.lastValue=m;return m}},0,0,0,0,0,0,[Ext.fx.easing,"BoundMomentum"],0));(Ext.cmd.derive("Ext.fx.easing.Linear",Ext.fx.easing.Abstract,{config:{duration:0,endValue:0},updateStartValue:function(b){this.distance=this.getEndValue()-b},updateEndValue:function(b){this.distance=b-this.getStartValue()},getValue:function(){var d=Ext.Date.now()-this.getStartTime(),c=this.getDuration();if(d>c){this.isEnded=true;return this.getEndValue()}else{return this.getStartValue()+((d/c)*this.distance)}}},0,0,0,0,["easing.linear"],0,[Ext.fx.easing,"Linear"],0));(Ext.cmd.derive("Ext.fx.easing.EaseOut",Ext.fx.easing.Linear,{config:{exponent:4,duration:1500},getValue:function(){var n=Ext.Date.now()-this.getStartTime(),p=this.getDuration(),r=this.getStartValue(),l=this.getEndValue(),s=this.distance,q=n/p,m=1-q,o=1-Math.pow(m,this.getExponent()),k=r+(o*s);if(n>=p){this.isEnded=true;return l}return k}},0,0,0,0,["easing.ease-out"],0,[Ext.fx.easing,"EaseOut"],0));(Ext.cmd.derive("Ext.mixin.Responsive",Ext.Mixin,function(b){return{mixinConfig:{id:"responsive",after:{destroy:"destroy"}},config:{responsiveConfig:{$value:undefined,merge:function(h,m,j,k){if(!h){return m}var a=m?Ext.Object.chain(m):{},l;for(l in h){if(!k||!(l in a)){a[l]={fn:null,config:h[l]}}}return a}},responsiveFormulas:{$value:0,merge:function(f,a,g,h){return this.mergeNew(f,a,g,h)}}},destroy:function(){b.unregister(this);this.callParent()},privates:{statics:{active:false,all:{},context:{},count:0,nextId:0,activate:function(){b.active=true;b.updateContext();Ext.on("resize",b.onResize,b)},createRuleFn:function(a){return new Function("$c","with($c) { return ("+a+"); }")},deactivate:function(){b.active=false;Ext.un("resize",b.onResize,b)},notify:function(){var j=b.all,k=b.context,a=Ext.GlobalEvents,g=b.timer,h;if(g){b.timer=null;Ext.Function.cancelAnimationFrame(g)}b.updateContext();Ext.suspendLayouts();a.fireEvent("beforeresponsiveupdate",k);for(h in j){j[h].setupResponsiveContext()}a.fireEvent("beginresponsiveupdate",k);for(h in j){j[h].updateResponsiveState()}a.fireEvent("responsiveupdate",k);Ext.resumeLayouts(true)},onResize:function(){if(!b.timer){b.timer=Ext.Function.requestAnimationFrame(b.onTimer)}},onTimer:function(){b.timer=null;b.notify()},processConfig:function(a,j,l){var k=j&&j[l],m=a.config,o,n;if(k){n=a.getConfigurator();o=n.configs[l];m[l]=o.merge(k,m[l],a)}},register:function(a){var d=a.$responsiveId;if(!d){a.$responsiveId=d=++b.nextId;b.all[d]=a;if(++b.count===1){b.activate()}}},unregister:function(a){var d=a.$responsiveId;if(d in b.all){a.$responsiveId=null;delete b.all[d];if(--b.count===0){b.deactivate()}}},updateContext:function(){var g=Ext.Element,h=g.getViewportWidth(),a=g.getViewportHeight(),k=Ext.Microloader,j=b.context;j.width=h;j.height=a;j.tall=h',''," ({childCount} children)","",''," ({depth} deep)","",'',", {type}: {[this.time(values.sum)]} msec (","avg={[this.time(values.sum / parent.count)]}",")","",""].join(""),{time:function(c){return Math.round(c*100)/100}})}var a=this.getData(b);a.name=this.name;a.pure.type="Pure";a.total.type="Total";a.times=[a.pure,a.total];return r.apply(a)},getData:function(b){var a=this;return{count:a.count,childCount:a.childCount,depth:a.maxDepth,pure:p(a.count,a.childCount,b,a.pure),total:p(a.count,a.childCount,b,a.total)}},enter:function(){var b=this,a={accum:b,leave:q,childTime:0,parent:s};++b.depth;if(b.maxDepthh.x;f=j.y>h.y;if(k&&f){g="both"}else{if(k){g="horizontal"}else{g="vertical"}}}return g},updateDirection:function(j,k){var g=this.isAxisEnabledFlags,l=this.cls+"-vertical",h=this.cls+"-horizontal",m=this.getElement();if(k==="both"||k==="horizontal"){m.removeCls(h)}if(k==="both"||k==="vertical"){m.removeCls(l)}g.x=g.y=false;if(j==="both"||j==="horizontal"){g.x=true;m.addCls(h)}if(j==="both"||j==="vertical"){g.y=true;m.addCls(l)}},isAxisEnabled:function(b){this.getDirection();return this.isAxisEnabledFlags[b]},applyMomentumEasing:function(c){var d=Ext.fx.easing.BoundMomentum;return{x:Ext.factory(c,d),y:Ext.factory(c,d)}},applyBounceEasing:function(c){var d=Ext.fx.easing.EaseOut;return{x:Ext.factory(c,d),y:Ext.factory(c,d)}},updateBounceEasing:function(b){this.getTranslatable().setEasingX(b.x).setEasingY(b.y)},applySlotSnapEasing:function(c){var d=Ext.fx.easing.EaseOut;return{x:Ext.factory(c,d),y:Ext.factory(c,d)}},getPosition:function(){return this.getTranslatable().getPosition()},getMinPosition:function(){var b=this.minPosition;if(!b){this.minPosition=b={x:0,y:0};this.fireEvent("minpositionchange",this,b)}return b},getMaxPosition:function(){var e=this,g=e.maxPosition,f,h;if(!g){f=e.getSize();h=e.getContainerSize();e.maxPosition=g={x:Math.max(0,f.x-h.x),y:Math.max(0,f.y-h.y)};if(g.x!==e.lastMaxPosition.x||g.y!==e.lastMaxPosition.y){e.fireEvent("maxpositionchange",e,g);e.lastMaxPosition.x=g.x;e.lastMaxPosition.y=g.y}}return g},refreshMaxPosition:function(){this.maxPosition=null;this.getMaxPosition()},applyContainerSize:function(e){var h=this.getContainer().dom,f,g;if(!h){return}this.givenContainerSize=e;if(e==="auto"){f=h.clientWidth;g=h.clientHeight}else{f=e.x;g=e.y}return{x:f,y:g}},applySize:function(f){var j=this.getElement().dom,k=this.getContainer().dom,g,h;if(!j){return}this.givenSize=f;if(f==="auto"){g=Math.max(j.offsetWidth,k.clientWidth);h=Math.max(j.offsetHeight,k.clientHeight)}else{if(typeof f=="number"){g=f;h=f}else{g=f.x;h=f.y}}return{x:g,y:h}},updateAutoRefresh:function(b){this.getElement().toggleListener(b,"resize","onElementResize",this);this.getContainer().toggleListener(b,"resize","onContainerResize",this)},applySlotSnapSize:function(b){if(typeof b=="number"){return{x:b,y:b}}return b},applySlotSnapOffset:function(b){if(typeof b=="number"){return{x:b,y:b}}return b},getContainer:function(){var d=this.container,c;if(!d){c=this.getElement().getParent();this.container=d=this.FixedHBoxStretching?c.getParent():c;d.addCls(this.containerCls)}return d},refresh:function(){this.stopAnimation();this.getTranslatable().refresh();this.setSize(this.givenSize);this.setContainerSize(this.givenContainerSize);this.setDirection(this.givenDirection);this.fireEvent("refresh",this);return this},onElementResize:function(d,c){this.setSize({x:c.width,y:c.height});this.refresh()},onContainerResize:function(d,c){this.setContainerSize({x:c.width,y:c.height});this.refresh()},scrollTo:function(n,o,t){var p=this,u;if(p.isDestroyed){return p}if(typeof n!="number"&&arguments.length===1){o=n.y;n=n.x}var m=p.getTranslatable(),s=p.getPosition(),l=false,q,r;if(p.isAxisEnabled("x")){if(isNaN(n)||typeof n!="number"){n=s.x}else{if(s.x!==n){l=true}}q=this.convertX(-n)}if(p.isAxisEnabled("y")){if(isNaN(o)||typeof o!="number"){o=s.y}else{if(s.y!==o){l=true}}r=-o}if(l){if(t!==undefined&&t!==false){u=function(){p.fireEvent("scroll",p,n,o)};if(t===true){t={callback:u}}else{if(t.callback){t.callback=Ext.Function.createSequence(t.callback,u)}else{t.callback=u}}m.translateAnimated(q,r,t)}else{m.translate(q,r);p.fireEvent("scroll",p,n,o)}}return this},scrollToTop:function(c){var d=this.getInitialOffset();return this.scrollTo(d.x,d.y,c)},scrollToEnd:function(f){var d=this.getSize(),e=this.getContainerSize();return this.scrollTo(d.x-e.x,d.y-e.y,f)},scrollBy:function(e,g,h){var f=this.getPosition();e=(typeof e=="number")?e+f.x:null;g=(typeof g=="number")?g+f.y:null;return this.scrollTo(e,g,h)},onEvent:function(d){var e=this,f=d.browserEvent;if(!Ext.supports.Touch||e.getMouseEnabled()||(!e.isMouseEvent[f.type]&&f.pointerType!=="mouse")){e[e.listenerMap[d.type]](d)}},onTouchStart:function(){this.isTouching=this.self.isTouching=true;this.stopAnimation()},onTouchEnd:function(){var b=this.getPosition();this.isTouching=this.self.isTouching=false;if(!this.isDragging&&this.snapToSlot()){this.fireEvent("scrollstart",this,b.x,b.y)}},onDragStart:function(s){var e=this.getDirection(),x=s.absDeltaX,y=s.absDeltaY,u=this.getDirectionLock(),v=this.startPosition,z=this.flickStartPosition,t=this.flickStartTime,w=this.lastDragPosition,A=this.getPosition(),B=this.dragDirection,q=A.x,r=A.y,C=Ext.Date.now();this.isDragging=true;if(u&&e!=="both"){if((e==="horizontal"&&x>y)||(e==="vertical"&&y>x)){s.stopPropagation()}else{this.isDragging=false;return}}w.x=q;w.y=r;z.x=q;z.y=r;v.x=q;v.y=r;t.x=C;t.y=C;B.x=0;B.y=0;this.dragStartTime=C;this.isDragging=true;this.fireEvent("scrollstart",this,q,r)},onAxisDrag:function(A,s){if(!this.isAxisEnabled(A)){return}var B=this.flickStartPosition,x=this.flickStartTime,z=this.lastDragPosition,E=this.dragDirection,C=this.getPosition()[A],y=this.getMinPosition()[A],u=this.getMaxPosition()[A],F=this.startPosition[A],t=z[A],v=F-s,G=E[A],w=this.getOutOfBoundRestrictFactor(),D=this.getStartMomentumResetTime(),H=Ext.Date.now(),I;if(vu){I=v-u;v=u+I*w}}if(v>t){E[A]=1}else{if(vD){B[A]=C;x[A]=H}z[A]=v},onDrag:function(c){if(!this.isDragging){return}var d=this.lastDragPosition;this.onAxisDrag("x",this.convertX(c.deltaX));this.onAxisDrag("y",c.deltaY);this.scrollTo(d.x,d.y)},onDragEnd:function(f){var d,e;if(!this.isDragging){return}this.dragEndTime=Ext.Date.now();this.onDrag(f);this.isDragging=false;d=this.getAnimationEasing("x",f);e=this.getAnimationEasing("y",f);if(d||e){this.getTranslatable().animate(d,e)}else{this.onScrollEnd()}},getAnimationEasing:function(s,p){if(!this.isAxisEnabled(s)){return null}var t=this.getPosition()[s],v=this.getMinPosition()[s],q=this.getMaxPosition()[s],x=this.getMaxAbsoluteVelocity(),u=null,w=this.dragEndTime,r=p.flick.velocity[s],e=s==="x",y,o;if(tq){u=q}}if(e){t=this.convertX(t);u=this.convertX(u)}if(u!==null){o=this.getBounceEasing()[s];o.setConfig({startTime:w,startValue:-t,endValue:-u});return o}if(r===0){return null}if(r<-x){r=-x}else{if(r>x){r=x}}if(Ext.browser.is.IE){r*=2}o=this.getMomentumEasing()[s];y={startTime:w,startValue:-t,startVelocity:r*1.5,minMomentumValue:-q,maxMomentumValue:0};if(e){this.convertEasingConfig(y)}o.setConfig(y);return o},onAnimationFrame:function(h,e,g){var f=this.getPosition();this.fireEvent("scroll",this,this.convertX(f.x),f.y)},onAnimationEnd:function(){this.snapToBoundary();this.onScrollEnd()},stopAnimation:function(){this.getTranslatable().stopAnimation()},onScrollEnd:function(){var b=this.getPosition();if(this.isTouching||!this.snapToSlot()){this.fireEvent("scrollend",this,b.x,b.y)}},snapToSlot:function(){var d=this.getSnapPosition("x"),e=this.getSnapPosition("y"),f=this.getSlotSnapEasing();if(d!==null||e!==null){this.scrollTo(d,e,{easingX:f.x,easingY:f.y});return true}return false},getSnapPosition:function(o){var k=this.getSlotSnapSize()[o],n=null,j,l,m,h;if(k!==0&&this.isAxisEnabled(o)){j=this.getPosition()[o];l=this.getSlotSnapOffset()[o];m=this.getMaxPosition()[o];h=Math.floor((j-l)%k);if(h!==0){if(j!==m){if(Math.abs(h)>k/2){n=Math.min(m,j+((h>0)?k-h:h-k))}else{n=j-h}}else{n=j-h}}}return n},snapToBoundary:function(){if(!this.getSnapToBoundary()){return}var m=this.getPosition(),q=this.getMinPosition(),n=this.getMaxPosition(),o=q.x,p=q.y,r=n.x,s=n.y,k=Math.round(m.x),l=Math.round(m.y);if(kr){k=r}}if(ls){l=s}}this.scrollTo(k,l)},destroy:function(){var f=this.getElement(),d=this.sizeMonitors,e;if(d){d.element.destroy();d.container.destroy()}if(f&&!f.isDestroyed){f.removeCls(this.cls);e=this.getContainer();if(e&&!e.isDestroyed){e.removeCls(this.containerCls)}}Ext.destroy(this.getTranslatable());delete this.self.instances[this.id];Ext.Evented.prototype.destroy.apply(this,arguments)},convertX:function(b){return b},convertEasingConfig:function(b){return b}},1,0,0,0,0,0,[Ext.scroll,"Scroller"],function(){this.override({constructor:function(h){var n,m,j,k,o,l;if(!h){h={}}if(typeof h=="string"){h={direction:h}}if(arguments.length==2){n=h;h=arguments[1];if(!h){h={}}h.element=n}if(h.hasOwnProperty("acceleration")){m=h.acceleration;delete h.acceleration;Ext.merge(h,{momentumEasing:{momentum:{acceleration:m},bounce:{acceleration:m}}})}if(h.hasOwnProperty("snap")){h.slotSnapOffset=h.snap}if(h.hasOwnProperty("friction")){k=h.friction;delete h.friction;Ext.merge(h,{momentumEasing:{momentum:{friction:k}}})}if(h.hasOwnProperty("springTension")){o=h.springTension;delete h.springTension;Ext.merge(h,{momentumEasing:{momentum:{springTension:o}}})}if(h.hasOwnProperty("minVelocityForAnimation")){l=h.minVelocityForAnimation;delete h.minVelocityForAnimation;Ext.merge(h,{momentumEasing:{minVelocity:l}})}this.callOverridden(arguments)},scrollToAnimated:function(e,f,d){return this.scrollTo.apply(this,arguments)},scrollBy:function(e,f,d){if(Ext.isObject(e)){f=e.y;e=e.x}return this.callOverridden([e,f,d])},setOffset:function(b){return this.scrollToAnimated(-b.x,-b.y)}})}));(Ext.cmd.derive("Ext.util.TaskManager",Ext.util.TaskRunner,{alternateClassName:["Ext.TaskManager"],singleton:true},0,0,0,0,0,0,[Ext.util,"TaskManager",Ext,"TaskManager"],0));(Ext.cmd.derive("Ext.util.TextMetrics",Ext.Base,{statics:{shared:null,measure:function(g,j,h){var f=this,k=f.shared;if(!k){k=f.shared=new f(g,h)}k.bind(g);k.setFixedWidth(h||"auto");return k.getSize(j)},destroy:function(){var b=this;Ext.destroy(b.shared);b.shared=null}},constructor:function(f,g){var h=this,e=Ext.getBody().createChild({role:"presentation",cls:Ext.baseCSSPrefix+"textmetrics"});h.measure=e;if(f){h.bind(f)}e.position("absolute");e.setLocalXY(-1000,-1000);e.hide();if(g){e.setWidth(g)}},getSize:function(f){var d=this.measure,e;d.setHtml(f);e=d.getSize();d.setHtml("");return e},bind:function(d){var c=this;c.el=Ext.get(d);c.measure.setStyle(c.el.getStyle(["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing","word-break"]))},setFixedWidth:function(b){this.measure.setWidth(b)},getWidth:function(b){this.measure.dom.style.width="auto";return this.getSize(b).width},getHeight:function(b){return this.getSize(b).height},destroy:function(){var b=this;b.measure.destroy();delete b.el;delete b.measure}},1,0,0,0,0,0,[Ext.util,"TextMetrics"],function(){Ext.Element.override({getTextWidth:function(f,d,e){return Ext.Number.constrain(Ext.util.TextMetrics.measure(this.dom,Ext.valueFrom(f,this.dom.innerHTML,true)).width,d||0,e||1000000)}})}));(Ext.cmd.derive("Ext.ElementLoader",Ext.Base,{statics:{Renderer:{Html:function(e,d,f){e.getTarget().setHtml(d.responseText,f.scripts===true);return true}}},url:null,params:null,baseParams:null,autoLoad:false,target:null,loadMask:false,ajaxOptions:null,scripts:false,isLoader:true,constructor:function(d){var f=this,e;d=d||{};Ext.apply(f,d);f.mixins.observable.constructor.call(f);f.setTarget(f.target);if(f.autoLoad){e=f.autoLoad;if(e===true){e=null}f.load(e)}},setTarget:function(c){var d=this;c=Ext.get(c);if(d.target&&d.target!=c){d.abort()}d.target=c},getTarget:function(){return this.target||null},abort:function(){var b=this.active;if(b!==undefined){Ext.Ajax.abort(b.request);if(b.mask){this.removeMask()}delete this.active}},removeMask:function(){this.target.unmask()},addMask:function(b){this.target.mask(b===true?null:b)},load:function(q){q=Ext.apply({},q);var o=this,k=Ext.isDefined(q.loadMask)?q.loadMask:o.loadMask,n=Ext.apply({},q.params),j=Ext.apply({},q.ajaxOptions),l=q.callback||o.callback,p=q.scope||o.scope||o,m=q.rendererScope||o.rendererScope||o;Ext.applyIf(j,o.ajaxOptions);Ext.applyIf(q,j);Ext.applyIf(n,o.params);Ext.apply(n,o.baseParams);Ext.applyIf(q,{url:o.url});Ext.apply(q,{scope:o,params:n,callback:o.onComplete});if(o.fireEvent("beforeload",o,q)===false){return}if(k){o.addMask(k)}o.active={options:q,mask:k,scope:p,rendererScope:m,callback:l,success:q.success||o.success,failure:q.failure||o.failure,renderer:q.renderer||o.renderer,scripts:Ext.isDefined(q.scripts)?q.scripts:o.scripts};o.active.request=Ext.Ajax.request(q);o.setOptions(o.active,q)},setOptions:Ext.emptyFn,onComplete:function(h,l,j){var n=this,m=n.active,k,o;if(m){o=m.scope;k=m.rendererScope;if(l){l=n.getRenderer(m.renderer).call(k,n,j,m)!==false}if(l){Ext.callback(m.success,o,[n,j,h]);n.fireEvent("load",n,j,h)}else{Ext.callback(m.failure,o,[n,j,h]);n.fireEvent("exception",n,j,h)}Ext.callback(m.callback,o,[n,l,j,h]);if(m.mask){n.removeMask()}}delete n.active},getRenderer:function(b){if(Ext.isFunction(b)){return b}return this.statics().Renderer.Html},startAutoRefresh:function(e,d){var f=this;f.stopAutoRefresh();f.autoRefresh=Ext.interval(function(){f.load(d)},e)},stopAutoRefresh:function(){clearInterval(this.autoRefresh);delete this.autoRefresh},isAutoRefreshing:function(){return Ext.isDefined(this.autoRefresh)},destroy:function(){var b=this;b.stopAutoRefresh();delete b.target;b.abort();b.clearListeners()}},1,0,0,0,0,[["observable",Ext.util.Observable]],[Ext,"ElementLoader"],0));(Ext.cmd.derive("Ext.ComponentLoader",Ext.ElementLoader,{statics:{Renderer:{Data:function(g,e,j){var h=true;try{g.getTarget().update(Ext.decode(e.responseText))}catch(k){h=false}return h},Component:function(j,o,l){var k=true,m=j.getTarget(),e=[];try{e=Ext.decode(o.responseText)}catch(n){k=false}if(k){m.suspendLayouts();if(l.removeAll){m.removeAll()}m.add(e);m.resumeLayouts(true)}return k}}},target:null,loadOnRender:false,loadMask:false,renderer:"html",setTarget:function(c){var d=this;if(Ext.isString(c)){c=Ext.getCmp(c)}if(d.target&&d.target!=c){d.abort()}d.target=c;if(c&&d.loadOnRender){if(c.rendered){d.doLoadOnRender()}else{d.mon(c,"render",d.doLoadOnRender,d)}}},doLoadOnRender:function(){var b=this.loadOnRender;this.load(Ext.isObject(b)?b:null)},removeMask:function(){this.target.setLoading(false)},addMask:function(b){this.target.setLoading(b)},setOptions:function(c,d){c.removeAll=Ext.isDefined(d.removeAll)?d.removeAll:this.removeAll},getRenderer:function(c){if(Ext.isFunction(c)){return c}var d=this.statics().Renderer;switch(c){case"component":return d.Component;case"data":return d.Data;default:return Ext.ElementLoader.Renderer.Html}}},0,0,0,0,0,0,[Ext,"ComponentLoader"],0));(Ext.cmd.derive("Ext.layout.SizeModel",Ext.Base,{constructor:function(k){var h=this,j=h.self,g=j.sizeModelsArray,f;Ext.apply(h,k);h[f=h.name]=true;h.fixed=!(h.auto=h.natural||h.shrinkWrap);g[h.ordinal=g.length]=j[f]=j.sizeModels[f]=h},statics:{sizeModelsArray:[],sizeModels:{}},calculated:false,configured:false,constrainedMax:false,constrainedMin:false,natural:false,shrinkWrap:false,calculatedFromConfigured:false,calculatedFromNatural:false,calculatedFromShrinkWrap:false,names:null},1,0,0,0,0,0,[Ext.layout,"SizeModel"],function(){var m=this,j=m.sizeModelsArray,o,h,k,l,n;new m({name:"calculated"});new m({name:"configured",names:{width:"width",height:"height"}});new m({name:"natural"});new m({name:"shrinkWrap"});new m({name:"calculatedFromConfigured",configured:true,names:{width:"width",height:"height"}});new m({name:"calculatedFromNatural",natural:true});new m({name:"calculatedFromShrinkWrap",shrinkWrap:true});new m({name:"constrainedMax",configured:true,constrained:true,names:{width:"maxWidth",height:"maxHeight"}});new m({name:"constrainedMin",configured:true,constrained:true,names:{width:"minWidth",height:"minHeight"}});new m({name:"constrainedDock",configured:true,constrained:true,constrainedByMin:true,names:{width:"dockConstrainedWidth",height:"dockConstrainedHeight"}});for(o=0,k=j.length;o','",""],beginLayout:function(b){Ext.layout.container.Container.prototype.beginLayout.apply(this,arguments);this.initContextItems(b)},beforeLayoutCycle:function(g){var e=this.owner,h=e.inheritedState,f=e.inheritedStateInner;if(!h||h.invalid){h=e.getInherited();f=e.inheritedStateInner}if(g.widthModel.shrinkWrap){f.inShrinkWrapTable=true}else{delete f.inShrinkWrapTable}},beginLayoutCycle:function(v){var q=this,x=q.outerCt,s=q.lastOuterCtWidth||"",t=q.lastOuterCtHeight||"",p=q.lastOuterCtTableLayout||"",y=v.state,o,u,n,w,r;Ext.layout.container.Container.prototype.beginLayoutCycle.apply(this,arguments);u=n=w="";if(!v.widthModel.shrinkWrap){u="100%";r=q.owner.inheritedStateInner;o=q.getOverflowXStyle(v);w=(r.inShrinkWrapTable||o==="auto"||o==="scroll")?"":"fixed"}if(!v.heightModel.shrinkWrap&&!Ext.supports.PercentageHeightOverflowBug){n="100%"}if((u!==s)||q.hasOuterCtPxWidth){x.setStyle("width",u);q.lastOuterCtWidth=u;q.hasOuterCtPxWidth=false}if(w!==p){x.setStyle("table-layout",w);q.lastOuterCtTableLayout=w}if((n!==t)||q.hasOuterCtPxHeight){x.setStyle("height",n);q.lastOuterCtHeight=n;q.hasOuterCtPxHeight=false}if(q.hasInnerCtPxHeight){q.innerCt.setStyle("height","");q.hasInnerCtPxHeight=false}y.overflowAdjust=y.overflowAdjust||q.lastOverflowAdjust},calculate:function(k){var g=this,f=k.state,h=g.getContainerSize(k,true),j=f.calculatedItems||(f.calculatedItems=g.calculateItems?g.calculateItems(k,h):true);g.setCtSizeIfNeeded(k,h);if(j&&k.hasDomProp("containerChildrenSizeDone")){g.calculateContentSize(k);if(h.gotAll){if(g.manageOverflow&&!k.state.secondPass&&!g.reserveScrollbar){g.calculateOverflow(k,h)}return}}g.done=false},calculateContentSize:function(l){var m=this,j=((l.widthModel.shrinkWrap?1:0)|(l.heightModel.shrinkWrap?2:0)),o=(j&1)||undefined,k=(j&2)||undefined,n=0,h=l.props;if(o){if(isNaN(h.contentWidth)){++n}else{o=undefined}}if(k){if(isNaN(h.contentHeight)){++n}else{k=undefined}}if(n){if(o&&!l.setContentWidth(m.measureContentWidth(l))){m.done=false}if(k&&!l.setContentHeight(m.measureContentHeight(l))){m.done=false}}},calculateOverflow:function(q){var m=this,r,k,s,n,o,p,l;o=(m.getOverflowXStyle(q)==="auto");p=(m.getOverflowYStyle(q)==="auto");if(o||p){s=Ext.getScrollbarSize();l=q.overflowContext.el.dom;n=0;if(l.scrollWidth>l.clientWidth){n|=1}if(l.scrollHeight>l.clientHeight){n|=2}r=(p&&(n&2))?s.width:0;k=(o&&(n&1))?s.height:0;if(r!==m.lastOverflowAdjust.width||k!==m.lastOverflowAdjust.height){m.done=false;q.invalidate({state:{overflowAdjust:{width:r,height:k},overflowState:n,secondPass:true}})}}},completeLayout:function(b){this.lastOverflowAdjust=b.state.overflowAdjust},doRenderBody:function(m,k){var l=k.$layout,h=Ext.XTemplate,j=l.beforeBodyTpl,g=l.afterBodyTpl;if(j){h.getTpl(l,"beforeBodyTpl").applyOut(k,m)}this.renderItems(m,k);this.renderContent(m,k);if(g){h.getTpl(l,"afterBodyTpl").applyOut(k,m)}},doRenderPadding:function(f,j){var k=j.$layout,g=j.$layout.owner,h=g[g.contentPaddingProperty];if(k.managePadding&&h){f.push("padding:",g.unitizeBox(h))}},finishedLayout:function(c){var d=this.innerCt;Ext.layout.container.Container.prototype.finishedLayout.apply(this,arguments);if(Ext.isIE8){d.repaint()}if(Ext.isOpera){d.setStyle("position","relative");d.dom.scrollWidth;d.setStyle("position","")}},getContainerSize:function(e,h){var f=Ext.layout.container.Container.prototype.getContainerSize.apply(this,arguments),g=e.state.overflowAdjust;if(g){f.width-=g.width;f.height-=g.height}return f},getRenderData:function(){var d=this,c=Ext.layout.container.Container.prototype.getRenderData.call(this);c.innerCtCls=d.innerCtCls;c.outerCtCls=d.outerCtCls;return c},getRenderTarget:function(){return this.innerCt},getElementTarget:function(){return this.innerCt},getOverflowXStyle:function(b){return b.overflowXStyle||(b.overflowXStyle=this.owner.scrollFlags.overflowX||b.overflowContext.getStyle("overflow-x"))},getOverflowYStyle:function(b){return b.overflowYStyle||(b.overflowYStyle=this.owner.scrollFlags.overflowY||b.overflowContext.getStyle("overflow-y"))},initContextItems:function(h){var e=this,g=h.target,f=e.owner.customOverflowEl;h.outerCtContext=h.getEl("outerCt",e);h.innerCtContext=h.getEl("innerCt",e);if(f){h.overflowContext=h.getEl(f)}else{h.overflowContext=h.targetContext}if(g[g.contentPaddingProperty]!==undefined){h.paddingContext=h.innerCtContext}},initLayout:function(){var f=this,d=Ext.getScrollbarSize().width,e=f.owner;Ext.layout.container.Container.prototype.initLayout.call(this);if(d&&f.manageOverflow&&!f.hasOwnProperty("lastOverflowAdjust")){if(e.autoScroll||f.reserveScrollbar){f.lastOverflowAdjust={width:d,height:0}}}},measureContentHeight:function(d){var e=this.outerCt.getHeight(),f=d.target;if(this.managePadding&&(f[f.contentPaddingProperty]===undefined)){e+=d.targetContext.getPaddingInfo().height}return e},measureContentWidth:function(l){var j,m,g,h,k;if(this.chromeCellMeasureBug){j=this.innerCt.dom;m=j.style;g=m.display;if(g=="table-cell"){m.display="";j.offsetWidth;m.display=g}}if(Ext.isSafari){j=this.outerCt.dom;m=j.style;m.display="table-cell";j.offsetWidth;j.style.display=""}h=this.outerCt.getWidth();k=l.target;if(this.managePadding&&(k[k.contentPaddingProperty]===undefined)){h+=l.targetContext.getPaddingInfo().width}return h},setCtSizeIfNeeded:function(t,v){var s=this,m=v.height,q=t.paddingContext.getPaddingInfo(),o=s.getTarget(),n=s.getOverflowXStyle(t),u=(n==="auto"||n==="scroll"),w=Ext.getScrollbarSize(),r,p;if(m&&!t.heightModel.shrinkWrap){if(Ext.supports.PercentageHeightOverflowBug){r=true}if(Ext.isIE8){p=true}if((r||p)&&u&&(o.dom.scrollWidth>o.dom.clientWidth)){m=Math.max(m-w.height,0)}if(r){t.outerCtContext.setProp("height",m+q.height);s.hasOuterCtPxHeight=true}if(p){t.innerCtContext.setProp("height",m);s.hasInnerCtPxHeight=true}}},setupRenderTpl:function(b){Ext.layout.container.Container.prototype.setupRenderTpl.apply(this,arguments);b.renderPadding=this.doRenderPadding},getContentTarget:function(){return this.innerCt},getScrollerEl:function(){return this.outerCt}},0,0,0,0,["layout.auto","layout.autocontainer"],0,[Ext.layout.container,"Auto"],function(){this.prototype.chromeCellMeasureBug=Ext.isChrome&&Ext.chromeVersion>=26}));(Ext.cmd.derive("Ext.ZIndexManager",Ext.Base,{alternateClassName:"Ext.WindowGroup",statics:{zBase:9000,activeCounter:0},constructor:function(d){var c=this;c.id=Ext.id(null,"zindex-mgr-");c.zIndexStack=new Ext.util.Collection({sorters:{sorterFn:function(a,b){var f=(a.alwaysOnTop||0)-(b.alwaysOnTop||0);if(!f){f=a.getActiveCounter()-b.getActiveCounter()}return f}},filters:{filterFn:function(a){return a.isVisible()}}});c.zIndexStack.addObserver(c);c.front=null;c.globalListeners=Ext.globalEvents.on({hide:c.onComponentShowHide,show:c.onComponentShowHide,scope:c,destroyable:true});if(d){if(d.isContainer){d.on("resize",c._onContainerResize,c);c.zseed=Ext.Number.from(c.rendered?d.getEl().getStyle("zIndex"):undefined,c.getNextZSeed());c.targetEl=d.getTargetEl();c.container=d}else{Ext.on("resize",c._onContainerResize,c);c.zseed=c.getNextZSeed();c.targetEl=Ext.get(d)}}else{c.zseed=c.getNextZSeed();Ext.onReady(function(){Ext.on("resize",c._onContainerResize,c);c.targetEl=Ext.getBody()})}},getId:function(){return this.id},getNextZSeed:function(){return(Ext.ZIndexManager.zBase+=10000)},setBase:function(b){this.zseed=b;return this.onCollectionSort()},onCollectionSort:function(){var n=this,q=n.front,l=n.zIndexStack.getRange(),o=l.length,r,m=n.zseed,p,s,a;for(r=0;r0;){f=g[k];if(f.isComponent&&h.call(j||f,f)===false){return}}},destroy:function(){var g=this,e=g.zIndexStack.getRange(),f=e.length,h;for(h=0;h1){f.refresh()}if(e.hasListeners.afterlayout){e.fireEvent("afterlayout",e,d)}},onDestroy:function(){Ext.Component.prototype.onDestroy.call(this);this.refs=null},beforeDestroy:function(){var c=this,f=c.items,h=c.floatingItems,g;if(f){while((g=f.first())){c.doRemove(g,true)}}if(h){while((g=h.first())){c.doRemove(g,true)}}Ext.destroy(c.layout);Ext.Component.prototype.beforeDestroy.call(this)},beforeRender:function(){var d=this,e=d.getLayout(),f;Ext.Component.prototype.beforeRender.call(this);if(!e.initialized){e.initLayout()}f=e.targetCls;if(f){d.applyTargetCls(f)}},cascade:function(m,c,u){var n=this,r=n.items?n.items.items:[],q=r.length,s=0,o,p=u?u.concat(n):[n],t=p.length-1;if(m.apply(c||n,p)!==false){for(;s"){this.isParentReference=true;c=c.substring(0,d)}return c},applyTargetCls:function(b){this.addCls(b)},attachReference:function(e){var g=this,h,f;if(g.destroying||g.isDestroyed){return}f=g.refs||(g.refs={});h=e.referenceKey;f[h]=e},clearReference:function(d){var e=this.refs,f=d.referenceKey;if(e&&f){d.viewModelKey=d.referenceKey=e[f]=null}},clearReferences:function(){this.refs=null},detachComponent:function(b){Ext.getDetachedBody().appendChild(b.getEl())},doRemove:function(o,h){h=h===true||(h!==false&&this.autoDestroy);var l=this,m=l.layout,j=m&&l.rendered,n=o.destroying||h,k=o.floating;if(k){l.floatingItems.remove(o)}else{l.items.remove(o)}if(j&&!k){if(m.running){Ext.Component.cancelLayout(o,n)}m.onRemove(o,n)}o.onRemoved(n);l.onRemove(o,n);if(h){o.destroy()}else{if(j&&!k){m.afterRemove(o)}if(l.detachOnRemove&&o.rendered){l.detachComponent(o)}}},finishRenderChildren:function(){Ext.Component.prototype.finishRenderChildren.call(this);var b=this.getLayout();if(b){b.finishRender()}},getChildItemsToDisable:function(){return this.query("[isFormField],button")},getComponentId:function(b){return b.getItemId&&b.getItemId()},getContentTarget:function(){return this.getLayout().getContentTarget()},getDefaultContentTarget:function(){return this.el},getFocusEl:function(){return this.getTargetEl()},getScrollerEl:function(){return this.layout.getScrollerEl()||Ext.Component.prototype.getScrollerEl.call(this)},prepareItems:function(g,l){if(Ext.isArray(g)){g=g.slice()}else{g=[g]}var j=this,m=0,h=g.length,k;for(;m {ariaAttr}',' class="{[values.$comp.msgCls]} ',Ext.baseCSSPrefix,'mask-msg-inner {childElCls}">','
{msg}
',""],constructor:function(d){var f=this,e;if(arguments.length===2){e=f.target=d;d=arguments[1]}else{e=d.target}Ext.Component.prototype.constructor.call(this,d);if(e.isComponent){f.ownerCt=e;f.hidden=true;f.renderTo=f.getMaskTarget();f.external=f.renderTo===Ext.getBody();f.bindComponent(e)}else{e=Ext.get(e);f.isElement=true;f.renderTo=f.target}f.render(f.renderTo);if(f.store){f.bindStore(f.store,true)}},getRenderTree:function(){return[{cls:this.maskCls,style:"display:none"},this.callParent()]},onRender:function(){Ext.Component.prototype.onRender.apply(this,arguments);this.maskEl=this.el.prev()},initRenderData:function(){var b=Ext.Component.prototype.initRenderData.apply(this,arguments);b.msg=this.msg||"";return b},bindComponent:function(e){var f=this,d={scope:this,resize:f.sizeMask};if(f.external){d.added=f.onComponentAdded;d.removed=f.onComponentRemoved;if(e.floating){d.move=f.sizeMask;f.activeOwner=e}else{if(e.ownerCt){f.onComponentAdded(e.ownerCt)}}}f.mon(e,d);if(f.external){f.mon(Ext.GlobalEvents,{show:f.onContainerShow,hide:f.onContainerHide,expand:f.onContainerExpand,collapse:f.onContainerCollapse,scope:f})}},onComponentAdded:function(d){var c=this;delete c.activeOwner;c.floatParent=d;if(!d.floating){d=d.up("[floating]")}if(d){c.activeOwner=d;c.mon(d,"move",c.sizeMask,c);c.mon(d,"tofront",c.onOwnerToFront,c)}else{c.preventBringToFront=true}d=c.floatParent.ownerCt;if(c.rendered&&c.isVisible()&&d){c.floatOwner=d;c.mon(d,"afterlayout",c.sizeMask,c,{single:true})}},onComponentRemoved:function(f){var h=this,g=h.activeOwner,e=h.floatOwner;if(g){h.mun(g,"move",h.sizeMask,h);h.mun(g,"tofront",h.onOwnerToFront,h)}if(e){h.mun(e,"afterlayout",h.sizeMask,h)}delete h.activeOwner;delete h.floatOwner},afterRender:function(){Ext.Component.prototype.afterRender.apply(this,arguments);this.el.skipGarbageCollection=true;this.maskEl.skipGarbageCollection=true},onOwnerToFront:function(d,c){this.maskEl.setStyle("zIndex",c+1);this.el.setStyle("zIndex",c+2)},onContainerShow:function(b){this.onComponentShow()},onContainerHide:function(b){this.onComponentHide()},onContainerExpand:function(b){this.onComponentShow()},onContainerCollapse:function(b){this.onComponentHide()},onComponentHide:function(){var b=this;if(b.rendered&&b.isVisible()){b.hide();b.showNext=true}},onComponentShow:function(){if(this.showNext){this.show()}delete this.showNext},sizeMask:function(){var d=this,f=d.target,e=d.external?d.getOwner().el:d.getMaskTarget();if(d.rendered&&d.isVisible()){if(d.external){if(!d.isElement&&f.floating){d.onOwnerToFront(f,f.el.getZIndex())}d.maskEl.setSize(e.getSize()).alignTo(e,"tl-tl")}d.el.center(d.maskEl)}},bindStore:function(e,d){var f=this;f.mixins.storeholder.bindStore.apply(f,arguments);e=f.store;if(e&&e.isLoading()){f.onBeforeLoad()}},getStoreListeners:function(e){var g=this.onLoad,h=this.onBeforeLoad,f={cachemiss:h,cachefilled:g};if(!e.proxy.isSynchronous){f.beforeload=h;f.load=g}return f},onDisable:function(){Ext.Component.prototype.onDisable.apply(this,arguments);if(this.loading){this.onLoad()}},getOwner:function(){return this.ownerCt||this.ownerCmp||this.floatParent},getMaskTarget:function(){var b=this.getOwner();if(this.isElement){return this.target}return this.useTargetEl?b.getTargetEl():(b.getMaskTarget()||Ext.getBody())},onBeforeLoad:function(){var f=this,e=f.getOwner(),d;if(!f.disabled){f.loading=true;if(e.componentLayoutCounter){f.maybeShow()}else{d=e.afterComponentLayout;e.afterComponentLayout=function(){e.afterComponentLayout=d;d.apply(e,arguments);f.maybeShow()}}}},maybeShow:function(){var c=this,d=c.getOwner();if(!d.isVisible(true)){c.showNext=true}else{if(c.loading&&d.rendered){c.show()}}},hide:function(){var b=this;if(b.isElement){b.ownerCt.unmask();b.fireEvent("hide",this);return}else{b.ownerCt.enableTabbing()}delete b.showNext;b.maskEl.setDisplayed(false);b.ownerCt.setMasked(false);return Ext.Component.prototype.hide.apply(this,arguments)},show:function(){var b=this;if(b.isElement){b.ownerCt.mask(this.useMsg?this.msg:"",this.msgCls);b.fireEvent("show",this);return}else{b.ownerCt.disableTabbing()}b.maskEl.setDisplayed(true);b.ownerCt.setMasked(true);return Ext.Component.prototype.show.apply(this,arguments)},afterShow:function(){var b=this;b.loading=true;Ext.Component.prototype.afterShow.apply(this,arguments);if(b.hasOwnProperty("maskCls")){b.maskEl.dom.className=b.maskCls}if(b.useMsg){b.msgTextEl.setHtml(b.msg)}else{b.el.hide()}b.sizeMask()},onLoad:function(){this.loading=false;this.hide()},beforeDestroy:function(){this.ownerCt=null;this.bindStore(null);Ext.Component.prototype.beforeDestroy.call(this)},onDestroy:function(){var b=this;if(b.isElement){b.ownerCt.unmask()}Ext.destroy(b.maskEl);Ext.Component.prototype.onDestroy.call(this)}},1,["loadmask"],["box","component","loadmask"],{box:true,component:true,loadmask:true},["widget.loadmask"],[[Ext.util.StoreHolder.prototype.mixinId||Ext.util.StoreHolder.$className,Ext.util.StoreHolder]],[Ext,"LoadMask"],0));(Ext.cmd.derive("Ext.layout.component.Component",Ext.layout.Layout,{type:"component",isComponentLayout:true,nullBox:{},usesContentHeight:true,usesContentWidth:true,usesHeight:true,usesWidth:true,widthCache:{},heightCache:{},beginLayoutCycle:function(C,q){var v=this,D=v.owner,A=C.ownerCtContext,z=C.heightModel,y=C.widthModel,x=D.el.dom===document.body,B=D.lastBox||v.nullBox,s=D.el.lastBox||v.nullBox,E=!x,t,r,u,w;Ext.layout.Layout.prototype.beginLayoutCycle.apply(this,arguments);if(q){if(v.usesContentWidth){++C.consumersContentWidth}if(v.usesContentHeight){++C.consumersContentHeight}if(v.usesWidth){++C.consumersWidth}if(v.usesHeight){++C.consumersHeight}if(A&&!A.hasRawContent){t=D.ownerLayout;if(t){if(t.usesWidth){++C.consumersWidth}if(t.usesHeight){++C.consumersHeight}}}}if(y.configured){u=y.names.width;if(!x){E=v.setWidthInDom||(q?D[u]!==s.width:y.constrained)}C.setWidth(D[u],E)}else{if(C.isTopLevel){if(y.calculated){r=B.width;C.setWidth(r,r!=s.width)}r=B.x;C.setProp("x",r,r!=s.x)}}if(z.configured){w=z.names.height;if(!x){E=q?D[w]!==s.height:z.constrained}C.setHeight(D[w],E)}else{if(C.isTopLevel){if(z.calculated){r=B.height;C.setHeight(r,r!=s.height)}r=B.y;C.setProp("y",r,r!=s.y)}}},finishedLayout:function(r){var m=this,k=r.children,s=m.owner,o,q,l,p,n;if(k){o=k.length;for(q=0;q','
{text}
',"",'"],componentLayout:"progressbar",ariaRole:"progressbar",initRenderData:function(){var b=this;return Ext.apply(Ext.Component.prototype.initRenderData.call(this),{internalText:!b.hasOwnProperty("textEl"),text:b.text||" ",percentage:b.value?b.value*100:0})},onRender:function(){var b=this;Ext.Component.prototype.onRender.apply(this,arguments);if(b.textEl){b.textEl=Ext.get(b.textEl);b.updateText(b.text)}else{b.textEl=b.el.select("."+b.baseCls+"-text")}},updateValue:function(b){this.updateProgress(b,Math.round(b*100)+"%")},updateProgress:function(k,j,h){var l=this,g=l.value,m=l.getTextTpl();l.value=k||(k=0);if(j!=null){l.updateText(j)}else{if(m){l.updateText(m.apply({value:k,percent:k*100}))}}if(l.rendered&&!l.isDestroyed){if(h===true||(h!==false&&l.animate)){l.bar.stopAnimation();l.bar.animate(Ext.apply({from:{width:(g*100)+"%"},to:{width:(k*100)+"%"}},l.animate))}else{l.bar.setStyle("width",(k*100)+"%")}}l.fireEvent("update",l,k,j);return l},updateText:function(c){var d=this;d.text=c;if(d.rendered){d.textEl.setHtml(d.text)}return d},applyTextTpl:function(b){if(!b.isTemplate){b=new Ext.XTemplate(b)}return b},applyText:function(b){this.updateText(b)},getText:function(){return this.text},wait:function(f){var d=this,e;if(!d.waitTimer){e=d;f=f||{};d.updateText(f.text);d.waitTimer=Ext.TaskManager.start({run:function(b){var a=f.increment||10;b-=1;d.updateProgress(((((b+a)%a)+1)*(100/a))*0.01,null,f.animate)},interval:f.interval||1000,duration:f.duration,onStop:function(){if(f.fn){f.fn.apply(f.scope||d)}d.reset()},scope:e})}return d},isWaiting:function(){return this.waitTimer!==null},reset:function(d){var c=this;c.updateProgress(0);c.clearTimer();if(d===true){c.hide()}return c},clearTimer:function(){var b=this;if(b.waitTimer){b.waitTimer.onStop=null;Ext.TaskManager.stop(b.waitTimer);b.waitTimer=null}},onDestroy:function(){var c=this,d=c.bar;c.clearTimer();if(c.rendered){if(c.textEl.isComposite){c.textEl.clear()}Ext.destroyMembers(c,"textEl","progressBar");if(d&&c.animate){d.stopAnimation()}}Ext.Component.prototype.onDestroy.call(this)}},0,["progressbar"],["box","component","progressbar"],{box:true,component:true,progressbar:true},["widget.progressbar"],0,[Ext,"ProgressBar"],0));(Ext.cmd.derive("Ext.ShadowPool",Ext.Base,{singleton:true,markup:(function(){return Ext.String.format('',Ext.baseCSSPrefix,Ext.isIE&&!Ext.supports.CSS3BoxShadow?"ie":"css")}()),shadows:[],pull:function(){var b=this.shadows.shift();if(!b){b=Ext.get(Ext.DomHelper.insertHtml("afterBegin",document.body,this.markup));b.autoBoxAdjust=false}return b},push:function(b){this.shadows.push(b)},reset:function(){var f=[].concat(this.shadows),d,e=f.length;for(d=0;df.length&&(h+"."===e.substring(0,h.length+1))){f=h}}return f===""?undefined:f}})}));(Ext.cmd.derive("Ext.app.domain.Store",Ext.app.EventDomain,{singleton:true,type:"store",prefix:"store.",idMatchRe:/^\#/,constructor:function(){var b=this;b.callParent();b.monitor(Ext.data.AbstractStore)},match:function(g,e){var f=false,h=g.alias;if(e==="*"){f=true}else{if(this.idMatchRe.test(e)){f=g.getStoreId()===e.substring(1)}else{if(h){f=Ext.Array.indexOf(h,this.prefix+e)>-1}}}return f}},1,0,0,0,0,0,[Ext.app.domain,"Store"],0));(Ext.cmd.derive("Ext.app.route.Queue",Ext.Base,{queue:null,token:null,constructor:function(b){Ext.apply(this,b);this.queue=new Ext.util.MixedCollection()},queueAction:function(d,c){this.queue.add({route:d,args:c})},clearQueue:function(){this.queue.removeAll()},runQueue:function(){var e=this.queue,f=e.removeAt(0),d;if(f){d=f&&f.route;d.execute(this.token,f.args,this.onActionExecute,this)}},onActionExecute:function(b){if(b){this.clearQueue()}else{this.runQueue()}}},1,0,0,0,0,0,[Ext.app.route,"Queue"],0));(Ext.cmd.derive("Ext.app.route.Route",Ext.Base,{action:null,conditions:null,controller:null,allowInactive:false,url:null,before:null,caseInsensitive:false,matcherRegex:null,paramMatchingRegex:null,paramsInMatchString:null,constructor:function(d){var f=this,e;Ext.apply(f,d,{conditions:{}});e=f.url;f.paramMatchingRegex=new RegExp(/:([0-9A-Za-z\_]*)/g);f.paramsInMatchString=e.match(f.paramMatchingRegex)||[];f.matcherRegex=f.createMatcherRegex(e)},recognize:function(k){var j=this,g=j.controller,h,f;if((j.allowInactive||g.isActive())&&j.recognizes(k)){h=j.matchesFor(k);f=k.match(j.matcherRegex);f.shift();return Ext.applyIf(h,{controller:g,action:j.action,historyUrl:k,args:f})}return false},recognizes:function(b){return this.matcherRegex.test(b)},execute:function(q,m,l,p){var j=m.args||[],n=this.before,k=this.controller,o=this.createCallback(m,l,p);if(n){j.push(o);if(Ext.isString(n)){n=this.before=k[n]}if(n){n.apply(k,j)}}else{o.resume()}},matchesFor:function(m){var j={},k=this.paramsInMatchString,g=m.match(this.matcherRegex),l=0,h=k.length;g.shift();for(;l0){h=m.substring(0,g);j=m.substring(g+1)+"."+h}else{if(m.indexOf(".")>0&&(Ext.ClassManager.isCreated(m)||this.hasRegisteredPrefix(m))){j=m}else{if(l){j=l+"."+k+"."+m;h=m}else{j=m}}}return{absoluteName:j,shortName:h}},hasRegisteredPrefix:function(e){var f=Ext.ClassManager,d=f.getPrefix(e);return d&&d!==e}},models:null,views:null,stores:null,controllers:null,config:{application:null,refs:null,active:true,moduleClassName:null},onClassExtended:function(e,h,f){var g=f.onBeforeCreated;f.onBeforeCreated=function(b,q){var r=Ext.app.Controller,d=r.controllerRegex,a=[],c,s,o,p;o=b.prototype;c=Ext.getClassName(b);s=q.$namespace||q.namespace||Ext.app.getNamespace(c)||((p=d.exec(c))&&p[1]);if(s){o.$namespace=s}r.processDependencies(o,a,s,"model",q.models);r.processDependencies(o,a,s,"view",q.views);r.processDependencies(o,a,s,"store",q.stores);r.processDependencies(o,a,s,"controller",q.controllers);Ext.require(a,Ext.Function.pass(g,arguments,this))}},constructor:function(b){Ext.app.BaseController.prototype.constructor.apply(this,arguments);this.initAutoGetters();this.ensureId()},normalizeRefs:function(d){var f=this,e=[];if(d){if(Ext.isObject(d)){Ext.Object.each(d,function(b,a){if(Ext.isString(a)){a={selector:a}}a.ref=b;e.push(a)})}else{if(Ext.isArray(d)){e=Ext.Array.merge(e,d)}}}d=f.refs;if(d){f.refs=null;d=f.normalizeRefs(d);if(d){e=Ext.Array.merge(e,d)}}return e},applyRefs:function(b){return this.normalizeRefs(Ext.clone(b))},updateRefs:function(b){if(b){this.ref(b)}},initAutoGetters:function(){var d=this.self.prototype,f,e;for(f in d){e=d[f];if(e&&e["Ext.app.getter"]){e.call(this)}}},updateControl:function(b){this.ensureId();Ext.app.BaseController.prototype.updateControl.call(this,b)},updateListen:function(b){this.ensureId();Ext.app.BaseController.prototype.updateListen.call(this,b)},doInit:function(c){var d=this;if(!d._initialized){d.init(c);d._initialized=true}},finishInit:function(j){var l=this,k=l.controllers,g,m,h;if(l._initialized&&k&&k.length){for(m=0,h=k.length;m{iconMarkup}
role="{headerRole}">{text}
{iconMarkup}',iconTpl:'',_textAlignClasses:{left:Ext.baseCSSPrefix+"title-align-left",center:Ext.baseCSSPrefix+"title-align-center",right:Ext.baseCSSPrefix+"title-align-right"},_iconAlignClasses:{top:Ext.baseCSSPrefix+"title-icon-top",right:Ext.baseCSSPrefix+"title-icon-right",bottom:Ext.baseCSSPrefix+"title-icon-bottom",left:Ext.baseCSSPrefix+"title-icon-left"},_rotationClasses:{0:Ext.baseCSSPrefix+"title-rotate-none",1:Ext.baseCSSPrefix+"title-rotate-right",2:Ext.baseCSSPrefix+"title-rotate-left"},_rotationAngles:{1:90,2:270},baseCls:Ext.baseCSSPrefix+"title",_titleSuffix:"-title",_glyphCls:Ext.baseCSSPrefix+"title-glyph",_iconWrapCls:Ext.baseCSSPrefix+"title-icon-wrap",_baseIconCls:Ext.baseCSSPrefix+"title-icon",_itemCls:Ext.baseCSSPrefix+"title-item",_textCls:Ext.baseCSSPrefix+"title-text",afterComponentLayout:function(){var j=this,f=j.getRotation(),g,h,k;if(f&&!Ext.isIE8){k=j.el;g=j.lastBox;h=g.x;k.setStyle(j._getVerticalAdjustDirection(),(h+((f===1)?g.width:-g.height))+"px")}Ext.Component.prototype.afterComponentLayout.call(this)},onRender:function(){var f=this,e=f.getRotation(),d=f.el;Ext.Component.prototype.onRender.call(this);if(e){d.setVertical(f._rotationAngles[e])}if(Ext.supports.FixedTableWidthBug){d._needsTableWidthFix=true}},applyText:function(b){if(!b){b=" "}return b},beforeRender:function(){var b=this;Ext.Component.prototype.beforeRender.call(this);b.addCls(b._rotationClasses[b.getRotation()]);b.addCls(b._textAlignClasses[b.getTextAlign()])},getIconMarkup:function(){return this.getTpl("iconTpl").apply(this.getIconRenderData())},getIconRenderData:function(){var l=this,o=l.getIcon(),h=l.getIconCls(),m=l.getGlyph(),k=Ext._glyphFontFamily,j=l.getIconAlign(),n;if(typeof m==="string"){n=m.split("@");m=n[0];k=n[1]}return{id:l.id,ui:l.ui,itemCls:l._itemCls,iconUrl:o,iconCls:h,iconWrapCls:l._iconWrapCls,baseIconCls:l._baseIconCls,iconAlignCls:l._iconAlignClasses[j],glyph:m,glyphCls:m?l._glyphCls:"",glyphFontFamily:k}},initRenderData:function(){var d=this,e,f;f=Ext.apply({text:d.getText(),headerRole:d.headerRole,id:d.id,ui:d.ui,itemCls:d._itemCls,textCls:d._textCls,iconMarkup:null,iconBeforeTitle:null},Ext.Component.prototype.initRenderData.call(this));if(d._hasIcon()){e=d.getIconAlign();f.iconMarkup=d.getIconMarkup();f.iconBeforeTitle=(e==="top"||e==="left")}return f},onAdded:function(o,k,h){var m=this,j=m.cls||"",l=m._titleSuffix,n=o.baseCls;m.addCls([n+l,n+l+"-"+o.ui]);Ext.Component.prototype.onAdded.call(this,o,k,h)},updateGlyph:function(l,o){l=l||0;var m=this,k=m._glyphCls,h,j,n;m.glyph=l;if(m.rendered){m._syncIconVisibility();h=m.iconEl;if(typeof l==="string"){n=l.split("@");l=n[0];j=n[1]||Ext._glyphFontFamily}if(!l){h.dom.innerHTML="";h.removeCls(k)}else{if(o!=l){h.dom.innerHTML="&#"+l+";";h.addCls(k)}}if(j){h.setStyle("font-family",j)}if(m._didIconStateChange(o,l)){m.updateLayout()}}},updateIcon:function(e,g){e=e||"";var h=this,f;if(h.rendered&&e!=g){h._syncIconVisibility();f=h.iconEl;f.setStyle("background-image",e?"url("+e+")":"");if(h._didIconStateChange(g,e)){h.updateLayout()}}},updateIconAlign:function(j,m){var g=this,k=g.iconWrapEl,h,k,l;if(g.iconWrapEl){h=g.el;l=g._iconAlignClasses;if(m){k.removeCls(l[m])}k.addCls(l[j]);if(j==="top"||j==="left"){h.insertFirst(k)}else{h.appendChild(k)}g.updateLayout()}},updateIconCls:function(e,h){e=e||"";var g=this,f;if(g.rendered&&h!=e){g._syncIconVisibility();f=g.iconEl;if(h){f.removeCls(h)}f.addCls(e);if(g._didIconStateChange(h,e)){g.updateLayout()}}},updateRotation:function(m,h){var k=this,g,l,j;if(k.rendered){l=k.el;j=k._rotationClasses;k.removeCls(j[h]);k.addCls(j[m]);l.setHorizontal();if(m){l.setVertical(k._rotationAngles[m])}l.setStyle({right:"",left:"",top:"",height:"",width:""});k.lastBox=null;k.updateLayout()}},updateText:function(b){if(this.rendered){this.textEl.setHtml(b)}},updateTextAlign:function(g,e){var f=this,h=f._textAlignClasses;if(f.rendered){if(e){f.removeCls(h[e])}f.addCls(h[g]);f.updateLayout()}},privates:{_getVerticalAdjustDirection:function(){return"left"},_didIconStateChange:function(e,f){var d=Ext.isEmpty(f);return Ext.isEmpty(e)?!d:d},_hasIcon:function(){return !!(this.getIcon()||this.getIconCls()||this.getGlyph())},_syncIconVisibility:function(){var k=this,l=k.el,h=k._hasIcon(),j=k.iconWrapEl,m,g;if(h&&!j){g=k.iconAlign;m=(g==="left"||g==="top");l.dom.insertAdjacentHTML(m?"afterbegin":"beforeend",k.getIconMarkup());j=k.iconWrapEl=l[m?"first":"last"]();k.iconEl=j.first()}if(j){j.setDisplayed(h)}}}},0,["title"],["box","component","title"],{box:true,component:true,title:true},["widget.title"],0,[Ext.panel,"Title"],0));(Ext.cmd.derive("Ext.panel.Tool",Ext.Component,{isTool:true,focusable:true,baseCls:Ext.baseCSSPrefix+"tool",disabledCls:Ext.baseCSSPrefix+"tool-disabled",toolPressedCls:Ext.baseCSSPrefix+"tool-pressed",toolOverCls:Ext.baseCSSPrefix+"tool-over",ariaRole:"button",childEls:["toolEl"],renderTpl:[''],toolOwner:null,tooltipType:"qtip",stopEvent:true,cacheHeight:true,cacheWidth:true,initComponent:function(){var b=this;b.type=b.type||b.id;Ext.applyIf(b.renderData,{baseCls:b.baseCls,blank:Ext.BLANK_IMAGE_URL,type:b.type});b.tooltip=b.tooltip||b.qtip;Ext.Component.prototype.initComponent.call(this)},afterRender:function(){var d=this,c;Ext.Component.prototype.afterRender.apply(this,arguments);d.el.on({click:d.onClick,mousedown:d.onMouseDown,mouseover:d.onMouseOver,mouseout:d.onMouseOut,scope:d});c=d.tooltip;if(c){d.setTooltip(c)}},tipAttrs:{qtip:"data-qtip"},setTooltip:function(m,p){var o=this,j=o.tooltip,n=o.tooltipType,l=o.id,q=o.el,k;if(j&&Ext.quickTipsActive&&Ext.isObject(j)){Ext.tip.QuickTipManager.unregister(l)}o.tooltip=m;if(p){o.tooltipType=p}if(m){if(Ext.quickTipsActive&&Ext.isObject(m)){Ext.tip.QuickTipManager.register(Ext.apply({target:l},m))}else{if(q){if(p&&n&&p!==n){k=o.tipAttrs[n]||"title";q.dom.removeAttribute(k)}k=o.tipAttrs[p||n]||"title";q.dom.setAttribute(k,m)}}}},setType:function(e){var d=this,f=d.type;d.type=e;if(d.rendered){if(f){d.toolEl.removeCls(d.baseCls+"-"+f)}d.toolEl.addCls(d.baseCls+"-"+e)}else{d.renderData.type=e}return d},onDestroy:function(){var d=this,c=d.keyMap;d.setTooltip(null);if(c){c.destroy();d.keyMap=null}delete d.toolOwner;Ext.Component.prototype.onDestroy.call(this)},privates:{getFocusEl:function(){return this.el},onClick:function(f,d){var e=this;if(e.disabled){return false}e.el.removeCls(e.toolPressedCls+" "+e.toolOverCls);if(e.stopEvent!==false){f.stopEvent()}if(e.handler){Ext.callback(e.handler,e.scope,[f,d,e.ownerCt,e],0,e)}else{if(e.callback){Ext.callback(e.callback,e.scope,[e.toolOwner||e.ownerCt,e,f],0,e)}}e.fireEvent("click",e,f,e.toolOwner||e.ownerCt);return true},onMouseDown:function(){if(this.disabled){return false}this.el.addCls(this.toolPressedCls)},onMouseOver:function(){if(this.disabled){return false}this.el.addCls(this.toolOverCls)},onMouseOut:function(){this.el.removeCls(this.toolOverCls)}}},0,["tool"],["box","component","tool"],{box:true,component:true,tool:true},["widget.tool"],0,[Ext.panel,"Tool"],0));(Ext.cmd.derive("Ext.panel.Header",Ext.panel.Bar,{isHeader:true,defaultType:"tool",indicateDrag:false,weight:-1,shrinkWrap:3,iconAlign:"left",titleAlign:"left",titlePosition:0,titleRotation:"default",beforeRenderConfig:{glyph:null,icon:null,iconCls:null,iconAlign:null,title:{$value:{ariaRole:"presentation",xtype:"title",flex:1},merge:function(c,d){if(typeof c=="string"){c={text:c}}return Ext.merge(d?Ext.Object.chain(d):{},c)}},titleAlign:null,titlePosition:null,titleRotation:null},headerCls:Ext.baseCSSPrefix+"header",initComponent:function(){var g=this,h=g.items,e=g.itemPosition,f=[g.headerCls];g.tools=g.tools||[];g.items=h=(h?h.slice():[]);if(e!==undefined){g._userItems=h.slice();g.items=h=[]}g.indicateDragCls=g.headerCls+"-draggable";if(g.indicateDrag){f.push(g.indicateDragCls)}g.addCls(f);g.syncNoBorderCls();Ext.Array.push(h,g.tools);g.tools.length=0;Ext.panel.Bar.prototype.initComponent.call(this);g.on({dblclick:g.onDblClick,click:g.onClick,element:"el",scope:g})},addTool:function(b){this.add(Ext.ComponentManager.create(b,"tool"))},afterLayout:function(){var f=this,h,g,k,j;if(f.vertical){g=f.frameTR;if(g){h=f.frameBR;k=f.frameTL;j=(f.getWidth()-g.getPadding("r")-((k)?k.getPadding("l"):f.el.getBorderWidth("l")))+"px";h.setStyle("background-position-x",j);g.setStyle("background-position-x",j)}}Ext.panel.Bar.prototype.afterLayout.call(this)},applyTitle:function(h,k){var j=this,g,f;h=h||"";if(typeof h==="string"){h={text:h}}if(k){Ext.suspendLayouts();k.setConfig(h);Ext.resumeLayouts(true);h=k}else{h.ui=j.ui;h.headerRole=j.headerRole;f=("rotation" in h);h=Ext.create(h);if(!f&&j.vertical&&j.titleRotation==="default"){h.rotation=1}}return h},applyTitlePosition:function(c){var d=this.items.getCount();if(this._titleInItems){--d}return Math.max(Math.min(c,d),0)},beforeLayout:function(){Ext.panel.Bar.prototype.beforeLayout.call(this);this.syncBeforeAfterTitleClasses()},beforeRender:function(){var c=this,d=c.itemPosition;c.protoEl.unselectable();Ext.panel.Bar.prototype.beforeRender.call(this);if(d!==undefined){c.insert(d,c._userItems)}},getTools:function(){return this.tools.slice()},onAdd:function(d,e){var f=this.tools;Ext.panel.Bar.prototype.onAdd.call(this,d,e);if(d.isTool){f.push(d);f[d.type]=d}},onAdded:function(d,f,e){this.syncNoBorderCls();Ext.panel.Bar.prototype.onAdded.call(this,d,f,e)},onRemoved:function(d,f,e){this.syncNoBorderCls();Ext.panel.Bar.prototype.onRemoved.call(this,d,f,e)},setDock:function(k){var f=this,h=f.getTitle(),g=f.getTitleRotation(),j=h.getRotation();Ext.suspendLayouts();Ext.panel.Bar.prototype.setDock.call(this,k);if(g==="default"){g=(f.vertical?1:0);if(g!==j){h.setRotation(g)}if(f.rendered){f.resetItemMargins()}}Ext.resumeLayouts(true)},updateGlyph:function(b){this.getTitle().setGlyph(b)},updateIcon:function(b){this.getTitle().setIcon(b)},updateIconAlign:function(c,d){this.getTitle().setIconAlign(c)},updateIconCls:function(b){this.getTitle().setIconCls(b)},updateTitle:function(c,d){if(!d){this.insert(this.getTitlePosition(),c);this._titleInItems=true}this.titleCmp=c},updateTitleAlign:function(c,d){this.getTitle().setTextAlign(c)},updateTitlePosition:function(b){this.insert(b,this.getTitle())},updateTitleRotation:function(b){if(b==="default"){b=(this.vertical?1:0)}this.getTitle().setRotation(b)},privates:{fireClickEvent:function(e,f){var d="."+Ext.panel.Tool.prototype.baseCls;if(!f.getTarget(d)){this.fireEvent(e,this,f)}},getFocusEl:function(){return this.el},getFramingInfoCls:function(){var f=this,d=Ext.panel.Bar.prototype.getFramingInfoCls.call(this),e=f.ownerCt;if(!f.expanding&&e&&(e.collapsed||f.isCollapsedExpander)){d+="-"+e.collapsedCls}return d+"-"+f.dock},onClick:function(b){this.fireClickEvent("click",b)},onDblClick:function(b){this.fireClickEvent("dblclick",b)},syncBeforeAfterTitleClasses:function(w){var q=this,r=q.items,t=r.items,x=q.getTitlePosition(),y=t.length,s=r.generation,p=q.syncBeforeAfterGen,n,u,v,o;if(!w&&(p===s)){return}q.syncBeforeAfterGen=s;for(v=0;vx){if(p){o.removeCls(u)}o.addCls(n)}}}},syncNoBorderCls:function(){var d=this,e=this.ownerCt,f=d.headerCls+"-noborder";if(e?(e.border===false&&!e.frame):d.border===false){d.addCls(f)}else{d.removeCls(f)}}}},0,["header"],["box","component","container","header"],{box:true,component:true,container:true,header:true},["widget.header"],0,[Ext.panel,"Header"],0));(Ext.cmd.derive("Ext.toolbar.Fill",Ext.Component,{alternateClassName:"Ext.Toolbar.Fill",ariaRole:"presentation",isFill:true,flex:1},0,["tbfill"],["box","component","tbfill"],{box:true,component:true,tbfill:true},["widget.tbfill"],0,[Ext.toolbar,"Fill",Ext.Toolbar,"Fill"],0));(Ext.cmd.derive("Ext.layout.container.boxOverflow.None",Ext.Base,{alternateClassName:"Ext.layout.boxOverflow.None",factoryConfig:{defaultType:"none"},isBoxOverflowHandler:true,$configPrefixed:false,$configStrict:false,constructor:function(b){this.initConfig(b)},handleOverflow:Ext.emptyFn,clearOverflow:Ext.emptyFn,beginLayout:Ext.emptyFn,beginLayoutCycle:Ext.emptyFn,calculate:function(e){var f=this,h=e.state.boxPlan,g;if(h&&h.tooNarrow){g=f.handleOverflow(e);if(g){if(g.reservedSpace){f.layout.publishInnerCtSize(e,g.reservedSpace)}}}else{f.clearOverflow()}},completeLayout:Ext.emptyFn,finishedLayout:function(j){var k=this,g=k.layout.owner,f,h;if(g.hasListeners.overflowchange){f=g.query(">[hidden]");h=f.length;if(h!==k.lastHiddenCount){g.fireEvent("overflowchange",k.lastHiddenCount,h,f);k.lastHiddenCount=h}}},onRemove:Ext.emptyFn,getItem:function(b){return this.layout.owner.getComponent(b)},getOwnerType:function(d){var c;if(d.isToolbar){c="toolbar"}else{if(d.isTabBar){c="tab-bar"}else{if(d.isMenu){c="menu"}else{if(d.isBreadcrumb){c="breadcrumb"}else{c=d.getXType()}}}}return c},getPrefixConfig:Ext.emptyFn,getSuffixConfig:Ext.emptyFn,getOverflowCls:function(){return""},setVertical:function(){var d=this,e=d.layout,f=e.innerCt;f.removeCls(d.getOverflowCls(e.oppositeDirection));f.addCls(d.getOverflowCls(e.direction))}},1,0,0,0,["box.overflow.None","box.overflow.none"],[[Ext.mixin.Factoryable.prototype.mixinId||Ext.mixin.Factoryable.$className,Ext.mixin.Factoryable]],[Ext.layout.container.boxOverflow,"None",Ext.layout.boxOverflow,"None"],0));(Ext.cmd.derive("Ext.toolbar.Item",Ext.Component,{alternateClassName:"Ext.Toolbar.Item",enable:Ext.emptyFn,disable:Ext.emptyFn,focus:Ext.emptyFn},0,["tbitem"],["box","component","tbitem"],{box:true,component:true,tbitem:true},["widget.tbitem"],0,[Ext.toolbar,"Item",Ext.Toolbar,"Item"],0));(Ext.cmd.derive("Ext.toolbar.Separator",Ext.toolbar.Item,{alternateClassName:"Ext.Toolbar.Separator",baseCls:Ext.baseCSSPrefix+"toolbar-separator",ariaRole:"separator"},0,["tbseparator"],["box","component","tbitem","tbseparator"],{box:true,component:true,tbitem:true,tbseparator:true},["widget.tbseparator"],0,[Ext.toolbar,"Separator",Ext.Toolbar,"Separator"],0));(Ext.cmd.derive("Ext.dom.ButtonElement",Ext.dom.Element,{setSize:function(j,g,f){var h=this,k=h.component;Ext.dom.Element.prototype.setSize.call(this,j,g,f);k.btnWrap.setStyle("table-layout",(!j||j==="auto")?"":"fixed");k.btnEl.setStyle("height",(!g||g==="auto")?"":"auto");return h},setStyle:function(j,k){var l=this,g=l.component,m,h;Ext.dom.Element.prototype.setStyle.call(this,j,k);if(j){if(j==="width"||(typeof j!=="string"&&"width" in j)){m=k||j.width;g.btnWrap.setStyle("table-layout",(!m||m==="auto")?"":"fixed")}if(j==="height"||(typeof j!=="string"&&"height" in j)){h=k||j.height;g.btnEl.setStyle("height",(!h||h==="auto")?"":"auto")}}return l},setHeight:function(d,c){Ext.dom.Element.prototype.setHeight.call(this,d,c);this.component.btnEl.setStyle("height",(!d||d==="auto")?"":"auto");return this},setWidth:function(c,d){Ext.dom.Element.prototype.setWidth.call(this,c,d);this.component.btnWrap.setStyle("table-layout",(!c||c==="auto")?"":"fixed");return this}},0,0,0,0,0,0,[Ext.dom,"ButtonElement"],0));(Ext.cmd.derive("Ext.button.Manager",Ext.Base,{singleton:true,alternateClassName:"Ext.ButtonToggleManager",groups:{},pressedButton:null,buttonSelector:"."+Ext.baseCSSPrefix+"btn",init:function(){var b=this;if(!b.initialized){Ext.getDoc().on({keydown:b.onDocumentKeyDown,mouseup:b.onDocumentMouseUp,scope:b});b.initialized=true}},onDocumentKeyDown:function(f){var e=f.getKey(),d;if(e===f.SPACE||e===f.ENTER){d=f.getTarget(this.buttonSelector);if(d){Ext.getCmp(d.id).onClick(f)}}},onButtonMousedown:function(e,f){var d=this.pressedButton;if(d){d.onMouseUp(f)}this.pressedButton=e},onDocumentMouseUp:function(c){var d=this.pressedButton;if(d){d.onMouseUp(c);this.pressedButton=null}},toggleGroup:function(f,h){if(h){var j=this.groups[f.toggleGroup],k=j.length,g;for(g=0;g0){e=Ext.Array.slice(h.items);g=e.length;for(f=0;f50&&e){if(Ext.isIE9m&&!Ext.getDoc().contains(j.target)){return}else{for(m=0;m{[values.$comp.renderIcon(values)]}{text}{[values.$comp.renderIcon(values)]}{[values.$comp.getAfterMarkup ? values.$comp.getAfterMarkup(values) : ""]} {closeText}',iconTpl:'background-image:url({iconUrl});font-family:{glyphFontFamily};">&#{glyph}; ',scale:"small",allowedScales:["small","medium","large"],arrowAlign:"right",arrowCls:"arrow",maskOnDisable:false,shrinkWrap:3,frame:true,autoEl:{tag:"a",hidefocus:"on",unselectable:"on"},hasFrameTable:function(){return this.href&&this.frameTable},frameTableListener:function(){if(!this.disabled){this.doNavigate()}},doNavigate:function(){if(this.hrefTarget==="_blank"){window.open(this.getHref(),this.hrefTarget)}else{location.href=this.getHref()}},_triggerRegion:{},initComponent:function(){var b=this;b.addCls(Ext.baseCSSPrefix+"unselectable");if(Ext.isOpera12m&&(b.split||b.menu)&&b.getArrowVisible()){b.addCls(b._operaArrowCls+"-"+b.arrowAlign)}Ext.Component.prototype.initComponent.call(this);if(b.menu){b.split=true;b.setMenu(b.menu,false,true)}if(b.url){b.href=b.url}b.configuredWithPreventDefault=b.hasOwnProperty("preventDefault");if(b.href&&!b.configuredWithPreventDefault){b.preventDefault=false}if(Ext.isString(b.toggleGroup)&&b.toggleGroup!==""){b.enableToggle=true}if(b.html&&!b.text){b.text=b.html;delete b.html}},getElConfig:function(){var h=this,e=Ext.Component.prototype.getElConfig.call(this),f=h.getHref(),g=h.hrefTarget;if(e.tag==="a"){if(!h.disabled){e.tabIndex=h.tabIndex}if(f){if(!h.disabled){e.href=f}if(g){e.target=g}}}return e},beforeRender:function(){Ext.Component.prototype.beforeRender.call(this);if(this.pressed){this.addCls(this._pressedCls)}},initRenderData:function(){return Ext.apply(Ext.Component.prototype.initRenderData.call(this),this.getTemplateArgs())},getMenu:function(){return this.menu||null},setMenu:function(h,j,f){var k=this,g=k.menu;if(g&&!f){if(j!==false&&k.destroyMenu){g.destroy()}g.ownerCmp=null}if(h){h=Ext.menu.Manager.get(h,{ownerCmp:k});h.ownerCmp=k;k.mon(h,{scope:k,show:k.onMenuShow,hide:k.onMenuHide});if(!g&&k.getArrowVisible()){k.split=true;if(k.rendered){k._addSplitCls();k.updateLayout()}}k.menu=h}else{if(k.rendered){k._removeSplitCls();k.updateLayout()}k.split=false;k.menu=null}},onRender:function(){var h=this,g,f,e;h.doc=Ext.getDoc();Ext.Component.prototype.onRender.apply(this,arguments);f=h.el;if(h.tooltip){h.setTooltip(h.tooltip,true)}if(h.handleMouseEvents){e={scope:h,mouseover:h.onMouseOver,mouseout:h.onMouseOut,mousedown:h.onMouseDown};if(h.split){e.mousemove=h.onMouseMove}}else{e={scope:h}}if(Ext.supports.Touch){e.touchstart=h.onTouchStart}if(h.menu){h.keyMap=new Ext.util.KeyMap({target:h.el,key:Ext.event.Event.prototype.DOWN,handler:h.onDownKey,scope:h})}if(h.repeat){h.mon(new Ext.util.ClickRepeater(f,Ext.isObject(h.repeat)?h.repeat:{}),"click",h.onRepeatClick,h)}else{if(e[h.clickEvent]){g=true}else{e[h.clickEvent]=h.onClick}}h.mon(f,e);if(h.hasFrameTable()){h.mon(h.frameTable,"click",h.frameTableListener,h)}if(g){h.mon(f,h.clickEvent,h.onClick,h)}Ext.button.Manager.register(h)},getTemplateArgs:function(){var n=this,s=n._btnCls,q=n._baseIconCls,u=n.getIconAlign(),m=n.glyph,o=Ext._glyphFontFamily,l=n.text,r=n._hasIcon(),p=n._hasIconCls,t;if(typeof m==="string"){t=m.split("@");m=t[0];o=t[1]}return{innerCls:n._innerCls,splitCls:n.getArrowVisible()?n.getSplitCls():"",iconUrl:n.icon,iconCls:n.iconCls,glyph:m,glyphCls:m?n._glyphCls:"",glyphFontFamily:o,text:l||" ",closeText:n.closeText,textCls:l?n._textCls:"",noTextCls:l?"":n._noTextCls,hasIconCls:r?p:"",btnWrapCls:n._btnWrapCls,btnWrapStyle:n.width?"table-layout:fixed;":"",btnElStyle:n.height?"height:auto;":"",btnCls:s,baseIconCls:q,iconBeforeText:u==="left"||u==="top",iconAlignCls:r?(p+"-"+u):"",textAlignCls:s+"-"+n.getTextAlign()}},renderIcon:function(b){return this.getTpl("iconTpl").apply(b)},setHref:function(d){var c=this;c.href=d;if(!c.configuredWithPreventDefault){c.preventDefault=!d}if(c.rendered){if(!d||c.disabled){c.el.dom.removeAttribute("href")}else{c.el.dom.href=c.getHref()}}},getHref:function(){var c=this,d=c.href;return d?Ext.urlAppend(d,Ext.Object.toQueryString(Ext.apply({},c.params,c.baseParams))):false},setParams:function(c){var d=this;d.params=c;if(d.disabled){d.el.dom.removeAttribute("href")}else{d.el.dom.href=d.getHref()}},getSplitCls:function(){var b=this;return b.split?(b.baseCls+"-"+b.arrowCls)+" "+(b.baseCls+"-"+b.arrowCls+"-"+b.arrowAlign):""},setIcon:function(e){e=e||"";var h=this,f=h.btnIconEl,g=h.icon||"";h.icon=e;if(e!=g){if(f){f.setStyle("background-image",e?"url("+e+")":"");h._syncHasIconCls();if(h.didIconStateChange(g,e)){h.updateLayout()}}h.fireEvent("iconchange",h,g,e)}return h},setIconCls:function(e){e=e||"";var g=this,f=g.btnIconEl,h=g.iconCls||"";g.iconCls=e;if(h!=e){if(f){f.removeCls(h);f.addCls(e);g._syncHasIconCls();if(g.didIconStateChange(h,e)){g.updateLayout()}}g.fireEvent("iconchange",g,h,e)}return g},setGlyph:function(l){l=l||0;var m=this,h=m.btnIconEl,o=m.glyph,k=m._glyphCls,j,n;m.glyph=l;if(h){if(typeof l==="string"){n=l.split("@");l=n[0];j=n[1]||Ext._glyphFontFamily}if(!l){h.dom.innerHTML="";h.removeCls(k)}else{if(o!=l){h.dom.innerHTML="&#"+l+";";h.addCls(k)}}if(j){h.setStyle("font-family",j)}m._syncHasIconCls();if(m.didIconStateChange(o,l)){m.updateLayout()}}m.fireEvent("glyphchange",m,m.glyph,o);return m},setTooltip:function(f,e){var d=this;if(d.rendered){if(!e||!f){d.clearTip()}if(f){if(Ext.quickTipsActive&&Ext.isObject(f)){Ext.tip.QuickTipManager.register(Ext.apply({target:d.el.id},f));d.tooltip=f}else{d.el.dom.setAttribute(d.getTipAttr(),f)}}}else{d.tooltip=f}return d},updateIconAlign:function(j,l){var m=this,g,h,k;if(m.rendered){g=m.btnEl;h=m.btnIconEl;k=m._hasIconCls;if(l){g.removeCls(k+"-"+l)}g.addCls(k+"-"+j);if(j==="top"||j==="left"){g.insertFirst(h)}else{g.appendChild(h)}m.updateLayout()}},updateTextAlign:function(h,j){var k=this,f=k.btnEl,g=k._btnCls;if(k.rendered){f.removeCls(g+"-"+j);f.addCls(g+"-"+h)}},getTipAttr:function(){return this.tooltipType=="qtip"?"data-qtip":"title"},getRefItems:function(e){var f=this.menu,d;if(f){d=f.getRefItems(e);d.unshift(f)}return d||[]},clearTip:function(){var c=this,d=c.el;if(Ext.quickTipsActive&&Ext.isObject(c.tooltip)){Ext.tip.QuickTipManager.unregister(d)}else{d.dom.removeAttribute(c.getTipAttr())}},beforeDestroy:function(){var b=this;if(b.rendered){b.clearTip()}if(b.menu&&b.destroyMenu){b.menu.destroy()}Ext.destroy(b.repeater);Ext.Component.prototype.beforeDestroy.call(this)},onDestroy:function(){var b=this;if(b.rendered){b.doc.un("mouseover",b.monitorMouseOver,b);delete b.doc;Ext.destroy(b.keyMap);delete b.keyMap}Ext.button.Manager.unregister(b);Ext.Component.prototype.onDestroy.call(this)},setHandler:function(c,d){this.handler=c;if(arguments.length>1){this.scope=d}return this},applyText:function(j){j=j==null?"":String(j);var k=this,h=k.btnInnerEl,f=k.btnEl,g=k.text||"";if(j!=g){k.text=j;if(k.rendered){h.setHtml(j||" ");f[j?"addCls":"removeCls"](k._textCls);f[j?"removeCls":"addCls"](k._noTextCls);k.updateLayout()}k.fireEvent("textchange",k,g,j)}},didIconStateChange:function(e,f){var d=Ext.isEmpty(f);return Ext.isEmpty(e)?!d:d},setPressed:function(b){return this.toggle(b!==false)},toggle:function(f,e){var d=this;f=f===undefined?!d.pressed:!!f;if(f!==d.pressed){d[f?"addCls":"removeCls"](d._pressedCls);d.pressed=f;if(!e){d.fireEvent("toggle",d,f);Ext.callback(d.toggleHandler,d.scope,[d,f],0,d);if(d.reference&&d.publishState){d.publishState("pressed",f)}}}return d},maybeShowMenu:function(){var b=this;if(b.menu&&!b.hasVisibleMenu()&&!b.ignoreNextClick){b.showMenu(true)}},showMenu:function(d){var e=this,f=e.menu;if(e.rendered){if(e.tooltip&&Ext.quickTipsActive&&e.getTipAttr()!="title"){Ext.tip.QuickTipManager.getQuickTip().cancelShow(e.el)}if(f.isVisible()){f.hide()}if(!d||e.showEmptyMenu||f.items.getCount()>0){f.showBy(e.el,e.menuAlign)}}return e},hideMenu:function(){if(this.hasVisibleMenu()){this.menu.hide()}return this},hasVisibleMenu:function(){var b=this.menu;return b&&b.rendered&&b.isVisible()},onRepeatClick:function(d,c){this.onClick(c)},onTouchStart:function(b){this.doPreventDefault(b)},onClick:function(c){var d=this;d.doPreventDefault(c);if(c.type!=="keydown"&&c.button){return}if(!d.disabled){d.doToggle();d.maybeShowMenu();d.fireHandler(c)}},doPreventDefault:function(b){if(b&&(this.preventDefault||(this.disabled&&this.getHref()))){b.preventDefault()}},fireHandler:function(c){var d=this;if(d.fireEvent("click",d,c)!==false){Ext.callback(d.handler,d.scope,[d,c],0,d)}},doToggle:function(){var b=this;if(b.enableToggle&&(b.allowDepress!==false||!b.pressed)){b.toggle()}},onMouseOver:function(c){var d=this;if(!d.disabled&&!c.within(d.el,true,true)){d.onMouseEnter(c)}},onMouseOut:function(c){var d=this;if(!c.within(d.el,true,true)){if(d.overMenuTrigger){d.onMenuTriggerOut(c)}d.onMouseLeave(c)}},onMouseMove:function(f){var e=this,d=e.overMenuTrigger;if(e.split){if(e.isWithinTrigger(f)){if(!d){e.onMenuTriggerOver(f)}}else{if(d){e.onMenuTriggerOut(f)}}}},isWithinTrigger:function(j){var k=this,e=k.el,h,g;h=(k.arrowAlign==="right")?j.getX()-k.getX():j.getY()-e.getY();g=k.getTriggerRegion();return h>g.begin&&h(None)',menuCls:Ext.baseCSSPrefix+"box-menu",constructor:function(d){var c=this;Ext.layout.container.boxOverflow.None.prototype.constructor.apply(this,arguments);c.menuItems=[]},beginLayout:function(b){Ext.layout.container.boxOverflow.None.prototype.beginLayout.apply(this,arguments);this.clearOverflow(b)},beginLayoutCycle:function(c,d){Ext.layout.container.boxOverflow.None.prototype.beginLayoutCycle.apply(this,arguments);if(!d){this.clearOverflow(c);this.layout.cacheChildItems(c)}},onRemove:function(b){Ext.Array.remove(this.menuItems,b)},getSuffixConfig:function(){var g=this,h=g.layout,f=h.owner,e=f.id;g.menu=new Ext.menu.Menu({listeners:{scope:g,beforeshow:g.beforeMenuShow}});g.menuTrigger=new Ext.button.Button({id:e+"-menu-trigger",cls:g.menuCls+"-after "+Ext.baseCSSPrefix+"toolbar-item",plain:f.usePlainButtons,ownerCt:f,ownerLayout:h,iconCls:Ext.baseCSSPrefix+g.getOwnerType(f)+"-more-icon",ui:f.defaultButtonUI||"default",menu:g.menu,showEmptyMenu:true,getSplitCls:function(){return""}});return g.menuTrigger.getRenderTree()},getOverflowCls:function(b){return this.menuCls+"-body-"+b},handleOverflow:function(f){var d=this,e=d.layout;d.showTrigger(f);if(e.direction!=="vertical"){d.menuTrigger.setLocalY((f.state.boxPlan.maxSize-d.menuTrigger[e.names.getHeight]())/2)}return{reservedSpace:d.triggerTotalWidth}},captureChildElements:function(){var e=this,f=e.menuTrigger,d=e.layout.names;if(f.rendering){f.finishRender();e.triggerTotalWidth=f[d.getWidth]()+f.el.getMargin(d.parallelMargins)}},clearOverflow:function(m){var n=this,j=n.menuItems,o,q=0,p=j.length,k=n.layout.owner,l=k._asLayoutRoot;k.suspendLayouts();n.captureChildElements();n.hideTrigger();k.resumeLayouts();for(;qF){z=s.target;u.menuItems.push(z);z.hide()}}G.resumeLayouts()},hideTrigger:function(){var b=this.menuTrigger;if(b){b.hide()}},beforeMenuShow:function(l){var m=this,j=m.menuItems,p=0,k=j.length,n,o,q=function(a,b){return a.isXType("buttongroup")&&!(b instanceof Ext.toolbar.Separator)};l.suspendLayouts();m.clearMenu();l.removeAll();for(;p=this.getMaxScrollPosition()},setVertical:function(){var k=this,j=k.getBeforeScroller(),f=k.getAfterScroller(),h=k.layout.names,g=k.scrollerCls;j.removeCls(g+"-"+h.beforeY);f.removeCls(g+"-"+h.afterY);j.addCls(g+"-"+h.beforeX);f.addCls(g+"-"+h.afterX);Ext.layout.container.boxOverflow.None.prototype.setVertical.call(this)},scrollTo:function(j,h){var l=this,m=l.layout,k=m.names,n=l.getScrollPosition(),o=Ext.Number.constrain(j,0,l.getMaxScrollPosition());if(o!=n&&!l.scrolling){l.scrollPosition=NaN;if(h===undefined){h=l.animateScroll}m.innerCt[k.scrollTo](k.beforeScrollX,o,h?l.getScrollAnim():false);if(h){l.scrolling=true}else{l.updateScrollButtons()}l.fireEvent("scroll",l,o,h?l.getScrollAnim():false)}},scrollToItem:function(l,s){var m=this,p=m.layout,r=p.owner,n=p.names,t=p.innerCt,u,q,o;l=m.getItem(l);if(l!==undefined){if(l==r.items.first()){o=0}else{if(l===r.items.last()){o=m.getMaxScrollPosition()}else{u=m.getItemVisibility(l);if(!u.fullyVisible){q=l.getBox(false,true);o=q[n.x];if(u.hiddenEnd){o-=(t[n.getWidth]()-q[n.width])}}}}if(o!==undefined){m.scrollTo(o,s)}}},getItemVisibility:function(k){var m=this,r=m.getItem(k).getBox(true,true),q=m.layout,n=q.names,o=r[n.x],p=o+r[n.width],s=m.getScrollPosition(),l=s+q.innerCt[n.getWidth]();return{hiddenStart:ol,fullyVisible:o>s&&pn.clickPixelThresh||q>n.clickPixelThresh){n.startDrag(n.startX,n.startY)}}if(n.dragThreshMet){m.b4Drag(l);m.onDrag(l);if(!m.moveOnly){n.fireEvents(l,false)}}n.stopEvent(l);return true},fireEvents:function(B,M){var e=this,L=Ext.supports.Touch,R=e.dragCurrent,D=e.currentPoint,H=D.x,J=D.y,T,I,S,N,K=[],Q=[],O=[],V=[],A=[],C=[],U,F,E,G,W=L?document.documentElement.clientWidth/window.innerWidth:1,P;if(!R||R.isLocked()){return}P=!(R.deltaX<0||R.deltaY<0);if(L||(!e.notifyOccluded&&(!Ext.supports.CSSPointerEvents||Ext.isIE10m||Ext.isOpera)&&P)){T=R.getDragEl();if(P){T.style.visibility="hidden"}B.target=document.elementFromPoint(H/W,J/W);if(P){T.style.visibility="visible"}}for(F in e.dragOvers){S=e.dragOvers[F];delete e.dragOvers[F];if(!e.isTypeOfDD(S)||S.isDestroyed){continue}if(e.notifyOccluded){if(!this.isOverTarget(D,S,e.mode)){O.push(S)}}else{if(!B.within(S.getEl())){O.push(S)}}Q[F]=true}for(G in R.groups){if("string"!=typeof G){continue}for(F in e.ids[G]){S=e.ids[G][F];if(e.isTypeOfDD(S)&&(N=S.getEl())&&(S.isTarget)&&(!S.isLocked())&&(Ext.fly(N).isVisible(true))&&((S!=R)||(R.ignoreSelf===false))){if(e.notifyOccluded){if((S.zIndex=e.getZIndex(N))!==-1){U=true}K.push(S)}else{if(B.within(S.getEl())){K.push(S);break}}}}}if(U){Ext.Array.sort(K,e.byZIndex)}for(F=0,E=K.length;F','",""],isSplitter:true,baseCls:Ext.baseCSSPrefix+"splitter",collapsedClsInternal:Ext.baseCSSPrefix+"splitter-collapsed",canResize:true,collapsible:null,collapseOnDblClick:true,defaultSplitMin:40,defaultSplitMax:1000,collapseTarget:"next",horizontal:false,vertical:false,size:5,tracker:null,ariaRole:"separator",getTrackerConfig:function(){return Ext.apply({xclass:"Ext.resizer.SplitterTracker",el:this.el,splitter:this},this.tracker)},beforeRender:function(){var d=this,f=d.getCollapseTarget(),e=d.collapsible;Ext.Component.prototype.beforeRender.call(this);if(f.collapsed){d.addCls(d.collapsedClsInternal)}if(!d.canResize){d.addCls(d.baseCls+"-noresize")}Ext.applyIf(d.renderData,{collapseDir:d.getCollapseDirection(),collapsible:(e!==null)?e:f.collapsible});d.protoEl.unselectable()},onRender:function(){var f=this,d,e;Ext.Component.prototype.onRender.apply(this,arguments);if(f.performCollapse!==false){if(f.renderData.collapsible){f.mon(f.collapseEl,"click",f.toggleTargetCmp,f)}if(f.collapseOnDblClick){f.mon(f.el,"dblclick",f.toggleTargetCmp,f)}}f.mon(f.getCollapseTarget(),{collapse:f.onTargetCollapse,expand:f.onTargetExpand,beforeexpand:f.onBeforeTargetExpand,beforecollapse:f.onBeforeTargetCollapse,scope:f});if(f.canResize){f.tracker=Ext.create(f.getTrackerConfig());f.relayEvents(f.tracker,["beforedragstart","dragstart","dragend"])}d=f.collapseEl;if(d){d.lastCollapseDirCls=f.collapseDirProps[f.collapseDirection].cls}},getCollapseDirection:function(){var j=this,m=j.collapseDirection,k,h,g,l;if(!m){k=j.collapseTarget;if(k.isComponent){m=k.collapseDirection}if(!m){l=j.ownerCt.layout.type;if(k.isComponent){g=j.ownerCt.items;h=Number(g.indexOf(k)===g.indexOf(j)-1)<<1|Number(l==="hbox")}else{h=Number(j.collapseTarget==="prev")<<1|Number(l==="hbox")}m=["bottom","right","top","left"][h]}j.collapseDirection=m}j.setOrientation((m==="top"||m==="bottom")?"horizontal":"vertical");return m},getCollapseTarget:function(){var b=this;return b.collapseTarget.isComponent?b.collapseTarget:b.collapseTarget==="prev"?b.previousSibling():b.nextSibling()},setCollapseEl:function(c){var d=this.collapseEl;if(d){d.setDisplayed(c)}},onBeforeTargetExpand:function(b){this.setCollapseEl("none")},onBeforeTargetCollapse:function(){this.setCollapseEl("none")},onTargetCollapse:function(b){this.el.addCls(this.collapsedClsInternal+" "+(this.collapsedCls||""));this.setCollapseEl("")},onTargetExpand:function(b){this.el.removeCls(this.collapsedClsInternal+" "+(this.collapsedCls||""));this.setCollapseEl("")},collapseDirProps:{top:{cls:Ext.baseCSSPrefix+"layout-split-top"},right:{cls:Ext.baseCSSPrefix+"layout-split-right"},bottom:{cls:Ext.baseCSSPrefix+"layout-split-bottom"},left:{cls:Ext.baseCSSPrefix+"layout-split-left"}},orientationProps:{horizontal:{opposite:"vertical",fixedAxis:"height",stretchedAxis:"width"},vertical:{opposite:"horizontal",fixedAxis:"width",stretchedAxis:"height"}},applyCollapseDirection:function(){var h=this,e=h.collapseEl,g=h.collapseDirProps[h.collapseDirection],f;if(e){f=e.lastCollapseDirCls;if(f){e.removeCls(f)}e.addCls(e.lastCollapseDirCls=g.cls)}},applyOrientation:function(){var m=this,o=m.orientation,n=m.orientationProps[o],l=m.size,h=n.fixedAxis,k=n.stretchedAxis,j=m.baseCls+"-";m[o]=true;m[n.opposite]=false;if(!m.hasOwnProperty(h)||m[h]==="100%"){m[h]=l}if(!m.hasOwnProperty(k)||m[k]===l){m[k]="100%"}m.removeCls(j+n.opposite);m.addCls(j+o)},setOrientation:function(d){var c=this;if(c.orientation!==d){c.orientation=d;c.applyOrientation()}},updateOrientation:function(){delete this.collapseDirection;this.getCollapseDirection();this.applyCollapseDirection()},toggleTargetCmp:function(j,e){var k=this.getCollapseTarget(),h=k.placeholder,g;if(Ext.isFunction(k.expand)&&Ext.isFunction(k.collapse)){if(h&&!h.hidden){g=true}else{g=!k.hidden}if(g){if(k.collapsed){k.expand()}else{if(k.collapseDirection){k.collapse()}else{k.collapse(this.renderData.collapseDir)}}}}},setSize:function(){var b=this;Ext.Component.prototype.setSize.apply(this,arguments);if(Ext.isIE&&b.el){b.el.repaint()}},beforeDestroy:function(){Ext.destroy(this.tracker);Ext.Component.prototype.beforeDestroy.call(this)}},0,["splitter"],["box","component","splitter"],{box:true,component:true,splitter:true},["widget.splitter"],0,[Ext.resizer,"Splitter"],0));(Ext.cmd.derive("Ext.layout.container.Box",Ext.layout.container.Container,{alternateClassName:"Ext.layout.BoxLayout",type:"box",config:{align:"begin",constrainAlign:false,enableSplitters:true,overflowHandler:{$value:null,merge:function(c,d){if(typeof c=="string"){c={type:c}}return Ext.merge(d?Ext.Object.chain(d):{},c)}},padding:0,pack:"start",stretchMaxPartner:undefined,vertical:false,alignRoundingMethod:"round"},scrollOffset:0,itemCls:Ext.baseCSSPrefix+"box-item",targetCls:Ext.baseCSSPrefix+"box-layout-ct",targetElCls:Ext.baseCSSPrefix+"box-target",innerCls:Ext.baseCSSPrefix+"box-inner",availableSpaceOffset:0,reserveOffset:true,manageMargins:true,createsInnerCt:true,childEls:["innerCt","targetEl"],renderTpl:['{%var oc,l=values.$comp.layout,oh=l.overflowHandler;if (oh && oh.getPrefixConfig!==Ext.emptyFn) {if(oc=oh.getPrefixConfig())dh.generateMarkup(oc, out)}%}{%if (oh && oh.getSuffixConfig!==Ext.emptyFn) {if(oc=oh.getSuffixConfig())dh.generateMarkup(oc, out)}%}',{disableFormats:true,definitions:"var dh=Ext.DomHelper;"}],constructor:function(e){var f=this,d;Ext.layout.container.Container.prototype.constructor.apply(this,arguments);f.setVertical(f.vertical);f.flexSortFn=f.flexSort.bind(f);d=typeof f.padding;if(d==="string"||d==="number"){f.padding=Ext.util.Format.parseBox(f.padding);f.padding.height=f.padding.top+f.padding.bottom;f.padding.width=f.padding.left+f.padding.right}},_beginRe:/^(?:begin|left|top)$/,_centerRe:/^(?:center|middle)$/,_endRe:/^(?:end|right|bottom)$/,_percentageRe:/^\s*(\d+(?:\.\d*)?)\s*[%]\s*$/,getItemSizePolicy:function(r,q){var v=this,x=v.sizePolicy,y=v.align,z=r.flex,t=y,w=v.names,D=r[w.width],s=r[w.height],B=v._percentageRe,C=B.test(D),A=(y==="stretch"),E=(y==="stretchmax"),u=v.constrainAlign;if(!q&&(A||z||C||(u&&!E))){q=v.owner.getSizeModel()}if(A){if(!B.test(s)&&q[w.height].shrinkWrap){t="stretchmax"}}else{if(!E){if(B.test(s)){t="stretch"}else{if(u&&!q[w.height].shrinkWrap){t="stretchmax"}else{t=""}}}}if(z||C){if(!q[w.width].shrinkWrap){x=x.flex}}return x[t]},flexSort:function(u,v){var x=this.names.maxWidth,D=this.names.minWidth,w=Infinity,y=u.target,a=v.target,A=y.flex,B=a.flex,G=0,F,t,z,E,b,C;z=y[x]||w;E=a[x]||w;F=y[D]||0;t=a[D]||0;b=isFinite(F)||isFinite(t);C=isFinite(z)||isFinite(E);if(b||C){if(C){G=z-E}if(G===0&&b){G=t-F}if(G===0){if(C){G=B-A}else{G=A-B}}}return G},isItemBoxParent:function(b){return true},isItemShrinkWrap:function(b){return true},roundFlex:function(b){return Math.ceil(b)},beginCollapse:function(c){var d=this;if(d.direction==="vertical"&&c.collapsedVertical()){c.collapseMemento.capture(["flex"]);delete c.flex}else{if(d.direction==="horizontal"&&c.collapsedHorizontal()){c.collapseMemento.capture(["flex"]);delete c.flex}}},beginExpand:function(b){b.collapseMemento.restore(["flex"])},beginLayout:function(m){var n=this,j=n.owner,k=j.stretchMaxPartner,o=n.innerCt.dom.style,l=n.names,h=n.overflowHandler;m.boxNames=l;if(h){h.beginLayout(m)}if(typeof k==="string"){k=Ext.getCmp(k)||j.query(k)[0]}m.stretchMaxPartner=k&&m.context.getCmp(k);Ext.layout.container.Container.prototype.beginLayout.apply(this,arguments);m.innerCtContext=m.getEl("innerCt",n);m.targetElContext=m.getEl("targetEl",n);n.scrollParallel=j.scrollFlags[l.x];n.scrollPerpendicular=j.scrollFlags[l.y];if(n.scrollParallel){n.scrollPos=j.getTargetEl().dom[l.scrollLeft]}o.width="";o.height=""},beginLayoutCycle:function(r,k){var n=this,p=n.align,o=r.boxNames,l=n.pack,s=n._centerRe,m=o.heightModel,q=n.overflowHandler;if(q){q.beginLayoutCycle(r,k)}Ext.layout.container.Container.prototype.beginLayoutCycle.apply(this,arguments);r.parallelSizeModel=r[o.widthModel];r.perpendicularSizeModel=r[m];r.boxOptions={align:p={stretch:p==="stretch",stretchmax:p==="stretchmax",center:s.test(p),bottom:n._endRe.test(p)},pack:l={center:s.test(l),end:l==="end"}};if(p.stretch&&r.perpendicularSizeModel.shrinkWrap){p.stretchmax=true;p.stretch=false}p.nostretch=!(p.stretch||p.stretchmax);if(r.parallelSizeModel.shrinkWrap){l.center=l.end=false}n.cacheFlexes(r);n.targetEl.setWidth(20000)},cacheFlexes:function(E){var u=this,D=E.boxNames,M=D.widthModel,J=D.heightModel,K=E.boxOptions.align.nostretch,A=0,L=E.childItems,y=L.length,w=[],C=0,F=D.minWidth,H=u._percentageRe,x=0,v=0,I,B,z,G;while(y--){B=L[y];I=B.target;if(B[M].calculated){B.flex=z=I.flex;if(z){A+=z;w.push(B);C+=I[F]||0}else{G=H.exec(I[D.width]);B.percentageParallel=parseFloat(G[1])/100;++x}}if(K&&B[J].calculated){G=H.exec(I[D.height]);B.percentagePerpendicular=parseFloat(G[1])/100;++v}}E.flexedItems=w;E.flexedMinSize=C;E.totalFlex=A;E.percentageWidths=x;E.percentageHeights=v;Ext.Array.sort(w,u.flexSortFn)},calculate:function(n){var p=this,q=p.getContainerSize(n),l=n.boxNames,o=n.state,m=o.boxPlan||(o.boxPlan={}),j=n.targetContext,k=p.overflowHandler;m.targetSize=q;if(!o.parallelDone){o.parallelDone=p.calculateParallel(n,l,m)}if(!o.perpendicularDone){o.perpendicularDone=p.calculatePerpendicular(n,l,m)}if(o.parallelDone&&o.perpendicularDone){p.publishInnerCtSize(n,p.reserveOffset?p.availableSpaceOffset:0);if(p.done&&n.boxOptions.align.stretchmax&&!o.stretchMaxDone){p.calculateStretchMax(n,l,m);o.stretchMaxDone=true}if(k){k.calculate(n)}}else{p.done=false}},calculateParallel:function(ab,Y,aj){var M=this,G=Y.width,ak=ab.childItems,Q=Y.beforeX,ag=Y.afterX,U=Y.setWidth,W=ak.length,I=ab.flexedItems,S=I.length,K=ab.boxOptions.pack,Z=M.padding,ah=aj.targetSize,ad=ah[G],T=0,af=Z[Q],O=af+Z[ag]+M.scrollOffset+(M.reserveOffset?M.availableSpaceOffset:0),J=Ext.getScrollbarSize()[Y.width],L,aa,ae,H,X,N,P,V,R,ai,ac;if(!ab.parallelSizeModel.shrinkWrap&&!ah[Y.gotWidth]){return false}if(J&&M.scrollPerpendicular&&ab.parallelSizeModel.shrinkWrap&&!ab.boxOptions.align.stretch&&!ab.perpendicularSizeModel.shrinkWrap){if(!ab.state.perpendicularDone){return false}R=true}for(L=0;Laj.targetSize[Y.height])){V+=J;ab[Y.hasOverflowY]=true;ab.target.componentLayout[Y.setWidthInDom]=true;ab[Y.invalidateScrollY]=Ext.isIE8}ab[Y.setContentWidth](V);return true},calculatePerpendicular:function(ag,Q,ab){var ah=this,aw=ag.perpendicularSizeModel.shrinkWrap,ay=ab.targetSize,ar=ag.childItems,ac=ar.length,ao=Math.max,ap=Q.height,an=Q.setHeight,at=Q.beforeY,ai=Q.y,T=ah.padding,aq=T[at],am=ay[ap]-aq-T[Q.afterY],W=ag.boxOptions.align,al=W.stretch,ak=W.stretchmax,N=W.center,O=W.bottom,U=ah.constrainAlign,V=0,Z=0,X=ah.onBeforeConstrainInvalidateChild,aa=ah.onAfterConstrainInvalidateChild,az=Ext.getScrollbarSize().height,ad,S,Y,af,ae,ax,aj,av,P,R,au;if(al||((N||O)&&!aw)){if(isNaN(am)){return false}}if(!al&&!ag.parallelSizeModel.shrinkWrap&&!ag.state.parallelDone&&ah.scrollParallel){return false}if(ah.scrollParallel&&ab.tooNarrow){if(aw){R=true}else{am-=az;ab.targetSize[ap]-=az}}if(al){ax=am}else{for(S=0;Sam){aj.invalidate({before:X,after:aa,layout:ah,childHeight:am,names:Q});ag.state.parallelDone=false}if(isNaN(V=ao(V,Y+af,aj.target[Q.minHeight]||0))){return false}}if(R){V+=az;ag[Q.hasOverflowX]=true;ag.target.componentLayout[Q.setHeightInDom]=true;ag[Q.invalidateScrollX]=Ext.isIE8}av=ag.stretchMaxPartner;if(av){ag.setProp("maxChildHeight",V);P=av.childItems;if(P&&P.length){V=ao(V,av.getProp("maxChildHeight"));if(isNaN(V)){return false}}}ag[Q.setContentHeight](V+ah.padding[ap]+ag.targetContext.getPaddingInfo()[ap]);if(R){V-=az}ab.maxSize=V;if(ak){ax=V}else{if(N||O||Z){if(U){ax=aw?V:am}else{ax=aw?V:ao(am,V)}ax-=ag.innerCtContext.getBorderInfo()[ap]}}}for(S=0;S0){ad=aq+Math[ah.alignRoundingMethod](ae/2)}}else{if(O){ad=ao(0,ax-ad-aj.props[ap])}}}aj.setProp(ai,ad)}return true},onBeforeConstrainInvalidateChild:function(d,e){var f=e.names.heightModel;if(!d[f].constrainedMin){d[f]=Ext.layout.SizeModel.calculated}},onAfterConstrainInvalidateChild:function(d,e){var f=e.names;d.setProp(f.beforeY,0);if(d[f.heightModel].calculated){d[f.setHeight](e.childHeight)}},calculateStretchMax:function(C,w,u){var v=this,y=w.height,t=w.width,z=C.childItems,E=z.length,r=u.maxSize,s=v.onBeforeStretchMaxInvalidateChild,A=v.onAfterStretchMaxInvalidateChild,q,x,B,D;for(B=0;B=l){return}}if(!q){return}m=n.findNextFocusableChild(null,true,o,k);if(m){n.activateFocusable(m)}return m},clearFocusables:function(){var h=this,f,j,k,g;f=h.getFocusables();for(k=0,g=f.length;k0?(j0?j+m:k-1);for(;;p+=m){if(j<0&&(p>=k||p<0)){return null}else{if(p>=k){p=-1;continue}else{if(p<0){p=k;continue}else{if(p===j){return null}}}}n=q[p];if(!n||!n.focusable){continue}if(o||n.isFocusable()){return n}}return null},getFocusableContainerEl:function(){return this.el},onFocusableChildAdd:function(b){return this.doFocusableChildAdd(b)},activateFocusableContainerEl:function(b){b=b||this.getFocusableContainerEl();b.set({tabindex:this.activeChildTabIndex})},deactivateFocusableContainerEl:function(b){b=b||this.getFocusableContainerEl();b.set({tabindex:this.inactiveChildTabIndex})},doFocusableChildAdd:function(b){if(b.focusable){b.focusableContainer=this;this.deactivateFocusable(b)}},onFocusableChildRemove:function(b){return this.doFocusableChildRemove(b)},doFocusableChildRemove:function(b){delete b.focusableContainer},onFocusableContainerMousedown:function(f,d){var e=Ext.Component.getComponentByElement(d);if(e===this){f.preventDefault()}},onFocusableContainerFocus:function(h){var e=this,f,g;g=e.initDefaultFocusable();if(g){e.deactivateFocusableContainerEl();g.focus()}},onFocusableContainerFocusEnter:function(f){var d=this,e=d.lastFocusedChild;if(e){d.deactivateFocusableContainerEl()}},onFocusableContainerFocusLeave:function(f){var d=this,e=d.lastFocusedChild;d.clearFocusables();if(e){d.activateFocusable(e)}else{d.activateFocusableContainerEl()}},beforeFocusableChildBlur:Ext.privateFn,afterFocusableChildBlur:Ext.privateFn,beforeFocusableChildFocus:function(f){var d=this,e;d.clearFocusables();d.activateFocusable(f);if(f.needArrowKeys){d.guardFocusableChild(f)}},guardFocusableChild:function(g){var h=this,f=h.activeChildTabIndex,e;e=h.findNextFocusableChild(g,-1);if(e){e.setTabIndex(f)}e=h.findNextFocusableChild(g,1);if(e){e.setTabIndex(f)}},afterFocusableChildFocus:function(b){this.lastFocusedChild=b},onFocusableChildShow:Ext.privateFn,onFocusableChildHide:Ext.privateFn,onFocusableChildEnable:Ext.privateFn,onFocusableChildDisable:Ext.privateFn,onFocusableChildMasked:Ext.privateFn,onFocusableChildDestroy:Ext.privateFn,onFocusableChildUpdate:Ext.privateFn}},0,0,0,0,0,0,[Ext.util,"FocusableContainer"],0));(Ext.cmd.derive("Ext.toolbar.Toolbar",Ext.container.Container,{alternateClassName:"Ext.Toolbar",isToolbar:true,baseCls:Ext.baseCSSPrefix+"toolbar",ariaRole:"toolbar",defaultType:"button",layout:undefined,vertical:false,enableOverflow:false,overflowHandler:null,defaultButtonUI:"default-toolbar",defaultFieldUI:"default",defaultFooterButtonUI:"default",defaultFooterFieldUI:"default",trackMenus:true,itemCls:Ext.baseCSSPrefix+"toolbar-item",statics:{shortcuts:{"-":"tbseparator"," ":"tbspacer"},shortcutsHV:{0:{"->":{xtype:"tbfill",height:0}},1:{"->":{xtype:"tbfill",width:0}}}},initComponent:function(){var c=this,d=c.layout;if(c.dock==="right"||c.dock==="left"){c.vertical=true}c.layout=d=Ext.applyIf(Ext.isString(d)?{type:d}:d||{},{type:c.vertical?"vbox":"hbox",align:c.vertical?"stretchmax":"middle"});if(c.overflowHandler){d.overflowHandler=c.overflowHandler}else{if(c.enableOverflow){d.overflowHandler="menu"}}if(c.vertical){c.addClsWithUI("vertical")}if(c.ui==="footer"){c.ignoreBorderManagement=true}Ext.container.Container.prototype.initComponent.call(this)},getRefItems:function(g){var h=this,f=Ext.container.Container.prototype.getRefItems.apply(this,arguments),j=h.layout,k;if(g&&(h.enableOverflow||(h.overflowHandler==="menu"))){k=j.overflowHandler;if(k&&k.menu){f=f.concat(k.menu.getRefItems(g))}}return f},lookupComponent:function(g){var h=arguments;if(typeof g==="string"){var c=Ext.toolbar.Toolbar,f=c.shortcutsHV[this.vertical?1:0][g]||c.shortcuts[g];if(typeof f==="string"){g={xtype:f}}else{if(f){g=Ext.apply({},f)}else{g={xtype:"tbtext",text:g}}}this.applyDefaults(g);h=[g]}return Ext.container.Container.prototype.lookupComponent.apply(this,h)},onBeforeAdd:function(e){var h=this,g=h.ui==="footer",f=g?h.defaultFooterButtonUI:h.defaultButtonUI;if(e.isSegmentedButton){if(e.getDefaultUI()==="default"&&!e.config.hasOwnProperty("defaultUI")){e.setDefaultUI(f)}}else{if(e.ui==="default"&&!e.hasOwnProperty("ui")){if(e.isButton){e.ui=f}else{if(e.isFormField){e.ui=g?h.defaultFooterFieldUI:h.defaultFieldUI}}}}if(e instanceof Ext.toolbar.Separator){e.setUI((h.vertical)?"vertical":"horizontal")}Ext.container.Container.prototype.onBeforeAdd.apply(this,arguments)},onAdd:function(b){Ext.container.Container.prototype.onAdd.apply(this,arguments);this.trackMenu(b)},onRemove:function(b){Ext.container.Container.prototype.onRemove.apply(this,arguments);this.trackMenu(b,true)},privates:{applyDefaults:function(b){if(!Ext.isString(b)){b=Ext.container.Container.prototype.applyDefaults.apply(this,arguments)}return b},trackMenu:function(h,f){if(this.trackMenus&&h.menu){var g=f?"mun":"mon",e=this;e[g](h,"mouseover",e.onButtonOver,e);e[g](h,"menushow",e.onButtonMenuShow,e);e[g](h,"menuhide",e.onButtonMenuHide,e)}},getChildItemsToDisable:function(){return this.items.getRange()},onButtonOver:function(b){if(this.activeMenuBtn&&this.activeMenuBtn!==b){this.activeMenuBtn.hideMenu();b.showMenu();this.activeMenuBtn=b}},onButtonMenuShow:function(b){this.activeMenuBtn=b},onButtonMenuHide:function(b){delete this.activeMenuBtn}}},0,["toolbar"],["box","component","container","toolbar"],{box:true,component:true,container:true,toolbar:true},["widget.toolbar"],[[Ext.util.FocusableContainer.prototype.mixinId||Ext.util.FocusableContainer.$className,Ext.util.FocusableContainer]],[Ext.toolbar,"Toolbar",Ext,"Toolbar"],0));(Ext.cmd.derive("Ext.dd.DragDrop",Ext.Base,{constructor:function(f,e,d){if(f){this.init(f,e,d)}},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},moveOnly:false,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,triggerEvent:"mousedown",b4StartDrag:function(d,c){},startDrag:function(d,c){},b4Drag:function(b){},onDrag:function(b){},onDragEnter:function(d,c){},b4DragOver:function(b){},onDragOver:function(d,c){},b4DragOut:function(b){},onDragOut:function(d,c){},b4DragDrop:function(b){},onDragDrop:function(d,c){},onInvalidDrop:function(b){},b4EndDrag:function(b){},endDrag:function(b){},b4MouseDown:function(b){},onMouseDown:function(b){},onMouseUp:function(b){},onAvailable:function(){},defaultPadding:{left:0,right:0,top:0,bottom:0},constrainTo:function(t,v,n){if(Ext.isNumber(v)){v={left:v,right:v,top:v,bottom:v}}v=v||this.defaultPadding;var r=Ext.get(this.getEl()).getBox(),c=Ext.get(t),o=c.getScroll(),s,q=c.dom,p,u,w;if(q==document.body){s={x:o.left,y:o.top,width:Ext.Element.getViewportWidth(),height:Ext.Element.getViewportHeight()}}else{p=c.getXY();s={x:p[0],y:p[1],width:q.clientWidth,height:q.clientHeight}}u=r.y-s.y;w=r.x-s.x;this.resetConstraints();this.setXConstraint(w-(v.left||0),s.width-w-r.width-(v.right||0),this.xTickSize);this.setYConstraint(u-(v.top||0),s.height-u-r.height-(v.bottom||0),this.yTickSize)},getEl:function(){if(!this._domRef){this._domRef=Ext.getDom(this.id)}return this._domRef},getDragEl:function(){return Ext.getDom(this.dragElId)},init:function(g,f,e){var h=this;h.el=h.el||Ext.get(g);h.initTarget(g,f,e);Ext.get(h.id).on(h.triggerEvent,h.handleMouseDown,h)},initTarget:function(f,e,d){this.config=d||{};this.DDMInstance=Ext.dd.DragDropManager;this.groups={};if(typeof f!=="string"){f=Ext.id(f)}this.id=f;this.addToGroup((e)?e:"default");this.handleElId=f;this.setDragElId(f);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(h,f,g,e){if(!f&&0!==f){this.padding=[h,h,h,h]}else{if(!g&&0!==g){this.padding=[h,f,h,f]}else{this.padding=[h,f,g,e]}}},setInitPosition:function(l,m){var k=this.getEl(),g,h,j;if(!this.DDMInstance.verifyEl(k)){return}g=l||0;h=m||0;j=Ext.fly(k).getXY();this.initPageX=j[0]-g;this.initPageY=j[1]-h;this.lastPageX=j[0];this.lastPageY=j[1];this.setStartPosition(j)},setStartPosition:function(c){var d=c||Ext.fly(this.getEl()).getXY();this.deltaSetXY=null;this.startPageX=d[0];this.startPageY=d[1]},addToGroup:function(b){this.groups[b]=true;this.DDMInstance.regDragDrop(this,b)},removeFromGroup:function(b){if(this.groups[b]){delete this.groups[b]}this.DDMInstance.removeDDFromGroup(this,b)},setDragElId:function(b){this.dragElId=b},setHandleElId:function(b){if(typeof b!=="string"){b=Ext.id(b)}this.handleElId=b;this.DDMInstance.regHandle(this.id,b)},setOuterHandleElId:function(b){if(typeof b!=="string"){b=Ext.id(b)}Ext.get(b).on(this.triggerEvent,this.handleMouseDown,this);this.setHandleElId(b);this.hasOuterHandles=true},unreg:function(){var c=this,d;if(c._domRef){d=Ext.fly(c.id);if(d){d.un(c.triggerEvent,c.handleMouseDown,c)}}c._domRef=null;c.DDMInstance._remove(c,c.autoGroup)},destroy:function(){this.unreg();this.isDestroyed=true},isLocked:function(){return(this.DDMInstance.isLocked()||this.locked)},handleMouseDown:function(f,d){var e=this;if((e.primaryButtonOnly&&f.button!=0)||e.isLocked()){return}e.DDMInstance.refreshCache(e.groups);if(e.hasOuterHandles||e.DDMInstance.isOverTarget(f.getPoint(),e)){if(e.clickValidator(f)){e.setStartPosition();e.b4MouseDown(f);e.onMouseDown(f);e.DDMInstance.handleMouseDown(f,e);e.DDMInstance.stopEvent(f)}}},clickValidator:function(c){var d=c.getTarget();return(this.isValidHandleChild(d)&&(this.id==this.handleElId||this.DDMInstance.handleWasClicked(d,this.id)))},addInvalidHandleType:function(d){var c=d.toUpperCase();this.invalidHandleTypes[c]=c},addInvalidHandleId:function(b){if(typeof b!=="string"){b=Ext.id(b)}this.invalidHandleIds[b]=b},addInvalidHandleClass:function(b){this.invalidHandleClasses.push(b)},removeInvalidHandleType:function(d){var c=d.toUpperCase();delete this.invalidHandleTypes[c]},removeInvalidHandleId:function(b){if(typeof b!=="string"){b=Ext.id(b)}delete this.invalidHandleIds[b]},removeInvalidHandleClass:function(d){for(var f=0,e=this.invalidHandleClasses.length;f=this.minX;e=e-f){if(!h[e]){this.xTicks[this.xTicks.length]=e;h[e]=true}}for(e=this.initPageX;e<=this.maxX;e=e+f){if(!h[e]){this.xTicks[this.xTicks.length]=e;h[e]=true}}Ext.Array.sort(this.xTicks,this.DDMInstance.numericSort)},setYTicks:function(g,f){this.yTicks=[];this.yTickSize=f;var h={},e;for(e=this.initPageY;e>=this.minY;e=e-f){if(!h[e]){this.yTicks[this.yTicks.length]=e;h[e]=true}}for(e=this.initPageY;e<=this.maxY;e=e+f){if(!h[e]){this.yTicks[this.yTicks.length]=e;h[e]=true}}Ext.Array.sort(this.yTicks,this.DDMInstance.numericSort)},setXConstraint:function(f,d,e){this.leftConstraint=f;this.rightConstraint=d;this.minX=this.initPageX-f;this.maxX=this.initPageX+d;if(e){this.setXTicks(this.initPageX,e)}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(e,f,d){this.topConstraint=e;this.bottomConstraint=f;this.minY=this.initPageY-e;this.maxY=this.initPageY+f;if(d){this.setYTicks(this.initPageY,d)}this.constrainY=true},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var c=(this.maintainOffset)?this.lastPageX-this.initPageX:0,d=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(c,d)}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(k,n){if(!n){return k}else{if(n[0]>=k){return n[0]}else{var h,j,o,l,m;for(h=0,j=n.length;h=k){l=k-n[h];m=n[o]-k;return(m>l)?n[h]:n[o]}}return n[n.length-1]}}},toString:function(){return("DragDrop "+this.id)}},3,0,0,0,0,0,[Ext.dd,"DragDrop"],0));(Ext.cmd.derive("Ext.dd.DD",Ext.dd.DragDrop,{constructor:function(f,e,d){if(f){this.init(f,e,d)}},scroll:true,autoOffset:function(h,e){var f=h-this.startPageX,g=e-this.startPageY;this.setDelta(f,g)},setDelta:function(c,d){this.deltaX=c;this.deltaY=d},setDragElPos:function(f,d){var e=this.getDragEl();this.alignElWithMouse(e,f,d)},alignElWithMouse:function(v,s,u){var r=this.getTargetCoord(s,u),t=v.dom?v:Ext.fly(v,"_dd"),m=t.getSize(),p=Ext.Element,o,w,n,q;if(!this.deltaSetXY){o=this.cachedViewportSize={width:p.getDocumentWidth(),height:p.getDocumentHeight()};w=[Math.max(0,Math.min(r.x,o.width-m.width)),Math.max(0,Math.min(r.y,o.height-m.height))];t.setXY(w);n=this.getLocalX(t);q=t.getLocalY();this.deltaSetXY=[n-r.x,q-r.y]}else{o=this.cachedViewportSize;this.setLocalXY(t,Math.max(0,Math.min(r.x+this.deltaSetXY[0],o.width-m.width)),Math.max(0,Math.min(r.y+this.deltaSetXY[1],o.height-m.height)))}this.cachePosition(r.x,r.y);this.autoScroll(r.x,r.y,v.offsetHeight,v.offsetWidth);return r},cachePosition:function(d,e){if(d){this.lastPageX=d;this.lastPageY=e}else{var f=Ext.fly(this.getEl()).getXY();this.lastPageX=f[0];this.lastPageY=f[1]}},autoScroll:function(t,u,y,s){if(this.scroll){var r=Ext.Element.getViewportHeight(),B=Ext.Element.getViewportWidth(),h=this.DDMInstance.getScrollTop(),z=this.DDMInstance.getScrollLeft(),v=y+u,q=s+t,w=(r+h-u-this.deltaY),x=(B+z-t-this.deltaX),A=40,C=(document.all)?80:30;if(v>r&&w0&&u-hB&&x0&&t-zthis.maxX){f=this.maxX}}if(this.constrainY){if(gthis.maxY){g=this.maxY}}f=this.getTick(f,this.xTicks);g=this.getTick(g,this.yTicks);return{x:f,y:g}},applyConfig:function(){Ext.dd.DragDrop.prototype.applyConfig.call(this);this.scroll=(this.config.scroll!==false)},b4MouseDown:function(c){var d=c.getXY();this.autoOffset(d[0],d[1])},b4Drag:function(c){var d=c.getXY();this.setDragElPos(d[0],d[1])},toString:function(){return("DD "+this.id)},getLocalX:function(b){return b.getLocalX()},setLocalXY:function(d,e,f){d.setLocalXY(e,f)}},3,0,0,0,0,0,[Ext.dd,"DD"],0));(Ext.cmd.derive("Ext.dd.DDProxy",Ext.dd.DD,{statics:{dragElId:"ygddfdiv"},constructor:function(f,e,d){if(f){this.init(f,e,d);this.initFrame()}},resizeFrame:true,centerFrame:false,createFrame:function(){var e=this,f=document.body,g,h;if(!f||!f.firstChild){Ext.defer(function(){e.createFrame()},50);return}g=this.getDragEl();if(!g){g=document.createElement("div");g.id=this.dragElId;g.setAttribute("role","presentation");h=g.style;h.position="absolute";h.visibility="hidden";h.cursor="move";h.border="2px solid #aaa";h.zIndex=999;f.insertBefore(g,f.firstChild)}},initFrame:function(){this.createFrame()},applyConfig:function(){Ext.dd.DD.prototype.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(h,j){var k=this.getEl(),g=this.getDragEl(),f=g.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(f.width,10)/2),Math.round(parseInt(f.height,10)/2))}this.setDragElPos(h,j);Ext.fly(g).show()},_resizeProxy:function(){if(this.resizeFrame){var b=this.getEl();Ext.fly(this.getDragEl()).setSize(b.offsetWidth,b.offsetHeight)}},b4MouseDown:function(h){var e=h.getXY(),f=e[0],g=e[1];this.autoOffset(f,g);this.setDragElPos(f,g)},b4StartDrag:function(d,c){this.showFrame(d,c)},b4EndDrag:function(b){Ext.fly(this.getDragEl()).hide()},endDrag:function(f){var d=this.getEl(),e=this.getDragEl();e.style.visibility="";this.beforeMove();d.style.visibility="hidden";Ext.dd.DDM.moveToEl(d,e);e.style.visibility="hidden";d.style.visibility="";this.afterDrag()},beforeMove:function(){},afterDrag:function(){},toString:function(){return("DDProxy "+this.id)}},3,0,0,0,0,0,[Ext.dd,"DDProxy"],0));(Ext.cmd.derive("Ext.dd.StatusProxy",Ext.Component,{animRepair:false,childEls:["ghost"],renderTpl:[''],repairCls:Ext.baseCSSPrefix+"dd-drag-repair",ariaRole:"presentation",constructor:function(d){var c=this;d=d||{};Ext.apply(c,{hideMode:"visibility",hidden:true,floating:true,id:c.id||Ext.id(),cls:Ext.baseCSSPrefix+"dd-drag-proxy "+this.dropNotAllowed,shadow:d.shadow||false,renderTo:Ext.getDetachedBody()});Ext.Component.prototype.constructor.apply(this,arguments);this.dropStatus=this.dropNotAllowed},dropAllowed:Ext.baseCSSPrefix+"dd-drop-ok",dropNotAllowed:Ext.baseCSSPrefix+"dd-drop-nodrop",setStatus:function(b){b=b||this.dropNotAllowed;if(this.dropStatus!=b){this.el.replaceCls(this.dropStatus,b);this.dropStatus=b}},reset:function(d){var f=this,e=Ext.baseCSSPrefix+"dd-drag-proxy ";f.el.replaceCls(e+f.dropAllowed,e+f.dropNotAllowed);f.dropStatus=f.dropNotAllowed;if(d){f.ghost.setHtml("")}},update:function(d){if(typeof d=="string"){this.ghost.setHtml(d)}else{this.ghost.setHtml("");d.style.margin="0";this.ghost.dom.appendChild(d)}var c=this.ghost.dom.firstChild;if(c){Ext.fly(c).setStyle("float","none")}},getGhost:function(){return this.ghost},hide:function(b){Ext.Component.prototype.hide.call(this);if(b){this.reset(true)}},stop:function(){if(this.anim&&this.anim.isAnimated&&this.anim.isAnimated()){this.anim.stop()}},sync:function(){this.el.sync()},repair:function(h,g,f){var e=this;e.callback=g;e.scope=f;if(h&&e.animRepair!==false){e.el.addCls(e.repairCls);e.el.hideUnders(true);e.anim=e.el.animate({duration:e.repairDuration||500,easing:"ease-out",to:{x:h[0],y:h[1]},stopAnimation:true,callback:e.afterRepair,scope:e})}else{e.afterRepair()}},afterRepair:function(){var b=this;b.hide(true);b.el.removeCls(b.repairCls);if(typeof b.callback=="function"){b.callback.call(b.scope||b)}delete b.callback;delete b.scope}},1,0,["box","component"],{box:true,component:true},0,0,[Ext.dd,"StatusProxy"],0));(Ext.cmd.derive("Ext.dd.DragSource",Ext.dd.DDProxy,{dropAllowed:Ext.baseCSSPrefix+"dd-drop-ok",dropNotAllowed:Ext.baseCSSPrefix+"dd-drop-nodrop",animRepair:true,repairHighlightColor:"c3daf9",constructor:function(c,d){this.el=Ext.get(c);if(!this.dragData){this.dragData={}}Ext.apply(this,d);if(!this.proxy){this.proxy=new Ext.dd.StatusProxy({id:this.el.id+"-drag-status-proxy",animRepair:this.animRepair})}Ext.dd.DDProxy.prototype.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},getDragData:function(b){return this.dragData},onDragEnter:function(h,g){var e=Ext.dd.DragDropManager.getDDById(g),f;this.cachedTarget=e;if(this.beforeDragEnter(e,h,g)!==false){if(e.isNotifyTarget){f=e.notifyEnter(this,h,this.dragData);this.proxy.setStatus(f)}else{this.proxy.setStatus(this.dropAllowed)}if(this.afterDragEnter){this.afterDragEnter(e,h,g)}}},beforeDragEnter:function(d,e,f){return true},onDragOver:function(h,g){var e=this.cachedTarget||Ext.dd.DragDropManager.getDDById(g),f;if(this.beforeDragOver(e,h,g)!==false){if(e.isNotifyTarget){f=e.notifyOver(this,h,this.dragData);this.proxy.setStatus(f)}if(this.afterDragOver){this.afterDragOver(e,h,g)}}},beforeDragOver:function(d,e,f){return true},onDragOut:function(d,f){var e=this.cachedTarget||Ext.dd.DragDropManager.getDDById(f);if(this.beforeDragOut(e,d,f)!==false){if(e.isNotifyTarget){e.notifyOut(this,d,this.dragData)}this.proxy.reset();if(this.afterDragOut){this.afterDragOut(e,d,f)}}this.cachedTarget=null},beforeDragOut:function(d,e,f){return true},onDragDrop:function(d,f){var e=this.cachedTarget||Ext.dd.DragDropManager.getDDById(f);if(this.beforeDragDrop(e,d,f)!==false){if(e.isNotifyTarget){if(e.notifyDrop(this,d,this.dragData)!==false){this.onValidDrop(e,d,f)}else{this.onInvalidDrop(e,d,f)}}else{this.onValidDrop(e,d,f)}if(this.afterDragDrop){this.afterDragDrop(e,d,f)}}delete this.cachedTarget},beforeDragDrop:function(d,e,f){return true},onValidDrop:function(d,e,f){this.hideProxy();if(this.afterValidDrop){this.afterValidDrop(d,e,f)}},getRepairXY:function(c,d){return this.el.getXY()},onInvalidDrop:function(h,e,g){var f=this;if(!e){e=h;h=null;g=e.getTarget().id}if(f.beforeInvalidDrop(h,e,g)!==false){if(f.cachedTarget){if(f.cachedTarget.isNotifyTarget){f.cachedTarget.notifyOut(f,e,f.dragData)}f.cacheTarget=null}f.proxy.repair(f.getRepairXY(e,f.dragData),f.afterRepair,f);if(f.afterInvalidDrop){f.afterInvalidDrop(e,g)}}},afterRepair:function(){var b=this;if(Ext.enableFx){b.el.highlight(b.repairHighlightColor)}b.dragging=false},beforeInvalidDrop:function(d,e,f){return true},handleMouseDown:function(c){if(this.dragging){return}var d=this.getDragData(c);if(d&&this.onBeforeDrag(d,c)!==false){this.dragData=d;this.proxy.stop();Ext.dd.DDProxy.prototype.handleMouseDown.apply(this,arguments)}},onBeforeDrag:function(d,c){return true},onStartDrag:Ext.emptyFn,alignElWithMouse:function(){this.proxy.ensureAttachedToBody(true);return Ext.dd.DDProxy.prototype.alignElWithMouse.apply(this,arguments)},startDrag:function(d,c){this.proxy.reset();this.proxy.hidden=false;this.dragging=true;this.proxy.update("");this.onInitDrag(d,c);this.proxy.show()},onInitDrag:function(e,f){var d=this.el.dom.cloneNode(true);d.id=Ext.id();this.proxy.update(d);this.onStartDrag(e,f);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(b){},endDrag:function(b){this.onEndDrag(this.dragData,b)},onEndDrag:function(d,c){},autoOffset:function(d,c){this.setDelta(-12,-20)},destroy:function(){Ext.dd.DDProxy.prototype.destroy.call(this);Ext.destroy(this.proxy)}},1,0,0,0,0,0,[Ext.dd,"DragSource"],0));(Ext.cmd.derive("Ext.panel.Proxy",Ext.Base,{alternateClassName:"Ext.dd.PanelProxy",moveOnDrag:true,constructor:function(e,d){var f=this;f.panel=e;f.id=f.panel.id+"-ddproxy";Ext.apply(f,d)},insertProxy:true,setStatus:Ext.emptyFn,reset:Ext.emptyFn,update:Ext.emptyFn,stop:Ext.emptyFn,sync:Ext.emptyFn,getEl:function(){return this.ghost.el},getGhost:function(){return this.ghost},getProxy:function(){return this.proxy},hide:function(){var b=this;if(b.ghost){if(b.proxy){b.proxy.destroy();delete b.proxy}b.panel.unghost(null,b.moveOnDrag);delete b.ghost}},show:function(){var c=this,d;if(!c.ghost){d=c.panel.getSize();c.panel.el.setVisibilityMode(Ext.Element.DISPLAY);c.ghost=c.panel.ghost();if(c.insertProxy){c.proxy=c.panel.el.insertSibling({role:"presentation",cls:Ext.baseCSSPrefix+"panel-dd-spacer"});c.proxy.setSize(d)}}},repair:function(d,f,e){this.hide();Ext.callback(f,e||this)},moveProxy:function(d,c){if(this.proxy){d.insertBefore(this.proxy.dom,c)}}},1,0,0,0,0,0,[Ext.panel,"Proxy",Ext.dd,"PanelProxy"],0));(Ext.cmd.derive("Ext.panel.DD",Ext.dd.DragSource,{constructor:function(d,e){var f=this;f.panel=d;f.dragData={panel:d};f.panelProxy=new Ext.panel.Proxy(d,e);f.proxy=f.panelProxy.proxy;Ext.dd.DragSource.prototype.constructor.call(this,d.el,e);f.setupEl(d)},setupEl:function(f){var h=this,g=f.header,e=f.body;if(g){h.setHandleElId(g.id);e=g.el}if(e){e.setStyle("cursor","move");h.scroll=false}else{f.on("boxready",h.setupEl,h,{single:true})}},showFrame:Ext.emptyFn,startDrag:Ext.emptyFn,b4StartDrag:function(d,c){this.panelProxy.show()},b4MouseDown:function(h){var e=h.getXY(),f=e[0],g=e[1];this.autoOffset(f,g)},onInitDrag:function(d,c){this.onStartDrag(d,c);return true},createFrame:Ext.emptyFn,getDragEl:function(c){var d=this.panelProxy.ghost;if(d){return d.el.dom}},endDrag:function(b){this.panelProxy.hide();this.panel.saveState()},autoOffset:function(d,c){d-=this.startPageX;c-=this.startPageY;this.setDelta(d,c)},onInvalidDrop:function(h,e,g){var f=this;if(f.beforeInvalidDrop(h,e,g)!==false){if(f.cachedTarget){if(f.cachedTarget.isNotifyTarget){f.cachedTarget.notifyOut(f,e,f.dragData)}f.cacheTarget=null}if(f.afterInvalidDrop){f.afterInvalidDrop(e,g)}}}},1,0,0,0,0,0,[Ext.panel,"DD"],0));(Ext.cmd.derive("Ext.layout.component.Dock",Ext.layout.component.Component,{alternateClassName:"Ext.layout.component.AbstractDock",type:"dock",horzAxisProps:{name:"horz",oppositeName:"vert",dockBegin:"left",dockEnd:"right",horizontal:true,marginBegin:"margin-left",maxSize:"maxWidth",minSize:"minWidth",pos:"x",setSize:"setWidth",shrinkWrapDock:"shrinkWrapDockWidth",size:"width",sizeModel:"widthModel"},vertAxisProps:{name:"vert",oppositeName:"horz",dockBegin:"top",dockEnd:"bottom",horizontal:false,marginBegin:"margin-top",maxSize:"maxHeight",minSize:"minHeight",pos:"y",setSize:"setHeight",shrinkWrapDock:"shrinkWrapDockHeight",size:"height",sizeModel:"heightModel"},initializedBorders:-1,horizontalCollapsePolicy:{width:true,x:true},verticalCollapsePolicy:{height:true,y:true},finishRender:function(){var d=this,f,e;Ext.layout.component.Component.prototype.finishRender.call(this);f=d.getRenderTarget();e=d.getDockedItems();d.finishRenderItems(f,e)},isItemBoxParent:function(b){return true},isItemShrinkWrap:function(b){return true},noBorderClasses:[Ext.baseCSSPrefix+"docked-noborder-top",Ext.baseCSSPrefix+"docked-noborder-right",Ext.baseCSSPrefix+"docked-noborder-bottom",Ext.baseCSSPrefix+"docked-noborder-left"],noBorderClassesSides:{top:Ext.baseCSSPrefix+"docked-noborder-top",right:Ext.baseCSSPrefix+"docked-noborder-right",bottom:Ext.baseCSSPrefix+"docked-noborder-bottom",left:Ext.baseCSSPrefix+"docked-noborder-left"},borderWidthProps:{top:"border-top-width",right:"border-right-width",bottom:"border-bottom-width",left:"border-left-width"},_itemCls:Ext.baseCSSPrefix+"docked",handleItemBorders:function(){var u=this,E=u.owner,v,q,y=u.lastDockedItems,z=u.borders,D=E.dockedItems.generation,C=u.noBorderClassesSides,t=u.borderWidthProps,A,w,r,s,x,B=u.collapsed;if(u.initializedBorders==D||(E.border&&!E.manageBodyBorders)){return}u.initializedBorders=D;u.collapsed=false;u.lastDockedItems=q=u.getLayoutItems();u.collapsed=B;v={top:[],right:[],bottom:[],left:[]};for(A=0,w=q.length;AH){E=u.constrainedMax;y=H}else{if(CH){F=u.constrainedMax;z=H}else{if(C {bodyCls}',' {baseCls}-body-{ui}',' {parent.baseCls}-body-{parent.ui}-{.}','{childElCls}"',' role="{bodyRole}" role="presentation"',' style="{bodyStyle}">',"{%this.renderContainer(out,values);%}","","{% this.renderDockedItems(out,values,1); %}"],headerPosition:"top",iconAlign:"left",titleAlign:"left",titleRotation:"default",beforeRenderConfig:{glyph:null,headerPosition:null,icon:null,iconAlign:null,iconCls:null,title:null,titleAlign:null,titleRotation:null},animCollapse:Ext.enableFx,border:true,closable:false,closeAction:"destroy",collapsed:false,collapsedCls:"collapsed",collapseFirst:true,collapsible:undefined,constrain:false,constrainHeader:false,dockedItems:null,tbar:null,bbar:null,fbar:null,lbar:null,rbar:null,buttons:null,floatable:true,frame:false,frameHeader:true,hideCollapseTool:false,manageHeight:true,maskElement:"el",minButtonWidth:75,preventHeader:false,shrinkWrapDock:false,titleCollapse:undefined,baseCls:Ext.baseCSSPrefix+"panel",bodyPosProps:{x:"x",y:"y"},componentLayout:"dock",contentPaddingProperty:"bodyPadding",emptyArray:[],isPanel:true,defaultBindProperty:"title",addBodyCls:function(d){var f=this,e=f.rendered?f.body:f.getProtoBody();e.addCls(d);return f},addTool:function(m){if(!Ext.isArray(m)){m=[m]}var n=this,k=n.header,j=m.length,l=n.tools,o,h;if(!k||!k.isHeader){k=null;if(!l){n.tools=l=[]}}for(o=0;oA){if(s.anchorToTarget){s.defaultAlign="r-l";if(s.mouseOffset){s.mouseOffset[0]*=-1}}s.anchor="right";return s.getTargetXY()}if(z[1]t){if(s.anchorToTarget){s.defaultAlign="b-t";if(s.mouseOffset){s.mouseOffset[1]*=-1}}s.anchor="bottom";return s.getTargetXY()}}s.anchorCls=Ext.baseCSSPrefix+"tip-anchor-"+s.getAnchorPosition();s.anchorEl.addCls(s.anchorCls);s.targetCounter=0;return z}else{x=s.getMouseOffset();return(s.targetXY)?[s.targetXY[0]+x[0],s.targetXY[1]+x[1]]:x}},getMouseOffset:function(){var d=this,c=d.anchor?[0,0]:[15,18];if(d.mouseOffset){c[0]+=d.mouseOffset[0];c[1]+=d.mouseOffset[1]}return c},fadeOut:function(){var b=this;b.el.fadeOut({duration:b.fadeOutDuration,callback:function(){b.hide();b.el.setOpacity("")}})},getAnchorPosition:function(){var c=this,d;if(c.anchor){c.tipAnchor=c.anchor.charAt(0)}else{d=c.defaultAlign.match(/^([a-z]+)-([a-z]+)(\?)?$/);c.tipAnchor=d[1].charAt(0)}switch(c.tipAnchor){case"t":return"top";case"b":return"bottom";case"r":return"right"}return"left"},getAnchorAlign:function(){switch(this.anchor){case"top":return"tl-bl";case"left":return"tl-tr";case"right":return"tr-tl";default:return"bl-tl"}},getOffsets:function(){var h=this,g,e,f=h.getAnchorPosition().charAt(0);if(h.anchorToTarget&&!h.trackMouse){switch(f){case"t":e=[0,9];break;case"b":e=[0,-13];break;case"r":e=[-13,0];break;default:e=[9,0];break}}else{switch(f){case"t":e=[-15-h.anchorOffset,30];break;case"b":e=[-19-h.anchorOffset,-13-h.el.dom.offsetHeight];break;case"r":e=[-15-h.el.dom.offsetWidth,-13-h.anchorOffset];break;default:e=[25,-13-h.anchorOffset];break}}g=h.getMouseOffset();e[0]+=g[0];e[1]+=g[1];return e},onTargetOver:function(g){var h=this,e=h.delegate,f;if(h.disabled||g.within(h.target.dom,true)){return}f=e?g.getTarget(e):true;if(f){h.triggerElement=f;h.triggerEvent=g;h.clearTimer("hide");h.targetXY=g.getXY();h.delayShow()}},delayShow:function(f){var e=this,d=e.el&&(f===false||!e.trackMouse)&&e.getTargetXY();if(e.hidden&&!e.showTimer){if(Ext.Date.getElapsed(e.lastActive)',' for="{inputId}" {labelAttrTpl}>','',"{beforeLabelTextTpl}",'{fieldLabel}','{labelSeparator}',"","{afterLabelTextTpl}","","","{afterLabelTpl}",'
',' {fieldBodyCls} {fieldBodyCls}-{ui} {growCls} {extraFieldBodyCls}"',' style="{bodyStyle}">',"{beforeBodyEl}","{beforeSubTpl}","{[values.$comp.getSubTplMarkup(values)]}","{afterSubTpl}","{afterBodyEl}","
",'','
','","
","
",{disableFormats:true}],activeErrorsTpl:undefined,htmlActiveErrorsTpl:['','
    ','','
    {fieldLabel}
    ',"
    ",'
  • {.}
  • ',"
","
"],plaintextActiveErrorsTpl:['','','{fieldLabel}\n',"",'\n{.}',""],isFieldLabelable:true,formItemCls:Ext.baseCSSPrefix+"form-item",labelCls:Ext.baseCSSPrefix+"form-item-label",topLabelCls:Ext.baseCSSPrefix+"form-item-label-top",rightLabelCls:Ext.baseCSSPrefix+"form-item-label-right",labelInnerCls:Ext.baseCSSPrefix+"form-item-label-inner",topLabelSideErrorCls:Ext.baseCSSPrefix+"form-item-label-top-side-error",errorMsgCls:Ext.baseCSSPrefix+"form-error-msg",errorWrapCls:Ext.baseCSSPrefix+"form-error-wrap",errorWrapSideCls:Ext.baseCSSPrefix+"form-error-wrap-side",errorWrapUnderCls:Ext.baseCSSPrefix+"form-error-wrap-under",errorWrapUnderSideLabelCls:Ext.baseCSSPrefix+"form-error-wrap-under-side-label",baseBodyCls:Ext.baseCSSPrefix+"form-item-body",invalidIconCls:Ext.baseCSSPrefix+"form-invalid-icon",invalidUnderCls:Ext.baseCSSPrefix+"form-invalid-under",fieldBodyCls:"",invalidCls:Ext.baseCSSPrefix+"form-invalid",fieldLabel:undefined,labelAlign:"left",labelWidth:100,labelPad:5,labelSeparator:":",hideLabel:false,hideEmptyLabel:true,preventMark:false,autoFitErrors:true,msgTarget:"qtip",msgTargets:{qtip:1,title:1,under:1,side:1,none:1},noWrap:true,labelableInsertions:["beforeBodyEl","afterBodyEl","beforeLabelTpl","afterLabelTpl","beforeSubTpl","afterSubTpl","beforeLabelTextTpl","afterLabelTextTpl","labelAttrTpl"],statics:{initTip:function(){var d=this.tip,e,f;if(d){return}e={id:"ext-form-error-tip",ui:"form-invalid"};if(Ext.supports.Touch){e.dismissDelay=0;e.anchor="top";e.showDelay=0;e.listeners={beforeshow:function(){this.minWidth=Ext.fly(this.anchorTarget).getWidth()}}}d=this.tip=Ext.create("Ext.tip.QuickTip",e);f=Ext.apply({},d.tagConfig);f.attribute="errorqtip";d.setTagConfig(f)},destroyTip:function(){this.tip=Ext.destroy(this.tip)}},initLabelable:function(){var d=this,c=d.padding;if(c){d.padding=undefined;d.extraMargins=Ext.Element.parseBox(c)}if(!d.activeErrorsTpl){if(d.msgTarget=="title"){d.activeErrorsTpl=d.plaintextActiveErrorsTpl}else{d.activeErrorsTpl=d.htmlActiveErrorsTpl}}d.addCls([d.formItemCls,d.formItemCls+"-"+d.ui]);d.lastActiveError="";d.enableBubble("errorchange")},trimLabelSeparator:function(){var h=this,g=h.labelSeparator,f=h.fieldLabel||"",e=f.substr(f.length-1);return e===g?f.slice(0,-1):f},getFieldLabel:function(){return this.trimLabelSeparator()},setFieldLabel:function(o){o=o||"";var n=this,m=n.labelSeparator,h=n.labelEl,j=n.errorWrapEl,k=(n.labelAlign!=="top"),l=n.errorWrapUnderSideLabelCls;n.fieldLabel=o;if(n.rendered){if(Ext.isEmpty(o)&&n.hideEmptyLabel){h.setDisplayed("none");if(k&&j){j.removeCls(l)}}else{if(m){o=n.trimLabelSeparator()+m}h.first().setHtml(o);h.setDisplayed("");if(k&&j){j.addCls(l)}}n.updateLayout()}},getInsertionRenderData:function(j,h){var f=h.length,g,k;while(f--){g=h[f];k=this[g];if(k){if(typeof k!="string"){if(!k.isTemplate){k=Ext.XTemplate.getTpl(this,g)}k=k.apply(j)}}j[g]=k||""}return j},getLabelableRenderData:function(){var w=this,t=w.labelAlign,G=(t==="top"),z=(t==="right"),C=(w.msgTarget==="side"),F=(w.msgTarget==="under"),u=w.errorMsgCls,E=w.labelPad,x=w.labelWidth,J=w.labelClsExtra||"",D=C?w.errorWrapSideCls:w.errorWrapUnderCls,K="",A="",H=w.hasVisibleLabel(),y=w.autoFitErrors,B=w.defaultBodyWidth,I,v;if(G){J+=" "+w.topLabelCls;if(E){A="padding-bottom:"+E+"px;"}if(C&&!y){J+=" "+w.topLabelSideErrorCls}}else{if(z){J+=" "+w.rightLabelCls}if(E){K+=w.getHorizontalPaddingStyle()+E+"px;"}K+="width:"+(x+(E?E:0))+"px;";A="width:"+x+"px"}if(H){if(!G&&F){D+=" "+w.errorWrapUnderSideLabelCls}}else{K+="display:none;"}if(B){I="min-width:"+B+"px;max-width:"+B+"px;"}v={id:w.id,inputId:w.getInputId(),labelCls:w.labelCls,labelClsExtra:J,labelStyle:K+(w.labelStyle||""),labelInnerStyle:A,labelInnerCls:w.labelInnerCls,unselectableCls:Ext.Element.unselectableCls,bodyStyle:I,baseBodyCls:w.baseBodyCls,fieldBodyCls:w.fieldBodyCls,extraFieldBodyCls:w.extraFieldBodyCls,errorWrapCls:w.errorWrapCls,errorWrapExtraCls:D,renderError:C||F,invalidMsgCls:C?w.invalidIconCls:F?w.invalidUnderCls:"",errorMsgCls:u,growCls:w.grow?w.growCls:"",errorWrapStyle:(C&&!y)?"visibility:hidden":"display:none",fieldLabel:w.getFieldLabel(),labelSeparator:w.labelSeparator};w.getInsertionRenderData(v,w.labelableInsertions);return v},getHorizontalPaddingStyle:function(){return"padding-right:"},beforeLabelRender:function(){var b=this;b.setFieldDefaults(b.getInherited().fieldDefaults);if(b.ownerLayout){b.addCls(Ext.baseCSSPrefix+b.ownerLayout.type+"-form-item")}},onLabelRender:function(){var l=this,m={},j=Ext.Element,h=l.errorWrapEl,k,g;if(h){h.setVisibilityMode((l.msgTarget==="side"&&!l.autoFitErrors)?j.VISIBILITY:j.DISPLAY)}if(l.extraMargins){k=l.el.getMargin();for(g in k){if(k.hasOwnProperty(g)){m["margin-"+g]=(k[g]+l.extraMargins[g])+"px"}}l.el.setStyle(m)}},hasVisibleLabel:function(){if(this.hideLabel){return false}return !(this.hideEmptyLabel&&!this.getFieldLabel())},getSubTplMarkup:function(){return""},getInputId:function(){return""},getActiveError:function(){return this.activeError||""},hasActiveError:function(){return !!this.getActiveError()},setActiveError:function(b){this.setActiveErrors(b)},getActiveErrors:function(){return this.activeErrors||[]},setActiveErrors:function(m){var o=this,n=o.errorWrapEl,q=o.msgTarget,r=q==="side",k=q==="qtip",s,p,l;m=Ext.Array.from(m);p=o.getTpl("activeErrorsTpl");o.activeErrors=m;s=o.activeError=p.apply({fieldLabel:o.fieldLabel,errors:m,listCls:Ext.plainListCls});o.renderActiveError();if(o.rendered){if(r){o.errorEl.dom.setAttribute("data-errorqtip",s)}else{if(k){o.getActionEl().dom.setAttribute("data-errorqtip",s)}else{if(q==="title"){o.getActionEl().dom.setAttribute("title",s)}}}if(r||k){Ext.form.Labelable.initTip()}if(!o.msgTargets[q]){l=Ext.get(q);if(l){l.dom.innerHTML=s}}}if(n){n.setVisible(m.length>0);if(r&&o.autoFitErrors){o.labelEl.addCls(o.topLabelSideErrorCls)}o.updateLayout()}},unsetActiveError:function(){var h=this,f=h.errorWrapEl,e=h.msgTarget,g;delete h.activeError;delete h.activeErrors;h.renderActiveError();if(h.rendered){if(e==="qtip"){h.getActionEl().dom.removeAttribute("data-errorqtip")}else{if(e==="title"){h.getActionEl().dom.removeAttribute("title")}}if(!h.msgTargets[e]){g=Ext.get(e);if(g){g.dom.innerHTML=""}}if(f){f.hide();if(e==="side"&&h.autoFitErrors){h.labelEl.removeCls(h.topLabelSideErrorCls)}h.updateLayout()}}},renderActiveError:function(){var f=this,d=f.getActiveError(),e=!!d;if(d!==f.lastActiveError){f.lastActiveError=d;f.fireEvent("errorchange",f,d)}if(f.rendered&&!f.isDestroyed&&!f.preventMark){f.toggleInvalidCls(e);if(f.errorEl){f.errorEl.dom.innerHTML=d}}},toggleInvalidCls:function(b){this.el[b?"addCls":"removeCls"](this.invalidCls)},setFieldDefaults:function(c){var d;for(d in c){if(!this.hasOwnProperty(d)){this[d]=c[d]}}}},0,0,0,0,0,0,[Ext.form,"Labelable"],function(){if(Ext.supports.Touch){this.prototype.msgTarget="side"}}));(Ext.cmd.derive("Ext.form.field.Field",Ext.Base,{mixinId:"field",isFormField:true,config:{validation:null,validationField:null},disabled:false,submitValue:true,validateOnChange:true,valuePublishEvent:"change",suspendCheckChange:0,dirty:false,initField:function(){var g=this,h=g.valuePublishEvent,f,e;g.initValue();if(Ext.isString(h)){g.on(h,g.publishValue,g)}else{for(e=0,f=h.length;e name="{name}"',' value="{[Ext.util.Format.htmlEncode(values.value)]}"',' placeholder="{placeholder}"','{%if (values.maxLength !== undefined){%} maxlength="{maxLength}"{%}%}',' readonly="readonly"',' disabled="disabled"',' tabindex="{tabIdx}"',' style="{fieldStyle}"',' class="{fieldCls} {typeCls} {typeCls}-{ui} {editableCls} {inputCls}" autocomplete="off"/>',{disableFormats:true}],defaultBindProperty:"value",subTplInsertions:["inputAttrTpl"],childEls:["inputEl"],inputType:"text",isTextInput:true,invalidText:"The value in this field is invalid",fieldCls:Ext.baseCSSPrefix+"form-field",focusCls:"form-focus",dirtyCls:Ext.baseCSSPrefix+"form-dirty",checkChangeEvents:Ext.isIE&&(!document.documentMode||document.documentMode<=9)?["change","propertychange","keyup"]:["change","input","textInput","keyup","dragdrop"],ignoreChangeRe:/data\-errorqtip|style\.|className/,checkChangeBuffer:50,liquidLayout:true,readOnly:false,readOnlyCls:Ext.baseCSSPrefix+"form-readonly",validateOnBlur:true,hasFocus:false,baseCls:Ext.baseCSSPrefix+"field",fieldBodyCls:Ext.baseCSSPrefix+"field-body",maskOnDisable:false,stretchInputElFixed:true,initComponent:function(){var b=this;Ext.Component.prototype.initComponent.call(this);b.subTplData=b.subTplData||{};b.initLabelable();b.initField();if(!b.name){b.name=b.getInputId()}if(b.readOnly){b.addCls(b.readOnlyCls)}b.addCls(Ext.baseCSSPrefix+"form-type-"+b.inputType)},getInputId:function(){return this.inputId||(this.inputId=this.id+"-inputEl")},getSubTplData:function(f){var j=this,k=j.inputType,g=j.getInputId(),h;h=Ext.apply({ui:j.ui,id:g,cmpId:j.id,name:j.name||g,disabled:j.disabled,readOnly:j.readOnly,value:j.getRawValue(),type:k,fieldCls:j.fieldCls,fieldStyle:j.getFieldStyle(),childElCls:f.childElCls,tabIdx:j.tabIndex,inputCls:j.inputCls,typeCls:Ext.baseCSSPrefix+"form-"+(j.isTextInput?"text":k),role:j.ariaRole},j.subTplData);j.getInsertionRenderData(h,j.subTplInsertions);return h},getSubTplMarkup:function(g){var m=this,l=m.getSubTplData(g),k=m.getTpl("preSubTpl"),j=m.getTpl("postSubTpl"),h="";if(k){h+=k.apply(l)}h+=m.getTpl("fieldSubTpl").apply(l);if(j){h+=j.apply(l)}return h},initRenderData:function(){return Ext.applyIf(Ext.Component.prototype.initRenderData.call(this),this.getLabelableRenderData())},setFieldStyle:function(e){var d=this,f=d.inputEl;if(f){f.applyStyles(e)}d.fieldStyle=e},getFieldStyle:function(){var b=this.fieldStyle;return Ext.isObject(b)?Ext.DomHelper.generateStyles(b,null,true):b||""},onRender:function(){Ext.Component.prototype.onRender.apply(this,arguments);this.mixins.labelable.self.initTip();this.renderActiveError()},isFileUpload:function(){return this.inputType==="file"},getSubmitData:function(){var e=this,d=null,f;if(!e.disabled&&e.submitValue){f=e.getSubmitValue();if(f!==null){d={};d[e.getName()]=f}}return d},getSubmitValue:function(){return this.processRawValue(this.getRawValue())},getRawValue:function(){var c=this,d=(c.inputEl?c.inputEl.getValue():Ext.valueFrom(c.rawValue,""));c.rawValue=d;return d},setRawValue:function(f){var e=this,d=e.rawValue;if(!e.transformRawValue.$nullFn){f=e.transformRawValue(f)}f=Ext.valueFrom(f,"");if(d===undefined||d!==f){e.rawValue=f;if(e.inputEl){e.bindPropertyChange(false);e.inputEl.dom.value=f;e.bindPropertyChange(true)}if(e.rendered&&e.reference){e.publishState("rawValue",f)}}return f},transformRawValue:Ext.identityFn,valueToRaw:function(b){return""+Ext.valueFrom(b,"")},rawToValue:Ext.identityFn,processRawValue:Ext.identityFn,getValue:function(){var d=this,c=d.rawToValue(d.processRawValue(d.getRawValue()));d.value=c;return c},setValue:function(c){var d=this;d.setRawValue(d.valueToRaw(c));return d.mixins.field.setValue.call(d,c)},onBoxReady:function(){var b=this;Ext.Component.prototype.onBoxReady.call(this);if(b.setReadOnlyOnBoxReady){b.setReadOnly(b.readOnly)}},onDisable:function(){var d=this,c=d.inputEl;Ext.Component.prototype.onDisable.call(this);if(c){c.dom.disabled=true;if(d.hasActiveError()){d.clearInvalid();d.needsValidateOnEnable=true}}},onEnable:function(){var d=this,c=d.inputEl;Ext.Component.prototype.onEnable.call(this);if(c){c.dom.disabled=false;if(d.needsValidateOnEnable){delete d.needsValidateOnEnable;d.forceValidation=true;d.isValid();delete d.forceValidation}}},setReadOnly:function(f){var e=this,d=e.inputEl;f=!!f;e[f?"addCls":"removeCls"](e.readOnlyCls);e.readOnly=f;if(d){d.dom.readOnly=f}else{if(e.rendering){e.setReadOnlyOnBoxReady=true}}e.fireEvent("writeablechange",e,f)},fireKey:function(b){if(b.isSpecialKey()){this.fireEvent("specialkey",this,b)}},initEvents:function(){var n=this,m=n.inputEl,q,o,l=n.checkChangeEvents,e=n.ignoreChangeRe,r=l.length,p,s;if(m){n.mon(m,Ext.supports.SpecialKeyDownRepeat?"keydown":"keypress",n.fireKey,n);q=new Ext.util.DelayedTask(n.checkChange,n);n.onChangeEvent=o=function(a){if(!(a.type=="propertychange"&&e.test(a.browserEvent.propertyName))){q.delay(n.checkChangeBuffer)}};for(p=0;p style="{fieldStyle}"',' class="{fieldCls} {fieldCls}-{ui}">{value}',{compiled:true,disableFormats:true}],focusable:false,readOnly:true,fieldCls:Ext.baseCSSPrefix+"form-display-field",fieldBodyCls:Ext.baseCSSPrefix+"form-display-field-body",htmlEncode:false,noWrap:false,validateOnChange:false,initEvents:Ext.emptyFn,submitValue:false,valueToRaw:function(b){if(!b&&b!==0){return""}else{return b}},isDirty:function(){return false},isValid:Ext.returnTrue,validate:Ext.returnTrue,getRawValue:function(){return this.rawValue},setRawValue:function(c){var d=this;c=Ext.valueFrom(c,"");d.rawValue=c;if(d.rendered){d.inputEl.dom.innerHTML=d.getDisplayValue();d.updateLayout()}return c},getDisplayValue:function(){var e=this,d=this.getRawValue(),f;if(e.renderer){f=e.renderer.call(e.scope||e,d,e)}else{f=e.htmlEncode?Ext.util.Format.htmlEncode(d):d}return f},getSubTplData:function(c){var d=Ext.form.field.Base.prototype.getSubTplData.apply(this,arguments);d.value=this.getDisplayValue();return d}},0,["displayfield"],["box","component","displayfield","field"],{box:true,component:true,displayfield:true,field:true},["widget.displayfield"],0,[Ext.form.field,"Display",Ext.form,"DisplayField",Ext.form,"Display"],0));(Ext.cmd.derive("Ext.layout.container.Fit",Ext.layout.container.Container,{alternateClassName:"Ext.layout.FitLayout",itemCls:Ext.baseCSSPrefix+"fit-item",targetCls:Ext.baseCSSPrefix+"layout-fit",type:"fit",manageMargins:true,sizePolicies:{0:{readsWidth:1,readsHeight:1,setsWidth:0,setsHeight:0},1:{readsWidth:0,readsHeight:1,setsWidth:1,setsHeight:0},2:{readsWidth:1,readsHeight:0,setsWidth:0,setsHeight:1},3:{readsWidth:0,readsHeight:0,setsWidth:1,setsHeight:1}},getItemSizePolicy:function(e,h){var f=h||this.owner.getSizeModel(),g=(f.width.shrinkWrap?0:1)|(f.height.shrinkWrap?0:2);return this.sizePolicies[g]},beginLayoutCycle:function(D,G){var u=this,c=u.lastHeightModel&&u.lastHeightModel.calculated,F=u.lastWidthModel&&u.lastWidthModel.calculated,z=F||c,C=0,B=0,v,J,y,w,H,K,E,A,x,I;Ext.layout.container.Container.prototype.beginLayoutCycle.apply(this,arguments);if(z&&D.targetContext.el.dom.tagName.toUpperCase()!="TD"){z=F=c=false}J=D.childItems;H=J.length;for(y=0;y0){for(z=0;z'+d.view.emptyText+""}d.view.getComponentLayout().headerCt=d.headerCt;d.mon(d.view,{uievent:d.processEvent,scope:d});f.view=d.view;d.headerCt.view=d.view;if(d.hasListeners.viewcreated){d.fireEvent("viewcreated",d,d.view)}}return d.view},getColumnManager:function(){return this.columnManager},getVisibleColumnManager:function(){return this.visibleColumnManager},getTopLevelColumnManager:function(){return this.ownerGrid.getColumnManager()},getTopLevelVisibleColumnManager:function(){return this.ownerGrid.getVisibleColumnManager()},setAutoScroll:Ext.emptyFn,processEvent:function(o,m,l,s,n,p,q,e){var r=p.position.column;if(r){return r.processEvent.apply(r,arguments)}},scrollByDeltaY:function(c,d){this.getView().scrollBy(0,c,d)},scrollByDeltaX:function(c,d){this.getView().scrollBy(c,0,d)},afterCollapse:function(){this.saveScrollPos();Ext.panel.Panel.prototype.afterCollapse.apply(this,arguments)},afterExpand:function(){Ext.panel.Panel.prototype.afterExpand.apply(this,arguments);this.restoreScrollPos()},saveScrollPos:Ext.emptyFn,restoreScrollPos:Ext.emptyFn,onHeaderResize:function(){if(this.view.scrollManager){this.view.scrollManager.refresh()}},onHeaderMove:function(k,j,h,g,l){var m=this;if(m.optimizedColumnMove===false){m.view.refreshView()}else{m.view.moveColumn(g,l,h)}m.delayScroll()},onHeaderHide:function(d,c){if(this.view.refreshCounter){this.view.refreshView()}},onHeaderShow:function(d,c){if(this.view.refreshCounter){this.view.refreshView()}},onHeadersChanged:function(d,f){var e=this;if(e.rendered&&!e.reconfiguring){e.view.refreshView();e.delayScroll()}},delayScroll:function(){var b=this.view;if(b){this.scrollTask.delay(10,null,null,[b])}},onViewReady:function(){this.fireEvent("viewready",this)},onRestoreHorzScroll:function(){var c=this,d=c.scrollXPos;if(d){c.syncHorizontalScroll(c,true)}},getScrollerOwner:function(){var b=this;if(!this.scrollerOwner){b=this.up("[scrollerOwner]")}return b},getLhsMarker:function(){var b=this;return b.lhsMarker||(b.lhsMarker=Ext.DomHelper.append(b.el,{role:"presentation",cls:b.resizeMarkerCls},true))},getRhsMarker:function(){var b=this;return b.rhsMarker||(b.rhsMarker=Ext.DomHelper.append(b.el,{role:"presentation",cls:b.resizeMarkerCls},true))},getSelection:function(){return this.getSelectionModel().getSelection()},updateSelection:function(e){var d=this,f;if(!d.ignoreNextSelection){d.ignoreNextSelection=true;f=d.getSelectionModel();if(e){f.select(e)}else{f.deselectAll()}d.ignoreNextSelection=false}},updateBindSelection:function(f,h){var g=this,e=null;if(!g.ignoreNextSelection){g.ignoreNextSelection=true;if(h.length){e=f.getLastSelected();g.hasHadSelection=true}if(g.hasHadSelection){g.setSelection(e)}g.ignoreNextSelection=false}},getNavigationModel:function(){return this.getView().getNavigationModel()},getSelectionModel:function(){var k=this,g=k.selModel,h,j,f;if(!g){g={};h=true}if(!g.events){f=g.selType||k.selType;h=!g.mode;g=k.selModel=Ext.create("selection."+f,g)}if(k.simpleSelect){j="SIMPLE"}else{if(k.multiSelect){j="MULTI"}}Ext.applyIf(g,{allowDeselect:k.allowDeselect});if(j&&h){g.setSelectionMode(j)}if(!g.hasRelaySetup){k.relayEvents(g,["selectionchange","beforeselect","beforedeselect","select","deselect"]);g.hasRelaySetup=true;if(g.isRowModel){g.on("selectionchange",k.updateBindSelection,k)}}if(k.disableSelection){g.locked=true}return g},getScrollTarget:function(){var d=this.getScrollerOwner(),c=d.query("tableview");return c[1]||c[0]},onHorizontalScroll:function(b){this.syncHorizontalScroll(b)},syncHorizontalScroll:function(h,k){var j=this,g=j.view.getScrollX(),f;k=k===true;if(j.rendered&&(k||g!==j.scrollXPos)){if(k){f=j.getScrollTarget();f.setScrollX(g)}j.headerCt.setScrollX(g);j.scrollXPos=g}},onStoreLoad:Ext.emptyFn,getEditorParent:function(){return this.body},bindStore:function(f,k){var j=this,g=j.getView(),h=j.bufferedRenderer;if(f){j.store=f;if(h&&h.isBufferedRenderer&&h.store){h.bindStore(f)}if(g.store!==f){g.bindStore(f,false)}j.mon(f,{load:j.onStoreLoad,scope:j});j.storeRelayers=j.relayEvents(f,["filterchange","groupchange"])}else{j.unbindStore()}},unbindStore:function(){var f=this,d=f.store,e;if(d){f.store=null;f.mun(d,{load:f.onStoreLoad,scope:f});Ext.destroy(f.storeRelayers);e=f.view;if(e.store){e.bindStore(null)}}},setColumns:function(b){if(b.length||this.getColumnManager().getColumns().length){this.reconfigure(undefined,b)}},setStore:function(b){this.reconfigure(b)},reconfigure:function(h,m){var l=this,j=l.store,k=l.headerCt,g=k?k.items.getRange():l.columns;if(arguments.length===1&&Ext.isArray(h)){m=h;h=null}if(m){m=Ext.Array.slice(m)}l.reconfiguring=true;l.fireEvent("beforereconfigure",l,h,m,j,g);if(l.lockable){l.reconfigureLockable(h,m)}else{Ext.suspendLayouts();if(m){delete l.scrollXPos;k.removeAll();k.add(m)}if(h&&(h=Ext.StoreManager.lookup(h))!==j){l.unbindStore();l.bindStore(h)}else{l.getView().refreshView()}Ext.resumeLayouts(true)}l.fireEvent("reconfigure",l,h,m,j,g);delete l.reconfiguring},beforeDestroy:function(){var b=this.scrollTask;if(b){b.cancel();this.scrollTask=null}Ext.destroy(this.focusEnterLeaveListeners);Ext.panel.Panel.prototype.beforeDestroy.call(this)},onDestroy:function(){var b=this;if(b.lockable){b.destroyLockable()}b.unbindStore();Ext.panel.Panel.prototype.onDestroy.call(this);b.columns=b.storeRelayers=b.columnManager=b.visibleColumnManager=null},destroy:function(){var b=this;Ext.panel.Panel.prototype.destroy.call(this);if(b.isDestroyed){b.view=b.selModel=b.headerCt=null}},privates:{getFocusEl:function(){return this.getView().getFocusEl()}}},1,["tablepanel"],["box","component","container","panel","tablepanel"],{box:true,component:true,container:true,panel:true,tablepanel:true},["widget.tablepanel"],0,[Ext.panel,"Table"],0));Ext.define("ExtThemeNeptune.panel.Table",{override:"Ext.panel.Table",initComponent:function(){var b=this;if(!b.hasOwnProperty("bodyBorder")&&!b.hideHeaders){b.bodyBorder=true}(arguments.callee.$previous||Ext.panel.Panel.prototype.initComponent).call(this)}});(Ext.cmd.derive("Ext.selection.Model",Ext.util.Observable,{alternateClassName:"Ext.AbstractSelectionModel",allowDeselect:undefined,toggleOnClick:true,selected:null,pruneRemoved:true,suspendChange:0,ignoreRightMouseSelection:false,constructor:function(d){var c=this;d=d||{};Ext.apply(c,d);c.modes={SINGLE:true,SIMPLE:true,MULTI:true};c.setSelectionMode(d.mode||c.mode);c.selected=new Ext.util.MixedCollection();Ext.util.Observable.prototype.constructor.apply(this,arguments)},bindStore:function(e,d){var f=this;f.mixins.storeholder.bindStore.apply(f,arguments);if(f.store&&!d){f.refresh()}},getStoreListeners:function(){var b=this;return{add:b.onStoreAdd,clear:b.onStoreClear,remove:b.onStoreRemove,update:b.onStoreUpdate,idchanged:b.onIdChanged,load:b.onStoreLoad,refresh:b.onStoreRefresh}},suspendChanges:function(){++this.suspendChange},resumeChanges:function(){if(this.suspendChange){--this.suspendChange}},selectAll:function(g){var k=this,l=k.store.getRange(),m=0,h=l.length,j=k.getSelection().length;k.suspendChanges();for(;m1){z=[];for(u=0;u=x){t.deselectRange(p,x-1)}else{if(r!==w){t.selectRange(r,w,z)}}}t.lastSelected=w}else{if(q){if(!z){t.doSelect(w,false)}}else{t.selectWithEvent(w,u)}}}}break;case"SIMPLE":if(y){t.doDeselect(w)}else{t.doSelect(w,true)}break;case"SINGLE":if(e){if(y){if(t.allowDeselect){t.doDeselect(w)}}else{t.doSelect(w)}}else{if(z){break}else{if(e&&t.allowDeselect&&y){t.doDeselect(w)}else{t.doSelect(w,false)}}}break}if(!u.shiftKey){if(t.isSelected(w)){t.selectionStart=w}}},selectRange:function(q,x,p){var t=this,r=t.store,y=t.selected.items,o,v,u,w,A,s,z;if(t.isLocked()){return}o=t.normalizeRowRange(q,x);q=o[0];x=o[1];w=[];for(v=q;v<=x;v++){if(!t.isSelected(r.getAt(v))){w.push(r.getAt(v))}}if(!p){A=[];t.suspendChanges();for(v=0,u=y.length;vx){A.push(z)}}for(v=0,u=A.length;v0)}},deselectRange:function(o,p){var l=this,q=l.store,k,m,n,j;if(l.isLocked()){return}k=l.normalizeRowRange(o,p);o=k[0];p=k[1];n=[];for(m=o;m<=p;m++){j=q.getAt(m);if(l.isSelected(j)){n.push(j)}}if(n.length){l.doDeselect(n)}},normalizeRowRange:function(h,e){var f=this.store,g;if(!Ext.isNumber(h)){h=f.indexOf(h)}h=Math.max(0,h);if(!Ext.isNumber(e)){e=f.indexOf(e)}e=Math.min(e,f.getCount()-1);if(h>e){g=e;e=h;h=g}return[h,e]},select:function(d,f,e){if(Ext.isDefined(d)&&!(Ext.isArray(d)&&!d.length)){this.doSelect(d,f,e)}},deselect:function(c,d){this.doDeselect(c,d)},doSelect:function(k,h,f){var j=this,g;if(j.locked||!j.store){return}if(typeof k==="number"){g=j.store.getAt(k);if(!g){return}k=[g]}if(j.selectionMode==="SINGLE"&&k){g=k.length?k[0]:k;j.doSingleSelect(g,f)}else{j.doMultiSelect(k,h,f)}},doMultiSelect:function(A,p,r){var u=this,z=u.selected,s=false,o,x,v,w,y,t=u.view,q;if(u.locked){return}A=!Ext.isArray(A)?[A]:A;v=A.length;if(!p&&z.getCount()>0){o=u.deselectDuringSelect(A,z.getRange(),r);if(o[0]){u.maybeFireSelectionChange(o[1]>0&&!r);return}else{s=o[1]>0}}y=function(){z.add(w);s=true};for(x=0;x0&&!m);return p===l},doSingleSelect:function(q,p){var n=this,j=n.view,k,l=false,o=n.selected,m;if(n.locked){return}if(n.isSelected(q)){return}m=function(){if(o.getCount()){n.suspendChanges();if(!n.doDeselect(n.lastSelected,p)){n.resumeChanges();return false}n.resumeChanges()}o.add(q);n.lastSelected=q;l=true};n.onSelectChange(q,true,p,m);if(l){if(j&&j.rendered&&!p&&!n.preventFocus){k=j.getNavigationModel();if(k){k.setPosition(q,null,null,p,true)}}n.maybeFireSelectionChange(!p)}},maybeFireSelectionChange:function(d){var c=this;if(d&&!c.suspendChange){c.fireEvent("selectionchange",c,c.getSelection())}},getLastSelected:function(){return this.lastSelected},getSelection:function(){return this.selected.getRange()},getSelectionMode:function(){return this.selectionMode},setSelectionMode:function(b){b=b?b.toUpperCase():"SINGLE";this.selectionMode=this.modes[b]?b:"SINGLE"},isLocked:function(){return this.locked},setLocked:function(b){this.locked=!!b},isRangeSelected:function(l,m){var j=this,g=j.store,k,h;h=j.normalizeRowRange(l,m);l=h[0];m=h[1];for(k=l;k<=m;k++){if(!j.isSelected(g.getAt(k))){return false}}return true},isSelected:function(b){b=Ext.isNumber(b)?this.store.getAt(b):b;return this.selected.contains(b)},hasSelection:function(){return this.selected.getCount()>0},pruneIf:function(){var k=this,m=k.selected,h=k.store,n=[],j=m.length,o,l;if(k.pruneRemoved){for(o=0;o0){this.clearSelections();this.maybeFireSelectionChange(true)}},onStoreRemove:function(k,f,j,g){var h=this;if(h.selectionStart&&Ext.Array.contains(f,h.selectionStart)){h.selectionStart=null}if(g||h.locked||!h.pruneRemoved){return}h.deselect(f)},deselectDeletedRecords:function(h){var l=this,n=l.selected,o,m=h.length,k=0,j;for(o=0;othis.view.all.getCount()-1){d=0}this.setPosition(d,c)},onKeyRight:function(c){var d=this.recordIndex+1;if(d>this.view.all.getCount()-1){d=0}this.setPosition(d,c)},onKeyLeft:function(c){var d=this.recordIndex-1;if(d<0){d=this.view.all.getCount()-1}this.setPosition(d,c)},onKeyPageDown:Ext.emptyFn,onKeyPageUp:Ext.emptyFn,onKeyHome:function(b){this.setPosition(0,b)},onKeyEnd:function(b){this.setPosition(this.view.all.getCount()-1,b)},onKeyTab:Ext.returnTrue,onKeySpace:function(b){this.fireNavigateEvent(b)},onKeyEnter:function(b){b.view.fireEvent("itemclick",b.view,b.record,b.item,b.recordIndex,b)},onSelectAllKeyPress:function(b){this.fireNavigateEvent(b)},fireNavigateEvent:function(c){var d=this;d.fireEvent("navigate",{navigationModel:d,keyEvent:c,previousRecordIndex:d.previousRecordIndex,previousRecord:d.previousRecord,previousItem:d.previousItem,recordIndex:d.recordIndex,record:d.record,item:d.item})},destroy:function(){Ext.destroy(this.dataSourceListeners,this.viewListeners)}},1,0,0,0,["view.navigation.default"],[[Ext.util.Observable.prototype.mixinId||Ext.util.Observable.$className,Ext.util.Observable],[Ext.mixin.Factoryable.prototype.mixinId||Ext.mixin.Factoryable.$className,Ext.mixin.Factoryable]],[Ext.view,"NavigationModel"],0));(Ext.cmd.derive("Ext.view.AbstractView",Ext.Component,{inheritableStatics:{getRecord:function(b){return this.getBoundView(b).getRecord(b)},getBoundView:function(b){return Ext.getCmp(b.boundView)}},defaultBindProperty:"store",statics:{updateDelay:200,queueRecordChange:function(t,r,y,D,C){var u=this,E=u.changeQueue||(u.changeQueue={}),x=y.internalId,v,z,w,B,q,s,A;v=E[x]||(E[x]={operation:D,record:y,data:{},views:[]});z=v.data;Ext.Array.include(v.views,t);if(C&&(w=C.length)){for(B=0;B
{1}
',h.itemCls,g,h.itemAriaRole);h.tpl=new Ext.XTemplate(g,e)}Ext.Component.prototype.initComponent.call(this);h.tpl=h.getTpl("tpl");if(h.overItemCls){h.trackOver=true}h.addCmpEvents();h.store=Ext.data.StoreManager.lookup(h.store||"ext-empty-store");if(!h.dataSource){h.dataSource=h.store}h.bindStore(h.dataSource,true,"dataSource");if(!h.all){h.all=new Ext.CompositeElementLite()}h.scrollState={top:0,left:0};h.on({scroll:h.onViewScroll,element:"el",onFrame:!!Ext.global.requestAnimationFrame,scope:h});h.savedTabIndexAttribute="data-savedtabindex-"+h.id;this.getNavigationModel().bindComponent(this);this.getSelectionModel().bindComponent(this)},getElConfig:function(){var b=this.mixins.renderable.getElConfig.call(this);if(this.focusable){b.tabIndex=0}return b},onRender:function(){var h=this,f=h.loadMask,j=h.getMaskStore(),g={target:h,msg:h.loadingText,useMsg:h.loadingUseMsg,store:j},k;Ext.Component.prototype.onRender.apply(this,arguments);if(f){k=j.getProxy();if(k&&!k.isSynchronous){if(h.loadingCls){g.msgCls=h.loadingCls}if(Ext.isObject(f)){g=Ext.apply(g,f)}h.loadMask=new Ext.LoadMask(g);h.loadMask.on({scope:h,beforeshow:h.onMaskBeforeShow,hide:h.onMaskHide})}}},beforeLayout:function(){var b=this;Ext.Component.prototype.beforeLayout.apply(this,arguments);if(b.refreshNeeded&&!b.pendingRefresh){if(b.refreshCounter){b.refresh()}else{b.doFirstRefresh(b.dataSource)}}},getMaskStore:function(){return this.store},onMaskBeforeShow:function(){var c=this,d=c.loadingHeight;if(d&&d>c.getHeight()){c.hasLoadingHeight=true;c.oldMinHeight=c.minHeight;c.minHeight=d;c.updateLayout()}},onMaskHide:function(){var b=this;if(!b.destroying&&b.hasLoadingHeight){b.minHeight=b.oldMinHeight;b.updateLayout();delete b.hasLoadingHeight}},beforeRender:function(){Ext.Component.prototype.beforeRender.apply(this,arguments);this.getSelectionModel().beforeViewRender(this)},afterRender:function(){Ext.Component.prototype.afterRender.apply(this,arguments);if(this.focusable){this.focusEl=this.el}},getRefItems:function(){var c=this.loadMask,d=[];if(c&&c.isComponent){d.push(c)}return d},getSelection:function(){return this.getSelectionModel().getSelection()},updateSelection:function(e){var d=this,f;if(!d.ignoreNextSelection){d.ignoreNextSelection=true;f=d.getSelectionModel();if(e){f.select(e)}else{f.deselectAll()}d.ignoreNextSelection=false}},updateBindSelection:function(f,h){var g=this,e=null;if(!g.ignoreNextSelection){g.ignoreNextSelection=true;if(h.length){e=f.getLastSelected();g.hasHadSelection=true}if(g.hasHadSelection){g.setSelection(e)}g.ignoreNextSelection=false}},getSelectionModel:function(){var d=this,f="SINGLE",e=d.selModel;if(d.simpleSelect){f="SIMPLE"}else{if(d.multiSelect){f="MULTI"}}if(!e||!e.events){e=d.selModel=new Ext.selection.DataViewModel(Ext.apply({allowDeselect:d.allowDeselect,mode:f},e))}if(!e.hasRelaySetup){d.relayEvents(e,["selectionchange","beforeselect","beforedeselect","select","deselect","focuschange"]);e.hasRelaySetup=true;e.on("selectionchange",d.updateBindSelection,d)}if(d.disableSelection){e.locked=true}return e},applyNavigationModel:function(b){return Ext.Factory.viewNavigation(b)},initFocusableEvents:function(){var b=this;this.mixins.focusable.initFocusableEvents.call(this);b.focusEnterLeaveListeners=b.el.on({focusenter:b.onFocusEnter,focusleave:b.onFocusLeave,scope:b,destroyable:true})},onFocus:function(b){Ext.Component.prototype.onFocus.call(this,b);this.handleFocusEnter(b)},onFocusEnter:function(b){this.handleFocusEnter(b)},handleFocusEnter:function(g){var h=this,e=h.getNavigationModel(),f;if(!h.containsFocus){f=e.getLastFocused();e.setPosition(f||0,g,null,!f);h.containsFocus=e.getPosition()!=null}if(h.containsFocus){this.focusEl.dom.setAttribute("tabindex","-1")}},onFocusLeave:function(c){var d=this;if(d.containsFocus){d.getNavigationModel().setPosition(null,c,null,true);d.containsFocus=false;d.focusEl.dom.setAttribute("tabindex",0)}},onRemoved:function(b){Ext.Component.prototype.onRemoved.call(this,b);this.onFocusLeave()},refresh:function(){var p=this,m=p.all,w=m.getCount(),s=p.refreshCounter,o,r,t,u,q,n=s&&m.getCount()&&p.preserveScrollOnRefresh&&!p.bufferedRenderer,v;if(!p.rendered||p.isDestroyed||p.preventRefresh){return}if(!p.hasListeners.beforerefresh||p.fireEvent("beforerefresh",p)!==false){p.refreshing=true;o=p.getTargetEl();u=p.getViewRange();t=o.dom;if(n){r=p.getOverflowEl();v=r.getScroll()}if(s){q=true;p.clearViewEl();p.refreshCounter++}else{p.refreshCounter=1}p.tpl.append(o,p.collectData(u,m.startIndex||0));if(u.length<1){if(p.emptyText&&!p.getStore().isLoading()&&(!p.deferEmptyText||q)){p.emptyEl=Ext.core.DomHelper.insertHtml("beforeEnd",o.dom,p.emptyText)}m.clear()}else{p.collectNodes(o.dom);p.updateIndexes(0)}Ext.deferCallback(o.saveChildrenTabbableState,o,[p.savedTabIndexAttribute]);if(q){if(p.refreshSelmodelOnRefresh!==false){p.selModel.refresh()}else{if(!p.preventPrune){p.selModel.pruneIf()}}}p.refreshNeeded=false;p.refreshSize(m.getCount()!==w);p.fireEvent("refresh",p,u);if(n){r.setScrollLeft(v.left);r.setScrollTop(v.top)}if(!p.viewReady){p.viewReady=true;p.fireEvent("viewready",p)}p.refreshing=false;p.refreshScroll()}},collectNodes:function(c){var d=this.all;d.fill(Ext.fly(c).query(this.getItemSelector()),d.startIndex||0);if(this.focusable){d.set({tabindex:"-1"})}},getViewRange:function(){return this.dataSource.getRange()},refreshSize:function(g){var e=this,f=e.getSizeModel(),h=e.scrollManager;if(f.height.shrinkWrap||f.width.shrinkWrap||g){e.updateLayout()}else{if(e.touchScroll&&!e.bufferedRenderer){if(h){h.refresh()}else{e.on({boxready:e.refreshScroll,scope:e,single:true})}}}},onResize:function(){var d=this,c=d.scrollManager;if(c&&!d._hasScrollListener){c.on({scroll:d.onViewScroll,scope:d,onFrame:!!Ext.global.requestAnimationFrame});d._hasScrollListener=true}Ext.Component.prototype.onResize.apply(this,arguments)},clearViewEl:function(){var d=this,f=d.getTargetEl(),e=d.getNodeContainer()===f;d.clearEmptyEl();d.all.clear(!e);if(e){f.dom.innerHTML=""}},clearEmptyEl:function(){var b=this.emptyEl;if(b){b.parentNode.removeChild(b)}this.emptyEl=null},onViewScroll:function(){this.fireEvent("scroll",this)},saveScrollState:function(){var d=this,c=d.scrollState;if(d.rendered){c.left=d.getScrollX();c.top=d.getScrollY()}},restoreScrollState:function(){var d=this,c=d.scrollState;if(d.rendered){d.setScrollX(c.left);d.setScrollY(c.top)}},prepareData:function(k,l,m){var g,h,j;if(m){g=m.getAssociatedData();for(h in g){if(g.hasOwnProperty(h)){if(!j){k=Ext.Object.chain(k);j=true}k[h]=g[h]}}}return k},collectData:function(m,j){var k=[],l=0,h=m.length,g;for(;l-1){if(h.getNode(g)){j=h.bufferRender([g],k)[0];h.all.replaceElement(k,j,true);h.updateIndexes(k,k);h.selModel.onUpdate(g);h.refreshSizePending=true;if(h.selModel.isSelected(g)){h.onItemSelect(g)}if(h.hasListeners.itemupdate){h.fireEvent("itemupdate",g,k,j)}return j}}}},onReplace:function(p,o,v,u){var q=this,r,j=q.all,w,n,s,t;if(q.rendered){w=q.bufferRender(u,o,true);n=j.item(o);if(n){j.item(o).insertSibling(w,"before",true)}else{q.appendNodes(w)}j.insert(o,w);o+=u.length;r=o+v.length-1;j.removeRange(o,r,true);if(q.refreshSelmodelOnRefresh!==false){q.selModel.refresh()}q.updateIndexes(o);q.refreshSizePending=true;if(q.hasListeners.itemremove){for(s=v.length,t=r;s>=0;--s,--t){q.fireEvent("itemremove",v[s],t,q)}}if(q.hasListeners.itemadd){q.fireEvent("itemadd",u,o,w)}}},onAdd:function(k,f,j){var h=this,g;if(h.rendered){if(h.all.getCount()===0){h.refresh();g=h.all.slice()}else{g=h.doAdd(f,j);if(h.refreshSelmodelOnRefresh!==false){h.selModel.refresh()}h.updateIndexes(j);h.refreshSizePending=true}if(h.hasListeners.itemadd){h.fireEvent("itemadd",f,j,g)}}},appendNodes:function(e){var h=document.createDocumentFragment(),f=e.length,g;for(g=0;gk){l.appendNodes(j)}else{if(p<=o){n.item(o).insertSibling(j,"before",true)}else{n.item(p).insertSibling(j,"before",true)}}n.insert(p,j);return j},onRemove:function(v,s,p){var o=this,m=o.all,u=o.hasListeners.itemremove,n,r,q,w,t;if(m.getCount()){if(o.dataSource.getCount()===0){if(u){o.fireEvent("itemremove",s,p,o.getNodes(p,p+s.length-1))}o.preventPrune=true;o.refresh();o.preventPrune=false}else{if(u){w=[]}for(r=s.length-1;r>=0;--r){q=s[r];n=p+r;if(w){t=m.item(n);w[r]=t?t.dom:undefined}if(m.item(n)){o.doRemove(q,n)}}if(u){o.fireEvent("itemremove",s,p,w,o)}o.updateIndexes(p)}o.refreshSizePending=true}},doRemove:function(d,c){this.all.removeElement(c,true)},refreshNode:function(b){if(Ext.isNumber(b)){b=this.store.getAt(b)}this.onUpdate(this.dataSource,b)},updateIndexes:function(h,j){var f=this.all.elements,g=this.getViewRange(),k;h=h||0;j=j||((j===0)?0:(f.length-1));for(k=h;k<=j;k++){f[k].viewIndex=k;f[k].viewRecordId=g[k].internalId;if(!f[k].boundView){f[k].boundView=this.id}}},bindStore:function(f,e,g){var h=this;h.mixins.storeholder.bindStore.apply(h,arguments);if(h.componentLayoutCounter&&!h.preventRefresh){h.doFirstRefresh(f,!e)}},doFirstRefresh:function(e,f){var d=this;if(d.deferInitialRefresh&&!f){Ext.defer(d.doFirstRefresh,1,d,[e,true])}else{if(e&&!e.loading){d.refresh()}}},onUnbindStore:function(b){this.setMaskBind(null)},onBindStore:function(f,e,g){var h=this;h.getSelectionModel().bindStore(f);h.setMaskBind(f);if(!e&&g==="store"){h.preventRefresh=true;h.store=f;h.bindStore(f,false,"dataSource");h.preventRefresh=false}},setMaskBind:function(c){var d=this.loadMask;if(d&&d.bindStore){d.bindStore(c)}},getStoreListeners:function(){var b=this;return{refresh:b.onDataRefresh,replace:b.onReplace,add:b.onAdd,remove:b.onRemove,update:b.onUpdate,clear:b.refresh,beginupdate:b.onBeginUpdate,endupdate:b.onEndUpdate}},onBeginUpdate:Ext.emptyFn,onEndUpdate:function(){if(this.refreshSizePending){this.refreshSize(true);this.refreshSizePending=false}},onDataRefresh:function(){this.refreshView()},refreshView:function(){var c=this,d=c.blockRefresh||!c.rendered||c.up("[collapsed],[isCollapsingOrExpanding],[hidden]");if(d){c.refreshNeeded=true}else{if(c.bufferedRenderer&&c.all.getCount()){c.bufferedRenderer.refreshView()}else{c.refresh()}}},findItemByChild:function(b){return Ext.fly(b).findParent(this.getItemSelector(),this.getTargetEl())},findTargetByEvent:function(b){return b.getTarget(this.getItemSelector(),this.getTargetEl())},getSelectedNodes:function(){var e=[],f=this.selModel.getSelection(),g=f.length,h=0;for(;hm.bottom){k=q.bottom-m.bottom}}if(q.leftm.right){j=q.right-m.right}}if(j||k){n.scrollBy(j,k,false)}Ext.fly(o).set({tabIndex:-1});o.focus()}},bindStore:function(e,h,f){var g=this[f];if(g&&g.isFeatureStore){if(e.isFeatureStore){this.bindStoreListeners(e);g.bindStore(g.store)}else{g.bindStore(e)}this.getSelectionModel().bindStore(g.store)}else{Ext.view.AbstractView.prototype.bindStore.apply(this,arguments)}},privates:{repaintBorder:function(c){var d=this.getNode(c);if(d){d.className=d.className}}}},0,["dataview"],["box","component","dataview"],{box:true,component:true,dataview:true},["widget.dataview"],0,[Ext.view,"View",Ext,"DataView"],0));(Ext.cmd.derive("Ext.grid.CellContext",Ext.Base,{isCellContext:true,constructor:function(b){this.view=b},isEqual:function(b){if(b){return this.record===b.record&&this.column===b.column}return false},setPosition:function(f,e){var d=this;if(arguments.length===1){if(f.view){d.view=f.view}e=f.column;f=f.row}d.setRow(f);d.setColumn(e);return d},setAll:function(g,m,l,h,j){var k=this;k.view=g;k.rowIdx=m;k.colIdx=l;k.record=h;k.column=j;return k},setRow:function(f){var e=this,d=e.view.dataSource;if(f!==undefined){if(typeof f==="number"){e.rowIdx=Math.max(Math.min(f,d.getCount()-1),0);e.record=d.getAt(f)}else{if(f.isModel){e.record=f;e.rowIdx=d.indexOf(f)}else{if(f.tagName){e.record=e.view.getRecord(f);e.rowIdx=d.indexOf(e.record)}}}}},setColumn:function(e){var d=this,f=d.view.getVisibleColumnManager();if(e!==undefined){if(typeof e==="number"){d.colIdx=e;d.column=f.getHeaderAtIndex(e)}else{if(e.isHeader){d.column=e;d.colIdx=f.getHeaderIndex(e)}}}},equal:function(b){return(b&&b.isCellContext&&b.view===this.view&&b.record===this.record&&b.column===this.column)},clone:function(){var c=this,d=new c.self(c.view);d.rowIdx=c.rowIdx;d.colIdx=c.colIdx;d.record=c.record;d.column=c.column;return d}},1,0,0,0,0,0,[Ext.grid,"CellContext"],0));(Ext.cmd.derive("Ext.util.CSS",Ext.Base,function(){var k,h=null,j=document,f=/(-[a-z])/gi,g=function(b,a){return a.charAt(1).toUpperCase()};return{singleton:true,rules:h,initialized:false,constructor:function(){k=this},createStyleSheet:function(c,a){var d,e=j.getElementsByTagName("head")[0],b=j.createElement("style");b.setAttribute("type","text/css");if(a){b.setAttribute("id",a)}d=b.styleSheet;if(d){e.appendChild(b);d.cssText=c}else{b.appendChild(j.createTextNode(c));e.appendChild(b);d=b.sheet}k.cacheStyleSheet(d);return d},removeStyleSheet:function(a){var b=j.getElementById(a);if(b){b.parentNode.removeChild(b)}},swapStyleSheet:function(a,c){var b;k.removeStyleSheet(a);b=j.createElement("link");b.setAttribute("rel","stylesheet");b.setAttribute("type","text/css");b.setAttribute("id",a);b.setAttribute("href",c);j.getElementsByTagName("head")[0].appendChild(b)},cacheStyleSheet:function(b){if(!h){h=k.rules={}}try{var q=b.cssRules||b.rules,c=q.length-1,e=b.imports,p=e?e.length:0,r,d;for(d=0;d=0;--c){r=q[c];if(r.styleSheet){k.cacheStyleSheet(r.styleSheet)}k.cacheRule(r,b)}}catch(a){}},cacheRule:function(d,a){if(d.styleSheet){return k.cacheStyleSheet(d.styleSheet)}var b=d.selectorText,c,e;if(b){b=b.split(",");c=b.length;for(e=0;e=j+h;m--){k[m]=k[m-h];k[m].setAttribute("data-recordIndex",m)}}l.endIndex=l.endIndex+h}else{l.startIndex=j;l.endIndex=j+h-1}for(m=0;m-1){k=Ext.getDom(k);if(g){j=h[f];j.parentNode.insertBefore(k,j);Ext.removeNode(j);k.setAttribute("data-recordIndex",f)}this.elements[f]=k}return this},indexOf:function(d){var f=this.elements,e;d=Ext.getDom(d);for(e=this.startIndex;e<=this.endIndex;e++){if(f[e]===d){return e}}return -1},removeRange:function(r,n,p){var l=this,s=l.elements,o,m,q,k;if(n==null){n=l.endIndex+1}else{n=Math.min(l.endIndex+1,n+1)}if(r==null){r=l.startIndex}q=n-r;for(m=r,k=n;m<=l.endIndex;m++,k++){if(p&&m=q.startIndex&&o<=q.endIndex){m[m.length]=o}}Ext.Array.sort(m);s=m.length}else{if(mq.endIndex){return}s=1;m=[m]}for(r=p=m[0],v=0;r<=q.endIndex;r++,p++){if(v=q.startIndex){t=w[r]=w[p];t.setAttribute("data-recordIndex",r)}else{delete w[r]}}q.endIndex-=s;q.count-=s},scroll:function(D,v,G){var x=this,w=x.view,u=w.store,I=x.elements,s=D.length,B,F,H,C,y=w.getNodeContainer(),t=document.createDocumentFragment(),E=w.hasListeners.itemremove,z=w.hasListeners.itemadd,A=x.statics().range;if(v===-1){if(G){if(A){A.setStartBefore(I[(x.endIndex-G)+1]);A.setEndAfter(I[x.endIndex]);A.deleteContents();for(B=(x.endIndex-G)+1;B<=x.endIndex;B++){F=I[B];delete I[B];if(E){w.fireEvent("itemremove",u.getByInternalId(F.getAttribute("data-recordId")),B,F,w)}}}else{for(B=(x.endIndex-G)+1;B<=x.endIndex;B++){F=I[B];delete I[B];F.parentNode.removeChild(F);if(E){w.fireEvent("itemremove",u.getByInternalId(F.getAttribute("data-recordId")),B,F,w)}}}x.endIndex-=G}if(D.length){C=w.bufferRender(D,x.startIndex-=s);for(B=0;B',"{[view.renderTHead(values, out, parent)]}","{%","view.renderRows(values.rows, values.columns, values.viewStartIndex, out);","%}","{[view.renderTFoot(values, out, parent)]}","",{definitions:"var view, tableCls, columns, i, len, column;",priority:0}],outerRowTpl:['',"{%","this.nextTpl.applyOut(values, out, parent)","%}","
",{priority:9999}],rowTpl:["{%",'var dataRowCls = values.recordIndex === -1 ? "" : " '+Ext.baseCSSPrefix+'grid-row";',"%}",'','{%',"parent.view.renderCell(values, parent.record, parent.recordIndex, parent.rowIndex, xindex - 1, out, parent)","%}","","",{priority:0}],cellTpl:['{tdStyle}" tabindex="-1" {ariaCellAttr} data-columnid="{[values.column.getItemId()]}">','
{style}" {ariaCellInnerAttr}>{value}
',"",{priority:0}],refreshSelmodelOnRefresh:false,tableValues:{},rowValues:{itemClasses:[],rowClasses:[]},cellValues:{classes:[Ext.baseCSSPrefix+"grid-cell "+Ext.baseCSSPrefix+"grid-td"]},renderBuffer:document.createElement("div"),constructor:function(b){if(b.grid.isTree){b.baseCls=Ext.baseCSSPrefix+"tree-view"}Ext.view.View.prototype.constructor.call(this,b)},hasVariableRowHeight:function(d){var c=this;return c.variableRowHeight||c.store.isGrouped()||c.getVisibleColumnManager().hasVariableRowHeight()||(!d&&c.lockingPartner&&c.lockingPartner.hasVariableRowHeight(true))},initComponent:function(){var c=this,d=c.scroll;if(c.columnLines){c.addCls(c.grid.colLinesCls)}if(c.rowLines){c.addCls(c.grid.rowLinesCls)}c.body=new Ext.dom.Fly();c.body.id=c.id+"gridBody";c.autoScroll=undefined;if(!c.trackOver){c.overItemCls=null}if(d===true||d==="both"){c.autoScroll=true}else{if(d==="horizontal"){c.overflowX="auto"}else{if(d==="vertical"){c.overflowY="auto"}}}c.selModel.view=c.headerCt.view=c;c.grid.view=c;c.initFeatures(c.grid);c.itemSelector=c.getItemSelector();c.all=new Ext.view.NodeCache(c);Ext.view.View.prototype.initComponent.call(this)},getVisibleColumnManager:function(){return this.ownerCt.getVisibleColumnManager()},getColumnManager:function(){return this.ownerCt.getColumnManager()},getTopLevelVisibleColumnManager:function(){return this.ownerGrid.getVisibleColumnManager()},beforeLayout:function(){var c=this,d=!c.firstRefreshDone&&c.headerCt.layout.running;Ext.view.View.prototype.beforeLayout.apply(this,arguments);if(d&&c.body.dom){c.headerCt.layout.injectViewContext(c.headerCt.layout.ownerContext,c)}},moveColumn:function(K,j,D){var u=this,w=D>1,B=w&&document.createRange?document.createRange():null,J=w&&!B?document.createDocumentFragment():null,C=j,A=u.getGridColumns().length,v=A-1,G=(u.firstCls||u.lastCls)&&(j===0||j===A||K===0||K===v),y,z,E,x,I,H,F;if(u.rendered&&j!==K){E=u.el.query(u.rowSelector);if(j>K&&J){C-=1}for(y=0,x=E.length;y-1){return d.store.data.getAt(e)}}}return d.dataSource.getByInternalId(f.getAttribute("data-recordId"))}},indexOf:function(b){b=this.getNode(b);if(!b&&b!==0){return -1}return this.all.indexOf(b)},indexInStore:function(b){return b?this.dataSource.indexOf(this.getRecord(b)):-1},renderRows:function(l,m,n,h){var k=this.rowValues,j=l.length,o;k.view=this;k.columns=m;for(o=0;o');for(n=0;n')}o.push("")},renderRow:function(s,y,t){var q=this,u=y===-1,r=q.selModel,n=q.rowValues,v=n.itemClasses,w=n.rowClasses,x=q.itemCls,o,p=q.rowTpl;n.rowAttr={};n.record=s;n.recordId=s.internalId;n.recordIndex=q.store.indexOf(s);n.rowIndex=y;n.rowId=q.getRowId(s);n.itemCls=n.rowCls="";if(!n.columns){n.columns=q.ownerCt.getVisibleColumnManager().getColumns()}v.length=w.length=0;if(!u){v[0]=x;if(!q.ownerCt.disableSelection&&r.isRowSelected){if(r.isRowSelected(s)){v.push(q.selectedItemCls)}}if(q.stripeRows&&y%2!==0){v.push(q.altRowCls)}if(q.getRowClass){o=q.getRowClass(s,y,null,q.dataSource);if(o){w.push(o)}}}if(t){p.applyOut(n,t,q.tableValues)}else{return p.apply(n,q.tableValues)}},renderCell:function(B,y,z,s,w,A){var u=this,D,x=u.selModel,v=u.cellValues,C=v.classes,E=y.data[B.dataIndex],r=u.cellTpl,q,t;v.record=y;v.column=B;v.recordIndex=z;v.rowIndex=s;v.columnIndex=w;v.cellIndex=w;v.align=B.align;v.innerCls=B.innerCls;v.tdCls=v.tdStyle=v.tdAttr=v.style="";v.unselectableAttr=u.enableTextSelection?"":'unselectable="on"';C[1]=B.getCellId();t=2;if(B.renderer&&B.renderer.call){D=u.ownerCt.columnManager.getHeaderIndex(B);q=B.renderer.call(B.usingDefaultRenderer?B:B.scope||u.ownerCt,E,v,y,z,D,u.dataSource,u);if(v.css){y.cssWarning=true;v.tdCls+=" "+v.css;v.css=null}if(v.tdCls){C[t++]=v.tdCls}}else{q=E}v.value=(q==null||q==="")?B.emptyCellText:q;if(B.tdCls){C[t++]=B.tdCls}if(u.markDirty&&y.isModified(B.dataIndex)){C[t++]=u.dirtyCls}if(B.isFirstVisible){C[t++]=u.firstCls}if(B.isLastVisible){C[t++]=u.lastCls}if(!u.enableTextSelection){C[t++]=u.unselectableCls}if(x&&x.isCellModel&&x.isCellSelected(u,z,B)){C[t++]=(u.selectedCellCls)}C.length=t;v.tdCls=C.join(" ");r.applyOut(v,A);v.column=null},getRow:function(d){var c;if((!d&&d!==0)||!this.rendered){return null}if(d.target){d=d.target}if(Ext.isString(d)){return Ext.fly(d).down(this.rowSelector,true)}if(Ext.isNumber(d)){c=this.all.item(d);return c&&c.down(this.rowSelector,true)}if(d.isModel){return this.getRowByRecord(d)}c=Ext.fly(d);if(c.is(this.itemSelector)){return this.getRowFromItem(c)}return c.findParent(this.rowSelector,this.getTargetEl())},getRowId:function(b){return this.id+"-record-"+b.internalId},constructRowId:function(b){return this.id+"-record-"+b},getNodeById:function(b){b=this.constructRowId(b);return this.retrieveNode(b,false)},getRowById:function(b){b=this.constructRowId(b);return this.retrieveNode(b,true)},getNodeByRecord:function(b){return this.retrieveNode(this.getRowId(b),false)},getRowByRecord:function(b){return this.retrieveNode(this.getRowId(b),true)},getRowFromItem:function(h){var g=Ext.getDom(h).tBodies[0].childNodes,f=g.length,e;for(e=0;eh){Ext.fly(k).setHeight(m);Ext.fly(g).setHeight(m)}else{if(h>m){Ext.fly(k).setHeight(h);Ext.fly(g).setHeight(h)}}}}}},handleUpdate:function(ab,af,Y,J){var N=this,U=N.rowTpl,S,W,Z,ae,X,H,T,ad,O,aa,M,ai,ag,Q=[],V,I,L=N.variableRowHeight,ac,R=0,aj,ah,K,P,ak,G=N.ownerCt;if(N.viewReady){W=N.getNodeByRecord(af);if(W){O=N.overItemCls;aa=N.focusedItemCls;M=N.selectedItemCls;ai=N.ownerCt.getVisibleColumnManager().getColumns();for(I=0,V=ai.length;I1)){S=Ext.fly(W,"_internal");ae=N.createRowElement(af,N.dataSource.indexOf(af),Q);if(S.hasCls(O)){Ext.fly(ae).addCls(O)}if(S.hasCls(aa)){Ext.fly(ae).addCls(aa)}if(S.hasCls(M)){Ext.fly(ae).addCls(M)}if(Ext.isIE9m&&W.mergeAttributes){W.mergeAttributes(ae,true)}else{X=ae.attributes;H=X.length;for(ad=0;ad0){if(Ext.supports.ScrollWidthInlinePaddingBug){o+=p.getCellPaddingAfter(l[0])}if(p.columnLines){o+=Ext.fly(l[0].parentNode).getBorderWidth("lr")}}u.setWidth(1);r.titleEl.setStyle("text-overflow","clip");m=r.textEl.dom.offsetWidth+r.titleEl.getPadding("lr");r.titleEl.setStyle("text-overflow","");for(;s=s:m<=s){return l||s}m+=p;if((t=Ext.fly(r.getRow(m)))&&t.isVisible(true)){q+=p;l=m}}while(q!==u);return m},walkRecs:function(v,w){var q=this,n=q.dataSource,p=0,m=v,u,s=(w<0)?0:(n.isBufferedStore?n.getTotalCount():n.getCount())-1,o=s?1:-1,r=n.indexOf(v),t;do{if(s?r>=s:r<=s){return m}r+=o;t=n.getAt(r);if(!t.isCollapsedPlaceholder&&(u=Ext.fly(q.getNodeByRecord(t)))&&u.isVisible(true)){p+=o;m=t}}while(p!==w);return m},getFirstVisibleRowIndex:function(){var f=this,d=(f.dataSource.isBufferedStore?f.dataSource.getTotalCount():f.dataSource.getCount()),e=f.indexOf(f.all.first())-1;do{e+=1;if(e===d){return}}while(!Ext.fly(f.getRow(e)).isVisible(true));return e},getLastVisibleRowIndex:function(){var c=this,d=c.indexOf(c.all.last());do{d-=1;if(d===-1){return}}while(!Ext.fly(c.getRow(d)).isVisible(true));return d},getHeaderCt:function(){return this.headerCt},getPosition:function(d,c){return new Ext.grid.CellContext(this).setPosition(d,c)},beforeDestroy:function(){var b=this;if(b.rendered){b.el.clearListeners()}Ext.view.View.prototype.beforeDestroy.apply(this,arguments)},onDestroy:function(){var g=this,h=g.featuresMC,f,e;if(h){for(e=0,f=h.getCount();e','',"{beforeBoxLabelTpl}",'","{afterBoxLabelTpl}","",' tabindex="{tabIdx}"',' disabled="disabled"',' style="{fieldStyle}"',' class="{fieldCls} {typeCls} {typeCls}-{ui} {inputCls} {inputCls}-{ui} {childElCls} {afterLabelCls}" autocomplete="off" hidefocus="true" />','',"{beforeBoxLabelTpl}",'","{afterBoxLabelTpl}","","",{disableFormats:true,compiled:true}],publishes:{checked:1},subTplInsertions:["beforeBoxLabelTpl","afterBoxLabelTpl","beforeBoxLabelTextTpl","afterBoxLabelTextTpl","boxLabelAttrTpl","inputAttrTpl"],isCheckbox:true,focusCls:"form-checkbox-focus",fieldBodyCls:Ext.baseCSSPrefix+"form-cb-wrap",checked:false,checkedCls:Ext.baseCSSPrefix+"form-cb-checked",boxLabelCls:Ext.baseCSSPrefix+"form-cb-label",boxLabelAlign:"after",afterLabelCls:Ext.baseCSSPrefix+"form-cb-after",wrapInnerCls:Ext.baseCSSPrefix+"form-cb-wrap-inner",noBoxLabelCls:Ext.baseCSSPrefix+"form-cb-wrap-inner-no-box-label",inputValue:"on",checkChangeEvents:[],inputType:"checkbox",isTextInput:false,ariaRole:"checkbox",onRe:/^on$/i,inputCls:Ext.baseCSSPrefix+"form-cb",initComponent:function(){var d=this,c=d.value;if(c!==undefined){d.checked=d.isChecked(c,d.inputValue)}Ext.form.field.Base.prototype.initComponent.apply(this,arguments);d.getManager().add(d)},initValue:function(){var c=this,d=!!c.checked;c.originalValue=c.lastValue=d;c.setValue(d)},getElConfig:function(){var b=this;if(b.isChecked(b.rawValue,b.inputValue)){b.addCls(b.checkedCls)}return Ext.form.field.Base.prototype.getElConfig.call(this)},getSubTplData:function(g){var k=this,f=k.boxLabel,h=k.boxLabelAlign,j=f&&h==="before";return Ext.apply(Ext.form.field.Base.prototype.getSubTplData.apply(this,arguments),{disabled:k.readOnly||k.disabled,wrapInnerCls:k.wrapInnerCls,boxLabel:f,boxLabelCls:k.boxLabelCls,boxLabelAlign:h,labelAlignedBefore:j,afterLabelCls:j?k.afterLabelCls:"",noBoxLabelCls:!f?k.noBoxLabelCls:"",role:k.ariaRole})},initEvents:function(){var b=this;Ext.form.field.Base.prototype.initEvents.call(this);b.mon(b.inputEl,"click",b.onBoxClick,b,{translate:false})},setBoxLabel:function(d){var c=this;c.boxLabel=d;if(c.rendered){c.boxLabelEl.setHtml(d)}},onBoxClick:function(){var b=this;if(!b.disabled&&!b.readOnly){this.setValue(!this.checked)}},getRawValue:function(){return this.checked},getValue:function(){return this.checked},getSubmitValue:function(){var d=this.uncheckedValue,c=Ext.isDefined(d)?d:null;return this.checked?this.inputValue:c},isChecked:function(c,d){return(c===true||c==="true"||c==="1"||c===1||(((Ext.isString(c)||Ext.isNumber(c))&&d)?c==d:this.onRe.test(c)))},setRawValue:function(h){var e=this,g=e.inputEl,f=e.isChecked(h,e.inputValue);if(g){e[f?"addCls":"removeCls"](e.checkedCls)}e.checked=e.rawValue=f;if(!e.duringSetValue){e.lastValue=f}return f},setValue:function(j){var k=this,m,g,h,l;if(Ext.isArray(j)){m=k.getManager().getByName(k.name,k.getFormId()).items;h=m.length;for(g=0;ge.tolerance){e.triggerStart(h)}else{return}}if(e.fireEvent("mousemove",e,h)===false){e.onMouseUp(h)}else{e.onDrag(h);e.fireEvent("drag",e,h)}},onMouseUp:function(c){var d=this;d.mouseIsDown=false;if(d.mouseIsOut){d.mouseIsOut=false;d.onMouseOut(c)}if(d.preventDefault!==false){c.preventDefault()}if(Ext.isIE&&document.releaseCapture){document.releaseCapture()}d.fireEvent("mouseup",d,c);d.endDrag(c)},endDrag:function(f){var d=this,e=d.active;Ext.getDoc().un({mousemove:d.onMouseMove,mouseup:d.onMouseUp,selectstart:d.stopSelect,capture:true,scope:d});d.clearStart();d.active=false;if(e){d.dragEnded=true;d.onEnd(f);d.fireEvent("dragend",d,f)}d._constrainRegion=null},triggerStart:function(c){var d=this;d.clearStart();d.active=true;d.onStart(c);d.fireEvent("dragstart",d,c)},clearStart:function(){var b=this.timer;if(b){clearTimeout(b);this.timer=null}},stopSelect:function(b){b.stopEvent();return false},onBeforeStart:function(b){},onStart:function(b){},onDrag:function(b){},onEnd:function(b){},getDragTarget:function(){return this.dragTarget},getDragCt:function(){return this.el},getConstrainRegion:function(){var b=this;if(b.constrainTo){if(b.constrainTo instanceof Ext.util.Region){return b.constrainTo}if(!b._constrainRegion){b._constrainRegion=Ext.fly(b.constrainTo).getViewRegion()}}else{if(!b._constrainRegion){b._constrainRegion=b.getDragCt().getViewRegion()}}return b._constrainRegion},getXY:function(b){return b?this.constrainModes[b](this,this.lastXY):this.lastXY},getOffset:function(f){var d=this.getXY(f),e=this.startXY;return[d[0]-e[0],d[1]-e[1]]},onDragStart:function(b){b.stopPropagation()},constrainModes:{point:function(e,g){var h=e.dragRegion,f=e.getConstrainRegion();if(!f){return g}h.x=h.left=h[0]=h.right=g[0];h.y=h.top=h[1]=h.bottom=g[1];h.constrainTo(f);return[h.left,h.top]},dragTarget:function(m,j){var g=m.startXY,k=m.startRegion.copy(),h=m.getConstrainRegion(),l;if(!h){return j}k.translateBy(j[0]-g[0],j[1]-g[1]);if(k.right>h.right){j[0]+=l=(h.right-k.right);k.left+=l}if(k.lefth.bottom){j[1]+=l=(h.bottom-k.bottom);k.top+=l}if(k.topL.getHeaderIndex(A),J,K;if(I.pos==="after"){B++;N+=F.isGroupHeader?F.query(":not([hidden]):not([isGroupHeader])").length:1}if(e.isLock){J=w.up("[scrollerOwner]");J.lock(A,B,O)}else{if(e.isUnlock){J=w.up("[scrollerOwner]");J.unlock(A,B,O)}else{this.invalidateDrop();K=A.getWidth();if(G){if(B>E){B-=1}if(B===E){H.onHeaderMoved(A,D,z,N);return}}Ext.suspendLayouts();if(G){O.move(E,B)}else{if(x&&(N===B)){B-=1}w.isDDMoveInGrid=O.isDDMoveInGrid=!e.crossPanel;w.remove(A,false);O.insert(B,A);w.isDDMoveInGrid=O.isDDMoveInGrid=false}if(O.isGroupHeader){if(!G){A.savedFlex=A.flex;delete A.flex;A.width=K}}else{if(A.savedFlex){A.flex=A.savedFlex;delete A.width}}Ext.resumeLayouts(true);if(!G){H.onHeaderMoved(A,D,z,N)}}}}}},1,0,0,0,0,0,[Ext.grid.header,"DropZone"],0));(Ext.cmd.derive("Ext.grid.plugin.HeaderReorderer",Ext.plugin.Abstract,{init:function(b){this.headerCt=b;b.on({render:this.onHeaderCtRender,single:true,scope:this})},destroy:function(){Ext.destroy(this.dragZone,this.dropZone)},onHeaderCtRender:function(){var b=this;b.dragZone=new Ext.grid.header.DragZone(b.headerCt);b.dropZone=new Ext.grid.header.DropZone(b.headerCt);if(b.disabled){b.dragZone.disable()}},enable:function(){this.disabled=false;if(this.dragZone){this.dragZone.enable()}},disable:function(){this.disabled=true;if(this.dragZone){this.dragZone.disable()}}},0,0,0,0,["plugin.gridheaderreorderer"],0,[Ext.grid.plugin,"HeaderReorderer"],0));(Ext.cmd.derive("Ext.grid.header.Container",Ext.container.Container,{border:true,baseCls:Ext.baseCSSPrefix+"grid-header-ct",dock:"top",weight:100,defaultType:"gridcolumn",detachOnRemove:false,defaultWidth:100,sortAscText:"Sort Ascending",sortDescText:"Sort Descending",sortClearText:"Clear Sort",columnsText:"Columns",headerOpenCls:Ext.baseCSSPrefix+"column-header-open",menuSortAscCls:Ext.baseCSSPrefix+"hmenu-sort-asc",menuSortDescCls:Ext.baseCSSPrefix+"hmenu-sort-desc",menuColsIcon:Ext.baseCSSPrefix+"cols-icon",ddLock:false,dragging:false,enableFocusableContainer:false,sortable:true,enableColumnHide:true,initComponent:function(){var b=this;b.headerCounter=0;b.plugins=b.plugins||[];b.defaults=b.defaults||{};if(!b.isColumn){if(b.enableColumnResize){b.resizer=new Ext.grid.plugin.HeaderResizer();b.plugins.push(b.resizer)}if(b.enableColumnMove){b.reorderer=new Ext.grid.plugin.HeaderReorderer();b.plugins.push(b.reorderer)}}if(b.isColumn&&!b.isGroupHeader){if(!b.items||b.items.length===0){b.isContainer=false;b.focusable=true;b.layout={type:"container",calculate:Ext.emptyFn}}}else{b.layout=Ext.apply({type:"gridcolumn",align:"stretch"},b.initialConfig.layout);b.defaults.columnLines=b.columnLines;if(!b.isGroupHeader){b.isRootHeader=true;if(!b.hiddenHeaders){b.enableFocusableContainer=true;b.ariaRole="row"}b.columnManager=new Ext.grid.ColumnManager(false,b);b.visibleColumnManager=new Ext.grid.ColumnManager(true,b);if(b.grid){b.grid.columnManager=b.columnManager;b.grid.visibleColumnManager=b.visibleColumnManager}}else{b.visibleColumnManager=new Ext.grid.ColumnManager(true,b);b.columnManager=new Ext.grid.ColumnManager(false,b)}}b.menuTask=new Ext.util.DelayedTask(b.updateMenuDisabledState,b);Ext.container.Container.prototype.initComponent.call(this)},initEvents:function(){var f=this,e=f.onHeaderCtEvent,d={click:e,dblclick:e,contextmenu:e,mouseover:f.onHeaderCtMouseOver,mouseout:f.onHeaderCtMouseOut,scope:f};if(Ext.supports.Touch){d.longpress=f.onHeaderCtLongPress}Ext.container.Container.prototype.initEvents.call(this);if(!f.isColumn&&!f.isGroupHeader){f.mon(f.el,d)}},onHeaderCtEvent:function(n,e){var o=this,k=o.getHeaderElByEvent(n),l,m,j;if(o.longPressFired){o.longPressFired=false;return}if(k&&!o.ddLock){l=Ext.getCmp(k.id);if(l){m=l[l.clickTargetName];if(n.within(m)){if(n.type==="click"||n.type==="tap"){j=l.onTitleElClick(n,m);if(j){o.onHeaderTriggerClick(j,n,Ext.supports.Touch?j.el:j.triggerEl)}else{o.onHeaderClick(l,n,e)}}else{if(n.type==="contextmenu"){o.onHeaderContextMenu(l,n,e)}else{if(n.type==="dblclick"&&l.resizable){l.onTitleElDblClick(n,m.dom)}}}}}}},onHeaderCtMouseOver:function(e,g){var h,j,k;if(!e.within(this.el,true)){h=e.getTarget("."+Ext.grid.column.Column.prototype.baseCls);j=h&&Ext.getCmp(h.id);if(j){k=j[j.clickTargetName];if(e.within(k)){j.onTitleMouseOver(e,k.dom)}}}},onHeaderCtMouseOut:function(m,o){var n="."+Ext.grid.column.Column.prototype.baseCls,e=m.getTarget(n),j=m.getRelatedTarget(n),k,l;if(e!==j){if(e){k=Ext.getCmp(e.id);if(k){l=k[k.clickTargetName];k.onTitleMouseOut(m,l.dom)}}if(j){k=Ext.getCmp(j.id);if(k){l=k[k.clickTargetName];k.onTitleMouseOver(m,l.dom)}}}},onHeaderCtLongPress:function(e){var f=this,g=f.getHeaderElByEvent(e),h=Ext.getCmp(g.id);if(!h.menuDisabled){f.longPressFired=true;f.showMenuBy(g,h)}},getHeaderElByEvent:function(b){return b.getTarget("."+Ext.grid.column.Column.prototype.baseCls)},isLayoutRoot:function(){if(this.hiddenHeaders){return false}return Ext.container.Container.prototype.isLayoutRoot.call(this)},getOwnerHeaderCt:function(){var b=this;return b.isRootHeader?b:b.up("[isRootHeader]")},onDestroy:function(){var b=this;if(b.menu){b.menu.un("hide",b.onMenuHide,b)}b.menuTask.cancel();Ext.container.Container.prototype.onDestroy.call(this);Ext.destroy(b.visibleColumnManager,b.columnManager,b.menu);b.columnManager=b.visibleColumnManager=null},applyColumnsState:function(t){if(!t||!t.length){return}var n=this,p=n.items.items,q=p.length,s=0,v=t.length,o,u,w,r,c=false;for(o=0;o=k.visibleFromIdx){q++}Ext.container.Container.prototype.onMove.apply(this,arguments);if(k.isGroupHeader){l=k.visibleColumnManager.getColumns().length}o.onHeaderMoved(k,l,k.visibleFromIdx,q)},onRemove:function(f){var c=this,e=c.ownerCt;Ext.container.Container.prototype.onRemove.apply(this,arguments);if(!c.destroying){if(!c.isDDMoveInGrid){c.onHeadersChanged(f,false)}if(c.isGroupHeader&&!c.items.getCount()&&e){if(f.rendered){c.detachComponent(f)}Ext.suspendLayouts();e.remove(c);Ext.resumeLayouts(true)}}},onHeadersChanged:function(g,f){var c,h=this.getOwnerHeaderCt();this.purgeHeaderCtCache(this);if(h){h.onColumnsChanged();if(!g.isGroupHeader){c=h.ownerCt;if(c&&!f){c.onHeadersChanged(h,g)}}}},onHeaderMoved:function(j,h,m,k){var l=this,g=l.ownerCt;if(l.rendered){if(g&&g.onHeaderMove){g.onHeaderMove(l,j,h,m,k)}l.fireEvent("columnmove",l,j,m,k)}},onColumnsChanged:function(){var h=this,g=h.menu,f,e;if(h.rendered){h.fireEvent("columnschanged",h);if(g&&(f=g.child("#columnItemSeparator"))){e=g.child("#columnItem");f.destroy();e.destroy()}}},lookupComponent:function(c){var d=Ext.container.Container.prototype.lookupComponent.apply(this,arguments);if(!d.isGroupHeader&&d.width===undefined&&!d.flex){d.width=this.defaultWidth}return d},setSortState:function(){var g=this.up("[store]").store,l=this.visibleColumnManager.getColumns(),h=l.length,m,j,k;for(m=0;mgridcolumn[hideable]"),k=j.length,n;for(;hw.el.dom.clientHeight?Ext.getScrollbarSize().width:0),E=0,y=x.getVisibleGridColumns(),B=C.hidden,z,D,t,A,G;function v(){for(D=0,z=y.length;DA){C.width=A;F=true}else{C.width=G;I-=G+s;v()}u();Ext.resumeLayouts(true)},autoSizeColumn:function(c){var d=this.view;if(d){d.autoSizeColumn(c);if(this.forceFit){this.applyForceFit(c)}}},privates:{getFocusables:function(){return this.getVisibleGridColumns()},createFocusableContainerKeyNav:function(d){var c=this;return new Ext.util.KeyNav(d,{scope:c,down:c.showHeaderMenu,left:c.onFocusableContainerLeftKey,right:c.onFocusableContainerRightKey,space:c.toggleColumnSort,enter:c.toggleColumnSort})},showHeaderMenu:function(c){var d=this.getFocusableFromEvent(c);if(d&&d.triggerEl){this.onHeaderTriggerClick(d,c,d.triggerEl)}},toggleColumnSort:function(c){var d=this.getFocusableFromEvent(c);if(d&&d.sortable){d.toggleSortState();this.onHeaderClick(d,c,d.el)}},onFocusableContainerMousedown:Ext.privateFn}},0,["headercontainer"],["box","component","container","headercontainer"],{box:true,component:true,container:true,headercontainer:true},["widget.headercontainer"],[[Ext.util.FocusableContainer.prototype.mixinId||Ext.util.FocusableContainer.$className,Ext.util.FocusableContainer]],[Ext.grid.header,"Container"],0));(Ext.cmd.derive("Ext.grid.ColumnComponentLayout",Ext.layout.component.Auto,{type:"columncomponent",setWidthInDom:true,beginLayout:function(b){Ext.layout.component.Auto.prototype.beginLayout.apply(this,arguments);b.titleContext=b.getEl("titleEl");b.triggerContext=b.getEl("triggerEl")},beginLayoutCycle:function(c){var d=this.owner;Ext.layout.component.Auto.prototype.beginLayoutCycle.apply(this,arguments);if(c.widthModel.shrinkWrap){d.el.setWidth("")}d.titleEl.setStyle({paddingTop:"",paddingBottom:""})},publishInnerHeight:function(q,m){var o=this,t=o.owner,u,r,n,p,l,s;if(t.getOwnerHeaderCt().hiddenHeaders){q.setProp("innerHeight",0);return}u=m-q.getBorderInfo().height;r=u;if(t.headerWrap&&!q.hasDomProp("width")){o.done=false;return}if(q.hasRawContent){n=t.textEl.getHeight();if(n){r-=n;if(r>0){l=Math.floor(r/2);s=r-l;q.titleContext.setProp("padding-top",l);q.titleContext.setProp("padding-bottom",s)}}}else{q.setProp("innerHeight",u-t.titleEl.getHeight(),false)}},measureContentHeight:function(b){return b.el.dom.offsetHeight},publishInnerWidth:function(d,c){if(!d.hasRawContent){d.setProp("innerWidth",c-d.getBorderInfo().width,false)}},calculateOwnerHeightFromContentHeight:function(g,h){var e=Ext.layout.component.Auto.prototype.calculateOwnerHeightFromContentHeight.apply(this,arguments),f=this.owner;if(!g.hasRawContent){if(!f.headerWrap||g.hasDomProp("width")){return h+f.titleEl.getHeight()+g.getBorderInfo().height}return null}return e},calculateOwnerWidthFromContentWidth:function(j,g){var h=this.owner,k=j.getPaddingInfo().width,l=this.getTriggerOffset(h,j),m;if(h.isGroupHeader){m=g}else{m=Math.max(g,h.textEl.getWidth()+j.titleContext.getPaddingInfo().width)}return m+k+l},getTriggerOffset:function(e,f){var d=0;if(f.widthModel.shrinkWrap&&!e.menuDisabled){if(e.query(">:not([hidden])").length===0){d=e.self.triggerElWidth}}return d}},0,0,0,0,["layout.columncomponent"],0,[Ext.grid,"ColumnComponentLayout"],0));(Ext.cmd.derive("Ext.grid.column.Column",Ext.grid.header.Container,{alternateClassName:"Ext.grid.Column",config:{triggerVisible:false},baseCls:Ext.baseCSSPrefix+"column-header",hoverCls:Ext.baseCSSPrefix+"column-header-over",handleWidth:Ext.supports.Touch?10:4,ariaRole:"columnheader",enableFocusableContainer:false,sortState:null,possibleSortStates:["ASC","DESC"],childEls:["titleEl","triggerEl","textEl"],headerWrap:false,renderTpl:['
',Ext.baseCSSPrefix,'column-header-inner-empty">','',"{text}","",'','',"","
","{%this.renderContainer(out,values)%}"],dataIndex:null,text:" ",menuText:null,emptyCellText:" ",sortable:true,resizable:true,hideable:true,menuDisabled:false,renderer:false,align:"left",draggable:true,tooltipType:"qtip",initDraggable:Ext.emptyFn,tdCls:"",isHeader:true,isColumn:true,producesHTML:true,tabIndex:-1,ascSortCls:Ext.baseCSSPrefix+"column-header-sort-ASC",descSortCls:Ext.baseCSSPrefix+"column-header-sort-DESC",componentLayout:"columncomponent",groupSubHeaderCls:Ext.baseCSSPrefix+"group-sub-header",groupHeaderCls:Ext.baseCSSPrefix+"group-header",clickTargetName:"titleEl",detachOnRemove:true,initResizable:Ext.emptyFn,rendererNames:{column:"renderer",edit:"editRenderer",summary:"summaryRenderer"},formatterNames:{column:"formatter",edit:"editFormatter",summary:"summaryFormatter"},initComponent:function(){var b=this;if(b.header!=null){b.text=b.header;b.header=null}if(b.cellWrap){b.tdCls=(b.tdCls||"")+" "+Ext.baseCSSPrefix+"wrap-cell"}if(b.columns!=null){b.isGroupHeader=true;b.items=b.columns;b.columns=b.flex=b.width=null;b.cls=(b.cls||"")+" "+b.groupHeaderCls;b.sortable=b.resizable=false;b.align="center"}else{if(b.flex){b.minWidth=b.minWidth||Ext.grid.plugin.HeaderResizer.prototype.minColWidth}}b.addCls(Ext.baseCSSPrefix+"column-header-align-"+b.align);b.setupRenderer();b.setupRenderer("edit");b.setupRenderer("summary");Ext.grid.header.Container.prototype.initComponent.apply(this,arguments)},bindFormatter:function(c){var d=this;return function(a){return c.format(a,c.scope||d.scope||d.resolveListenerScope())}},bindRenderer:function(c){var d=this;d.hasCustomRenderer=true;return function(){return Ext.callback(c,d.scope,arguments,0,d)}},setupRenderer:function(g){g=g||"column";var m=this,k=m[m.formatterNames[g]],l=m[m.rendererNames[g]],h=g==="column",j;if(!k){if(l){if(typeof l==="string"){l=m[m.rendererNames[g]]=m.bindRenderer(l)}if(h){m.hasCustomRenderer=l.length>1}}else{if(h&&m.defaultRenderer){m.renderer=m.defaultRenderer;m.usingDefaultRenderer=true}}}else{j=k.indexOf("this.")===0;if(j){k=k.substring(5)}k=Ext.app.bind.Template.prototype.parseFormat(k);m[m.formatterNames[g]]=null;if(j){k.scope=null}m[m.rendererNames[g]]=m.bindFormatter(k)}},getView:function(){var b=this.getOwnerHeaderCt();if(b){return b.view}},onResize:function(n,j,o,k){var m=this,h,l;Ext.grid.header.Container.prototype.onResize.apply(this,arguments);if(o&&m.cellWrap){h=m.getView();if(h){l=h.bufferedRenderer;if(l){l.onWrappedColumnWidthChange(o,n)}}}},initItems:function(){var b=this;Ext.grid.header.Container.prototype.initItems.apply(this,arguments);if(b.isGroupHeader){if(!b.hasVisibleChildColumns()){b.hide()}}},hasVisibleChildColumns:function(){var e=this.items.items,f=e.length,h,g;for(h=0;h:not([hidden]):not([menuDisabled])");f=d.length;if(Ext.Array.contains(d,e.hideCandidate)){f--}if(f){return false}e.hideCandidate=this},isLockable:function(){var b={result:this.lockable!==false};if(b.result){this.ownerCt.bubble(this.hasMultipleVisibleChildren,null,[b])}return b.result},isLocked:function(){return this.locked||!!this.up("[isColumn][locked]","[isRootHeader]")},hasMultipleVisibleChildren:function(b){if(!this.isXType("headercontainer")){b.result=false;return false}if(this.query(">:not([hidden])").length>1){return false}},hide:function(q){var l=this,o=l.getOwnerHeaderCt(),r=l.getRefOwner(),s,k,m,n,p;if(r.constructing){Ext.grid.header.Container.prototype.hide.call(this);return l}if(l.rendered&&!l.isVisible()){return l}if(o.forceFit){l.visibleSiblingCount=o.getVisibleGridColumns().length-1;if(l.flex){l.savedWidth=l.getWidth();l.flex=null}}s=r.isGroupHeader;if(s&&!q){m=r.query(">:not([hidden])");if(m.length===1&&m[0]===l){l.ownerCt.hide();return}}Ext.suspendLayouts();if(l.isGroupHeader){m=l.items.items;for(p=0,n=m.length;p=s.left&&q style="{triggerStyle}">',"{[values.$trigger.renderBody(values)]}",""],statics:{weightComparator:function(d,c){return d.weight-c.weight}},constructor:function(d){var f=this,e;Ext.apply(f,d);if(f.compat4Mode){e=f.cls;f.focusCls=[f.focusCls,e+"-focus"];f.overCls=[f.overCls,e+"-over"];f.clickCls=[f.clickCls,e+"-click"]}},afterFieldRender:function(){this.initEvents()},destroy:function(){var d=this,c=d.clickRepeater;if(c){c.destroy()}if(d.el){d.el.destroy()}d.el=null;d.isDestroyed=true},getBodyRenderData:Ext.emptyFn,getEl:function(){return this.el||null},getStateEl:function(){return this.el},hide:function(){var c=this,d=c.el;c.hidden=true;if(d){d.hide()}},initEvents:function(){var g=this,f=g.isFieldEnabled,h=g.getStateEl(),e=g.el;h.addClsOnOver(g.overCls,f,g);h.addClsOnClick(g.clickCls,f,g);if(g.repeatClick){g.clickRepeater=new Ext.util.ClickRepeater(e,{preventDefault:true,handler:g.onClick,listeners:{mousedown:g.onClickRepeaterMouseDown,scope:g},scope:g})}else{g.field.mon(e,{click:g.onClick,mousedown:g.onMouseDown,scope:g})}},isFieldEnabled:function(){return !this.field.disabled},isVisible:function(){var e=this,f=e.field,d=false;if(e.hidden||!f||!e.rendered||e.isDestroyed){d=true}return !d},onClick:function(){var k=this,g=arguments,h=k.clickRepeater?g[1]:g[0],e=k.handler,j=k.field;if(e&&!j.readOnly&&k.isFieldEnabled()){Ext.callback(k.handler,k.scope,[j,k,h],0,j)}},resolveListenerScope:function(b){return this.field.resolveListenerScope(b)},onMouseDown:function(b){if(!b.parentEvent||b.parentEvent.type==="mousedown"){this.field.inputEl.focus()}b.preventDefault()},onClickRepeaterMouseDown:function(c,d){if(!d.parentEvent||d.parentEvent.type==="mousedown"){this.field.inputEl.focus()}d.preventDefault()},onFieldBlur:function(){this.getStateEl().removeCls(this.focusCls)},onFieldFocus:function(){this.getStateEl().addCls(this.focusCls)},onFieldRender:function(){var c=this,d=c.el=c.field.triggerWrap.selectNode("#"+c.domId,false);d.setVisibilityMode(Ext.Element.DISPLAY);c.rendered=true},renderBody:function(d){var e=this,f=e.bodyTpl;Ext.apply(d,e.getBodyRenderData());return f?Ext.XTemplate.getTpl(e,"bodyTpl").apply(d):""},renderTrigger:function(f){var h=this,e=h.width,g=h.hidden?"display:none;":"";if(e){g+="width:"+e}return Ext.XTemplate.getTpl(h,"renderTpl").apply({$trigger:h,fieldData:f,ui:f.ui,childElCls:f.childElCls,triggerId:h.domId=h.field.id+"-trigger-"+h.id,cls:h.cls,triggerStyle:g,extraCls:h.extraCls,baseCls:h.baseCls})},setHidden:function(b){if(b!==this.hidden){this[b?"hide":"show"]()}},setVisible:function(b){this.setHidden(!b)},show:function(){var c=this,d=c.el;c.hidden=false;if(d){d.show()}}},1,0,0,0,["trigger.trigger"],[[Ext.mixin.Factoryable.prototype.mixinId||Ext.mixin.Factoryable.$className,Ext.mixin.Factoryable]],[Ext.form.trigger,"Trigger"],0));(Ext.cmd.derive("Ext.form.field.Text",Ext.form.field.Base,{alternateClassName:["Ext.form.TextField","Ext.form.Text"],config:{hideTrigger:false,triggers:undefined},growMin:30,growMax:800,growAppend:"W",allowBlank:true,validateBlank:false,allowOnlyWhitespace: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}",blankText:"This field is required",regexText:"",emptyCls:Ext.baseCSSPrefix+"form-empty-field",requiredCls:Ext.baseCSSPrefix+"form-required-field",valueContainsPlaceholder:false,ariaRole:"textbox",editable:true,repeatTriggerClick:false,triggerWrapCls:Ext.baseCSSPrefix+"form-trigger-wrap",triggerWrapFocusCls:Ext.baseCSSPrefix+"form-trigger-wrap-focus",triggerWrapInvalidCls:Ext.baseCSSPrefix+"form-trigger-wrap-invalid",fieldBodyCls:Ext.baseCSSPrefix+"form-text-field-body",inputWrapCls:Ext.baseCSSPrefix+"form-text-wrap",inputWrapFocusCls:Ext.baseCSSPrefix+"form-text-wrap-focus",inputWrapInvalidCls:Ext.baseCSSPrefix+"form-text-wrap-invalid",growCls:Ext.baseCSSPrefix+"form-text-grow",monitorTab:true,mimicing:false,needArrowKeys:true,childEls:["triggerWrap","inputWrap"],preSubTpl:['
','
'],postSubTpl:["
",'{[values.renderTrigger(parent)]}',"
"],initComponent:function(){var c=this,d=c.emptyCls;if(c.allowOnlyWhitespace===false){c.allowBlank=false}if(c.size){c.defaultBodyWidth=c.size*6.5+20}if(!c.onTrigger1Click){c.onTrigger1Click=c.onTriggerClick}Ext.form.field.Base.prototype.initComponent.call(this);c.setReadOnly(c.readOnly);c.fieldFocusCls=c.baseCls+"-focus";c.emptyUICls=d+" "+d+"-"+c.ui;c.addStateEvents("change")},initEvents:function(){var c=this,d=c.inputEl;Ext.form.field.Base.prototype.initEvents.call(this);if(c.selectOnFocus||c.emptyText){c.mon(d,"mousedown",c.onMouseDown,c)}if(c.maskRe||(c.vtype&&c.disableKeyFilter!==true&&(c.maskRe=Ext.form.field.VTypes[c.vtype+"Mask"]))){c.mon(d,"keypress",c.filterKeys,c)}if(c.enableKeyEvents){c.mon(d,{scope:c,keyup:c.onKeyUp,keydown:c.onKeyDown,keypress:c.onKeyPress})}},isEqual:function(c,d){return this.isEqualAsString(c,d)},onChange:function(c,d){Ext.form.field.Base.prototype.onChange.apply(this,arguments);this.autoSize()},getSubTplData:function(g){var m=this,l=m.getRawValue(),j=m.emptyText&&l.length<1,h=m.maxLength,k;if(m.enforceMaxLength){if(h===Number.MAX_VALUE){h=undefined}}else{h=undefined}if(j){if(Ext.supports.Placeholder){k=m.emptyText}else{l=m.emptyText;m.valueContainsPlaceholder=true}}return Ext.apply(Ext.form.field.Base.prototype.getSubTplData.apply(this,arguments),{triggerWrapCls:m.triggerWrapCls,inputWrapCls:m.inputWrapCls,triggers:m.orderedTriggers,maxLength:h,readOnly:!m.editable||m.readOnly,placeholder:k,value:l,fieldCls:m.fieldCls+((j&&(k||l))?" "+m.emptyUICls:"")+(m.allowBlank?"":" "+m.requiredCls)})},onRender:function(){var k=this,f=k.getTriggers(),j=[],h,g;if(Ext.supports.FixedTableWidthBug){k.el._needsTableWidthFix=true}Ext.form.field.Base.prototype.onRender.call(this);if(f){this.invokeTriggers("onFieldRender");for(h in f){j.push(f[h].el)}g=k.triggerEl=k.triggerCell=new Ext.CompositeElement(j,true)}k.inputCell=k.inputWrap},afterRender:function(){var b=this;b.autoSize();Ext.form.field.Base.prototype.afterRender.call(this);this.invokeTriggers("afterFieldRender")},onMouseDown:function(){var b=this;if(!b.hasFocus){b.mon(b.inputEl,"mouseup",Ext.emptyFn,b,{single:true,preventDefault:true})}},applyTriggers:function(q){var p=this,u=p.getHideTrigger(),n=p.readOnly,m=p.orderedTriggers=[],o=p.repeatTriggerClick,v,r,t,w,s;if(!q){q={};if(p.triggerCls&&!p.trigger1Cls){p.trigger1Cls=p.triggerCls}for(s=1;w=p["trigger"+s+"Cls"];s++){q["trigger"+s]={cls:w,extraCls:Ext.baseCSSPrefix+"trigger-index-"+s,handler:"onTrigger"+s+"Click",compat4Mode:true,scope:p}}}for(v in q){if(q.hasOwnProperty(v)){r=q[v];r.field=p;r.id=v;if((n&&r.hideOnReadOnly!==false)||(u&&r.hidden!==false)){r.hidden=true}if(o&&(r.repeatClick!==false)){r.repeatClick=true}t=q[v]=Ext.form.trigger.Trigger.create(r);m.push(t)}}Ext.Array.sort(m,Ext.form.trigger.Trigger.weightComparator);return q},invokeTriggers:function(h,m){var k=this,l=k.getTriggers(),j,g;if(l){for(j in l){if(l.hasOwnProperty(j)){g=l[j];g[h].apply(g,m||[])}}}},getTrigger:function(b){return this.getTriggers()[b]},updateHideTrigger:function(b){if(this.rendered){this.invokeTriggers(b?"hide":"show")}},setEditable:function(d){var c=this;c.editable=d;if(c.rendered){c.setReadOnlyAttr(!d||c.readOnly)}},setReadOnly:function(j){var l=this,m=l.getTriggers(),g=l.getHideTrigger(),h,k;j=!!j;Ext.form.field.Base.prototype.setReadOnly.call(this,j);if(l.rendered){l.setReadOnlyAttr(j||!l.editable);if(m){for(k in m){h=m[k];if(h.hideOnReadOnly===true||(h.hideOnReadOnly!==false&&!g)){h[j?"hide":"show"].call(h)}}}}},setReadOnlyAttr:function(g){var e=this,f="readonly",h=e.inputEl.dom;if(g){h.setAttribute(f,f)}else{h.removeAttribute(f)}},processRawValue:function(e){var f=this,g=f.stripCharsRe,h;if(g){h=e.replace(g,"");if(h!==e){f.setRawValue(h);e=h}}return e},onDisable:function(){Ext.form.field.Base.prototype.onDisable.call(this);if(Ext.isIE){this.inputEl.dom.unselectable="on"}},onEnable:function(){Ext.form.field.Base.prototype.onEnable.call(this);if(Ext.isIE){this.inputEl.dom.unselectable=""}},onKeyDown:function(b){this.fireEvent("keydown",this,b)},onKeyUp:function(b){this.fireEvent("keyup",this,b)},onKeyPress:function(b){this.fireEvent("keypress",this,b)},reset:function(){Ext.form.field.Base.prototype.reset.call(this);this.applyEmptyText()},applyEmptyText:function(){var d=this,e=d.emptyText,f;if(d.rendered&&e){f=d.getRawValue().length<1&&!d.hasFocus;if(Ext.supports.Placeholder){d.inputEl.dom.placeholder=e}else{if(f){d.setRawValue(e);d.valueContainsPlaceholder=true}}if(f){d.inputEl.addCls(d.emptyUICls)}d.autoSize()}},afterFirstLayout:function(){Ext.form.field.Base.prototype.afterFirstLayout.call(this);if(Ext.isIE&&this.disabled){var b=this.inputEl;if(b){b.dom.unselectable="on"}}},toggleInvalidCls:function(d){var c=d?"addCls":"removeCls";Ext.form.field.Base.prototype.toggleInvalidCls.call(this);this.triggerWrap[c](this.triggerWrapInvalidCls);this.inputWrap[c](this.inputWrapInvalidCls)},beforeFocus:function(){var e=this,h=e.inputEl,f=e.emptyText,g;Ext.form.field.Base.prototype.beforeFocus.apply(this,arguments);if((f&&!Ext.supports.Placeholder)&&(h.dom.value===e.emptyText&&e.valueContainsPlaceholder)){e.setRawValue("");g=true;h.removeCls(e.emptyUICls);e.valueContainsPlaceholder=false}else{if(Ext.supports.Placeholder){h.removeCls(e.emptyUICls)}}if(e.selectOnFocus||g){if(Ext.isWebKit){if(!e.inputFocusTask){e.inputFocusTask=new Ext.util.DelayedTask(e.focusInput,e)}e.inputFocusTask.delay(1)}else{e.focusInput()}}},focusInput:function(){var b=this.inputEl;if(b){b=b.dom;if(b){b.select()}}},onFocus:function(c){var d=this;Ext.form.field.Base.prototype.onFocus.apply(this,arguments);if(d.emptyText){d.autoSize()}d.addCls(d.fieldFocusCls);d.triggerWrap.addCls(d.triggerWrapFocusCls);d.inputWrap.addCls(d.inputWrapFocusCls);d.invokeTriggers("onFieldFocus",[c])},onBlur:function(c){var d=this;Ext.form.field.Base.prototype.onBlur.apply(this,arguments);d.removeCls(d.fieldFocusCls);d.triggerWrap.removeCls(d.triggerWrapFocusCls);d.inputWrap.removeCls(d.inputWrapFocusCls);d.invokeTriggers("onFieldBlur",[c]);d.postBlur()},postBlur:function(){var b=this.inputFocusTask;Ext.form.field.Base.prototype.postBlur.apply(this,arguments);this.applyEmptyText();if(b){b.cancel()}},filterKeys:function(f){if(f.ctrlKey&&!f.altKey){return}var d=f.getKey(),e=String.fromCharCode(f.getCharCode());if((Ext.isGecko||Ext.isOpera)&&(f.isNavKeyPress()||d===f.BACKSPACE||(d===f.DELETE&&f.button===-1))){return}if((!Ext.isGecko&&!Ext.isOpera)&&f.isSpecialKey()&&!e){return}if(!this.maskRe.test(e)){f.stopEvent()}},getState:function(){return this.addPropertyToState(Ext.form.field.Base.prototype.getState.call(this),"value")},applyState:function(b){Ext.form.field.Base.prototype.applyState.apply(this,arguments);if(b.hasOwnProperty("value")){this.setValue(b.value)}},getRawValue:function(){var c=this,d=Ext.form.field.Base.prototype.getRawValue.call(this);if(d===c.emptyText&&c.valueContainsPlaceholder){d=""}return d},setValue:function(d){var e=this,f=e.inputEl;if(f&&e.emptyText&&!Ext.isEmpty(d)){f.removeCls(e.emptyUICls);e.valueContainsPlaceholder=false}Ext.form.field.Base.prototype.setValue.apply(this,arguments);e.applyEmptyText();return e},getErrors:function(m){m=arguments.length?(m==null?"":m):this.processRawValue(this.getRawValue());var r=this,o=Ext.form.field.Base.prototype.getErrors.call(this,m),w=r.validator,t=r.vtype,q=Ext.form.field.VTypes,p=r.regex,n=Ext.String.format,v,s,u;if(Ext.isFunction(w)){v=w.call(r,m);if(v!==true){o.push(v)}}s=r.allowOnlyWhitespace?m:Ext.String.trim(m);if(s.length<1||(m===r.emptyText&&r.valueContainsPlaceholder)){if(!r.allowBlank){o.push(r.blankText)}if(!r.validateBlank){return o}u=true}if(!u&&m.lengthr.maxLength){o.push(n(r.maxLengthText,r.maxLength))}if(t){if(!q[t](m,r)){o.push(r.vtypeText||q[t+"Text"])}}if(p&&!p.test(m)){o.push(r.regexText||r.invalidText)}return o},selectText:function(l,k){var m=this,q=m.getRawValue(),p=true,n=m.inputEl.dom,o,j;if(q.length>0){l=l===o?0:l;k=k===o?q.length:k;if(n.setSelectionRange){n.setSelectionRange(l,k)}else{if(n.createTextRange){j=n.createTextRange();j.moveStart("character",l);j.moveEnd("character",k-q.length);j.select()}}p=Ext.isGecko||Ext.isOpera}if(p){m.focus()}},autoSize:function(){var o=this,p,k,r,m,l,q,s,n;if(o.grow&&o.rendered&&o.getSizeModel().width.auto){l=o.inputEl;p=o.getTriggers();m=0;n=Ext.util.Format.htmlEncode(l.dom.value||(o.hasFocus?"":o.emptyText)||"");n+=o.growAppend;for(k in p){m+=p[k].el.getWidth()}s=l.getTextWidth(n)+m+o.inputWrap.getBorderWidth("lr")+o.triggerWrap.getBorderWidth("lr");s=Math.min(Math.max(s,o.growMin),o.growMax);o.bodyEl.setWidth(s);o.updateLayout();o.fireEvent("autosize",o,s)}},onDestroy:function(){var b=this;b.invokeTriggers("destroy");Ext.destroy(b.triggerRepeater);Ext.form.field.Base.prototype.onDestroy.call(this);if(b.inputFocusTask){b.inputFocusTask.cancel();b.inputFocusTask=null}},onTriggerClick:Ext.emptyFn,privates:{getTdType:function(){return"textfield"}},deprecated:{5:{methods:{getTriggerWidth:function(){var d=this.getTriggers(),e=0,f;if(d&&this.rendered){for(f in d){if(d.hasOwnProperty(f)){e+=d[f].el.getWidth()}}}return e}}}}},0,["textfield"],["box","component","field","textfield"],{box:true,component:true,field:true,textfield:true},["widget.textfield"],0,[Ext.form.field,"Text",Ext.form,"TextField",Ext.form,"Text"],0));(Ext.cmd.derive("Ext.resizer.BorderSplitter",Ext.resizer.Splitter,{collapseTarget:null,getTrackerConfig:function(){var b=Ext.resizer.Splitter.prototype.getTrackerConfig.call(this);b.xclass="Ext.resizer.BorderSplitterTracker";return b}},0,["bordersplitter"],["bordersplitter","box","component","splitter"],{bordersplitter:true,box:true,component:true,splitter:true},["widget.bordersplitter"],0,[Ext.resizer,"BorderSplitter"],0));(Ext.cmd.derive("Ext.layout.container.Border",Ext.layout.container.Container,{alternateClassName:"Ext.layout.BorderLayout",targetCls:Ext.baseCSSPrefix+"border-layout-ct",itemCls:[Ext.baseCSSPrefix+"border-item",Ext.baseCSSPrefix+"box-item"],type:"border",isBorderLayout:true,padding:undefined,percentageRe:/(\d+)%/,horzPositionProp:"left",padOnContainerProp:"left",padNotOnContainerProp:"right",axisProps:{horz:{borderBegin:"west",borderEnd:"east",horizontal:true,posProp:"x",sizeProp:"width",sizePropCap:"Width"},vert:{borderBegin:"north",borderEnd:"south",horizontal:false,posProp:"y",sizeProp:"height",sizePropCap:"Height"}},centerRegion:null,manageMargins:true,panelCollapseAnimate:true,panelCollapseMode:"placeholder",regionWeights:{north:20,south:10,center:0,west:-10,east:-20},beginAxis:function(G,P,w){var y=this,O=y.axisProps[w],B=!O.horizontal,H=O.sizeProp,D=0,Q=G.childItems,L=Q.length,z,C,E,K,A,M,I,F,N,x,J;for(C=0;Ch){h=a.weight}}},this);return h},getSplitterTarget:function(c){var d=c.collapseTarget;if(d&&d.collapsed){return d.placeholder||d}return d},isItemBoxParent:function(b){return true},isItemShrinkWrap:function(b){return true},insertSplitter:function(n,o,l,h){var k=n.region,m=Ext.apply({xtype:"bordersplitter",collapseTarget:n,id:n.id+"-splitter",hidden:l,canResize:n.splitterResize!==false,splitterFor:n,synthetic:true},h),j=o+((k==="south"||k==="east")?0:1);if(n.collapseMode==="mini"){m.collapsedCls=n.collapsedCls}n.splitter=this.owner.add(j,m)},getMoveAfterIndex:function(c){var d=Ext.layout.container.Container.prototype.getMoveAfterIndex.apply(this,arguments);if(c.splitter){d++}return d},moveItemBefore:function(e,g){var f=this.owner,h;if(g&&g.splitter){h=g.region;if(h==="south"||h==="east"){g=g.splitter}}return Ext.layout.container.Container.prototype.moveItemBefore.call(this,e,g)},onAdd:function(k,p){var n=this,q=k.placeholderFor,l=k.region,o,m,s,r;Ext.layout.container.Container.prototype.onAdd.apply(this,arguments);if(l){Ext.apply(k,n.regionFlags[l]);if(k.initBorderRegion){k.initBorderRegion()}o=l==="center";if(o){n.centerRegion=k}else{m=k.split;s=!!k.hidden;if(typeof m==="object"){r=m;m=true}if((k.isHorz||k.isVert)&&(m||k.collapseMode=="mini")){n.insertSplitter(k,p,s||!m,r)}}if(!o&&!k.hasOwnProperty("collapseMode")){k.collapseMode=n.panelCollapseMode}if(!k.hasOwnProperty("animCollapse")){if(k.collapseMode!=="placeholder"){k.animCollapse=false}else{k.animCollapse=n.panelCollapseAnimate}}}else{if(q){Ext.apply(k,n.regionFlags[q.region]);k.region=q.region;k.weight=q.weight}}},onDestroy:function(){this.centerRegion=null;Ext.layout.container.Container.prototype.onDestroy.call(this)},onRemove:function(j,p){var o=this,l=j.region,n=j.splitter,k=o.owner,m=k.destroying,q;if(l){if(j.isCenter){o.centerRegion=null}delete j.isCenter;delete j.isHorz;delete j.isVert;if(n&&!k.destroying){k.doRemove(n,true)}delete j.splitter}Ext.layout.container.Container.prototype.onRemove.apply(this,arguments);if(!m&&!p&&j.rendered){q=j.getEl();if(q){q.setStyle("top","");q.setStyle(o.horzPositionProp,"")}}},regionMeta:{center:{splitterDelta:0},north:{splitterDelta:1},south:{splitterDelta:-1},west:{splitterDelta:1},east:{splitterDelta:-1}},regionFlags:{center:{isCenter:true,isHorz:false,isVert:false},north:{isCenter:false,isHorz:false,isVert:true,collapseDirection:"top"},south:{isCenter:false,isHorz:false,isVert:true,collapseDirection:"bottom"},west:{isCenter:false,isHorz:true,isVert:false,collapseDirection:"left"},east:{isCenter:false,isHorz:true,isVert:false,collapseDirection:"right"}},setupSplitterNeighbors:function(r){var j={},w=r.length,p=this.touchedRegions,u,v,A,s,x,t,q,z,y;for(u=0;u style="{bodyStyle}">{%this.renderContainer(out,values)%}',_reverseDockNames:{left:"right",right:"left"},_layoutAlign:{top:"end",right:"begin",bottom:"begin",left:"end"},initComponent:function(){var h=this,g=h.initialConfig.layout,k=g&&g.align,f=g&&g.overflowHandler,j;if(h.plain){h.addCls(h.baseCls+"-plain")}Ext.panel.Bar.prototype.initComponent.call(this);h.setLayout({align:k||(h.getTabStretchMax()?"stretchmax":h._layoutAlign[h.dock]),overflowHandler:f||"scroller"});h.on({click:h.onClick,element:"el",scope:h})},initRenderData:function(){var b=this;return Ext.apply(Ext.panel.Bar.prototype.initRenderData.call(this),{bodyCls:b.bodyCls,baseBodyCls:b._baseBodyCls,bodyTargetCls:b.bodyTargetCls,stripCls:b._stripCls,dock:b.dock})},setDock:function(k){var l=this,j=l.items,o=l.ownerCt,m,h,n;j=j&&j.items;if(j){for(h=0,n=j.length;h1){return(c.previousTab&&c.previousTab!==d&&!c.previousTab.disabled)?c.previousTab:(d.next("tab[disabled=false]")||d.prev("tab[disabled=false]"))}},setActiveTab:function(d,e){var f=this;if(!d.disabled&&d!==f.activeTab){if(f.activeTab){if(f.activeTab.isDestroyed){f.previousTab=null}else{f.previousTab=f.activeTab;f.activeTab.deactivate()}}d.activate();f.activeTab=d;f.needsScroll=true;if(!e){f.fireEvent("change",f,d,d.card);f.updateLayout()}}},privates:{applyTargetCls:function(b){this.bodyTargetCls=b},getTargetEl:function(){return this.body||this.frameBody||this.el},onClick:function(n,o){var p=this,l=p.tabPanel,m,q,e,k;if(n.getTarget("."+Ext.baseCSSPrefix+"box-scroller")){return}if(Ext.isIE8&&p.vertical){k=p.getTabInfoFromPoint(n.getXY());q=k.tab;e=k.close}else{m=n.getTarget("."+Ext.tab.Tab.prototype.baseCls);q=m&&Ext.getCmp(m.id);e=q&&q.closeEl&&(o===q.closeEl.dom)}if(e){n.preventDefault()}if(q&&q.isDisabled&&!q.isDisabled()){if(q.closable&&e){q.onCloseClick()}else{p.doActivateTab(q)}q.afterClick(e)}},doActivateTab:function(d){var c=this.tabPanel;if(c){c.setActiveTab(d.card)}else{this.setActiveTab(d)}},beforeFocusableChildFocus:function(g,h){var e=this,f=e.mixins.focusablecontainer;f.beforeFocusableChildFocus.call(e,g,h);if(!g.active){g.activate()}e.doActivateTab(g)}}},0,["tabbar"],["box","component","container","tabbar"],{box:true,component:true,container:true,tabbar:true},["widget.tabbar"],[[Ext.util.FocusableContainer.prototype.mixinId||Ext.util.FocusableContainer.$className,Ext.util.FocusableContainer]],[Ext.tab,"Bar"],0));(Ext.cmd.derive("Ext.tab.Panel",Ext.panel.Panel,{alternateClassName:["Ext.TabPanel"],config:{tabBar:undefined,tabPosition:"top",tabRotation:"default",tabStretchMax:true},removePanelHeader:true,plain:false,itemCls:Ext.baseCSSPrefix+"tabpanel-child",minTabWidth:undefined,maxTabWidth:undefined,deferredRender:true,_defaultTabRotation:{top:0,right:1,bottom:0,left:2},initComponent:function(){var m=this,s=m.activeTab||(m.activeTab=0),k=m.getTabPosition(),n=m.getTabRotation(),l=m.dockedItems,o=m.header,r=m.tabBarHeaderPosition,q=m.getTabBar(),p;m.layout=new Ext.layout.container.Card(Ext.apply({owner:m,deferredRender:m.deferredRender,itemCls:m.itemCls,activeItem:s},m.layout));if(r!=null){if(!o){o=m.header={}}p=o.items=(o.items?o.items.slice():[]);o.itemPosition=r;p.push(q);o.hasTabBar=true}else{l=[].concat(m.dockedItems||[]);l.push(q);m.dockedItems=l}Ext.panel.Panel.prototype.initComponent.apply(this,arguments);s=m.activeTab=m.getComponent(s);if(s){q.setActiveTab(s.tab,true)}},onRender:function(){var d=this.items.items,e=d.length,f;Ext.panel.Panel.prototype.onRender.apply(this,arguments);for(f=0;f-1}}}}return f}},1,0,0,0,0,0,[Ext.app.domain,"Controller"],0));(Ext.cmd.derive("Ext.container.Monitor",Ext.Base,{target:null,selector:"",scope:null,addHandler:null,removeHandler:null,invalidateHandler:null,disabled:0,constructor:function(b){Ext.apply(this,b)},bind:function(c){var d=this;d.target=c;c.on("beforedestroy",d.disable,d);d.onContainerAdd(c)},unbind:function(){var d=this,c=d.target;if(c){c.un("beforedestroy",d.disable,d)}d.items=null},disable:function(){++this.disabled},enable:function(){if(this.disabled>0){--this.disabled}},handleAdd:function(c,d){if(!this.disabled){if(d.is(this.selector)){this.onItemAdd(d.ownerCt,d)}if(d.isQueryable){this.onContainerAdd(d)}}},onItemAdd:function(k,f){var h=this,g=h.items,j=h.addHandler;if(!h.disabled){if(j){j.call(h.scope||f,f)}if(g){g.add(f)}}},onItemRemove:function(k,f){var h=this,g=h.items,j=h.removeHandler;if(!h.disabled){if(j){j.call(h.scope||f,f)}if(g){g.remove(f)}}},onContainerAdd:function(n,r){var k=this,l,m,q=k.handleAdd,s=k.handleRemove,p,o;if(n.isContainer){n.on("add",q,k);n.on("dockedadd",q,k);n.on("remove",s,k);n.on("dockedremove",s,k)}if(r!==true){l=n.query(k.selector);for(p=0,m=l.length;pcontainer");for(p=0,m=l.length;p[flex]"),x=y.length,E=A==="vertical",z=0,C=E?"width":"height",D=0,s,e;for(;zp+h.left){o=p-n-u;r=true}if((q+s)>t+h.top){q=t-s-u;r=true}if(o name="{name}"',' placeholder="{placeholder}"',' maxlength="{maxLength}"',' readonly="readonly"',' disabled="disabled"',' tabindex="{tabIdx}"',' class="{fieldCls} {typeCls} {typeCls}-{ui} {inputCls}" ',' style="{fieldStyle}"',' autocomplete="off">\n','{[Ext.util.Format.htmlEncode(values.value)]}',"",{disableFormats:true}],growMin:60,growMax:1000,growAppend:"\n-",enterIsSpecial:false,preventScrollbars:false,returnRe:/\r/g,inputCls:Ext.baseCSSPrefix+"form-textarea",extraFieldBodyCls:Ext.baseCSSPrefix+"form-textarea-body",getSubTplData:function(e){var g=this,h=g.getFieldStyle(),f=Ext.form.field.Text.prototype.getSubTplData.apply(this,arguments);if(g.grow){if(g.preventScrollbars){f.fieldStyle=(h||"")+";overflow:hidden;height:"+g.growMin+"px"}}return f},afterRender:function(){var b=this;Ext.form.field.Text.prototype.afterRender.apply(this,arguments);b.needsMaxCheck=b.enforceMaxLength&&b.maxLength!==Number.MAX_VALUE&&!Ext.supports.TextAreaMaxLength;if(b.needsMaxCheck){b.inputEl.on("paste",b.onPaste,b)}},transformRawValue:function(b){return this.stripReturns(b)},getValue:function(){return this.stripReturns(Ext.form.field.Text.prototype.getValue.call(this))},valueToRaw:function(b){b=this.stripReturns(b);return Ext.form.field.Text.prototype.valueToRaw.call(this,b)},stripReturns:function(b){if(b&&typeof b==="string"){b=b.replace(this.returnRe,"")}return b},onPaste:function(){var b=this;if(!b.pasteTask){b.pasteTask=new Ext.util.DelayedTask(b.pasteCheck,b)}b.pasteTask.delay(1)},pasteCheck:function(){var d=this,f=d.getValue(),e=d.maxLength;if(f.length>e){f=f.substr(0,e);d.setValue(f)}},fireKey:function(g){var e=this,f=g.getKey(),h;if(g.isSpecialKey()&&(e.enterIsSpecial||(f!==g.ENTER||g.hasModifier()))){e.fireEvent("specialkey",e,g)}if(e.needsMaxCheck&&f!==g.BACKSPACE&&f!==g.DELETE&&!g.isNavKeyPress()&&!e.isCutCopyPasteSelectAll(g,f)){h=e.getValue();if(h.length>=e.maxLength){g.stopEvent()}}},isCutCopyPasteSelectAll:function(c,d){if(c.ctrlKey){return d===c.A||d===c.C||d===c.V||d===c.X}return false},autoSize:function(){var l=this,j,m,h,g,k;if(l.grow&&l.rendered&&l.getSizeModel().height.auto){j=l.inputEl;g=j.getWidth(true);k=Ext.util.Format.htmlEncode(j.dom.value)||" ";k+=l.growAppend;k=k.replace(/\n/g,"
");h=Ext.util.TextMetrics.measure(j,k,g).height+j.getPadding("tb")+l.inputWrap.getBorderWidth("tb")+l.triggerWrap.getBorderWidth("tb");h=Math.min(Math.max(h,l.growMin),l.growMax);l.bodyEl.setHeight(h);l.updateLayout();l.fireEvent("autosize",l,h)}},beforeDestroy:function(){var b=this.pasteTask;if(b){b.cancel();this.pasteTask=null}Ext.form.field.Text.prototype.beforeDestroy.call(this)}},0,["textarea","textareafield"],["box","component","field","textarea","textareafield","textfield"],{box:true,component:true,field:true,textarea:true,textareafield:true,textfield:true},["widget.textarea","widget.textareafield"],0,[Ext.form.field,"TextArea",Ext.form,"TextArea"],0));(Ext.cmd.derive("Ext.window.MessageBox",Ext.window.Window,{OK:1,YES:2,NO:4,CANCEL:8,OKCANCEL:9,YESNO:6,YESNOCANCEL:14,INFO:Ext.baseCSSPrefix+"message-box-info",WARNING:Ext.baseCSSPrefix+"message-box-warning",QUESTION:Ext.baseCSSPrefix+"message-box-question",ERROR:Ext.baseCSSPrefix+"message-box-error",hideMode:"offsets",closeAction:"hide",resizable:false,autoScroll:true,title:" ",defaultMinWidth:250,defaultMaxWidth:600,defaultMinHeight:110,defaultMaxHeight:500,minWidth:null,maxWidth:null,minHeight:null,maxHeight:null,constrain:true,cls:[Ext.baseCSSPrefix+"message-box",Ext.baseCSSPrefix+"hidden-offsets"],layout:{type:"vbox",align:"stretch"},shrinkWrapDock:true,defaultTextHeight:75,minProgressWidth:250,minPromptWidth:250,buttonText:{ok:"OK",yes:"Yes",no:"No",cancel:"Cancel"},buttonIds:["ok","yes","no","cancel"],titleText:{confirm:"Confirm",prompt:"Prompt",wait:"Loading...",alert:"Attention"},baseIconCls:Ext.baseCSSPrefix+"message-box-icon",ariaRole:"alertdialog",makeButton:function(d){var c=this.buttonIds[d];return new Ext.button.Button({handler:this.btnCallback,itemId:c,scope:this,text:this.buttonText[c],minWidth:75})},btnCallback:function(f){var e=this,h,g;if(e.cfg.prompt||e.cfg.multiline){if(e.cfg.multiline){g=e.textArea}else{g=e.textField}h=g.getValue();g.reset()}e.hide();e.userCallback(f.itemId,h,e.cfg)},hide:function(){var c=this,d=c.cfg?c.cfg.cls:"";c.progressBar.reset();if(d){c.removeCls(d)}Ext.window.Window.prototype.hide.apply(this,arguments)},constructor:function(d){var c=this;Ext.window.Window.prototype.constructor.apply(this,arguments);c.minWidth=c.defaultMinWidth=(c.minWidth||c.defaultMinWidth);c.maxWidth=c.defaultMaxWidth=(c.maxWidth||c.defaultMaxWidth);c.minHeight=c.defaultMinHeight=(c.minHeight||c.defaultMinHeight);c.maxHeight=c.defaultMaxHeight=(c.maxHeight||c.defaultMaxHeight)},initComponent:function(g){var h=this,f=h.id,j,k;h.title=h.title||" ";h.iconCls=h.iconCls||"";h.topContainer=new Ext.container.Container({layout:"hbox",padding:10,style:{overflow:"hidden"},items:[h.iconComponent=new Ext.Component({cls:h.baseIconCls}),h.promptContainer=new Ext.container.Container({flex:1,layout:{type:"vbox",align:"stretch"},items:[h.msg=new Ext.form.field.Display({id:f+"-displayfield",cls:h.baseCls+"-text"}),h.textField=new Ext.form.field.Text({id:f+"-textfield",enableKeyEvents:true,listeners:{keydown:h.onPromptKey,scope:h}}),h.textArea=new Ext.form.field.TextArea({id:f+"-textarea",height:75})]})]});h.progressBar=new Ext.ProgressBar({id:f+"-progressbar",margin:"0 10 10 10"});h.items=[h.topContainer,h.progressBar];h.msgButtons=[];for(j=0;j<4;j++){k=h.makeButton(j);h.msgButtons[k.itemId]=k;h.msgButtons.push(k)}h.bottomTb=new Ext.toolbar.Toolbar({id:f+"-toolbar",ui:"footer",dock:"bottom",layout:{pack:"center"},items:[h.msgButtons[0],h.msgButtons[1],h.msgButtons[2],h.msgButtons[3]]});h.dockedItems=[h.bottomTb];h.on("close",h.onClose,h);Ext.window.Window.prototype.initComponent.call(this)},onClose:function(){var b=this.header.child("[type=close]");b.itemId="cancel";this.btnCallback(b);delete b.itemId},onPromptKey:function(e,f){var d=this;if(f.keyCode===f.RETURN||f.keyCode===10){if(d.msgButtons.ok.isVisible()){d.msgButtons.ok.handler.call(d,d.msgButtons.ok)}else{if(d.msgButtons.yes.isVisible()){d.msgButtons.yes.handler.call(d,d.msgButtons.yes)}}}},reconfigure:function(L){var w=this,z=0,I=true,v=w.buttonText,J=w.resizer,B=w.header,x=B&&!B.isHeader,K=L&&(L.message||L.msg),u,D,G,A,y,H,M,F,C,E;w.updateButtonText();w.cfg=L=L||{};if(L.width){D=L.width}if(L.height){G=L.height}w.minWidth=L.minWidth||w.defaultMinWidth;w.maxWidth=L.maxWidth||w.defaultMaxWidth;w.minHeight=L.minHeight||w.defaultMinHeight;w.maxHeight=L.maxHeight||w.defaultMaxHeight;if(J){u=J.resizeTracker;J.minWidth=u.minWidth=w.minWidth;J.maxWidth=u.maxWidth=w.maxWidth;J.minHeight=u.minHeight=w.minHeight;J.maxHeight=u.maxHeight=w.maxHeight}delete w.defaultFocus;if(L.defaultFocus){w.defaultFocus=L.defaultFocus}w.animateTarget=L.animateTarget||undefined;w.modal=L.modal!==false;w.setTitle(L.title||(x&&B.title)||w.title);w.setIconCls(L.iconCls||(x&&B.iconCls)||w.iconCls);if(Ext.isObject(L.buttons)){w.buttonText=L.buttons;z=0}else{w.buttonText=L.buttonText||w.buttonText;z=Ext.isNumber(L.buttons)?L.buttons:0}z=z|w.updateButtonText();w.buttonText=v;Ext.suspendLayouts();delete w.width;delete w.height;if(D||G){if(D){w.setWidth(D)}if(G){w.setHeight(G)}}w.hidden=false;if(!w.rendered){w.render(Ext.getBody())}w.closable=L.closable!==false&&!L.wait;B=w.header;if(B){B.child("[type=close]").setVisible(w.closable);if(!L.title&&!w.closable&&!L.iconCls){B.hide()}else{B.show()}}w.liveDrag=!L.proxyDrag;w.userCallback=Ext.Function.bindCallback(L.callback||L.fn||Ext.emptyFn,L.scope||Ext.global);w.setIcon(L.icon);M=w.msg;if(K){M.setValue(K);M.show()}else{M.hide()}y=w.textArea;H=w.textField;if(L.prompt||L.multiline){w.multiline=L.multiline;if(L.multiline){y.setValue(L.value);y.setHeight(L.defaultTextHeight||w.defaultTextHeight);y.show();H.hide();w.defaultFocus=y}else{H.setValue(L.value);y.hide();H.show();w.defaultFocus=H}}else{y.hide();H.hide()}F=w.progressBar;if(L.progress||L.wait){F.show();w.updateProgress(0,L.progressText);E=L.wait;if(E===true){L=L.waitConfig}if(E){F.wait(E)}}else{F.hide()}C=w.msgButtons;for(A=0;A<4;A++){if(z&Math.pow(2,A)){if(!w.defaultFocus){w.defaultFocus=C[A]}C[A].show();I=false}else{C[A].hide()}}if(I){w.bottomTb.hide()}else{w.bottomTb.show()}Ext.resumeLayouts(true)},updateButtonText:function(){var j=this,k=j.buttonText,f=0,h,g;for(h in k){if(k.hasOwnProperty(h)){g=j.msgButtons[h];if(g){if(j.cfg&&j.cfg.buttonText){f=f|Math.pow(2,Ext.Array.indexOf(j.buttonIds,h))}if(g.text!=k[h]){g.setText(k[h])}}}}return f},show:function(e){var f=this,d;e=e||{};if(Ext.Component.layoutSuspendCount){Ext.on({resumelayouts:function(){f.show(e)},single:true});return f}f.reconfigure(e);if(e.cls){f.addCls(e.cls)}d=f.query("textfield:not([hidden]),textarea:not([hidden]),button:not([hidden])");f.preventFocusOnActivate=!d.length;f.hidden=true;Ext.window.Window.prototype.show.call(this);return f},onShow:function(){Ext.window.Window.prototype.onShow.apply(this,arguments);this.center()},updateText:function(b){this.msg.setValue(b)},setIcon:function(l,m,h){var k=this,j=k.iconComponent,g=k.messageIconCls;if(g){j.removeCls(g)}if(l){j.show();if(m||h){j.setSize(m||j.getWidth(),h||j.getHeight())}j.addCls(Ext.baseCSSPrefix+"dlg-icon");j.addCls(k.messageIconCls=l)}else{j.removeCls(Ext.baseCSSPrefix+"dlg-icon");j.hide()}return k},updateProgress:function(f,e,d){this.progressBar.updateProgress(f,e);if(d){this.updateText(d)}return this},onEsc:function(){if(this.closable!==false){Ext.window.Window.prototype.onEsc.apply(this,arguments)}},confirm:function(f,g,h,e){if(Ext.isString(f)){f={title:f,icon:this.QUESTION,message:g,buttons:this.YESNO,callback:h,scope:e}}return this.show(f)},prompt:function(j,l,m,g,h,k){if(Ext.isString(j)){j={prompt:true,title:j,minWidth:this.minPromptWidth,message:l,buttons:this.OKCANCEL,callback:m,scope:g,multiline:h,value:k}}return this.show(j)},wait:function(d,f,e){if(Ext.isString(d)){d={title:f,message:d,closable:false,wait:true,modal:true,minWidth:this.minProgressWidth,waitConfig:e}}return this.show(d)},alert:function(g,h,e,f){if(Ext.isString(g)){g={title:g,message:h,buttons:this.OK,fn:e,scope:f,minWidth:this.minWidth}}return this.show(g)},progress:function(f,d,e){if(Ext.isString(f)){f={title:f,message:d,progress:true,progressText:e}}return this.show(f)}},1,["messagebox"],["box","component","container","messagebox","panel","window"],{box:true,component:true,container:true,messagebox:true,panel:true,window:true},["widget.messagebox"],0,[Ext.window,"MessageBox"],function(){Ext.MessageBox=Ext.Msg=new this()}));(Ext.cmd.derive("Ext.form.Basic",Ext.util.Observable,{alternateClassName:"Ext.form.BasicForm",taskDelay:10,constructor:function(e,h){var g=this,f;g.owner=e;g.checkValidityTask=new Ext.util.DelayedTask(g.checkValidity,g);g.checkDirtyTask=new Ext.util.DelayedTask(g.checkDirty,g);g.checkErrorTask=new Ext.util.DelayedTask(g.checkError,g);g.monitor=new Ext.container.Monitor({selector:"[isFormField]:not([excludeForm])",scope:g,addHandler:g.onFieldAdd,removeHandler:g.onFieldRemove,invalidateHandler:g.onMonitorInvalidate});g.monitor.bind(e);Ext.apply(g,h);if(Ext.isString(g.paramOrder)){g.paramOrder=g.paramOrder.split(/[\s,|]/)}f=g.reader;if(f&&!f.isReader){if(typeof f==="string"){f={type:f}}g.reader=Ext.createByAlias("reader."+f.type,f)}f=g.errorReader;if(f&&!f.isReader){if(typeof f==="string"){f={type:f}}g.errorReader=Ext.createByAlias("reader."+f.type,f)}Ext.util.Observable.prototype.constructor.call(this)},initialize:function(){this.initialized=true;this.onValidityChange(!this.hasInvalidField())},timeout:30,paramsAsHash:false,waitTitle:"Please Wait...",trackResetOnLoad:false,wasDirty:false,destroy:function(){var c=this,d=c.monitor;if(d){d.unbind();c.monitor=null}c.clearListeners();c.checkValidityTask.cancel();c.checkDirtyTask.cancel();c.checkErrorTask.cancel();c.checkValidityTask=c.checkDirtyTask=checkErrorTask=null;c.isDestroyed=true},onFieldAdd:function(c){var d=this;d.mon(c,"validitychange",d.checkValidityDelay,d);d.mon(c,"dirtychange",d.checkDirtyDelay,d);d.mon(c,"errorchange",d.checkErrorDelay,d);d.onMonitorInvalidate()},onFieldRemove:function(c){var d=this;d.mun(c,"validitychange",d.checkValidityDelay,d);d.mun(c,"dirtychange",d.checkDirtyDelay,d);d.mun(c,"errorchange",d.checkErrorDelay,d);d.onMonitorInvalidate()},onMonitorInvalidate:function(){if(this.initialized){this.checkValidityDelay()}},getFields:function(){return this.monitor.getItems()},getBoundItems:function(){var b=this._boundItems;if(!b||b.getCount()===0){b=this._boundItems=new Ext.util.MixedCollection();b.addAll(this.owner.query("[formBind]"))}return b},hasInvalidField:function(){return !!this.getFields().findBy(function(f){var e=f.preventMark,d;f.preventMark=true;d=f.isValid();f.preventMark=e;return !d})},isValid:function(){var d=this,c;Ext.suspendLayouts();c=d.getFields().filterBy(function(a){return !a.validate()});Ext.resumeLayouts(true);return c.length<1},checkValidity:function(){var c=this,d;if(c.isDestroyed){return}d=!c.hasInvalidField();if(d!==c.wasValid){c.onValidityChange(d);c.fireEvent("validitychange",c,d);c.wasValid=d}},checkValidityDelay:function(){var b=this.taskDelay;if(b){this.checkValidityTask.delay(b)}else{this.checkValidity()}},checkError:function(){this.fireEvent("errorchange",this)},checkErrorDelay:function(){var b=this.taskDelay;if(b){this.checkErrorTask.delay(b)}else{this.checkError()}},onValidityChange:function(j){var l=this.getBoundItems(),g,m,h,k;if(l){g=l.items;h=g.length;for(m=0;m
',getBodyRenderData:function(){var b=this;return{vertical:b.vertical,upDisabledCls:b.upEnabled?"":(b.spinnerUpCls+"-disabled"),downDisabledCls:b.downEnabled?"":(b.spinnerDownCls+"-disabled"),spinnerCls:b.spinnerCls,spinnerUpCls:b.spinnerUpCls,spinnerDownCls:b.spinnerDownCls}},getStateEl:function(){return this.spinnerEl},onClick:function(g){var e=this,f=arguments,g=e.clickRepeater?f[1]:f[0],h=e.field;if(!h.readOnly&&!h.disabled){if(e.upEl.contains(g.target)){Ext.callback(e.upHandler,e.scope,[h,e,g],0,h)}else{if(e.downEl.contains(g.target)){Ext.callback(e.downHandler,e.scope,[h,e,g],0,h)}}}h.inputEl.focus()},onFieldRender:function(){var e=this,f=e.vertical,g,h;Ext.form.trigger.Trigger.prototype.onFieldRender.call(this);g=e.spinnerEl=e.el.select("."+e.spinnerCls,true);h=g.elements;e.upEl=f?h[0]:h[1];e.downEl=f?h[1]:h[0]},setUpEnabled:function(b){this.upEl[b?"removeCls":"addCls"](this.spinnerUpCls+"-disabled")},setDownEnabled:function(b){this.downEl[b?"removeCls":"addCls"](this.spinnerDownCls+"-disabled")}},0,0,0,0,["trigger.spinner"],0,[Ext.form.trigger,"Spinner"],0));(Ext.cmd.derive("Ext.form.field.Spinner",Ext.form.field.Text,{alternateClassName:"Ext.form.Spinner",config:{triggers:{spinner:{type:"spinner",upHandler:"onSpinnerUpClick",downHandler:"onSpinnerDownClick",scope:"this"}}},spinUpEnabled:true,spinDownEnabled:true,keyNavEnabled:true,mouseWheelEnabled:true,repeatTriggerClick:true,onSpinUp:Ext.emptyFn,onSpinDown:Ext.emptyFn,ariaRole:"spinbutton",applyTriggers:function(d){var f=this,e=d.spinner;e.upEnabled=f.spinUpEnabled;e.downEnabled=f.spinDownEnabled;return Ext.form.field.Text.prototype.applyTriggers.call(this,d)},onRender:function(){var c=this,d=c.getTrigger("spinner");Ext.form.field.Text.prototype.onRender.call(this);if(c.keyNavEnabled){c.spinnerKeyNav=new Ext.util.KeyNav(c.inputEl,{scope:c,up:c.spinUp,down:c.spinDown})}if(c.mouseWheelEnabled){c.mon(c.bodyEl,"mousewheel",c.onMouseWheel,c)}c.spinUpEl=d.upEl;c.spinDownEl=d.downEl},onSpinnerUpClick:function(){this.spinUp()},onSpinnerDownClick:function(){this.spinDown()},spinUp:function(){var b=this;if(b.spinUpEnabled&&!b.disabled){b.fireEvent("spin",b,"up");b.fireEvent("spinup",b);b.onSpinUp()}},spinDown:function(){var b=this;if(b.spinDownEnabled&&!b.disabled){b.fireEvent("spin",b,"down");b.fireEvent("spindown",b);b.onSpinDown()}},setSpinUpEnabled:function(e){var d=this,f=d.spinUpEnabled;d.spinUpEnabled=e;if(f!==e&&d.rendered){d.getTrigger("spinner").setUpEnabled(e)}},setSpinDownEnabled:function(e){var d=this,f=d.spinDownEnabled;d.spinDownEnabled=e;if(f!==e&&d.rendered){d.getTrigger("spinner").setDownEnabled(e)}},onMouseWheel:function(d){var e=this,f;if(e.hasFocus){f=d.getWheelDelta();if(f>0){e.spinUp()}else{if(f<0){e.spinDown()}}d.stopEvent()}},onDestroy:function(){Ext.destroyMembers(this,"spinnerKeyNav");Ext.form.field.Text.prototype.onDestroy.call(this)}},0,["spinnerfield"],["box","component","field","spinnerfield","textfield"],{box:true,component:true,field:true,spinnerfield:true,textfield:true},["widget.spinnerfield"],0,[Ext.form.field,"Spinner",Ext.form,"Spinner"],0));(Ext.cmd.derive("Ext.form.field.Number",Ext.form.field.Spinner,{alternateClassName:["Ext.form.NumberField","Ext.form.Number"],allowExponential:true,allowDecimals:true,decimalSeparator:null,submitLocaleSeparator:true,decimalPrecision:2,minValue:Number.NEGATIVE_INFINITY,maxValue:Number.MAX_VALUE,step:1,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",negativeText:"The value cannot be negative",baseChars:"0123456789",autoStripChars:false,initComponent:function(){var b=this;if(b.decimalSeparator===null){b.decimalSeparator=Ext.util.Format.decimalSeparator}Ext.form.field.Spinner.prototype.initComponent.call(this);b.setMinValue(b.minValue);b.setMaxValue(b.maxValue)},getErrors:function(k){k=arguments.length>0?k:this.processRawValue(this.getRawValue());var f=this,h=Ext.form.field.Spinner.prototype.getErrors.call(this,k),j=Ext.String.format,g;if(k.length<1){return h}k=String(k).replace(f.decimalSeparator,".");if(isNaN(k)){h.push(j(f.nanText,k))}g=f.parseValue(k);if(f.minValue===0&&g<0){h.push(this.negativeText)}else{if(gf.maxValue){h.push(j(f.maxText,f.maxValue))}return h},rawToValue:function(c){var d=this.fixPrecision(this.parseValue(c));if(d===null){d=c||null}return d},valueToRaw:function(f){var d=this,e=d.decimalSeparator;f=d.parseValue(f);f=d.fixPrecision(f);f=Ext.isNumber(f)?f:parseFloat(String(f).replace(e,"."));f=isNaN(f)?"":String(f).replace(".",e);return f},getSubmitValue:function(){var d=this,c=Ext.form.field.Spinner.prototype.getSubmitValue.call(this);if(!d.submitLocaleSeparator){c=c.replace(d.decimalSeparator,".")}return c},onChange:function(){this.toggleSpinners();Ext.form.field.Spinner.prototype.onChange.apply(this,arguments)},toggleSpinners:function(){var h=this,g=h.getValue(),e=g===null,f;if(h.spinUpEnabled||h.spinUpDisabledByToggle){f=e||gh.minValue;h.setSpinDownEnabled(f,true)}},setMinValue:function(d){var e=this,f;e.minValue=Ext.Number.from(d,Number.NEGATIVE_INFINITY);e.toggleSpinners();if(e.disableKeyFilter!==true){f=e.baseChars+"";if(e.allowExponential){f+=e.decimalSeparator+"e+-"}else{if(e.allowDecimals){f+=e.decimalSeparator}if(e.minValue<0){f+="-"}}f=Ext.String.escapeRegex(f);e.maskRe=new RegExp("["+f+"]");if(e.autoStripChars){e.stripCharsRe=new RegExp("[^"+f+"]","gi")}}},setMaxValue:function(b){this.maxValue=Ext.Number.from(b,Number.MAX_VALUE);this.toggleSpinners()},parseValue:function(b){b=parseFloat(String(b).replace(this.decimalSeparator,"."));return isNaN(b)?null:b},fixPrecision:function(g){var h=this,e=isNaN(g),f=h.decimalPrecision;if(e||!g){return e?"":g}else{if(!h.allowDecimals||f<=0){f=0}}return parseFloat(Ext.Number.toFixed(parseFloat(g),f))},onBlur:function(f){var d=this,e=d.rawToValue(d.getRawValue());if(!Ext.isEmpty(e)){d.setValue(e)}Ext.form.field.Spinner.prototype.onBlur.call(this,f)},setSpinUpEnabled:function(c,d){Ext.form.field.Spinner.prototype.setSpinUpEnabled.apply(this,arguments);if(!d){delete this.spinUpDisabledByToggle}else{this.spinUpDisabledByToggle=!c}},onSpinUp:function(){var b=this;if(!b.readOnly){b.setSpinValue(Ext.Number.constrain(b.getValue()+b.step,b.minValue,b.maxValue))}},setSpinDownEnabled:function(c,d){Ext.form.field.Spinner.prototype.setSpinDownEnabled.apply(this,arguments);if(!d){delete this.spinDownDisabledByToggle}else{this.spinDownDisabledByToggle=!c}},onSpinDown:function(){var b=this;if(!b.readOnly){b.setSpinValue(Ext.Number.constrain(b.getValue()-b.step,b.minValue,b.maxValue))}},setSpinValue:function(c){var d=this;if(d.enforceMaxLength){if(d.fixPrecision(c).toString().length>d.maxLength){return}}d.setValue(c)}},0,["numberfield"],["box","component","field","numberfield","spinnerfield","textfield"],{box:true,component:true,field:true,numberfield:true,spinnerfield:true,textfield:true},["widget.numberfield"],0,[Ext.form.field,"Number",Ext.form,"NumberField",Ext.form,"Number"],0));(Ext.cmd.derive("Ext.toolbar.Paging",Ext.toolbar.Toolbar,{alternateClassName:"Ext.PagingToolbar",displayInfo:false,prependButtons:false,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",inputItemWidth:30,getPagingItems:function(){var c=this,d={scope:c,blur:c.onPagingBlur};d[Ext.supports.SpecialKeyDownRepeat?"keydown":"keypress"]=c.onPagingKeyDown;return[{itemId:"first",tooltip:c.firstText,overflowText:c.firstText,iconCls:Ext.baseCSSPrefix+"tbar-page-first",disabled:true,handler:c.moveFirst,scope:c},{itemId:"prev",tooltip:c.prevText,overflowText:c.prevText,iconCls:Ext.baseCSSPrefix+"tbar-page-prev",disabled:true,handler:c.movePrevious,scope:c},"-",c.beforePageText,{xtype:"numberfield",itemId:"inputItem",name:"inputItem",cls:Ext.baseCSSPrefix+"tbar-page-number",allowDecimals:false,minValue:1,hideTrigger:true,enableKeyEvents:true,keyNavEnabled:false,selectOnFocus:true,submitValue:false,isFormField:false,width:c.inputItemWidth,margin:"-1 2 3 2",listeners:d},{xtype:"tbtext",itemId:"afterTextItem",text:Ext.String.format(c.afterPageText,1)},"-",{itemId:"next",tooltip:c.nextText,overflowText:c.nextText,iconCls:Ext.baseCSSPrefix+"tbar-page-next",disabled:true,handler:c.moveNext,scope:c},{itemId:"last",tooltip:c.lastText,overflowText:c.lastText,iconCls:Ext.baseCSSPrefix+"tbar-page-last",disabled:true,handler:c.moveLast,scope:c},"-",{itemId:"refresh",tooltip:c.refreshText,overflowText:c.refreshText,iconCls:Ext.baseCSSPrefix+"tbar-loading",disabled:c.store.isLoading(),handler:c.doRefresh,scope:c}]},initComponent:function(){var d=this,e=d.items||d.buttons||[],f;d.bindStore(d.store||"ext-empty-store",true);f=d.getPagingItems();if(d.prependButtons){d.items=e.concat(f)}else{d.items=f.concat(e)}delete d.buttons;if(d.displayInfo){d.items.push("->");d.items.push({xtype:"tbtext",itemId:"displayItem"})}Ext.toolbar.Toolbar.prototype.initComponent.call(this)},beforeRender:function(){var b=this;Ext.toolbar.Toolbar.prototype.beforeRender.apply(this,arguments);if(!b.store.isLoading()){b.calledFromRender=true;b.onLoad();delete b.calledFromRender}},updateInfo:function(){var k=this,m=k.child("#displayItem"),h=k.store,g=k.getPageData(),l,j;if(m){l=h.getCount();if(l===0){j=k.emptyMsg}else{j=Ext.String.format(k.displayMsg,g.fromRecord,g.toRecord,g.total)}m.setText(j)}},onLoad:function(){var m=this,p,j,q,k,n,l,o;n=m.store.getCount();l=n===0;if(!l){p=m.getPageData();j=p.currentPage;q=p.pageCount;if(j>q){m.store.loadPage(q);return}k=Ext.String.format(m.afterPageText,isNaN(q)?1:q)}else{j=0;q=0;k=Ext.String.format(m.afterPageText,0)}Ext.suspendLayouts();o=m.child("#afterTextItem");if(o){o.setText(k)}o=m.getInputItem();if(o){o.setDisabled(l).setValue(j)}m.setChildDisabled("#first",j===1||l);m.setChildDisabled("#prev",j===1||l);m.setChildDisabled("#next",j===q||l);m.setChildDisabled("#last",j===q||l);m.setChildDisabled("#refresh",false);m.updateInfo();Ext.resumeLayouts(true);if(!m.calledFromRender){m.fireEvent("change",m,p)}},setChildDisabled:function(e,d){var f=this.child(e);if(f){f.setDisabled(d)}},getPageData:function(){var c=this.store,d=c.getTotalCount();return{total:d,currentPage:c.currentPage,pageCount:Math.ceil(d/c.pageSize),fromRecord:((c.currentPage-1)*c.pageSize)+1,toRecord:Math.min(c.currentPage*c.pageSize,d)}},onLoadError:function(){this.setChildDisabled("#refresh",false)},getInputItem:function(){return this.child("#inputItem")},readPageFromInput:function(e){var h=this.getInputItem(),g=false,f;if(h){f=h.getValue();g=parseInt(f,10);if(!f||isNaN(g)){h.setValue(e.currentPage);return false}}return g},onPagingBlur:function(f){var d=this.getInputItem(),e;if(d){e=this.getPageData().currentPage;d.setValue(e)}},onPagingKeyDown:function(c,d){this.processKeyEvent(c,d)},processKeyEvent:function(k,l){var n=this,e=l.getKey(),o=n.getPageData(),j=l.shiftKey?10:1,m;if(e==l.RETURN){l.stopEvent();m=n.readPageFromInput(o);if(m!==false){m=Math.min(Math.max(1,m),o.pageCount);if(m!==o.currentPage&&n.fireEvent("beforechange",n,m)!==false){n.store.loadPage(m)}}}else{if(e==l.HOME||e==l.END){l.stopEvent();m=e==l.HOME?1:o.pageCount;k.setValue(m)}else{if(e==l.UP||e==l.PAGE_UP||e==l.DOWN||e==l.PAGE_DOWN){l.stopEvent();m=n.readPageFromInput(o);if(m){if(e==l.DOWN||e==l.PAGE_DOWN){j*=-1}m+=j;if(m>=1&&m<=o.pageCount){k.setValue(m)}}}}}},beforeLoad:function(){this.setChildDisabled("#refresh",true)},moveFirst:function(){if(this.fireEvent("beforechange",this,1)!==false){this.store.loadPage(1);return true}return false},movePrevious:function(){var f=this,e=f.store,d=e.currentPage-1;if(d>0){if(f.fireEvent("beforechange",f,d)!==false){e.previousPage();return true}}return false},moveNext:function(){var g=this,f=g.store,h=g.getPageData().pageCount,e=f.currentPage+1;if(e<=h){if(g.fireEvent("beforechange",g,e)!==false){f.nextPage();return true}}return false},moveLast:function(){var c=this,d=c.getPageData().pageCount;if(c.fireEvent("beforechange",c,d)!==false){c.store.loadPage(d);return true}return false},doRefresh:function(){var d=this,e=d.store,f=e.currentPage;if(d.fireEvent("beforechange",d,f)!==false){e.loadPage(f);return true}return false},getStoreListeners:function(){return{beforeload:this.beforeLoad,load:this.onLoad,exception:this.onLoadError}},onDestroy:function(){this.bindStore(null);Ext.toolbar.Toolbar.prototype.onDestroy.call(this)}},0,["pagingtoolbar"],["box","component","container","pagingtoolbar","toolbar"],{box:true,component:true,container:true,pagingtoolbar:true,toolbar:true},["widget.pagingtoolbar"],[[Ext.util.StoreHolder.prototype.mixinId||Ext.util.StoreHolder.$className,Ext.util.StoreHolder]],[Ext.toolbar,"Paging",Ext,"PagingToolbar"],0));Ext.define("ExtThemeNeptune.toolbar.Paging",{override:"Ext.toolbar.Paging",defaultButtonUI:"plain-toolbar",inputItemWidth:40});(Ext.cmd.derive("Ext.grid.ColumnManager",Ext.Base,{alternateClassName:["Ext.grid.ColumnModel"],columns:null,constructor:function(d,f,e){this.headerCt=f;if(e){this.secondHeaderCt=e}this.visibleOnly=!!d},getColumns:function(){if(!this.columns){this.cacheColumns()}return this.columns},hasVariableRowHeight:function(){var g=this,h=g.getColumns(),f=h.length,e;if(g.variableRowHeight==null){g.variableRowHeight=false;for(e=0;!g.variableRowHeight&&e0){e=this.getColumns()[d-1]}return e},getNextSibling:function(f){var d=this.getHeaderIndex(f),e;if(d!==-1){e=this.getColumns()[d+1]}return e||null},getFirst:function(){var b=this.getColumns();return b.length>0?b[0]:null},getLast:function(){var c=this.getColumns(),d=c.length;return d>0?c[d-1]:null},getHeaderByDataIndex:function(j){var k=this.getColumns(),g=k.length,f,h;for(f=0;f{text} {linkHrefCls}{childElCls}" href="{href}" role="menuitem" target="{hrefTarget}" hidefocus="true" unselectable="on" tabindex="{tabIndex}">{text}',maskOnDisable:false,iconAlign:"left",activate:function(c){var d=this;if(c||(!d.activated&&d.canActivate&&d.rendered&&!d.isDisabled()&&d.isVisible())){if(!d.plain){d.el.addCls(d.activeCls)}d.focus(false,true);d.activated=true;if(d.hasListeners.activate){d.fireEvent("activate",d)}}},deactivate:function(){var c=this,d;if(c.activated){d=c.up("");if(!c.plain){c.el.removeCls(c.activeCls)}if(d){d.focus(false,true)}c.hideMenu();c.activated=false;if(c.hasListeners.deactivate){c.fireEvent("deactivate",c)}}},deferHideMenu:function(){if(this.menu.isVisible()){this.menu.hide()}},cancelDeferHide:function(){clearTimeout(this.hideMenuTimer)},deferHideParentMenus:function(){var b;Ext.menu.Manager.hideAll();if(!Ext.Element.getActiveElement()){b=this.up(":not([hidden])");if(b){b.focus()}}},expandMenu:function(d){var c=this;if(c.menu){c.cancelDeferHide();if(d===0){c.doExpandMenu()}else{clearTimeout(c.expandMenuTimer);c.expandMenuTimer=Ext.defer(c.doExpandMenu,Ext.isNumber(d)?d:c.menuExpandDelay,c)}}},doExpandMenu:function(){var d=this,c=d.menu;if(d.activated&&(!c.rendered||!c.isVisible())){d.parentMenu.activeChild=c;c.ownerCmp=d;c.parentMenu=d.parentMenu;c.constrainTo=document.body;c.showBy(d,d.menuAlign)}},getRefItems:function(e){var f=this.menu,d;if(f){d=f.getRefItems(e);d.unshift(f)}return d||[]},hideMenu:function(d){var c=this;if(c.menu){clearTimeout(c.expandMenuTimer);c.hideMenuTimer=Ext.defer(c.deferHideMenu,Ext.isNumber(d)?d:c.menuHideDelay,c)}},initComponent:function(){var e=this,h=Ext.baseCSSPrefix,f="",g;if(e.plain){f+=h+"menu-item-plain"}if(e.cls){f+=" "+e.cls}e.cls=f;if(e.menu){g=e.menu;delete e.menu;e.setMenu(g)}Ext.Component.prototype.initComponent.apply(this,arguments)},onClick:function(j){var k=this,e=k.clickHideDelay,h=j.browserEvent,g;if(!k.href||k.disabled){j.stopEvent()}if(k.disabled||k.handlingClick){return}if(k.hideOnClick&&j.browserEvent.type!=="touchcancel"&&!(j.type==="tap"&&k.menu)){if(!e){k.deferHideParentMenus()}else{k.deferHideParentMenusTimer=Ext.defer(k.deferHideParentMenus,e,k)}}Ext.callback(k.handler,k.scope,[k,j],0,k);k.fireEvent("click",k,j);if(Ext.isIE9m){g=(h.returnValue===false)?true:false}else{g=!!h.defaultPrevented}if(k.href&&j.type!=="click"&&!g){k.handlingClick=true;k.itemEl.dom.click();delete k.handlingClick}if(!k.hideOnClick){k.focus()}},onRemoved:function(){var b=this;if(b.activated&&b.parentMenu.activeItem===b){b.parentMenu.deactivateActiveItem()}Ext.Component.prototype.onRemoved.apply(this,arguments);b.parentMenu=b.ownerCmp=null},beforeDestroy:function(){var b=this;if(b.rendered){b.clearTip()}Ext.Component.prototype.beforeDestroy.call(this)},onDestroy:function(){var b=this;clearTimeout(b.expandMenuTimer);b.cancelDeferHide();clearTimeout(b.deferHideParentMenusTimer);b.setMenu(null);Ext.Component.prototype.onDestroy.apply(this,arguments)},beforeRender:function(){var o=this,n=o.glyph,p=Ext._glyphFontFamily,s=!!(o.icon||o.iconCls||n),m=!!o.menu,r=((o.iconAlign==="right")&&!m),u=o.isMenuCheckItem,w=[],t=o.ownerCt,q=t.plain,v;Ext.Component.prototype.beforeRender.call(this);if(s){if(m&&o.showCheckbox){s=false}}if(typeof n==="string"){v=n.split("@");n=v[0];p=v[1]}if(!q||(s&&!r)||u){if(t.showSeparator&&!q){w.push(o.indentCls)}else{w.push(o.indentNoSeparatorCls)}}if(m){w.push(o.indentRightArrowCls)}else{if(s&&(r||u)){w.push(o.indentRightIconCls)}}Ext.applyIf(o.renderData,{hasHref:!!o.href,href:o.href||"#",hrefTarget:o.hrefTarget,icon:o.icon,iconCls:o.iconCls,glyph:n,glyphCls:n?Ext.baseCSSPrefix+"menu-item-glyph":undefined,glyphFontFamily:p,hasIcon:s,hasMenu:m,indent:!q||s||u,isCheckItem:u,rightIcon:r,plain:o.plain,text:o.text,arrowCls:o.arrowCls,baseIconCls:o.baseIconCls,textCls:o.textCls,indentCls:w.join(" "),linkCls:o.linkCls,linkHrefCls:o.linkHrefCls,groupCls:o.group?o.groupCls:"",tabIndex:o.tabIndex})},onRender:function(){var b=this;Ext.Component.prototype.onRender.apply(this,arguments);if(b.tooltip){b.setTooltip(b.tooltip,true)}},setMenu:function(h,j){var k=this,f=k.menu,g=k.arrowEl;if(f){f.ownerCmp=f.parentMenu=null;if(j===true||(j!==false&&k.destroyMenu)){Ext.destroy(f)}}if(h){h=k.menu=Ext.menu.Manager.get(h,{ownerCmp:k});h.ownerCmp=k}else{h=k.menu=null}if(h&&k.rendered&&!k.destroying&&g){g[h?"addCls":"removeCls"](k.arrowCls)}},setHandler:function(c,d){this.handler=c||null;this.scope=d},setIcon:function(d){var e=this.iconEl,f=this.icon;if(e){e.src=d||Ext.BLANK_IMAGE_URL}this.icon=d;this.fireEvent("iconchange",this,f,d)},setIconCls:function(e){var g=this,f=g.iconEl,h=g.iconCls;if(f){if(g.iconCls){f.removeCls(g.iconCls)}if(e){f.addCls(e)}}g.iconCls=e;g.fireEvent("iconchange",g,h,e)},setText:function(g){var h=this,e=h.textEl||h.el,f=h.text;h.text=g;if(h.rendered){e.setHtml(g||"");h.ownerCt.updateLayout()}h.fireEvent("textchange",h,f,g)},getTipAttr:function(){return this.tooltipType=="qtip"?"data-qtip":"title"},clearTip:function(){if(Ext.quickTipsActive&&Ext.isObject(this.tooltip)){Ext.tip.QuickTipManager.unregister(this.itemEl)}},setTooltip:function(f,e){var d=this;if(d.rendered){if(!e){d.clearTip()}if(Ext.quickTipsActive&&Ext.isObject(f)){Ext.tip.QuickTipManager.register(Ext.apply({target:d.itemEl.id},f));d.tooltip=f}else{d.itemEl.dom.setAttribute(d.getTipAttr(),f)}}else{d.tooltip=f}return d},privates:{getFocusEl:function(){return this.itemEl}}},0,["menuitem"],["box","component","menuitem"],{box:true,component:true,menuitem:true},["widget.menuitem"],[[Ext.mixin.Queryable.prototype.mixinId||Ext.mixin.Queryable.$className,Ext.mixin.Queryable]],[Ext.menu,"Item",Ext.menu,"TextItem"],0));(Ext.cmd.derive("Ext.menu.CheckItem",Ext.menu.Item,{checkedCls:Ext.baseCSSPrefix+"menu-item-checked",uncheckedCls:Ext.baseCSSPrefix+"menu-item-unchecked",groupCls:Ext.baseCSSPrefix+"menu-group-icon",hideOnClick:false,checkChangeDisabled:false,ariaRole:"menuitemcheckbox",childEls:["checkEl"],showCheckbox:true,isMenuCheckItem:true,checkboxCls:Ext.baseCSSPrefix+"menu-item-checkbox",initComponent:function(){var b=this;b.checked=!!b.checked;Ext.menu.Item.prototype.initComponent.apply(this,arguments);Ext.menu.Manager.registerCheckable(b);if(b.group){if(b.initialConfig.hideOnClick!==false){b.hideOnClick=true}}},beforeRender:function(){var b=this;Ext.menu.Item.prototype.beforeRender.call(this);Ext.apply(b.renderData,{checkboxCls:b.checkboxCls,showCheckbox:b.showCheckbox})},afterRender:function(){var b=this;Ext.menu.Item.prototype.afterRender.call(this);b.checked=!b.checked;b.setChecked(!b.checked,true);if(b.checkChangeDisabled){b.disableCheckChange()}},disableCheckChange:function(){var c=this,d=c.checkEl;if(d){d.addCls(c.disabledCls)}if(Ext.isIE8&&c.rendered){c.el.repaint()}c.checkChangeDisabled=true},enableCheckChange:function(){var c=this,d=c.checkEl;if(d){d.removeCls(c.disabledCls)}c.checkChangeDisabled=false},onClick:function(c){var d=this;if(!d.disabled&&!d.checkChangeDisabled&&!(d.checked&&d.group)){d.setChecked(!d.checked)}Ext.menu.Item.prototype.onClick.call(this,c)},onDestroy:function(){Ext.menu.Manager.unregisterCheckable(this);Ext.menu.Item.prototype.onDestroy.apply(this,arguments)},setChecked:function(l,g){var m=this,k=m.checkedCls,j=m.uncheckedCls,h=m.el;if(m.checked!==l&&(g||m.fireEvent("beforecheckchange",m,l)!==false)){if(h){if(l){h.addCls(k);h.removeCls(j)}else{h.addCls(j);h.removeCls(k)}}m.checked=l;Ext.menu.Manager.onCheckChange(m,l);if(!g){Ext.callback(m.checkHandler,m.scope||m,[m,l]);m.fireEvent("checkchange",m,l)}}}},0,["menucheckitem"],["box","component","menucheckitem","menuitem"],{box:true,component:true,menucheckitem:true,menuitem:true},["widget.menucheckitem"],0,[Ext.menu,"CheckItem"],0));(Ext.cmd.derive("Ext.menu.KeyNav",Ext.util.KeyNav,{constructor:function(d){var c=this;c.menu=d.target;Ext.util.KeyNav.prototype.constructor.call(this,Ext.apply({down:c.down,enter:c.enter,esc:c.escape,left:c.left,right:c.right,space:c.enter,tab:c.tab,up:c.up},d))},down:function(d){var e=this,f=e.menu.focusedItem;if(f&&d.getKey()==d.DOWN&&e.isWhitelisted(f)){return true}e.focusNextItem(1)},enter:function(d){var f=this.menu,e=f.focusedItem;if(f.activeItem){f.onClick(d)}else{if(e&&e.isFormField){return true}}},escape:function(b){Ext.menu.Manager.hideAll()},focusNextItem:function(r){var s=this.menu,o=s.items,m=s.focusedItem,n=m?o.indexOf(m):-1,l=n+r,p=o.length,q=0,k;while(q=p){l=0}}k=o.getAt(l);if(s.canActivateItem(k)){s.setActiveItem(k);break}l+=r;++q}},isWhitelisted:function(b){return !!b.needArrowKeys},left:function(e){var d=this.menu,f=d.focusedItem;if(f&&this.isWhitelisted(f)){return true}if(d.parentMenu){d.hide();d.parentMenu.focus()}},right:function(k){var j=this.menu,h=j.focusedItem,g=j.activeItem,e;if(h&&this.isWhitelisted(h)){return true}if(g){e=j.activeItem.menu;if(e){g.expandMenu(0);e.setActiveItem(e.child(":focusable"))}}},tab:function(c){var d=this;if(c.shiftKey){d.up(c)}else{d.down(c)}},up:function(d){var e=this,f=e.menu.focusedItem;if(f&&d.getKey()==d.UP&&e.isWhitelisted(f)){return true}e.focusNextItem(-1)}},1,0,0,0,0,0,[Ext.menu,"KeyNav"],0));(Ext.cmd.derive("Ext.menu.Separator",Ext.menu.Item,{focusable:false,canActivate:false,hideOnClick:false,plain:true,separatorCls:Ext.baseCSSPrefix+"menu-item-separator",text:" ",ariaRole:"separator",beforeRender:function(e,f){var d=this;Ext.menu.Item.prototype.beforeRender.call(this);d.addCls(d.separatorCls)}},0,["menuseparator"],["box","component","menuitem","menuseparator"],{box:true,component:true,menuitem:true,menuseparator:true},["widget.menuseparator"],0,[Ext.menu,"Separator"],0));(Ext.cmd.derive("Ext.menu.Menu",Ext.panel.Panel,{enableKeyNav:true,allowOtherMenus:false,ariaRole:"menu",floating:true,constrain:true,hidden:true,hideMode:"visibility",ignoreParentClicks:false,isMenu:true,showSeparator:true,minWidth:undefined,defaultMinWidth:120,defaultAlign:"tl-bl?",focusable:true,baseCls:Ext.baseCSSPrefix+"menu",_iconSeparatorCls:Ext.baseCSSPrefix+"menu-icon-separator",_itemCmpCls:Ext.baseCSSPrefix+"menu-item-cmp",layout:{type:"vbox",align:"stretchmax",overflowHandler:"Scroller"},initComponent:function(){var e=this,f=[Ext.baseCSSPrefix+"menu"],h=e.bodyCls?[e.bodyCls]:[],g=e.floating!==false;Ext.menu.Manager.register(e);if(e.plain){f.push(Ext.baseCSSPrefix+"menu-plain")}e.cls=f.join(" ");h.push(Ext.baseCSSPrefix+"menu-body",Ext.dom.Element.unselectableCls);e.bodyCls=h.join(" ");if(g){if(e.minWidth===undefined){e.minWidth=e.defaultMinWidth}}else{e.hidden=!!e.initialConfig.hidden;e.constrain=false}Ext.panel.Panel.prototype.initComponent.apply(this,arguments);Ext.override(e.getLayout(),{configureItem:e.configureItem})},initFloatConstrain:Ext.emptyFn,initHierarchyEvents:Ext.emptyFn,getInherited:function(){var b=Ext.panel.Panel.prototype.getInherited.call(this);b.hidden=this.hidden;return b},beforeRender:function(){Ext.panel.Panel.prototype.beforeRender.apply(this,arguments);if(!this.getSizeModel().width.shrinkWrap){this.layout.align="stretch"}},onBoxReady:function(){var d=this,e={click:d.onClick,mouseover:d.onMouseOver,scope:d},f=d._iconSeparatorCls;if(Ext.supports.Touch){e.pointerdown=d.onMouseOver;d.mon(Ext.GlobalEvents,"mousedown",d.onDocMouseDown,d)}Ext.panel.Panel.prototype.onBoxReady.apply(this,arguments);if(d.showSeparator){d.iconSepEl=d.body.insertFirst({role:"presentation",cls:f+" "+f+"-"+d.ui,html:" "})}d.mon(d.el,e);d.mouseMonitor=d.el.monitorMouseLeave(100,d.onMouseLeave,d);if(d.enableKeyNav){d.keyNav=new Ext.menu.KeyNav({target:d,keyMap:d.getKeyMap()})}},canActivateItem:function(b){return b&&!b.isDisabled()&&b.isVisible()&&(b.canActivate||!b.isMenuItem)},deactivateActiveItem:function(e){var h=this,g=h.activeItem,f=h.focusedItem;if(g){g.deactivate();if(!g.activated){delete h.activeItem}}if(f&&e){f.blur();delete h.focusedItem}},hide:function(){this.deactivateActiveItem(true);Ext.panel.Panel.prototype.hide.apply(this,arguments)},getItemFromEvent:function(g){var f=this,h=f.layout.getRenderTarget().dom,e=g.getTarget();while(e.parentNode!==h){e=e.parentNode;if(!e){return}}return Ext.getCmp(e.id)},lookupComponent:function(c){var d=this;if(typeof c=="string"){c=d.lookupItemFromString(c)}else{if(Ext.isObject(c)){c=d.lookupItemFromObject(c)}}c.minWidth=c.minWidth||d.minWidth;return c},lookupItemFromObject:function(c){var d=this;if(!c.isComponent){if(!c.xtype){c=Ext.create("Ext.menu."+(Ext.isBoolean(c.checked)?"Check":"")+"Item",c)}else{c=Ext.ComponentManager.create(c,c.xtype)}}if(c.isMenuItem){c.parentMenu=d}return c},lookupItemFromString:function(b){return(b=="separator"||b=="-")?new Ext.menu.Separator():new Ext.menu.Item({canActivate:false,hideOnClick:false,plain:true,text:b})},configureItem:function(m){var g=this.owner,k=Ext.baseCSSPrefix,l=g.ui,h,j;if(m.isMenuItem){m.setUI(l)}else{if(g.items.getCount()>1&&!m.rendered&&!m.dock){j=g._itemCmpCls;h=[j+" "+j+"-"+l];if(!g.plain&&(m.indent!==false||m.iconCls==="no-icon")){h.push(k+"menu-item-indent-"+l)}if(m.rendered){m.el.addCls(h)}else{m.cls=(m.cls||"")+" "+h.join(" ")}}}this.callParent(arguments)},onClick:function(g){var h=this,f=g.type,e;if(h.disabled){g.stopEvent();return}e=(f!=="keydown")?h.getItemFromEvent(g):h.activeItem;if(e&&e.isMenuItem){if(!e.menu||!h.ignoreParentClicks){e.onClick(g)}else{g.stopEvent()}}if(!e||e.disabled){e=undefined}h.fireEvent("click",h,e,g)},onDestroy:function(){var b=this;Ext.menu.Manager.unregister(b);b.parentMenu=b.ownerCmp=null;if(b.rendered){b.el.un(b.mouseMonitor);Ext.destroy(b.keyNav);b.keyNav=null}Ext.panel.Panel.prototype.onDestroy.apply(this,arguments)},onDocMouseDown:function(b){if(!this.owns(b.target)){this.deactivateActiveItem()}},onMouseLeave:function(c){var d=this;d.deactivateActiveItem();if(d.disabled){return}d.fireEvent("mouseleave",d,c)},onMouseOver:function(l){var m=this,k=l.getRelatedTarget(),e=!m.el.contains(k),n=m.getItemFromEvent(l),o=m.parentMenu,j=m.ownerCmp;if(e&&o){o.setActiveItem(j);j.cancelDeferHide();o.mouseMonitor.mouseenter()}if(m.disabled){return}if(n&&!n.activated){m.setActiveItem(n);if(n.activated&&n.expandMenu){n.expandMenu()}}if(e){m.fireEvent("mouseenter",m,l)}m.fireEvent("mouseover",m,n,l)},setActiveItem:function(c){var d=this;if(c&&(c!=d.activeItem)){d.deactivateActiveItem();if(d.canActivateItem(c)){if(c.activate){c.activate(true);if(c.activated){d.activeItem=c;d.focusedItem=c}}else{c.focus();d.focusedItem=c}}}},beforeShow:function(){var c=this,d;if(c.floating){c.savedMaxHeight=c.maxHeight;d=c.container.getViewSize().height;c.maxHeight=Math.min(c.maxHeight||d,d)}Ext.panel.Panel.prototype.beforeShow.apply(this,arguments)},afterShow:function(){var b=this;Ext.panel.Panel.prototype.afterShow.apply(this,arguments);if(b.floating){b.maxHeight=b.savedMaxHeight}},privates:{getFocusEl:function(){return this.el}}},0,["menu"],["box","component","container","menu","panel"],{box:true,component:true,container:true,menu:true,panel:true},["widget.menu"],0,[Ext.menu,"Menu"],0));Ext.define("ExtThemeNeptune.menu.Separator",{override:"Ext.menu.Separator",border:true});Ext.define("ExtThemeNeptune.menu.Menu",{override:"Ext.menu.Menu",showSeparator:false});(Ext.cmd.derive("Ext.grid.locking.HeaderContainer",Ext.grid.header.Container,{headerCtRelayEvents:["blur","focus","move","resize","destroy","beforedestroy","boxready","afterrender","render","beforerender","removed","hide","beforehide","show","beforeshow","enable","disable","added","deactivate","beforedeactivate","activate","beforeactivate","remove","add","beforeremove","beforeadd","afterlayout","menucreate","sortchange","columnschanged","columnshow","columnhide","columnmove","headertriggerclick","headercontextmenu","headerclick","columnresize","statesave","beforestatesave","staterestore","beforestaterestore"],constructor:function(e){var f=this,g=e.lockedGrid,h=e.normalGrid;f.lockable=e;Ext.grid.header.Container.prototype.constructor.call(this);g.visibleColumnManager.rootColumns=h.visibleColumnManager.rootColumns=e.visibleColumnManager=f.visibleColumnManager=new Ext.grid.ColumnManager(true,g.headerCt,h.headerCt);g.columnManager.rootColumns=h.columnManager.rootColumns=e.columnManager=f.columnManager=new Ext.grid.ColumnManager(false,g.headerCt,h.headerCt);f.relayEvents(g.headerCt,f.headerCtRelayEvents);f.relayEvents(h.headerCt,f.headerCtRelayEvents)},getRefItems:function(){return this.lockable.lockedGrid.headerCt.getRefItems().concat(this.lockable.normalGrid.headerCt.getRefItems())},getGridColumns:function(){return this.lockable.lockedGrid.headerCt.getGridColumns().concat(this.lockable.normalGrid.headerCt.getGridColumns())},getColumnsState:function(){var d=this,e=d.lockable.lockedGrid.headerCt.getColumnsState(),f=d.lockable.normalGrid.headerCt.getColumnsState();return e.concat(f)},applyColumnsState:function(y){var r=this,A=r.lockable.lockedGrid,z=A.headerCt,t=r.lockable.normalGrid.headerCt,q=Ext.Array.toValueMap(z.items.items,"headerId"),x=Ext.Array.toValueMap(t.items.items,"headerId"),u=[],s=[],v=1,D=y.length,w,E,B,C;for(w=0;w=h){g=Ext.apply({},g);g.column-=h;return this.normalView.getCellInclusive(g,e)}else{return this.lockedView.getCellInclusive(g,e)}},getCellByPosition:function(h,k){var j=this,g=h.view,f=h.column;if(g===j){g=f.getView()}return g.getCellByPosition(h,k)},getRecord:function(c){var d=this.lockedView.getRecord(c);if(!d){d=this.normalView.getRecord(c)}return d},scrollBy:function(){var b=this.normalView;b.scrollBy.apply(b,arguments)},addElListener:function(){this.relayFn("addElListener",arguments)},refreshNode:function(){this.relayFn("refreshNode",arguments)},addRowCls:function(){this.relayFn("addRowCls",arguments)},removeRowCls:function(){this.relayFn("removeRowCls",arguments)},destroy:function(){var b=this;b.bindStore(null,false,"dataSource");b.isDestroyed=true;b.clearListeners();Ext.destroy(b.loadMask,b.navigationModel,b.selModel)}},1,0,0,0,0,[[Ext.util.Observable.prototype.mixinId||Ext.util.Observable.$className,Ext.util.Observable],[Ext.util.StoreHolder.prototype.mixinId||Ext.util.StoreHolder.$className,Ext.util.StoreHolder],[Ext.util.Focusable.prototype.mixinId||Ext.util.Focusable.$className,Ext.util.Focusable]],[Ext.grid.locking,"View",Ext.grid,"LockingView"],function(){this.borrow(Ext.Component,["up"]);this.borrow(Ext.view.AbstractView,["doFirstRefresh","applyFirstRefresh"])}));(Ext.cmd.derive("Ext.grid.locking.Lockable",Ext.Base,{alternateClassName:"Ext.grid.Lockable",supportsOverflowX:"overflow-x" in document.documentElement.style,syncRowHeight:true,headerCounter:0,scrollDelta:40,lockedGridCls:Ext.baseCSSPrefix+"grid-inner-locked",normalGridCls:Ext.baseCSSPrefix+"grid-inner-normal",unlockText:"Unlock",lockText:"Lock",bothCfgCopy:["invalidateScrollerOnRefresh","hideHeaders","enableColumnHide","enableColumnMove","enableColumnResize","sortableColumns","multiColumnSort","columnLines","rowLines","variableRowHeight","numFromEdge","trailingBufferZone","leadingBufferZone","scrollToLoadBuffer"],normalCfgCopy:["verticalScroller","verticalScrollDock","verticalScrollerType","scroll"],lockedCfgCopy:[],determineXTypeToCreate:function(m){var o=this,k,n,h,l,j;if(o.subGridXType){k=o.subGridXType}else{if(!m){return"gridpanel"}n=this.getXTypes().split("/");h=n.length;l=n[h-1];j=n[h-2];if(j!=="tablepanel"){k=j}else{k=l}}return k},injectLockable:function(){this.focusable=false;this.lockable=true;this.hasView=true;var v=this,I=Ext.getScrollbarSize().height,K=v.store=Ext.StoreManager.lookup(v.store),F=v.getSelectionModel(),D,C,x,G,B,L,J,y,H,u,E,w=v.viewConfig,M=w&&w.loadMask,A=(M!==undefined)?M:v.loadMask,z=v.findPlugin("bufferedrenderer");D=v.constructLockableFeatures();v.features=null;C=v.constructLockablePlugins();v.plugins=C.topPlugins;x=Ext.apply({id:v.id+"-locked",isLocked:true,ownerGrid:v,ownerLockable:v,xtype:v.determineXTypeToCreate(true),store:K,bufferedRenderer:v.bufferedRenderer,scrollerOwner:false,animate:false,scroll:I?false:"vertical",selModel:F,border:false,cls:v.lockedGridCls,isLayoutRoot:function(){return this.floatedFromCollapse||v.normalGrid.floatedFromCollapse},features:D.lockedFeatures,plugins:C.lockedPlugins},v.lockedGridConfig);G=Ext.apply({id:v.id+"-normal",isLocked:false,ownerGrid:v,ownerLockable:v,xtype:v.determineXTypeToCreate(),store:K,bufferedRenderer:v.bufferedRenderer,scrollerOwner:false,selModel:F,border:false,cls:v.normalGridCls,isLayoutRoot:function(){return this.floatedFromCollapse||v.lockedGrid.floatedFromCollapse},features:D.normalFeatures,plugins:C.normalPlugins},v.normalGridConfig);v.addCls(Ext.baseCSSPrefix+"grid-locked");Ext.copyTo(G,v,v.bothCfgCopy,true);Ext.copyTo(x,v,v.bothCfgCopy,true);Ext.copyTo(G,v,v.normalCfgCopy,true);Ext.copyTo(x,v,v.lockedCfgCopy,true);for(B=0;B>#normalHeaderCt",items:t},v={itemId:"normalHeaderCt",stretchMaxPartner:"^^>>#lockedHeaderCt",items:A},p={lockedWidth:z.width||0,locked:B,normal:v},q=!(z.width||z.flex),C;if(!r.hasOwnProperty("shrinkWrapLocked")){r.shrinkWrapLocked=q}if(Ext.isObject(x)){Ext.applyIf(B,x);Ext.applyIf(v,x);C=Ext.apply({},x);delete C.items;Ext.apply(s,C);x=x.items}for(w=0,u=x.length;w0&&e)){l.stopEvent();m+=k;q.setScrollY(m);p.normalGrid.getView().setScrollY(m);p.onNormalViewScroll()}}},onLockedViewScroll:function(){var l=this,m=l.lockedGrid.getView(),n=l.normalGrid.getView(),o=m.getScrollY(),k=n.getScrollY(),j,h;if(k!==o){n.setScrollY(o);if(n.bufferedRenderer){h=m.body.dom;j=n.body.dom;j.style.position="absolute";j.style.top=h.style.top}}},onNormalViewScroll:function(){var l=this,m=l.lockedGrid.getView(),g=l.normalGrid.getView(),h=m.getScrollY(),j=g.getScrollY(),k;if(j!==h){m.setScrollY(j);if(g.bufferedRenderer){k=m.body;if(k.dom){k.dom.style.position="absolute";k.translate(null,g.bufferedRenderer.bodyTop)}}}},syncRowHeights:function(){if(!this.isDestroyed){var n=this,k,o=n.lockedGrid.getView(),j=n.normalGrid.getView(),m=o.all.slice(),p=j.all.slice(),q=m.length,l;if(p.length===q){for(k=0;k0){m.onViewResize(h,null,j);if(o&&(l.getCount()!==o.length)){o.length=0;o.push.apply(o,m.store.getRange(l.startIndex,l.endIndex))}}}},onViewResize:function(o,m,j,h,k){var l=this,n;l.tableTopBorderWidth=o.body.getBorderWidth("t");if(!k||j!==k){n=Math.ceil(j/l.rowHeight)+l.trailingBufferZone+l.leadingBufferZone;l.viewSize=l.setViewSize(n);l.viewClientHeight=o.el.dom.clientHeight}},onWrappedColumnWidthChange:function(e,g){var h=this,f=h.view;if(h.store.getCount()&&h.bodyTop){delete h.rowHeight;h.stretchView(f,h.getScrollHeight(true));h.setViewSize(Math.ceil(f.getHeight()/h.rowHeight)+h.trailingBufferZone+h.leadingBufferZone);if(h.viewSize>=h.store.getCount()){h.setBodyTop(0)}else{if(g>e&&h.bodyTop+f.body.dom.offsetHeight-1>h.scrollHeight){h.setBodyTop(Math.max(0,h.scrollHeight-f.body.dom.offsetHeight))}else{if(h.bodyTop>h.scrollTop||h.bodyTop+f.body.dom.offsetHeighth){k.position=k.scrollTop=h-g.body.dom.offsetHeight;k.view.setScrollY(k.scrollTop)}if(k.bodyTop>h){g.body.translate(null,k.bodyTop=k.position)}if(g.touchScroll){if(g.scrollManager){k.refreshScroller(g,h)}else{if(!k.pendingScrollerRefresh){g.on({boxready:function(){k.refreshScroller(g,h);k.pendingScrollerRefresh=false},single:true});k.pendingScrollerRefresh=true}}}if(!Ext.supports.touchScroll||Ext.supports.touchScroll===1){if(!k.stretcher){m=g.getTargetEl();if(g.refreshCounter){g.fixedNodes++}j={style:{width:"1px",height:"1px",marginTop:(h-1)+"px",position:"absolute"}};j.style[k.isRTL?"right":"left"]=0;k.stretcher=m.createChild(j,m.dom.firstChild)}if(k.hasOwnProperty("viewSize")&&l<=k.viewSize){k.stretcher.dom.style.display="none"}else{k.stretcher.dom.style.marginTop=(h-1)+"px";k.stretcher.dom.style.display=""}}},refreshScroller:function(c,d){c.scrollManager.scroller.setSize({x:c.headerCt.getTableWidth(),y:d});c.scrollManager.refresh()},setViewSize:function(u){var v=this,r=v.store,t=v.view,j=t.all,C=j.getCount(),E,B,x=v.view.lockingPartner&&v.view.lockingPartner.bufferedRenderer,s=C-u,z,A,D,y,w;if(s){v.scrollTop=v.view.getScrollY();v.viewSize=u;if(r.isBufferedStore){r.setViewSize(u)}if(C){w=r.getCount();E=j.startIndex;B=Math.min(E+u-1,w-1);if(!(E===j.startIndex&&B===j.endIndex)){if(x){x.disable()}if(s<0){if(w>C){r.getRange(j.endIndex+1,B,{callback:function(a,b){y=t.doAdd(a,b);t.fireEvent("itemadd",a,b,y)}})}}else{E=j.endIndex-(s-1);B=j.endIndex;j.removeRange(E,B,true);if(t.hasListeners.itemremove){D=r.getRange(E,B);for(z=B,A=D.length-1;A>=0;--z,--A){t.fireEvent("itemremove",D[A],z,v)}}}if(x){x.enable()}}}}return u},getViewRange:function(){var e=this,h=e.view.all,f=e.store,g=0;if(h.getCount()){g=h.startIndex}else{if(f.isBufferedStore){if(!f.currentPage){f.currentPage=1}g=h.startIndex=(f.currentPage-1)*(f.pageSize||1);f.currentPage=1}}if(f.data.getCount()){return f.getRange(g,g+e.viewSize-1)}else{return[]}},onReplace:function(n,m,t,r){var p=this,o=p.view,l=o.all,u=l.getCount(),q=n.getCount(),s=l.first(true);if(!u||m<=p.getLastVisibleRowIndex()+p.leadingBufferZone||(ut.length)||qp.viewSize){p.setBodyTop(p.bodyTop-s.offsetTop)}}if(q<=p.viewSize){if(p.stretcher){p.setBodyTop(0);p.stretcher.dom.style.display="none"}}else{if(p.bodyTop+o.body.dom.offsetHeight-1>p.scrollHeight){p.setBodyTop(p.scrollHeight-(o.body.dom.offsetHeight-1))}}}}else{p.refreshing=true;p.onViewRefresh(o);p.refreshing=false}},scrollTo:function(y,F,u,s){var B=this,z=B.view,t=z.el.dom,x=B.store,A=x.getCount(),C,H,D,I,v,G,w,E;if((G=z.dataSource.groupingFeature)&&(G.collapsible!==false)){y=Math.min(Math.max(y,0),z.store.getCount()-1);E=z.store.getAt(y);w=G.getGroup(E);if(w.isCollapsed){G.expand(w.getGroupKey());A=x.getCount()}y=G.indexOf(E)}else{y=Math.min(Math.max(y,0),A-1)}C=Math.max(Math.min(y-(Math.floor((B.leadingBufferZone+B.trailingBufferZone)/2)),A-B.viewSize+1),0);v=Math.max(C*B.rowHeight-B.tableTopBorderWidth,0);H=Math.min(C+B.viewSize-1,A-1);x.getRange(C,H,{callback:function(b,a,c){B.renderRange(a,c,true);D=x.data.getRange(y,y+1)[0];I=z.getNode(D);z.body.translate(null,B.bodyTop=v);B.position=B.scrollTop=v=Math.min(Math.max(0,v-z.body.getOffsetsTo(I)[1]),t.scrollHeight-t.clientHeight);z.setScrollY(v);if(Ext.isIE){z.setScrollY(v)}if(F){z.selModel.select(D)}if(u){u.call(s||B,y,D)}}})},onViewScroll:function(){var n=this,q=n.store,k=(q.getCount()),o,l,m=n.scrollTop=n.view.getScrollY(),j=false,p=n.view.lockingPartner&&n.view.lockingPartner.bufferedRenderer;if(!(n.disabled||k0?1:-1;if(Math.abs(o)>=20||(l!==n.lastScrollDirection)){n.lastScrollDirection=l;j=n.handleViewScroll(n.lastScrollDirection)}}if(!j){if(p&&p.scrollTop!==m){p.view.setScrollY(p.position=m)}}},handleViewScroll:function(m){var o=this,n=o.view.all,k=o.store,l=o.viewSize,q=(k.getCount())-1,p,j;if(m===-1){if(n.startIndex){if(o.topOfViewCloseToEdge()){p=Math.max(0,o.getLastVisibleRowIndex()+o.trailingBufferZone-l)}}}else{if(n.endIndexb.scrollTop-(b.numFromEdge*b.rowHeight)}else{return(b.getFirstVisibleRowIndex()-b.view.all.startIndex)n.viewSize){k=m-n.viewSize+1}j.getRange(k,m,{callback:n.doRefreshView,scope:n,containedFocus:o})},doRefreshView:function(s,p,t,n){var r=this,q=r.view,w=q.getNavigationModel(),o=q.all,x=o.getCount(),u,y=p!==o.startIndex,v;if(q.refreshCounter){q.refreshing=r.refreshing=true;q.clearViewEl(true);if(s.length){u=q.doAdd(s,p);q.refreshSize(o.getCount()!==x);if(y){if(p>o.startIndex){v+=o.item(p,true).offsetTop}else{if(r.variableRowHeight){v=r.scrollTop-r.rowHeight*(r.scrollTopD.endIndex){v=D.startIndex-H;C.clearViewEl(true);w=C.doAdd(B,H);C.fireEvent("itemadd",B,H,w);for(y=0;yD.endIndex||ID.endIndex){G=Math.max(H-D.startIndex,0);if(z){u=D.item(D.startIndex+G,true).offsetTop}D.scroll(Ext.Array.slice(B,D.endIndex+1-H),1,G,H,I);if(z){F=t.bodyTop+u}else{F=x}}else{G=Math.max(D.endIndex-I,0);K=D.startIndex;D.scroll(Ext.Array.slice(B,0,D.startIndex-H),-1,G,H,I);if(z){F=t.bodyTop-D.item(K,true).offsetTop;if(!D.startIndex){if(F){C.setScrollY(t.position=(t.scrollTop-=F));F=0}}else{if(F<0){u=D.startIndex*t.rowHeight;C.setScrollY(t.position=(t.scrollTop+=u));F=t.bodyTop+u}}}else{F=x}}}t.position=t.scrollTop;F=Math.max(Math.floor(F),0);if(C.positionBody){t.setBodyTop(F)}if(E&&!E.disabled&&!A){E.onRangeFetched(null,H,I,J,true);if(E.bodyTop!==F){E.setBodyTop(F)}if(E.scrollTop!==t.scrollTop){E.view.setScrollY(E.scrollTop=E.position=t.scrollTop)}}},setBodyTop:function(j){var h=this,f=h.view,k=h.store,g=f.body;g.translate((h.isRTL&&Ext.supports.xOriginBug&&f.scrollFlags.y)?Ext.getScrollbarSize().width:null,h.bodyTop=j);if(h.variableRowHeight){if(f.all.endIndex===(k.getCount())-1){h.stretchView(f,h.bodyTop+g.dom.offsetHeight-1)}else{if(h.bodyTop+g.dom.offsetHeight-1>h.scrollHeight){h.stretchView(f,h.scrollHeight+=((k.getCount())-f.all.endIndex)*h.rowHeight)}}}},getFirstVisibleRowIndex:function(p,w,x,t){var s=this,r=s.view,n=r.all,y=n.elements,v=s.viewClientHeight,u,o,q=s.bodyTop;if(n.getCount()&&s.variableRowHeight){if(!arguments.length){p=n.startIndex;w=n.endIndex;x=s.scrollTop;t=x+v;if(q>t||q+r.body.dom.offsetHeightv||r+s.body.dom.offsetHeightv){return t.getLastVisibleRowIndex(q,w-1,z,v)}u=p+A[w].offsetHeight;if(u>=v){return w}else{if(w!==y){return t.getLastVisibleRowIndex(w+1,y,z,v)}}}return t.getFirstVisibleRowIndex()+Math.ceil(x/t.rowHeight)},getScrollHeight:function(n){var m=this,k=m.view,l=k.all,q=m.store,p=q.getCount(),j,o;if(!p){return 0}if(!m.hasOwnProperty("rowHeight")){if(j=l.getCount()){m.rowHeight=m.variableRowHeight?Math.floor(k.body.dom.clientHeight/j):l.first(true).offsetHeight}}o=Math.floor(p*m.rowHeight);if(!n){if(o&&(l.endIndex===p-1)){o=Math.max(o,m.bodyTop+k.body.dom.offsetHeight-1)}}return m.scrollHeight=o},attemptLoad:function(f,e){var d=this;if(d.scrollToLoadBuffer){if(!d.loadTask){d.loadTask=new Ext.util.DelayedTask(d.doAttemptLoad,d,[])}d.loadTask.delay(d.scrollToLoadBuffer,d.doAttemptLoad,d,[f,e])}else{d.store.getRange(f,e,{callback:d.onRangeFetched,scope:d,fireEvent:false})}},cancelLoad:function(){if(this.loadTask){this.loadTask.cancel()}},doAttemptLoad:function(c,d){this.store.getRange(c,d,{callback:this.onRangeFetched,scope:this,fireEvent:false})},destroy:function(){var c=this,d=c.view;if(d&&d.el){d.un("scroll",c.onViewScroll,c)}Ext.destroy(c.viewListeners,c.storeListeners,c.gridListeners)}},0,0,0,0,["plugin.bufferedrenderer"],0,[Ext.grid.plugin,"BufferedRenderer"],function(b){if(Ext.supports.Touch){b.prototype.leadingBufferZone=b.prototype.trailingBufferZone=2;b.prototype.numFromEdge=1}}));(Ext.cmd.derive("Ext.layout.ClassList",Ext.Base,(function(){var c=Ext.String.splitWords,d=Ext.Array.toMap;return{dirty:false,constructor:function(a){this.owner=a;this.map=d(this.classes=c(a.el.className))},add:function(b){var a=this;if(!a.map[b]){a.map[b]=true;a.classes.push(b);if(!a.dirty){a.dirty=true;a.owner.markDirty()}}},addMany:function(a){Ext.each(c(a),this.add,this)},contains:function(a){return this.map[a]},flush:function(){this.owner.el.className=this.classes.join(" ");this.dirty=false},remove:function(b){var a=this;if(a.map[b]){delete a.map[b];a.classes=Ext.Array.filter(a.classes,function(f){return f!=b});if(!a.dirty){a.dirty=true;a.owner.markDirty()}}},removeMany:function(b){var a=this,f=d(c(b));a.classes=Ext.Array.filter(a.classes,function(e){if(!f[e]){return true}delete a.map[e];if(!a.dirty){a.dirty=true;a.owner.markDirty()}return false})}}}()),1,0,0,0,0,0,[Ext.layout,"ClassList"],0));(Ext.cmd.derive("Ext.util.Queue",Ext.Base,{constructor:function(){this.clear()},add:function(f){var d=this,e=d.getKey(f);if(!d.map[e]){++d.length;d.items.push(f);d.map[e]=f}return f},clear:function(){var c=this,d=c.items;c.items=[];c.map={};c.length=0;return d},contains:function(c){var d=this.getKey(c);return this.map.hasOwnProperty(d)},getCount:function(){return this.length},getKey:function(b){return b.id},remove:function(h){var j=this,k=j.getKey(h),g=j.items,f;if(j.map[k]){f=Ext.Array.indexOf(g,h);Ext.Array.erase(g,f,1);delete j.map[k];--j.length}return h}},1,0,0,0,0,0,[Ext.util,"Queue"],0));(Ext.cmd.derive("Ext.layout.ContextItem",Ext.Base,{heightModel:null,widthModel:null,sizeModel:null,optOut:false,ownerSizePolicy:null,boxChildren:null,boxParent:null,children:[],dirty:null,dirtyCount:0,hasRawContent:true,isContextItem:true,isTopLevel:false,consumersContentHeight:0,consumersContentWidth:0,consumersContainerHeight:0,consumersContainerWidth:0,consumersHeight:0,consumersWidth:0,ownerCtContext:null,remainingChildDimensions:0,props:null,state:null,wrapsComponent:false,constructor:function(w){var v=this,y=Ext.layout.SizeModel.sizeModels,D=y.configured,E=y.shrinkWrap,L,x,A,B,H,J,u,I,z,C,K,F,G,M;Ext.apply(v,w);L=v.el;v.id=L.id;v.flushedProps={};v.props=H={};v.styles={};u=v.target;if(!u.isComponent){x=L.lastBox}else{v.wrapsComponent=true;v.framing=u.frameSize||null;v.isComponentChild=u.ownerLayout&&u.ownerLayout.isComponentLayout;x=u.lastBox;A=u.ownerCt;if(A&&(B=A.el&&v.context.items[A.el.id])){v.ownerCtContext=B}v.sizeModel=J=u.getSizeModel(B&&B.widthModel.pairsByHeightOrdinal[B.heightModel.ordinal]);v.widthModel=F=J.width;v.heightModel=G=J.height;if(x&&x.invalid===false){C=(u.width===(I=x.width));K=(u.height===(z=x.height));if(F===E&&G===E){M=true}else{if(F===D&&C){M=G===E||(G===D&&K)}}if(M){v.optOut=true;H.width=I;H.height=z}}}v.lastBox=x},init:function(H,M){var y=this,O=y.props,L=y.dirty,F=y.ownerCtContext,C=y.target.ownerLayout,I=!y.state,x=H||I,K,D,E,B,N,w,n=y.heightModel,J=y.widthModel,G,A,z=0;y.dirty=y.invalid=false;y.props={};y.remainingChildDimensions=0;if(y.boxChildren){y.boxChildren.length=0}if(!I){y.clearAllBlocks("blocks");y.clearAllBlocks("domBlocks")}if(!y.wrapsComponent){return x}w=y.target;y.state={};if(I){if(w.beforeLayout&&w.beforeLayout!==Ext.emptyFn){w.beforeLayout()}if(!F&&(B=w.ownerCt)){F=y.context.items[B.el.id]}if(F){y.ownerCtContext=F;y.isBoxParent=C&&C.isItemBoxParent(y)}else{y.isTopLevel=true}y.frameBodyContext=y.getEl("frameBody")}else{F=y.ownerCtContext;y.isTopLevel=!F;K=y.children;for(D=0,E=K.length;D0);if(H){y.widthModel=y.heightModel=null;N=w.getSizeModel(F&&F.widthModel.pairsByHeightOrdinal[F.heightModel.ordinal]);if(I){y.sizeModel=N}y.widthModel=N.width;y.heightModel=N.height;if(F&&!y.isComponentChild){if(C.needsItemSize||!w.liquidLayout){F.remainingChildDimensions+=2}else{if(y.widthModel.calculated){++F.remainingChildDimensions}if(y.heightModel.calculated){++F.remainingChildDimensions}}}}else{if(O){y.recoverProp("x",O,L);y.recoverProp("y",O,L);if(y.widthModel.calculated){y.recoverProp("width",O,L)}else{if("width" in O){++z}}if(y.heightModel.calculated){y.recoverProp("height",O,L)}else{if("height" in O){++z}}if(F&&!y.isComponentChild){F.remainingChildDimensions+=z}}}if(O&&C&&C.manageMargins){y.recoverProp("margin-top",O,L);y.recoverProp("margin-right",O,L);y.recoverProp("margin-bottom",O,L);y.recoverProp("margin-left",O,L)}if(M){G=M.heightModel;A=M.widthModel;if(A&&G&&J&&n){if(J.shrinkWrap&&n.shrinkWrap){if(A.constrainedMax&&G.constrainedMin){G=null}}}if(A){y.widthModel=A}if(G){y.heightModel=G}if(M.state){Ext.apply(y.state,M.state)}}return x},initContinue:function(m){var k=this,n=k.ownerCtContext,j=k.target,o=k.widthModel,l=j.getInherited(),h;if(o.fixed){l.inShrinkWrapTable=false}else{delete l.inShrinkWrapTable}if(m){if(n&&o.shrinkWrap){h=n.isBoxParent?n:n.boxParent;if(h){h.addBoxChild(k)}}else{if(o.natural){k.boxParent=n}}}return m},initDone:function(g){var e=this,f=e.props,h=e.state;if(e.remainingChildDimensions===0){f.containerChildrenSizeDone=true}if(g){f.containerLayoutDone=true}if(e.boxChildren&&e.boxChildren.length&&e.widthModel.shrinkWrap){e.el.setWidth(10000);h.blocks=(h.blocks||0)+1}},initAnimation:function(){var d=this,f=d.target,e=d.ownerCtContext;if(e&&e.isTopLevel){d.animatePolicy=f.ownerLayout.getAnimatePolicy(d)}else{if(!e&&f.isCollapsingOrExpanding&&f.animCollapse){d.animatePolicy=f.componentLayout.getAnimatePolicy(d)}}if(d.animatePolicy){d.context.queueAnimation(d)}},addCls:function(b){this.getClassList().addMany(b)},removeCls:function(b){this.getClassList().removeMany(b)},addBlock:function(g,l,k){var m=this,j=m[g]||(m[g]={}),h=j[k]||(j[k]={});if(!h[l.id]){h[l.id]=l;++l.blockCount;++m.context.blockCount}},addBoxChild:function(g){var h=this,e,f=g.widthModel;g.boxParent=this;g.measuresBox=f.shrinkWrap?g.hasRawContent:f.natural;if(g.measuresBox){e=h.boxChildren;if(e){e.push(g)}else{h.boxChildren=[g]}}},addPositionStyles:function(j,f){var g=f.x,h=f.y,k=0;if(g!==undefined){j.left=g+"px";++k}if(h!==undefined){j.top=h+"px";++k}return k},addTrigger:function(n,m){var o=this,k=m?"domTriggers":"triggers",l=o[k]||(o[k]={}),j=o.context,p=j.currentLayout,q=l[n]||(l[n]={});if(!q[p.id]){q[p.id]=p;++p.triggerCount;q=j.triggers[m?"dom":"data"];(q[p.id]||(q[p.id]=[])).push({item:this,prop:n});if(o.props[n]!==undefined){if(!m||!(o.dirty&&(n in o.dirty))){++p.firedTriggers}}}},boxChildMeasured:function(){var d=this,f=d.state,e=(f.boxesMeasured=(f.boxesMeasured||0)+1);if(e==d.boxChildren.length){f.clearBoxWidth=1;++d.context.progressCount;d.markDirty()}},borderNames:["border-top-width","border-right-width","border-bottom-width","border-left-width"],marginNames:["margin-top","margin-right","margin-bottom","margin-left"],paddingNames:["padding-top","padding-right","padding-bottom","padding-left"],trblNames:["top","right","bottom","left"],cacheMissHandlers:{borderInfo:function(d){var c=d.getStyles(d.borderNames,d.trblNames);c.width=c.left+c.right;c.height=c.top+c.bottom;return c},marginInfo:function(d){var c=d.getStyles(d.marginNames,d.trblNames);c.width=c.left+c.right;c.height=c.top+c.bottom;return c},paddingInfo:function(d){var e=d.frameBodyContext||d,f=e.getStyles(d.paddingNames,d.trblNames);f.width=f.left+f.right;f.height=f.top+f.bottom;return f}},checkCache:function(b){return this.cacheMissHandlers[b](this)},clearAllBlocks:function(e){var f=this[e],d;if(f){for(d in f){this.clearBlocks(e,d)}}},clearBlocks:function(o,l){var k=this[o],h=k&&k[l],n,m,j;if(h){delete k[l];n=this.context;for(j in h){m=h[j];--n.blockCount;if(!--m.blockCount&&!m.pending&&!m.done){n.queueLayout(m)}}}},block:function(d,c){this.addBlock("blocks",d,c)},domBlock:function(d,c){this.addBlock("domBlocks",d,c)},fireTriggers:function(h,l){var k=this[h],n=k&&k[l],o=this.context,m,j;if(n){for(j in n){m=n[j];++m.firedTriggers;if(!m.done&&!m.blockCount&&!m.pending){o.queueLayout(m)}}}},flush:function(){var e=this,f=e.dirty,h=e.state,g=e.el;e.dirtyCount=0;if(e.classList&&e.classList.dirty){e.classList.flush()}if("attributes" in e){g.set(e.attributes);delete e.attributes}if("innerHTML" in e){g.innerHTML=e.innerHTML;delete e.innerHTML}if(h&&h.clearBoxWidth){h.clearBoxWidth=0;e.el.setStyle("width",null);if(!--h.blocks){e.context.queueItemLayouts(e)}}if(f){delete e.dirty;e.writeProps(f,true)}},flushAnimations:function(){var j=this,y=j.previousSize,r,p,w,u,v,x,t,q,s,A,z;if(y){r=j.target;p=r.getAnimationProps();w=p.duration;u=Ext.Object.getKeys(j.animatePolicy);v=Ext.apply({},{from:{},to:{},duration:w||Ext.fx.Anim.prototype.duration},p);for(x=0,t=0,q=u.length;t0},runLayout:function(d){var e=this,f=e.getCmp(d.owner);d.pending=false;if(f.state.blocks){return}d.done=true;++d.calcCount;++e.calcCount;d.calculate(f);if(d.done){e.layoutDone(d);if(d.completeLayout){e.queueCompletion(d)}if(d.finalizeLayout){e.queueFinalize(d)}}else{if(!d.pending&&!d.invalid&&!(d.blockCount+d.triggerCount-d.firedTriggers)){e.queueLayout(d)}}},setItemSize:function(k,l,h){var n=k,j=1,o,m;if(k.isComposite){n=k.elements;j=n.length;k=n[0]}else{if(!k.dom&&!k.el){j=n.length;k=n[0]}}for(m=0;m> flushInvalidates")}var b=this.callParent(arguments);if(this.logOn.flushInvalidate){Ext.log("<< flushInvalidates")}return b},getCmp:function(c){var d=this.callParent(arguments);if(!d.wrapsComponent){Ext.Error.raise({msg:c.id+" is not a component"})}return d},getEl:function(d,f){var e=this.callParent(arguments);if(e&&e.wrapsComponent){Ext.Error.raise({msg:d.id+"/"+f.id+" is a component (expected element)"})}return e},getLayoutName:function(b){return b.owner.id+"<"+b.type+">"},layoutDone:function(f){var d=this,e=d.getLayoutName(f);if(d.logOn.layoutDone){Ext.log("layoutDone: ",e," ( ",d.remainingLayouts," running)")}if(!f.running){Ext.Error.raise({msg:e+" is already done"})}if(!d.remainingLayouts){Ext.Error.raise({msg:e+" finished but no layouts are running"})}d.callParent(arguments)},layoutTreeHasFailures:function(j,g){var k=this;function h(b){var d=!b.done,c,a;if(b.done){for(c in k.layouts){if(k.layouts.hasOwnProperty(c)){a=k.layouts[c];if(a.owner.ownerLayout===b){if(h(a)){d=true}}}}}return d}if(h(j)){return true}function f(b){var c,a;g[b.id]=1;for(c in k.layouts){if(k.layouts.hasOwnProperty(c)){a=k.layouts[c];if(a.owner.ownerLayout===b){f(a)}}}}f(j);return false},queueLayout:function(b){if(b.done||b.blockCount||b.pending){Ext.Error.raise({msg:this.getLayoutName(b)+" should not be queued for layout"})}if(this.logOn.queueLayout){Ext.log("Queue ",this.getLayoutName(b))}return this.callParent(arguments)},reportLayoutResult:function(x,q){var v=this,E=x.owner,B=v.getCmp(E),z=[],y=[],s,t,A,D,u,r,w,C;q[x.id]=1;for(s in x.blockedBy){if(x.blockedBy.hasOwnProperty(s)){z.push(x.blockedBy[s])}}z.sort();for(s in v.triggersByLayoutId[x.id]){if(v.triggersByLayoutId[x.id].hasOwnProperty(s)){t=v.triggersByLayoutId[x.id][s];y.push({name:s,info:t})}}y.sort(function(a,b){return a.name ",F[B].id)}}}}if(z){Ext.log("----------------- SUCCESS -----------------")}else{Ext.log({level:"error"},"----------------- FAILURE -----------------")}for(s in v.layouts){if(v.layouts.hasOwnProperty(s)){A=v.layouts[s];if(A.running){Ext.log.error("Layout left running: ",v.getLayoutName(A))}if(A.ownerContext){Ext.log.error("Layout left connected: ",v.getLayoutName(A))}}}if(!z||v.reportOnSuccess){n={};w=0;for(s in v.layouts){if(v.layouts.hasOwnProperty(s)){A=v.layouts[s];if(v.items[A.owner.el.id].isTopLevel){if(v.reportOnSuccess||v.layoutTreeHasFailures(A,n)){v.reportLayoutResult(A,n)}}}}for(s in v.layouts){if(v.layouts.hasOwnProperty(s)){A=v.layouts[s];if(!n[A.id]){if(!w){Ext.log("----- Unreported!! -----")}++w;v.reportLayoutResult(A,n)}}}}Ext.log("Cycles: ",v.cycleCount,", Flushes: ",v.flushCount,", Calculates: ",v.calcCount," in ",v.round(D)," msec");Ext.log("Calculates by type:");G=[];for(s in v.numByType){if(v.numByType.hasOwnProperty(s)){u=v.numByType[s];G.push({type:s,total:u,calcs:v.calcsByType[s],multiple:Math.round(v.calcsByType[s]/u*10)/10,calcTime:v.round(v.timesByType[s]),avgCalcTime:v.round(v.timesByType[s]/v.calcsByType[s])})}}G.sort(function(a,b){return b.calcTime-a.calcTime});x=G.length;for(B=0;B>> Cycle ",this.cycleCount," (queue length: ",this.layoutQueue.length,")")}return this.callParent(arguments)},runLayout:function(m){var n=this,o=m.type,j=n.accumByType[o],k,h,l;if(n.logOn.calculate){Ext.log("-- calculate ",this.getLayoutName(m))}k=j&&j.enter();l=Ext.perf.getTimestamp();h=n.callParent(arguments);l=Ext.perf.getTimestamp()-l;if(j){k.leave()}n.calcsByType[o]=(n.calcsByType[o]||0)+1;n.timesByType[o]=(n.timesByType[o]||0)+l;return h}}},1,0,0,0,0,0,[Ext.layout,"Context"],0));(Ext.cmd.derive("Ext.plugin.Manager",Ext.Base,{alternateClassName:["Ext.PluginManager","Ext.PluginMgr"],singleton:true,typeName:"ptype",create:function(f,h,j){var g,k;if(f.init){g=f}else{if(j){f=Ext.apply({},f);f.cmp=j}else{j=f.cmp}if(f.xclass){g=Ext.create(f)}else{k="plugin."+(f.ptype||h);g=Ext.ClassManager.instantiateByAlias(k,f)}}if(g&&j&&g.setCmp&&!g.setCmpCalled){g.setCmp(j);g.setCmpCalled=true}return g}},0,0,0,0,0,0,[Ext.plugin,"Manager",Ext,"PluginManager",Ext,"PluginMgr"],0));(Ext.cmd.derive("Ext.resizer.BorderSplitterTracker",Ext.resizer.SplitterTracker,{getPrevCmp:null,getNextCmp:null,calculateConstrainRegion:function(){var z=this,W=z.splitter,K=W.collapseTarget,T=W.defaultSplitMin,Q=W.vertical?"Width":"Height",U="min"+Q,D="max"+Q,P="get"+Q,E=W.neighbors,S=E.length,L=K.el.getBox(),R=L.x,J=L.y,A=L.right,O=L.bottom,H=W.vertical?(A-R):(O-J),B,N,G,M,C,F,I,V;M=(K[U]||Math.min(H,T))-H;C=K[D];if(!C){C=1000000000}else{C-=H}V=H;for(B=0;BI){C=I}}if(C-M<2){return null}L=new Ext.util.Region(J,A,O,R);z.constraintAdjusters[z.getCollapseDirection()](L,M,C,W);z.dragInfo={minRange:M,maxRange:C,targetSize:V};return L},constraintAdjusters:{left:function(h,f,e,g){h[0]=h.x=h.left=h.right+f;h.right+=e+g.getWidth()},top:function(h,f,e,g){h[1]=h.y=h.top=h.bottom+f;h.bottom+=e+g.getHeight()},bottom:function(h,f,e,g){h.bottom=h.top-f;h.top-=e+g.getHeight()},right:function(h,f,e,g){h.right=h.left-f;h[0]=h.x=h.left=h.x-e+g.getWidth()}},onBeforeStart:function(l){var o=this,n=o.splitter,p=n.collapseTarget,e=n.neighbors,q=e.length,k,m;if(p.collapsed){return false}for(k=0;kk){j.minWidth=j.el.getWidth()*g}else{j.minHeight=j.el.getHeight()*k}}if(j.throttle){h=Ext.Function.createThrottled(function(){Ext.resizer.ResizeTracker.prototype.resize.apply(j,arguments)},j.throttle);j.resize=function(b,a,c){if(c){Ext.resizer.ResizeTracker.prototype.resize.apply(j,arguments)}else{h.apply(null,arguments)}}}},onBeforeStart:function(b){this.startBox=this.target.getBox()},getProxy:function(){var b=this;if(!b.dynamic&&!b.proxy){b.proxy=b.createProxy(b.target||b.el);b.hideProxy=true}if(b.proxy){b.proxy.show();return b.proxy}},createProxy:function(f){var d,e=this.proxyCls;if(f.isComponent){d=f.getProxy().addCls(e)}else{d=f.createProxy({tag:"div",role:"presentation",cls:e,id:f.id+"-rzproxy"},Ext.getBody())}d.removeCls(Ext.baseCSSPrefix+"proxy-el");return d},onStart:function(b){this.activeResizeHandle=Ext.get(this.getDragTarget().id);if(!this.dynamic){this.resize(this.startBox)}},onDrag:function(b){if(this.dynamic||this.proxy){this.updateDimensions(b)}},updateDimensions:function(y,C){var x=this,K=x.activeResizeHandle.region,I=x.getOffset(x.constrainTo?"dragTarget":null),E=x.startBox,H,A=0,w=0,F,z,M=0,e=0,v,G,L,J,B,D;K=x.convertRegionName(K);switch(K){case"south":w=I[1];L=2;break;case"north":w=-I[1];e=-w;L=2;break;case"east":A=I[0];L=1;break;case"west":A=-I[0];M=-A;L=1;break;case"northeast":w=-I[1];e=-w;A=I[0];G=[E.x,E.y+E.height];L=3;break;case"southeast":w=I[1];A=I[0];G=[E.x,E.y];L=3;break;case"southwest":A=-I[0];M=-A;w=I[1];G=[E.x+E.width,E.y];L=3;break;case"northwest":w=-I[1];e=-w;A=-I[0];M=-A;G=[E.x+E.width,E.y+E.height];L=3;break}J={width:E.width+A,height:E.height+w,x:E.x+M,y:E.y+e};F=Ext.Number.snap(J.width,x.widthIncrement);z=Ext.Number.snap(J.height,x.heightIncrement);if(F!=J.width||z!=J.height){switch(K){case"northeast":J.y-=z-J.height;break;case"north":J.y-=z-J.height;break;case"southwest":J.x-=F-J.width;break;case"west":J.x-=F-J.width;break;case"northwest":J.x-=F-J.width;J.y-=z-J.height}J.width=F;J.height=z}if(J.widthx.maxWidth){J.width=Ext.Number.constrain(J.width,x.minWidth,x.maxWidth);if(M){J.x=E.x+(E.width-J.width)}}else{x.lastX=J.x}if(J.heightx.maxHeight){J.height=Ext.Number.constrain(J.height,x.minHeight,x.maxHeight);if(e){J.y=E.y+(E.height-J.height)}}else{x.lastY=J.y}if(x.preserveRatio||y.shiftKey){H=x.startBox.width/x.startBox.height;B=Math.min(Math.max(x.minHeight,J.width/H),x.maxHeight);D=Math.min(Math.max(x.minWidth,J.height*H),x.maxWidth);if(L==1){J.height=B}else{if(L==2){J.width=D}else{v=Math.abs(G[0]-this.lastXY[0])/Math.abs(G[1]-this.lastXY[1]);if(v>H){J.height=B}else{J.width=D}if(K=="northeast"){J.y=E.y-(J.height-E.height)}else{if(K=="northwest"){J.y=E.y-(J.height-E.height);J.x=E.x-(J.width-E.width)}else{if(K=="southwest"){J.x=E.x-(J.width-E.width)}}}}}}x.setPosition=J.x!==x.startBox.x||J.y!==x.startBox.y;x.resize(J,C)},resize:function(j,g){var k=this,h,f=k.setPosition;if(k.dynamic||(!k.dynamic&&g)){if(f){k.target.setBox(j)}else{k.target.setSize(j.width,j.height)}}if(!g){h=k.getProxy();if(h&&h!==k.target){if(f||k.hideProxy){h.setBox(j)}else{h.setSize(j.width,j.height)}}}},onEnd:function(b){this.updateDimensions(b,true);if(this.proxy&&this.hideProxy){this.proxy.hide()}},convertRegionName:function(b){return b}},1,0,0,0,0,0,[Ext.resizer,"ResizeTracker"],0));(Ext.cmd.derive("Ext.resizer.Resizer",Ext.Base,{alternateClassName:"Ext.Resizable",handleCls:Ext.baseCSSPrefix+"resizable-handle",overCls:Ext.baseCSSPrefix+"resizable-handle-over",pinnedCls:Ext.baseCSSPrefix+"resizable-pinned",wrapCls:Ext.baseCSSPrefix+"resizable-wrap",wrappedCls:Ext.baseCSSPrefix+"resizable-wrapped",delimiterRe:/(?:\s*[,;]\s*)|\s+/,dynamic:true,handles:"s e se",height:null,width:null,heightIncrement:0,widthIncrement:0,minHeight:20,minWidth:20,maxHeight:10000,maxWidth:10000,pinned:false,preserveRatio:false,transparent:false,possiblePositions:{n:"north",s:"south",e:"east",w:"west",se:"southeast",sw:"southwest",nw:"northwest",ne:"northeast"},ariaRole:"presentation",constructor:function(H){var z=this,u=z.handles,A=Ext.dom.Element.unselectableCls,w=[],v,G,x,s,C,E,y,I,D,F,t,B;if(Ext.isString(H)||Ext.isElement(H)||H.dom){v=H;H=arguments[1]||{};H.target=v}z.mixins.observable.constructor.call(z,H);v=z.target;if(v){if(v.isComponent){v.addClsWithUI("resizable");if(v.minWidth){z.minWidth=v.minWidth}if(v.minHeight){z.minHeight=v.minHeight}if(v.maxWidth){z.maxWidth=v.maxWidth}if(v.maxHeight){z.maxHeight=v.maxHeight}if(v.floating){if(!z.hasOwnProperty("handles")){z.handles="n ne e se s sw w nw"}}z.el=v.getEl()}else{v=z.el=z.target=Ext.get(v)}}else{v=z.target=z.el=Ext.get(z.el)}z.el.addCls(Ext.Component.prototype.borderBoxCls);if(Ext.isNumber(z.width)){z.width=Ext.Number.constrain(z.width,z.minWidth,z.maxWidth)}if(Ext.isNumber(z.height)){z.height=Ext.Number.constrain(z.height,z.minHeight,z.maxHeight)}if(z.width!==null||z.height!==null){z.target.setSize(z.width,z.height)}s=z.el.dom.tagName.toUpperCase();if(s==="TEXTAREA"||s==="IMG"||s==="TABLE"){z.originalTarget=z.target;F=v.isComponent?v.getEl():v;z.el.addCls(z.wrappedCls);z.target=z.el=z.el.wrap({role:"presentation",cls:z.wrapCls,id:z.el.id+"-rzwrap",style:F.getStyle(["margin-top","margin-bottom"])});t=F.getPositioning();z.el.setPositioning(t);F.clearPositioning();D=F.getBox();if(t.position!="absolute"){D.x=0;D.y=0}z.el.setBox(D);F.setStyle("position","absolute");z.isTargetWrapped=true}z.el.position();if(z.pinned){z.el.addCls(z.pinnedCls)}z.resizeTracker=new Ext.resizer.ResizeTracker({disabled:z.disabled,target:v,el:z.el,constrainTo:z.constrainTo,handleCls:z.handleCls,overCls:z.overCls,throttle:z.throttle,proxy:z.originalTarget?z.el:null,dynamic:z.originalTarget?true:z.dynamic,originalTarget:z.originalTarget,delegate:"."+z.handleCls,preserveRatio:z.preserveRatio,heightIncrement:z.heightIncrement,widthIncrement:z.widthIncrement,minHeight:z.minHeight,maxHeight:z.maxHeight,minWidth:z.minWidth,maxWidth:z.maxWidth});z.resizeTracker.on({mousedown:z.onBeforeResize,drag:z.onResize,dragend:z.onResizeEnd,scope:z});if(z.handles=="all"){z.handles="n s e w ne nw se sw"}u=z.handles=z.handles.split(z.delimiterRe);x=z.possiblePositions;C=u.length;G=z.handleCls+" "+z.handleCls+"-{0}";if(z.target.isComponent){B=z.target.baseCls;G+=" "+B+"-handle "+B+"-handle-{0}";if(Ext.supports.CSS3BorderRadius){G+=" "+B+"-handle-{0}-br"}}for(E=0;E")}}Ext.DomHelper.append(z.el,w.join(""));w.length=0;for(E=0;Eu){z=o(q(s-(s*(p-u)/A),x));w=v+s-z}else{w=o(p/u*v)}}y[t.setPosition](w);y[t.setLength](z)},show:function(){var d=this,e=d.el,f=e.getActiveAnimation();if(f){f.end()}d.refreshLength();e.setStyle("opacity","")},destroy:function(){this.el.destroy()}},1,0,0,0,0,0,[Ext.scroll,"Indicator"],0));(Ext.cmd.derive("Ext.scroll.Manager",Ext.util.Observable,{minIndicatorLength:24,refreshCounter:0,translationMethods:{1:"scrollparent",2:"csstransform"},constructor:function(e){var h=this,f={dragend:"onDragEnd",dragcancel:"onDragEnd",scope:h},g;if(Ext.supports.touchScroll===2){f.mousewheel="onMouseWheel";f.scroll={fn:"onElementScroll",delegated:false,scope:h}}Ext.util.Observable.prototype.constructor.apply(this,arguments);h.scroller=new Ext.scroll.Scroller({autoRefresh:false,element:h.el,direction:h.direction,momentumEasing:{bounce:{springTension:1}},outOfBoundRestrictFactor:0,translatable:{translationMethod:h.translationMethods[Ext.supports.touchScroll]},listeners:{scrollstart:"onScrollStart",scroll:"onScroll",scrollend:"onScrollEnd",scope:h}});Ext.GlobalEvents.on("idle",h.doRefresh,h);g=h.containerEl=h.el.parent();h.owner.mon(g,f);h.initIndicators()},onElementScroll:function(d,c){c.scrollTop=c.scrollLeft=0},destroy:function(){var b=this;b.clearListeners();Ext.GlobalEvents.un("idle",b.doRefresh,b);b.scroller.destroy()},initIndicators:function(){var h=this,g=h.containerEl,f=h.scroller,e=h.minIndicatorLength;if(Ext.supports.touchScroll===2){h.xIndicator=new Ext.scroll.Indicator({axis:"x",scroller:f,containerEl:g,minLength:e});h.yIndicator=new Ext.scroll.Indicator({axis:"y",scroller:f,containerEl:g,minLength:e});h.refreshIndicators()}},invokeIndicators:function(k,l,g){var j=this,h=j.xIndicator,m=j.yIndicator;if(h&&j.isAxisEnabled("x")){h[k].apply(h,l)}if(m&&j.isAxisEnabled("y")){m[k].apply(m,g||l)}},getPosition:function(){return this.scroller.getPosition()},refresh:function(b){++this.refreshCounter;if(b){this.doRefresh()}},refreshIndicators:function(){var h=this,f=h.scroller,g=f.getMaxPosition(),e=f.getSize();h.invokeIndicators("setMaxScrollPosition",[g.x],[g.y]);h.invokeIndicators("setScrollSize",[e.x],[e.y]);h.invokeIndicators("setHasOpposite",[h.isAxisEnabled("y")],[h.isAxisEnabled("x")])},doRefresh:function(){var c=this,d=c.scroller;if(c.refreshCounter){d.refresh();c.refreshIndicators();c.refreshCounter=0}},onScrollStart:function(){this.isTouching=Ext.isScrolling=true;this.invokeIndicators("show");this.toggleOthers(true)},onScroll:function(e,f,g){var h=this;h.invokeIndicators("setValue",[f],[g]);h.fireEvent("scroll",h,f,g)},onScrollEnd:function(){var b=this;Ext.isScrolling=false;if(b.isTouching){return}b.invokeIndicators("hide")},onDragEnd:function(){this.isTouching=false;this.toggleOthers(false)},onMouseWheel:function(r){var q=this,u=q.scroller,e=r.getWheelDeltas(),x=-e.x,z=-e.y,v=u.getPosition(),w=u.getMaxPosition(),A=u.getMinPosition(),p=Math.max,y=Math.min,s=p(y(v.x+x,w.x),A.x),t=p(y(v.y+z,w.y),A.y);x=s-v.x;z=t-v.y;if(!x&&!z){return}r.stopEvent();q.onScrollStart();q.scrollBy(x,z);q.onScroll(u,s,t);q.onScrollEnd(u)},isAxisEnabled:function(b){return this.scroller.isAxisEnabled(b)},setScrollX:function(c){var d=this.scroller;d.scrollTo(c,d.getPosition().y)},setScrollY:function(c){var d=this.scroller;d.scrollTo(d.getPosition().x,c)},scrollTo:function(e,f,d){this.scroller.scrollTo(e,f,d)},scrollBy:function(e,f,d){if(e.length){d=f;f=e[1];e=e[0]}else{if(!Ext.isNumber(e)){d=f;f=e.y;e=e.x}}this.scroller.scrollBy(e,f,d)},scrollIntoView:function(v,u,x){var o=this,p=o.containerEl,q=o.scroller,s=q.getPosition(),t=s.x,w=s.y,r=Ext.fly(v).getScrollIntoViewXY(p,t,w),y=r.x,n=r.y;if(u===false){y=t}if(y!==t||n!==w){q.scrollTo(y,n,x)}},toggleOthers:function(e){var h=Ext.scroll.Scroller.instances,f,g;for(g in h){f=h[g];if(f!==this.scroller){f.setDisabled(e)}}},preventDefault:function(b){if(b.touches.length===1){b.preventDefault()}}},1,0,0,0,0,0,[Ext.scroll,"Manager"],0));(Ext.cmd.derive("Ext.selection.CellModel",Ext.selection.DataViewModel,{isCellModel:true,enableKeyNav:true,preventWrap:false,bindComponent:function(e){var f=this,d=e.grid||e.ownerCt;Ext.selection.DataViewModel.prototype.bindComponent.call(this,e);if(d.optimizedColumnMove!==false){d.on("columnmove",f.onColumnMove,f)}},getViewListeners:function(){var b=this;return{refresh:b.onViewRefresh,scope:b}},getHeaderCt:function(){var c=this.navigationModel.getPosition(),d=c?c.view:this.primaryView;return d.headerCt},onNavigate:function(b){if(!b.record){return}this.setPosition(b.position)},selectWithEvent:function(d,c){this.select(d)},select:function(k,m,h){var n=this,l,o=n.getPosition(),j=n.view.store;if(k||k===0){if(k.isModel){l=j.indexOf(k);if(l!==-1){k={row:l,column:o?o.column:0}}else{k=null}}else{if(typeof k==="number"){k={row:k,column:0}}}}if(k){n.selectByPosition(k,h)}else{n.deselect()}},getCurrentPosition:function(){var b=this.selecting?this.nextSelection:this.selection;return b?{view:b.view,record:b.record,row:b.rowIdx,columnHeader:b.column,column:b.view.getColumnManager().indexOf(b.column)}:b},getPosition:function(){return this.selecting?this.nextSelection:this.selection},setCurrentPosition:function(f,e,d){if(f&&!f.isCellContext){f=new Ext.grid.CellContext(this.view).setPosition({row:f.row,column:typeof f.column==="number"?this.view.getColumnManager().getColumns()[f.column]:f.column})}return this.setPosition(f,e,d)},setPosition:function(h,g,j){var k=this,f=k.selection;if(h){h=h.isCellContext?h.clone():new Ext.grid.CellContext(k.view).setPosition(h)}if(!j&&f){if(h&&(h.record===f.record&&h.column===f.column&&h.view===f.view)){h=null}else{k.onCellDeselect(k.selection,g)}}if(h){k.nextSelection=h;k.selecting=true;k.onCellSelect(k.nextSelection,g);k.selecting=false;return(k.selection=h)}},isCellSelected:function(h,k,m){var l=this,g,j=l.getPosition();if(j&&j.view===h){g=new Ext.grid.CellContext(h).setPosition({row:k,column:typeof m==="number"?h.getColumnManager().getColumns()[m]:m});return(g.record===j.record)&&(g.column===j.column)}},onStoreRemove:function(f,g,j){var k=this,h=k.getPosition();Ext.selection.DataViewModel.prototype.onStoreRemove.apply(this,arguments);if(h&&f.getCount()&&f.indexOf(h.record)!==-1){h.setRow(h.record)}else{k.selection=null}},onStoreClear:function(){Ext.selection.DataViewModel.prototype.onStoreClear.apply(this,arguments);this.selection=null},onStoreAdd:function(){var d=this,c=d.getPosition();Ext.selection.DataViewModel.prototype.onStoreAdd.apply(this,arguments);if(c){c.setRow(c.record)}else{d.selection=null}},onCellClick:function(o,j,m,e,k,n,l){if(n!==-1){this.setPosition(l.position)}},onCellSelect:function(d,c){if(d&&d.rowIdx!==undefined&&d.rowIdx>-1){this.doSelect(d.record,false,c)}},onCellDeselect:function(d,c){if(d&&d.rowIdx!==undefined){this.doDeselect(d.record,c)}},onSelectChange:function(q,r,l,s){var o=this,n,p,m,k;if(r){n=o.nextSelection;p="select"}else{n=o.selection;p="deselect"}m=n.view||o.primaryView;if((l||o.fireEvent("before"+p,o,q,n.rowIdx,n.colIdx))!==false&&s()!==false){if(r){if(!o.preventFocus){k=m.getNavigationModel();if(!n.isEqual(k.getPosition())){k.setPosition(n,null,null,null,true)}}m.onCellSelect(n)}else{m.onCellDeselect(n);delete o.selection}if(!l){o.fireEvent(p,o,q,n.rowIdx,n.colIdx)}}},onEditorTab:function(e,k){var m=this,l=k.shiftKey?"left":"right",j=e.context,h=j.view.walkCells(j,l,k,m.preventWrap);if(h){if(e.startEdit(h.record,h.column)){m.wasEditing=false}else{h.view.getNavigationModel().setPosition(h,null,k);m.wasEditing=true}}},refresh:function(){var c=this.getPosition(),d;if(c&&(d=this.store.indexOf(this.selected.last()))!==-1){c.rowIdx=d}},onColumnMove:function(j,h,f,k){var g=j.up("tablepanel");if(g){this.onViewRefresh(g.view)}},onUpdate:function(e){var d=this,f;if(d.isSelected(e)){f=d.selecting?d.nextSelection:d.selection;d.view.onCellSelect(f)}},onViewRefresh:function(h){var m=this,k=m.getPosition(),o,l=h.headerCt,j,n;if(k&&k.view===h){j=k.record;n=k.column;if(!n.isDescendantOf(l)){n=l.queryById(n.id)||l.down('[text="'+n.text+'"]')||l.down('[dataIndex="'+n.dataIndex+'"]')}if(k.record){if(n&&(h.store.indexOfId(j.getId())!==-1)){o=new Ext.grid.CellContext(h).setPosition({row:j,column:n});m.setPosition(o)}}else{m.selection=null}}},selectByPosition:function(d,c){this.setPosition(d,c)}},0,0,0,0,["selection.cellmodel"],0,[Ext.selection,"CellModel"],0));(Ext.cmd.derive("Ext.selection.CheckboxModel",Ext.selection.RowModel,{mode:"MULTI",injectCheckbox:0,checkOnly:false,showHeaderCheckbox:undefined,checkSelector:"."+Ext.baseCSSPrefix+"grid-row-checker",headerWidth:24,checkerOnCls:Ext.baseCSSPrefix+"grid-hd-checker-on",tdCls:Ext.baseCSSPrefix+"grid-cell-special "+Ext.baseCSSPrefix+"grid-cell-row-checker",constructor:function(){var b=this;Ext.selection.RowModel.prototype.constructor.apply(this,arguments);if(b.mode==="SINGLE"&&b.showHeaderCheckbox!==true){b.showHeaderCheckbox=false}},beforeViewRender:function(d){var f=this,e;Ext.selection.RowModel.prototype.beforeViewRender.apply(this,arguments);if(!f.hasLockedHeader()||d.headerCt.lockedCt){if(f.showHeaderCheckbox!==false){d.headerCt.on("headerclick",f.onHeaderClick,f)}f.addCheckbox(d,true);e=d.ownerCt;if(d.headerCt.lockedCt){e=e.ownerCt}f.mon(e,"reconfigure",f.onReconfigure,f)}},bindComponent:function(d){var c=this;c.sortable=false;Ext.selection.RowModel.prototype.bindComponent.apply(this,arguments)},hasLockedHeader:function(){var e=this.views,f=e.length,d;for(d=0;d '},onSelectChange:function(){Ext.selection.RowModel.prototype.onSelectChange.apply(this,arguments);if(!this.suspendChange){this.updateHeaderState()}},onStoreLoad:function(){Ext.selection.RowModel.prototype.onStoreLoad.apply(this,arguments);this.updateHeaderState()},onStoreAdd:function(){Ext.selection.RowModel.prototype.onStoreAdd.apply(this,arguments);this.updateHeaderState()},onStoreRemove:function(){Ext.selection.RowModel.prototype.onStoreRemove.apply(this,arguments);this.updateHeaderState()},onStoreRefresh:function(){Ext.selection.RowModel.prototype.onStoreRefresh.apply(this,arguments);this.updateHeaderState()},maybeFireSelectionChange:function(b){if(b&&!this.suspendChange){this.updateHeaderState()}Ext.selection.RowModel.prototype.maybeFireSelectionChange.apply(this,arguments)},resumeChanges:function(){Ext.selection.RowModel.prototype.resumeChanges.call(this);if(!this.suspendChange){this.updateHeaderState()}},updateHeaderState:function(){var n=this,m=n.store,o=m.getCount(),l=n.views,k=false,s=0,r,p,q;if(!m.isBufferedStore&&o>0){r=n.selected;k=true;for(q=0,p=r.getCount();q2)?k[2]:null,m=(l>3)?k[3]:"/",p=(l>4)?k[4]:null,n=(l>5)?k[5]:false;document.cookie=q+"="+escape(o)+((j===null)?"":("; expires="+j.toUTCString()))+((m===null)?"":("; path="+m))+((p===null)?"":("; domain="+p))+((n===true)?"; secure":"")},get:function(m){var j=document.cookie.split("; "),h=j.length,k,l,g;for(l=0;lShow All above.",user_no_roles:"No roles are assigned to this user. Select Show All for a list of available roles",user_no_perm:"No permissions are assigned to this user. Select Show All for a list of available permissions",user_role_list:"User roles",user_role_list_for:"User roles for",user_role_add:"Add user to role",user_role_remove:"Remove user from role",user_perm_list:"Application permissions",user_perm_list_for:"Application permissions for",user_perm_add:"Grant user permission",user_perm_remove:"Revoke user permission",user_role_view_all:"Show all roles",user_role_view_selected:"Show only roles for the selected user",user_perm_view_all:"Show all permissions",user_perm_view_selected:"Show only permissions for the selected user",granted_to:"Granted to",grant_role:"Role",grant_user:"User",user_perm_granted_role:"permission granted through role",user_perm_granted_user:"permission granted to user",role_add:"Add role",role_edit:"Edit role",role_delete:"Delete role",role_delete_confirm:"Are you sure you want to delete this role?",role_perm_view_all:"Show all permissions",role_perm_view_selected:"Show only permissions for the selected role",role_perm_for:"Permissions for",role_select:"Select a Role or select Show All above.",role_perm_add:"Add permission to role",role_perm_remove:"Remove permission from role",perm_internal_name:"Internal Name",perm_add:"Add permission",perm_edit:"Edit permission",perm_delete:"Delete permission",perm_delete_confirm:"Are you sure you want to delete this permission?",path_tab_controllers:"Controllers",path_tab_paths:"Paths",controller_methods:"methods",controller_public:"public",controller_private:"private",path_verify:"Verifing application paths",path_refreshing:"Refreshing paths",path_public:"Public",path_private:"Private",path_method:"Method",path_path:"Path",path_access:"Access",path_permission:"Permission",path_permissions:"Permissions",path_set_public:"Make path public",path_set_private:"Make path private",path_set_permission:"Set Permission",path_remove_permission:"Remove Permission",path_delete:"Delete Path",path_not_found_1:"This method was not found in the Controller but a record of it exists in the database.",path_not_found_2:"You may delete the record of this path.",session_username:"Username",session_last_activity:"Last Activity",session_last_page:"Last Page",session_ip_address:"IP Address",session_last_page:"Last Page",session_user_agent:"User Agent",session_view_all:"Show all sessions",session_view_logged_in:"Show only logged in sessions",session_delete:"Delete Session",session_delete_confirm:"Are you sure you want to delete this session?",session_delete_user:"user",dummy:""},1,0,0,0,0,0,[AppuntoAuth.lib.lang,"Default",0,"Lang"],0));(Ext.cmd.derive("AppuntoAuth.lib.util.CustomVTypes",Ext.Base,{singleton:true,constructor:function(){Ext.apply(Ext.form.field.VTypes,{passformat:function(c){var d=new RegExp(pw_regex);return d.test(c)},passformatText:Lang.localize("password_format"),passconfirm:function(f,d){if(d.passField){var e=d.up("form").down("#"+d.passField);return(f==e.getValue())}return false;return true},passconfirmText:Lang.localize("password_match")})}},1,0,0,0,0,0,[AppuntoAuth.lib.util,"CustomVTypes"],0));(Ext.cmd.derive("AppuntoAuth.lib.util.SearchField",Ext.form.field.Text,{triggers:{clear:{weight:0,cls:Ext.baseCSSPrefix+"form-clear-trigger",hidden:true,handler:"onClearClick",scope:"this"},search:{weight:1,cls:Ext.baseCSSPrefix+"form-search-trigger",handler:"onSearchClick",scope:"this"}},hasSearch:false,paramName:"search",initComponent:function(){var f=this,e=f.store,d;Ext.form.field.Text.prototype.initComponent.apply(this,arguments);f.on("specialkey",function(b,a){if(a.getKey()==a.ENTER){f.onSearchClick()}});if(!e||!e.isStore){e=f.store=Ext.data.StoreManager.lookup(e)}e.setRemoteFilter(true);d=f.store.getProxy();d.setFilterParam(f.paramName);d.encodeFilters=function(a){return a[0].getValue()}},onClearClick:function(){var c=this,d=c.activeFilter;if(d){c.setValue("");c.store.getFilters().remove(d);c.activeFilter=null;c.getTrigger("clear").hide();c.updateLayout()}},onSearchClick:function(){var d=this,c=d.getValue();if(c.length>0){d.activeFilter=new Ext.util.Filter({property:d.paramName,value:c});d.store.getFilters().add(d.activeFilter);d.getTrigger("clear").show();d.updateLayout()}}},0,["appunto-searchfield"],["appunto-searchfield","box","component","field","textfield"],{"appunto-searchfield":true,box:true,component:true,field:true,textfield:true},["widget.appunto-searchfield"],0,[AppuntoAuth.lib.util,"SearchField"],0));(Ext.cmd.derive("AppuntoAuth.lib.util.KeepAlive",Ext.Base,{singleton:true,interval:4*60*1000,constructor:function(){if(typeof(admin_keepalive)!="undefined"&&Ext.isNumber(admin_keepalive)&&admin_keepalive>0){this.interval=admin_keepalive*1000}setTimeout(Ext.bind(this.touch),this.interval)},touch:function(){var b=AppuntoAuth.lib.util.KeepAlive;Ext.Ajax.request({url:ci_site_url+"appunto-auth/ui/keep-alive"});setTimeout(Ext.bind(b.touch),b.interval)}},1,0,0,0,0,0,[AppuntoAuth.lib.util,"KeepAlive"],0));(Ext.cmd.derive("AppuntoAuth.view.main.Main",Ext.container.Container,{controller:"main",viewModel:{type:"main"},layout:{type:"border"},items:[{xtype:"container",cls:"app-header",region:"north",height:64,border:0,layout:{type:"hbox",pack:"end"},items:{xtype:"button",text:"logout",action:"logout",cls:"admin-logout-button"}},{xtype:"panel",cls:"app-main",region:"center",layout:"fit",flex:5,border:0,items:[{xtype:"appa-main-frame"}]}]},0,["appa-main"],["appa-main","box","component","container"],{"appa-main":true,box:true,component:true,container:true},["widget.appa-main"],0,[AppuntoAuth.view.main,"Main"],0));(Ext.cmd.derive("AppuntoAuth.view.main.Frame",Ext.tab.Panel,{initComponent:function(){this.items=[{title:Lang.localize("tab_status"),iconCls:"transmit",itemId:"tab-status",xtype:"appa_status_view"},{title:Lang.localize("tab_users"),iconCls:"user",itemId:"tab-users",xtype:"appa_user_frame"},{title:Lang.localize("tab_user_roles"),iconCls:"shield",itemId:"tab-roles",xtype:"appa_role_frame"},{title:Lang.localize("tab_permissions"),iconCls:"lock",itemId:"tab-permissions",xtype:"appa_permission_list"},{title:Lang.localize("tab_paths"),iconCls:"map",itemId:"tab-paths",xtype:"appa_path_frame"},{title:Lang.localize("tab_sessions"),iconCls:"monitor",itemId:"tab-sessions",xtype:"appa_session_list"}];Ext.tab.Panel.prototype.initComponent.apply(this,arguments)}},0,["appa-main-frame"],["appa-main-frame","box","component","container","panel","tabpanel"],{"appa-main-frame":true,box:true,component:true,container:true,panel:true,tabpanel:true},["widget.appa-main-frame"],0,[AppuntoAuth.view.main,"Frame"],0));(Ext.cmd.derive("AppuntoAuth.controller.Navigation",Ext.app.Controller,{views:["main.Main","main.Frame"],refs:[{ref:"tabs",selector:"appa-main-frame"}],config:{routes:{status:"redirStatus",users:"redirUsers",roles:"redirRoles",permissions:"redirPermissions",paths:"redirPaths",sessions:"redirSessions"}},init:function(){this.control({"appa-main-frame":{beforetabchange:this.redirTabClick},'appa-main button[action="logout"]':{click:this.logout}})},logout:function(){location.href=ci_site_url+ci_logout_url},redirTabClick:function(c,d){this.getTabs().clearListeners();this.redirectTo(d.itemId.substr(4));this.getTabs().on("beforetabchange",this.redirTabClick,this)},changeCardSuppressEvent:function(b){this.getTabs().setActiveTab(b)},redirStatus:function(){this.getTabs().setActiveTab("tab-status")},redirUsers:function(){this.getTabs().setActiveTab("tab-users")},redirRoles:function(){this.getTabs().setActiveTab("tab-roles")},redirPermissions:function(){this.getTabs().setActiveTab("tab-permissions")},redirPaths:function(){this.getTabs().setActiveTab("tab-paths")},redirSessions:function(){this.getTabs().setActiveTab("tab-sessions")}},0,0,0,0,0,0,[AppuntoAuth.controller,"Navigation"],0));(Ext.cmd.derive("AppuntoAuth.lib.proxy.CiReader",Ext.data.reader.Json,{getResponseData:function(d){var c=Ext.decode(d.responseText,true);if(c!=null){return c}return this.createReadError("You're trying to decode an invalid JSON String: "+d.responseText)}},0,0,0,0,["reader.ci"],0,[AppuntoAuth.lib.proxy,"CiReader"],0));(Ext.cmd.derive("AppuntoAuth.lib.proxy.CiWriter",Ext.data.writer.Json,{writeRecords:function(h){var f=h.getRecords()[0],e=f.getChanges(),g;h.setParam("id",f.get("id"));for(g in e){h.setParam(g,e[g])}return h}},0,0,0,0,["writer.ci"],0,[AppuntoAuth.lib.proxy,"CiWriter"],0));(Ext.cmd.derive("AppuntoAuth.lib.proxy.Codeigniter",Ext.data.proxy.Ajax,{siteurl:ci_site_url,loginurl:ci_site_url+ci_login_url,csrf_token_name:ci_token,csrf_cookie_name:ci_cookie,config:{ci_class:"",ci_method:""},timeout:30*1000,actionMethods:{create:"POST",read:"POST",update:"POST",destroy:"POST"},reader:{type:"ci",rootProperty:"rows",messageProperty:"msg"},writer:"ci",errors:{server_error_title:"Server error",server_error_unknown:"Unknown error: The server did not send any information about the error.",server_error_no_response:"Unknown error: Server did not send a response.",server_error_decode:"Error decoding the response sent by the server.",server_error_undefined:"Undefined Server Error"},httpError:{400:"Bad Request",401:"Unauthorized",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",408:"Request Timeout",414:"Request-URI Too Long",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported",509:"Bandwidth Limit Exceeded",511:"Network Authentication Required"},setCi_methodString:function(b){this.setCi_method(b.getOperation().config.ci_method||b.config.action)},buildUrl:function(b){this.setCi_methodString(b);return this.getSiteurl()+this.getCi_class()+"/"+this.getCi_method()},doRequest:function(b){this.setCSRFParam();Ext.data.proxy.Ajax.prototype.doRequest.apply(this,arguments)},setCSRFParam:function(){var e=this.csrf_token_name,f=this.csrf_cookie_name,d=Ext.util.Cookies.get(f);if(d!=null){this.setExtraParam(e,d)}},listeners:{exception:function(m,k,h){var j,g,l=false;if(k.responseText!=undefined){responseObj=Ext.decode(k.responseText,true);if(responseObj!=null&&responseObj.msg!=undefined){j=(responseObj.errors!=undefined)?"
    "+responseObj.errors+"
":"";g="

"+responseObj.msg+"

"+j;l=(responseObj.err!=undefined)&&(responseObj.err=="LOGIN")?true:false;this.alertError(this.getErrorMsg("server_error_title"),g,l)}else{g=this.getCodeigniterError(k);if((g==null)&&(k.status!=undefined&&this.httpError[k.status]!=undefined)){g='

'+k.status+"

"+this.httpError[k.status]+"

";this.alertError(this.getErrorMsg("server_error_title"),g)}if(g==null){g=this.getErrorMsg("server_error_decode")}this.alertError(this.getErrorMsg("server_error_title"),g)}}else{this.alertError(this.getErrorMsg("server_error_title"),this.getErrorMsg("server_error_no_response"))}}},getCodeigniterError:function(d){var f,e;if(d!=undefined&&d.responseText!=undefined){f=document.createElement("div");f.innerHTML=d.responseText;e=f.getElementsByTagName("div")[0];if(e!=undefined){return e.innerHTML}}return null},alertError:function(h,j,k){var g=this.loginurl,f=function(a){a.up("window").close()};if(k==true){f=function(a){a.up("window").close();location.href=g}}Ext.create("Ext.window.Window",{title:h,iconCls:"exclamation",layout:"fit",modal:true,items:{xtype:"container",style:"padding: 8px",autoScroll:true,html:j,border:0},buttons:[{text:"Ok",handler:f}]}).show()},getErrorMsg:function(b){if((typeof Lang!=="undefined")&&(typeof Lang.localize=="function")&&(Lang.localize(b)!=undefined)){return Lang.localize(b)}else{return this.errors[b]}},getSiteurl:function(){return this.siteurl}},0,0,0,0,["proxy.ci"],0,[AppuntoAuth.lib.proxy,"Codeigniter"],0));(Ext.cmd.derive("AppuntoAuth.model.StatusInfo",Ext.data.Model,{fields:[{name:"info_item",type:"string"},{name:"info_val",type:"string"},{name:"info_note",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/statusinfo"}},0,0,0,0,0,0,[AppuntoAuth.model,"StatusInfo"],0));(Ext.cmd.derive("AppuntoAuth.view.status.View",Ext.panel.Panel,{items:[{xtype:"dataview",store:"StatusInfos",viewConfig:{loadMask:{msg:Lang.localize("loading")}},tpl:new Ext.XTemplate('','','',"","",'','',"","","","
{info_item}{info_val}{info_note}
",{noteExists:function(b){return b!=""}}),itemSelector:"div.info-item"}],bbar:[{xtype:"button",text:Lang.localize("refresh"),action:"refresh",iconCls:"x-tbar-loading"}]},0,["appa_status_view"],["appa_status_view","box","component","container","panel"],{appa_status_view:true,box:true,component:true,container:true,panel:true},["widget.appa_status_view"],0,[AppuntoAuth.view.status,"View"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.StatusInfo");(Ext.cmd.derive("AppuntoAuth.store.StatusInfos",Ext.data.Store,{model:"AppuntoAuth.model.StatusInfo",pageSize:0,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"StatusInfos"],0));(Ext.cmd.derive("AppuntoAuth.controller.Status",Ext.app.Controller,{models:["StatusInfo"],stores:["StatusInfos"],views:["status.View"],refs:[{ref:"statusInfo",selector:"appa_status_view dataview"}],init:function(){this.control({appa_status_view:{activate:this.refreshView},'appa_status_view button[action="refresh"]':{click:this.refreshView}})},refreshView:function(b){this.getStatusInfo().getStore().load()}},0,0,0,0,0,0,[AppuntoAuth.controller,"Status"],0));(Ext.cmd.derive("AppuntoAuth.view.user.PermissionContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("user_perm_add"),action:"add",iconCls:"lock-add"},{text:Lang.localize("user_perm_remove"),action:"remove",iconCls:"lock-delete"}]},0,["appa_user_permission_contextmenu"],["appa_user_permission_contextmenu","box","component","container","menu","panel"],{appa_user_permission_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_user_permission_contextmenu"],0,[AppuntoAuth.view.user,"PermissionContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.view.user.Add",Ext.window.Window,{title:Lang.localize("user_add"),iconCls:"user-add",layout:"fit",autoShow:true,modal:true,items:[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:460,labelWidth:180,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"username",fieldLabel:Lang.localize("username"),xtype:"textfield",value:"",allowBlank:false},{name:"email",fieldLabel:Lang.localize("email"),xtype:"textfield",value:"",vtype:"email",vtypeText:Lang.localize("email_format"),allowBlank:false},{name:"name",fieldLabel:Lang.localize("name"),xtype:"textfield",value:"",allowBlank:true},{name:"surname",fieldLabel:Lang.localize("surname"),xtype:"textfield",value:"",allowBlank:true},{id:"pass",name:"password",fieldLabel:Lang.localize("password"),xtype:"textfield",value:"",inputType:"password",vtype:"passformat",style:{marginTop:"18px"},allowBlank:false},{name:"password2",fieldLabel:Lang.localize("password_confirm"),xtype:"textfield",value:"",inputType:"password",vtype:"passconfirm",passField:"pass",allowBlank:false},{name:"active",fieldLabel:Lang.localize("user_set_active"),inputValue:"1",uncheckedValue:"0",style:{marginTop:"18px"},xtype:"checkbox",checked:true}]}],buttons:[{text:Lang.localize("save"),action:"save"},{text:Lang.localize("cancel"),handler:function(){this.up(".window").close()}}]},0,["appa_user_add"],["appa_user_add","box","component","container","panel","window"],{appa_user_add:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_user_add"],0,[AppuntoAuth.view.user,"Add"],0));(Ext.cmd.derive("AppuntoAuth.view.user.RoleContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("user_role_add"),action:"add",iconCls:"shield-add"},{text:Lang.localize("user_role_remove"),action:"remove",iconCls:"shield-delete"}]},0,["appa_user_role_contextmenu"],["appa_user_role_contextmenu","box","component","container","menu","panel"],{appa_user_role_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_user_role_contextmenu"],0,[AppuntoAuth.view.user,"RoleContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.model.User",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"username",type:"string"},{name:"name",type:"string"},{name:"surname",type:"string"},{name:"email",type:"string"},{name:"active",type:"int"},{name:"last_login",type:"string"},{name:"created",type:"string"},{name:"modified",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/user"}},0,0,0,0,0,0,[AppuntoAuth.model,"User"],0));(Ext.cmd.derive("AppuntoAuth.model.UserRole",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"hasRole",type:"int"},{name:"name",type:"string"},{name:"description",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/user"}},0,0,0,0,0,0,[AppuntoAuth.model,"UserRole"],0));(Ext.cmd.derive("AppuntoAuth.model.UserPermission",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"hasPermission",type:"int"},{name:"userRoleHasPermission",type:"int"},{name:"userHasPermission",type:"int"},{name:"name",type:"string"},{name:"description",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/user"}},0,0,0,0,0,0,[AppuntoAuth.model,"UserPermission"],0));(Ext.cmd.derive("AppuntoAuth.model.Login",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"attempt_time",type:"date",format:"Y-m-d H:i:s"},{name:"username",type:"string"},{name:"ip_address",type:"string"},{name:"user_agent",type:"string"},{name:"success",type:"int"},{name:"note",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/user/login_attempts"}},0,0,0,0,0,0,[AppuntoAuth.model,"Login"],0));(Ext.cmd.derive("AppuntoAuth.view.user.ChangePassword",Ext.window.Window,{title:Lang.localize("password_change"),iconCls:"key",layout:"fit",autoShow:true,modal:true,initComponent:function(){this.items=[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:460,labelWidth:160,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"username",fieldLabel:Lang.localize("username"),xtype:"displayfield"},{name:"email",fieldLabel:Lang.localize("email"),xtype:"displayfield"},{id:"pass",name:"password",fieldLabel:Lang.localize("password"),xtype:"textfield",inputType:"password",vtype:"passformat",style:{marginTop:"18px"},allowBlank:false},{name:"password2",fieldLabel:Lang.localize("password_confirm"),xtype:"textfield",inputType:"password",vtype:"passconfirm",passField:"pass",allowBlank:false}]}];this.buttons=[{text:Lang.localize("save"),action:"save"},{text:Lang.localize("cancel"),handler:function(){this.up(".window").close()}}];Ext.window.Window.prototype.initComponent.apply(this,arguments);this.down("form").getForm().trackResetOnLoad=true}},0,["appa_user_changepassword"],["appa_user_changepassword","box","component","container","panel","window"],{appa_user_changepassword:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_user_changepassword"],0,[AppuntoAuth.view.user,"ChangePassword"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.User");(Ext.cmd.derive("AppuntoAuth.store.Users",Ext.data.Store,{model:"AppuntoAuth.model.User",pageSize:20,remoteSort:true,remoteFilter:true,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"Users"],0));(Ext.cmd.derive("AppuntoAuth.store.UserRoles",Ext.data.Store,{model:"AppuntoAuth.model.UserRole",pageSize:9999,remoteSort:false,remoteFilter:false,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"UserRoles"],0));(Ext.cmd.derive("AppuntoAuth.store.UserPermissions",Ext.data.Store,{model:"AppuntoAuth.model.UserPermission",pageSize:9999,remoteSort:false,remoteFilter:false,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"UserPermissions"],0));(Ext.cmd.derive("AppuntoAuth.store.Logins",Ext.data.Store,{model:"AppuntoAuth.model.Login",pageSize:9999,remoteSort:true,remoteFilter:true,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"Logins"],0));(Ext.cmd.derive("AppuntoAuth.view.user.Edit",Ext.window.Window,{title:Lang.localize("user_edit"),iconCls:"user-edit",layout:"fit",autoShow:false,modal:true,initComponent:function(){this.items=[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:460,labelWidth:120,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"username",fieldLabel:Lang.localize("username"),xtype:"textfield",value:"",allowBlank:false},{name:"email",fieldLabel:Lang.localize("email"),xtype:"textfield",value:"",vtype:"email",vtypeText:Lang.localize("email_format"),allowBlank:false},{name:"name",fieldLabel:Lang.localize("name"),xtype:"textfield",value:"",allowBlank:true},{name:"surname",fieldLabel:Lang.localize("surname"),xtype:"textfield",value:"",allowBlank:true},{name:"active",fieldLabel:Lang.localize("active"),labelAlign:"left",inputValue:"1",uncheckedValue:"0",style:{marginTop:"18px"},xtype:"checkbox",checked:true}]}];this.buttons=[{text:Lang.localize("save"),action:"save"},{text:Lang.localize("cancel"),handler:function(){this.up(".window").close()}}];Ext.window.Window.prototype.initComponent.apply(this,arguments);this.down("form").getForm().trackResetOnLoad=true}},0,["appa_user_edit"],["appa_user_edit","box","component","container","panel","window"],{appa_user_edit:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_user_edit"],0,[AppuntoAuth.view.user,"Edit"],0));(Ext.cmd.derive("AppuntoAuth.view.user.ContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("user_add"),action:"add",iconCls:"user-add"},{text:Lang.localize("user_edit"),action:"edit",iconCls:"user-edit"},{text:Lang.localize("user_delete"),action:"delete",iconCls:"user-delete"},{text:Lang.localize("password_change"),action:"change_password",iconCls:"key"},{text:Lang.localize("user_activate"),action:"activate",iconCls:"accept"},{text:Lang.localize("user_deactivate"),action:"deactivate",iconCls:"delete"}]},0,["appa_user_contextmenu"],["appa_user_contextmenu","box","component","container","menu","panel"],{appa_user_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_user_contextmenu"],0,[AppuntoAuth.view.user,"ContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.view.user.Frame",Ext.container.Container,{layout:{type:"border"},bodyBorder:false,defaults:{collapsible:false},border:0,createMenuItem:true,items:[{xtype:"appa_user_list",region:"center",flex:1},{xtype:"panel",title:Lang.localize("user_role_list"),itemId:"role-permission-frame",hideCollapseTool:true,iconCls:"shield",region:"east",collapsible:true,flex:1,border:"1px 0 0 1px",layout:{type:"vbox",align:"stretch"},items:[{xtype:"appa_user_role_list",flex:1},{title:"Permission List",xtype:"appa_user_permission_list",flex:1}]}]},0,["appa_user_frame"],["appa_user_frame","box","component","container"],{appa_user_frame:true,box:true,component:true,container:true},["widget.appa_user_frame"],0,[AppuntoAuth.view.user,"Frame"],0));(Ext.cmd.derive("AppuntoAuth.view.user.List",Ext.grid.Panel,{store:"Users",autoScroll:true,border:0,viewConfig:{emptyText:"No results found",loadMask:{msg:Lang.localize("loading")}},columns:[{header:Lang.localize("username"),dataIndex:"username",menuDisabled:true,flex:4},{header:Lang.localize("name"),dataIndex:"name",menuDisabled:true,flex:3},{header:Lang.localize("surname"),dataIndex:"surname",menuDisabled:true,flex:3},{header:Lang.localize("email"),dataIndex:"email",menuDisabled:true,flex:6},{header:Lang.localize("active"),dataIndex:"active",width:48,sortable:true,align:"center",menuDisabled:true,renderer:function(f,e,d){e.tdCls=(d.get("active")==0)?"user-inactive":"user-active";return""}},{header:Lang.localize("last_ip"),dataIndex:"last_ip",hidden:true,flex:3},{header:Lang.localize("last_login"),dataIndex:"last_login",menuDisabled:true,hidden:true,flex:4,renderer:function(b){if(b=="0000-00-00 00:00:00"){return Lang.localize("never")}return Ext.util.Format.date(b,datetime_format)}},{header:Lang.localize("created"),dataIndex:"created",menuDisabled:true,hidden:true,flex:4,renderer:function(b){return Ext.util.Format.date(b,datetime_format)}},{header:Lang.localize("modified"),dataIndex:"modified",menuDisabled:true,hidden:true,flex:4,renderer:function(b){return Ext.util.Format.date(b,datetime_format)}}],tbar:[{xtype:"button",text:Lang.localize("user_add"),action:"add",cls:"view-selection-button",iconCls:"user-add"},{xtype:"tbspacer",width:24},{xtype:"appunto-searchfield",store:"Users"},{xtype:"tbfill"},{xtype:"tool",type:"next"}],bbar:[{xtype:"pagingtoolbar",store:"Users",displayInfo:true,displayMsg:Lang.localize("paging_message")}]},0,["appa_user_list"],["appa_user_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_user_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_user_list"],0,[AppuntoAuth.view.user,"List"],0));(Ext.cmd.derive("AppuntoAuth.view.user.RoleList",Ext.grid.Panel,{store:"UserRoles",cls:"appunto-list",autoScroll:true,border:0,viewConfig:{emptyText:'

'+Lang.localize("user_select_or")+"

",deferEmptyText:false,loadMask:{msg:Lang.localize("loading")}},initComponent:function(){this.columns=[{header:"",dataIndex:"hasRole",width:24,sortable:true,menuDisabled:true,align:"center",renderer:function(f,e,d){if(d.get("hasRole")==1){e.tdCls="user-has-role"}return""}},{header:Lang.localize("name"),dataIndex:"name",menuDisabled:true,flex:1},{header:Lang.localize("description"),dataIndex:"description",menuDisabled:true,flex:2}];this.tbar=[{xtype:"button",itemId:"role-view-toggle",text:Lang.localize("user_role_view_all"),cls:"view-selection-button",menu:[{text:Lang.localize("user_role_view_all"),value:"1",checked:true,group:"role-view"},{text:Lang.localize("user_role_view_selected"),value:"0",checked:false,group:"role-view"}]}];Ext.grid.Panel.prototype.initComponent.apply(this,arguments)}},0,["appa_user_role_list"],["appa_user_role_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_user_role_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_user_role_list"],0,[AppuntoAuth.view.user,"RoleList"],0));(Ext.cmd.derive("AppuntoAuth.view.user.PermissionList",Ext.grid.Panel,{store:"UserPermissions",title:Lang.localize("user_perm_list"),iconCls:"lock",cls:"appunto-list",autoScroll:true,border:0,viewConfig:{emptyText:'

'+Lang.localize("user_select_or")+"

",deferEmptyText:false,loadMask:{msg:Lang.localize("loading")}},initComponent:function(){this.columns=[{header:"",dataIndex:"hasPermission",hideable:false,width:24,sortable:true,menuDisabled:true,align:"center",renderer:function(f,e,d){if(f==1){e.tdCls="has-permission"}return""}},{header:Lang.localize("name"),dataIndex:"name",menuDisabled:true,flex:1},{text:Lang.localize("granted_to"),menuDisabled:true,id:"permission-granted-to-header",columns:[{header:Lang.localize("grant_role"),dataIndex:"userRoleHasPermission",width:60,sortable:true,menuDisabled:true,align:"center",renderer:function(f,e,d){if(f==1){e.tdCls="user-role-has-permission";e.tdAttr='data-qtip="'+Lang.localize("user_perm_granted_role")+'"'}return""}},{header:Lang.localize("grant_user"),dataIndex:"userHasPermission",width:60,sortable:true,menuDisabled:true,align:"center",renderer:function(f,e,d){if(f==1){e.tdCls="user-has-permission";e.tdAttr='data-qtip="'+Lang.localize("user_perm_granted_user")+'"'}return""}}]},{header:Lang.localize("description"),dataIndex:"description",menuDisabled:true,flex:2}];this.tbar=[{xtype:"button",itemId:"permission-view-toggle",text:Lang.localize("user_perm_view_all"),cls:"view-selection-button",menu:[{text:Lang.localize("user_perm_view_all"),value:"1",checked:true,group:"permission-view"},{text:Lang.localize("user_perm_view_selected"),value:"0",checked:false,group:"permission-view"}]}];Ext.grid.Panel.prototype.initComponent.apply(this,arguments)}},0,["appa_user_permission_list"],["appa_user_permission_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_user_permission_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_user_permission_list"],0,[AppuntoAuth.view.user,"PermissionList"],0));(Ext.cmd.derive("AppuntoAuth.view.user.LoginsWidget",Ext.grid.Panel,{store:"AppuntoAuth.store.Logins",title:"Recent Login Attempts",iconCls:"shield",autoScroll:true,viewConfig:{emptyText:'

no recent login attempts found

',deferEmptyText:false},initComponent:function(){this.columns=[{header:"",dataIndex:"success",width:24,sortable:true,menuDisabled:true,align:"center",renderer:function(f,e,d){if(d.get("success")==1){e.tdCls="login-success";e.tdAttr='data-qtip="'+d.get("note")+'"'}else{if(d.get("success")==0){e.tdCls="login-fail";e.tdAttr='data-qtip="'+d.get("note")+'"'}else{e.tdCls="login-failure";e.tdAttr='data-qtip="'+d.get("note")+'"'}}return""}},{header:"Date",dataIndex:"attempt_time",width:80,align:"right",xtype:"datecolumn",format:"m/d/Y"},{header:"Time",dataIndex:"attempt_time",width:60,align:"right",xtype:"datecolumn",format:"H:i:s"},{header:"Username",dataIndex:"username",menuDisabled:true,flex:1},{header:"IP Address",dataIndex:"ip_address",menuDisabled:true,flex:1}];this.tools=[{type:"refresh",itemId:"refresh"}];Ext.grid.Panel.prototype.initComponent.apply(this,arguments)}},0,["appa_user_logins_widget"],["appa_user_logins_widget","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_user_logins_widget:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_user_logins_widget"],0,[AppuntoAuth.view.user,"LoginsWidget"],0));(Ext.cmd.derive("AppuntoAuth.controller.Users",Ext.app.Controller,{models:["User","UserRole","UserPermission","Login"],stores:["Users","UserRoles","UserPermissions","Logins"],views:["user.Frame","user.List","user.ContextMenu","user.Add","user.Edit","user.ChangePassword","user.RoleList","user.RoleContextMenu","user.PermissionList","user.PermissionContextMenu","user.LoginsWidget"],refs:[{ref:"list",selector:"appa_user_list"},{ref:"rolePermissionFrame",selector:"#role-permission-frame"},{ref:"roleList",selector:"appa_user_role_list"},{ref:"permissionList",selector:"appa_user_permission_list"},{ref:"loginsWidget",selector:"appa_user_logins_widget"}],init:function(){this.control({appa_user_frame:{activate:this.loadStore},appa_user_list:{render:this.defineStoreEventHandlers,select:this.userSelected,deselect:this.userDeselected,itemdblclick:this.editUser,itemcontextmenu:this.showContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},"appa_user_list tool":{click:this.resizeUserList},appa_user_role_list:{itemcontextmenu:this.showRoleContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},appa_user_permission_list:{itemcontextmenu:this.showPermissionContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},'appa_user_list button[action="add"]':{click:this.addUser},'appa_user_contextmenu menuitem[action="add"]':{click:this.addUser},"appa_user_add button[action=save]":{click:this.createUser},'appa_user_contextmenu menuitem[action="edit"]':{click:this.editUser},"appa_user_edit button[action=save]":{click:this.updateUser},'appa_user_contextmenu menuitem[action="delete"]':{click:this.confirmUserDeletion},'appa_user_contextmenu menuitem[action="change_password"]':{click:this.changePassword},"appa_user_changepassword button[action=save]":{click:this.updatePassword},'appa_user_contextmenu menuitem[action="activate"]':{click:this.activateUser},'appa_user_contextmenu menuitem[action="deactivate"]':{click:this.deactivateUser},'appa_user_role_list menuitem[group="role-view"]':{click:this.toggleRoleView},'appa_user_role_contextmenu menuitem[action="add"]':{click:this.addRole},'appa_user_role_contextmenu menuitem[action="remove"]':{click:this.removeRole},'appa_user_permission_list menuitem[group="permission-view"]':{click:this.togglePermissionView},'appa_user_permission_contextmenu menuitem[action="add"]':{click:this.addPermission},'appa_user_permission_contextmenu menuitem[action="remove"]':{click:this.removePermission}})},loadStore:function(){var d=this.getList(),f=d.getSelectionModel(),e;e=function(){if(f.hasSelection()){rec=f.getSelection()[0];f.deselectAll();f.select(rec)}};d.getStore().load({callback:e})},defineStoreEventHandlers:function(b){this.getList().getStore().on({scope:this,load:this.storeLoad})},resizeUserList:function(e){var d=this.getList(),f=this.getRolePermissionFrame();if(f.collapsed){f.expand();f.setIconCls("shield");this.setRoleTitle();e.setType("next");d.columns[5].hide();d.columns[6].hide();d.columns[7].hide();d.columns[8].hide()}else{f.collapse();f.setIconCls("");this.setRoleTitle();e.setType("prev");d.columns[5].show();d.columns[6].show();d.columns[7].show();d.columns[8].show()}},storeLoad:function(){var c=this.getRoleList(),d=this.getPermissionList();this.getRoleList().getStore().removeAll();this.setEmptyMessageRole();this.setRoleTitle();this.getPermissionList().getStore().removeAll();this.setEmptyMessagePerm();this.setPermissionTitle()},setEmptyMessageRole:function(){var d=this.getList().getSelectionModel().hasSelection(),c=this.getRoleList();if(d){c.getView().emptyText='

'+Lang.localize("user_no_roles")+"

"}else{c.getView().emptyText='

'+Lang.localize("user_select")+"

"}c.getView().refresh()},setEmptyMessagePerm:function(){var d=this.getList().getSelectionModel().hasSelection(),c=this.getPermissionList();if(d){c.getView().emptyText='

'+Lang.localize("user_no_perm")+"

"}else{c.getView().emptyText='

'+Lang.localize("user_select")+"

"}c.getView().refresh()},setRoleTitle:function(c){var d=this.getRolePermissionFrame();if(d.collapsed){d.setTitle(Lang.localize("user_role_list")+" / "+Lang.localize("user_perm_list"))}else{if(c!=undefined){d.setTitle(Lang.localize("user_role_list_for")+" "+c)}else{d.setTitle(Lang.localize("user_role_list"))}}},setPermissionTitle:function(c){var d=this.getPermissionList();if(c!=undefined){d.setTitle(Lang.localize("user_perm_list_for")+" "+c)}else{d.setTitle(Lang.localize("user_perm_list"))}},userSelected:function(m,g){var k=this.getRoleList(),l=this.getPermissionList(),j=k.getStore(),h=l.getStore();this.setEmptyMessageRole();this.setEmptyMessagePerm();this.setRoleTitle(g.get("username"));this.setPermissionTitle(g.get("username"));j.load({id:g.get("id"),ci_method:"roles"});h.load({id:g.get("id"),ci_method:"permissions"})},userDeselected:function(m,g){var k=this.getRoleList(),l=this.getPermissionList(),j=k.getStore(),h=l.getStore();this.setEmptyMessageRole();this.setEmptyMessagePerm();if(!this.getList().getSelectionModel().hasSelection()){this.setRoleTitle(undefined);this.setPermissionTitle(undefined);j.removeAll();h.removeAll()}},showContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_user_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);if(j.data.active==1){k.down('menuitem[action="activate"]').hide()}if(j.data.active==0){k.down('menuitem[action="deactivate"]').hide()}k.showAt(l.getXY())},addUser:function(e,g){var h=Ext.widget("appa_user_add"),f=h.down("form");f.getForm().findField("username").focus(false,100);h.show()},createUser:function(m){var k=m.up("window"),l=k.down("form"),n=l.getValues(),h=Ext.create("AppuntoAuth.model.User"),o=this.getList().getStore(),j;j=function(a,b){if(b.success==true){o.insert(0,a);k.close()}else{o.remove(h)}};if(l.getForm().isValid()){h.set(n);h.save({callback:j})}},editUser:function(j,k){var h=j.up("menu").getRecord(),e=Ext.widget("appa_user_edit"),g=e.down("form");g.loadRecord(h);g.getForm().findField("username").focus(false,100);e.show()},updateUser:function(l){var j=l.up("window"),k=j.down("form").form,g=k.getRecord(),m=k.getValues(),h;h=function(a,b){if(b.success==true){a.commit();j.close()}else{g.reject()}};if(k.isDirty()){if(k.isValid()){g.set(m);g.save({callback:h})}}else{j.close()}},confirmUserDeletion:function(e){var g=e.up("menu").getRecord(),f=this.getList().getStore(),h=Lang.localize("user_delete")+" "+g.data.username+" ("+g.data.email+")";Ext.MessageBox.confirm(h,Lang.localize("user_delete_confirm"),Ext.bind(this.deleteUser,this,[g,f],true))},deleteUser:function(k,h,j,g,f){if(k=="yes"){g.erase({success:function(){f.remove(g)}})}},changePassword:function(h){var g=h.up("menu").getRecord(),f=Ext.widget("appa_user_changepassword"),e=f.down("form");e.loadRecord(g);e.getForm().findField("password").focus(false,100);f.show()},updatePassword:function(l){var j=l.up("window"),k=j.down("form").form,g=k.getRecord(),m=k.getValues(),h;h=function(a,b){j.close()};if(k.isValid()){g.set(m);g.save({ci_method:"update_pass",success:h});g.data.password="";g.data.password2=""}},activateUser:function(d){var e=d.up("menu").getRecord(),f;f=function(){e.reject()};e.set({active:1});e.save({failure:f})},deactivateUser:function(d){var e=d.up("menu").getRecord(),f;f=function(){e.reject()};e.set({active:0});e.save({failure:f})},toggleRoleView:function(b){this.showAllRoles(b.value==1)},showAllRoles:function(g){var h=this.getRoleList(),f=h.getStore(),e=h.down("#role-view-toggle");if(g==true){f.clearFilter();e.setText(Lang.localize("user_role_view_all"))}else{f.filter("hasRole",1);e.setText(Lang.localize("user_role_view_selected"))}},showRoleContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_user_role_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);if(j.data.hasRole==1){k.down('menuitem[action="add"]').hide()}else{if(j.data.hasRole==0){k.down('menuitem[action="remove"]').hide()}}k.showAt(l.getXY())},addRole:function(k){var m=k.up("menu").getRecord(),j=this.getList(),l=j.getSelectionModel().getSelection()[0],g=this.getPermissionList().getStore(),h;h=function(a,b){if(b.success==true){g.load({id:l.get("id"),ci_method:"permissions"})}else{m.reject()}};m.set({hasRole:1});m.save({ci_method:"add_role",params:{user_id:l.get("id")},callback:h})},removeRole:function(k){var m=k.up("menu").getRecord(),j=this.getList(),l=j.getSelectionModel().getSelection()[0],g=this.getPermissionList().getStore(),h;h=function(a,b){if(b.success==true){g.load({id:l.get("id"),ci_method:"permissions"})}else{m.reject()}};m.set({hasRole:0});m.save({ci_method:"remove_role",params:{user_id:l.get("id")},callback:h})},togglePermissionView:function(b){this.showAllPermissions(b.value==1)},showAllPermissions:function(g){var h=this.getPermissionList(),f=h.getStore(),e=h.down("#permission-view-toggle");if(g==true){f.clearFilter();e.setText(Lang.localize("user_perm_view_all"))}else{f.filter("hasPermission",1);e.setText(Lang.localize("user_perm_view_selected"))}},showPermissionContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_user_permission_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);if(j.data.userHasPermission==1){k.down('menuitem[action="add"]').hide()}else{if(j.data.userHasPermission==0){k.down('menuitem[action="remove"]').hide()}}k.showAt(l.getXY())},addPermission:function(k){var g=k.up("menu").getRecord(),h=this.getList(),f=h.getSelectionModel().getSelection()[0],j;j=function(){g.reject()};g.set({userHasPermission:1});g.save({ci_method:"add_permission",params:{user_id:f.get("id")},failure:j})},removePermission:function(k){var g=k.up("menu").getRecord(),h=this.getList(),f=h.getSelectionModel().getSelection()[0],j;j=function(){g.reject()};g.set({userHasPermission:0});g.save({ci_method:"remove_permission",params:{user_id:f.get("id")},failure:j})}},0,0,0,0,0,0,[AppuntoAuth.controller,"Users"],0));(Ext.cmd.derive("AppuntoAuth.view.role.PermissionContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("role_perm_add"),action:"add",iconCls:"lock-add"},{text:Lang.localize("role_perm_remove"),action:"remove",iconCls:"lock-delete"}]},0,["appa_role_permission_contextmenu"],["appa_role_permission_contextmenu","box","component","container","menu","panel"],{appa_role_permission_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_role_permission_contextmenu"],0,[AppuntoAuth.view.role,"PermissionContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.view.role.Edit",Ext.window.Window,{title:Lang.localize("role_edit"),iconCls:"shield-edit",layout:"fit",autoShow:false,modal:true,initComponent:function(){this.items=[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:320,labelWidth:90,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"id",width:0,type:"hidden"},{name:"name",fieldLabel:Lang.localize("name"),xtype:"textfield",value:"",allowBlank:false},{name:"description",fieldLabel:Lang.localize("description"),xtype:"textfield",value:"",allowBlank:true}]}];this.buttons=[{text:Lang.localize("save"),action:"save"},{text:Lang.localize("cancel"),scope:this,handler:this.close}];Ext.window.Window.prototype.initComponent.apply(this,arguments);this.down("form").getForm().trackResetOnLoad=true}},0,["appa_role_edit"],["appa_role_edit","box","component","container","panel","window"],{appa_role_edit:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_role_edit"],0,[AppuntoAuth.view.role,"Edit"],0));(Ext.cmd.derive("AppuntoAuth.model.Role",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"name",type:"string"},{name:"internal_name",type:"string"},{name:"description",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/role"}},0,0,0,0,0,0,[AppuntoAuth.model,"Role"],0));(Ext.cmd.derive("AppuntoAuth.model.RolePermission",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"name",type:"string"},{name:"inRole",type:"int"},{name:"description",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/role"}},0,0,0,0,0,0,[AppuntoAuth.model,"RolePermission"],0));(Ext.cmd.derive("AppuntoAuth.view.role.ContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("role_add"),action:"add",iconCls:"shield-add"},{text:Lang.localize("role_edit"),action:"edit",iconCls:"shield-go"},{text:Lang.localize("role_delete"),action:"delete",iconCls:"shield-delete"}]},0,["appa_role_contextmenu"],["appa_role_contextmenu","box","component","container","menu","panel"],{appa_role_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_role_contextmenu"],0,[AppuntoAuth.view.role,"ContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.view.role.Add",Ext.window.Window,{title:Lang.localize("role_add"),iconCls:"shield-add",layout:"fit",autoShow:true,modal:true,initComponent:function(){this.items=[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:460,labelWidth:120,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"name",fieldLabel:Lang.localize("name"),xtype:"textfield",value:"",minLength:3,maxLength:32,allowBlank:false},{name:"description",fieldLabel:Lang.localize("description"),xtype:"textfield",value:"",maxLength:64,allowBlank:true}]}];this.buttons=[{text:Lang.localize("save"),action:"save"},{text:Lang.localize("cancel"),scope:this,handler:this.close}];Ext.window.Window.prototype.initComponent.apply(this,arguments)}},0,["appa_role_add"],["appa_role_add","box","component","container","panel","window"],{appa_role_add:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_role_add"],0,[AppuntoAuth.view.role,"Add"],0));(Ext.cmd.derive("AppuntoAuth.view.role.Frame",Ext.container.Container,{layout:{type:"hbox",align:"stretch"},defaults:{collapsible:false},border:0,items:[{xtype:"appa_role_list",flex:1,border:"0 1px 0 0",minWidth:120},{xtype:"appa_role_permission_list",border:"1px 0 0 1px",flex:1}]},0,["appa_role_frame"],["appa_role_frame","box","component","container"],{appa_role_frame:true,box:true,component:true,container:true},["widget.appa_role_frame"],0,[AppuntoAuth.view.role,"Frame"],0));(Ext.cmd.derive("AppuntoAuth.view.role.List",Ext.grid.Panel,{store:"Roles",title:Lang.localize("tab_user_roles"),iconCls:"shield",viewConfig:{loadMask:{msg:Lang.localize("loading")}},autoScroll:true,columns:[{header:Lang.localize("name"),dataIndex:"name",hideable:false,flex:2},{header:Lang.localize("description"),dataIndex:"description",hideable:false,flex:3}],tbar:[{xtype:"button",text:Lang.localize("role_add"),action:"add",cls:"view-selection-button",iconCls:"shield-add"}],bbar:[{xtype:"button",text:Lang.localize("refresh"),action:"refresh",iconCls:"x-tbar-loading"}]},0,["appa_role_list"],["appa_role_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_role_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_role_list"],0,[AppuntoAuth.view.role,"List"],0));(Ext.cmd.derive("AppuntoAuth.view.role.PermissionList",Ext.grid.Panel,{store:"RolePermissions",title:Lang.localize("tab_permissions"),iconCls:"lock",cls:"appunto-list",autoScroll:true,viewConfig:{emptyText:'

'+Lang.localize("role_select")+"

",deferEmptyText:false,loadMask:{msg:Lang.localize("loading")}},columns:[{header:"",dataIndex:"hasRolePermission",hideable:false,width:24,sortable:true,align:"center",renderer:function(f,e,d){if(d.get("inRole")==1){e.tdCls="permission-in-role"}return""}},{header:Lang.localize("name"),dataIndex:"name",hideable:false,flex:1},{header:Lang.localize("description"),dataIndex:"description",hideable:false,flex:2}],tbar:[{xtype:"button",itemId:"permission-view-toggle",text:Lang.localize("role_perm_view_all"),cls:"view-selection-button",menu:[{text:Lang.localize("role_perm_view_all"),value:"1",checked:true,group:"permission-view"},{text:Lang.localize("role_perm_view_selected"),value:"0",checked:false,group:"permission-view"}]}]},0,["appa_role_permission_list"],["appa_role_permission_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_role_permission_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_role_permission_list"],0,[AppuntoAuth.view.role,"PermissionList"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.Role");(Ext.cmd.derive("AppuntoAuth.store.Roles",Ext.data.Store,{model:"AppuntoAuth.model.Role",pageSize:0,remoteSort:true,remoteFilter:true,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"Roles"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.RolePermission");(Ext.cmd.derive("AppuntoAuth.store.RolePermissions",Ext.data.Store,{model:"AppuntoAuth.model.RolePermission",pageSize:0,remoteSort:false,remoteFilter:false,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"RolePermissions"],0));(Ext.cmd.derive("AppuntoAuth.controller.Roles",Ext.app.Controller,{models:["Role","RolePermission"],stores:["Roles","RolePermissions"],views:["role.Frame","role.List","role.ContextMenu","role.Add","role.Edit","role.PermissionList","role.PermissionContextMenu"],refs:[{ref:"list",selector:"appa_role_list"},{ref:"permissionsList",selector:"appa_role_permission_list"}],init:function(){this.control({appa_role_frame:{activate:this.refreshList},appa_role_list:{render:this.defineStoreEventHandlers,select:this.roleSelected,itemdblclick:this.editRole,itemcontextmenu:this.showContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},appa_role_permission_list:{itemcontextmenu:this.showPermissionContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},'appa_role_list button[action="add"]':{click:this.addRole},'appa_role_frame button[action="refresh"]':{click:this.refreshList},'appa_role_contextmenu menuitem[action="add"]':{click:this.addRole},"appa_role_add button[action=save]":{click:this.createRole},'appa_role_contextmenu menuitem[action="edit"]':{click:this.editRole},"appa_role_edit button[action=save]":{click:this.updateRole},'appa_role_contextmenu menuitem[action="delete"]':{click:this.confirmRoleDeletion},'appa_role_permission_list menuitem[group="permission-view"]':{click:this.togglePermissionView},'appa_role_permission_contextmenu menuitem[action="add"]':{click:this.addPermission},'appa_role_permission_contextmenu menuitem[action="remove"]':{click:this.removePermission}})},refreshList:function(h){var e=this.getList(),g=e.getSelectionModel(),f;f=function(){if(g.hasSelection()){rec=g.getSelection()[0];g.deselectAll();g.select(rec)}};e.getStore().load({callback:f})},defineStoreEventHandlers:function(b){this.getList().getStore().on({scope:this,load:this.storeLoad})},storeLoad:function(){var c=this.getPermissionsList(),d=c.getStore();c.setTitle(Lang.localize("tab_permissions"));d.removeAll()},showContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_role_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);k.showAt(l.getXY())},roleSelected:function(h,e){var g=this.getPermissionsList(),f=g.getStore();g.setTitle(Lang.localize("role_perm_for")+" "+e.get("name"));f.load({id:e.get("id"),ci_method:"permissions"})},addRole:function(e,g){var h=Ext.widget("appa_role_add"),f=h.down("form");f.getForm().findField("name").focus(false,100);h.showAt(g.getXY())},createRole:function(n){var l=n.up("window"),m=l.down("form"),o=m.getValues(),q=Ext.create("AppuntoAuth.model.Role"),j=this.getList(),p=j.getStore(),k;k=function(a,b){p.insert(0,a);j.getSelectionModel().select(a);l.close()};if(m.getForm().isValid()){q.set(o);q.save({success:k})}},editRole:function(j,k){var h=j.up("menu").getRecord(),e=Ext.widget("appa_role_edit"),g=e.down("form");g.loadRecord(h);g.getForm().findField("name").focus(false,100);e.showAt(k.getXY())},updateRole:function(l){var j=l.up("window"),k=j.down("form").form,g=k.getRecord(),m=k.getValues(),h;h=function(a,b){if(b.success==true){j.close()}else{g.reject()}};if(k.isDirty()){if(k.isValid()){g.set(m);g.save({callback:h})}}else{j.close()}},confirmRoleDeletion:function(e){var g=e.up("menu").getRecord(),f=this.getList().getStore(),h=Lang.localize("role_delete")+": "+g.data.name;Ext.MessageBox.confirm(h,Lang.localize("role_delete_confirm"),Ext.bind(this.deleteRole,this,[g,f],true))},deleteRole:function(m,k,l,o,n){var h=this.getList(),j;j=function(a,b){if(b.success==true){n.remove(o)}else{n.load({callback:function(){h.getSelectionModel().select(o)}})}};if(m=="yes"){o.erase({callback:j})}},togglePermissionView:function(b){this.showAllPermissions(b.value==1)},showAllPermissions:function(g){var h=this.getPermissionsList(),f=h.getStore(),e=h.down("#permission-view-toggle");if(g==true){f.clearFilter();e.setText(Lang.localize("role_perm_view_all"))}else{f.filter("inRole",1);e.setText(Lang.localize("role_perm_view_selected"))}},showPermissionContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_role_permission_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);if(j.get("inRole")==1){k.down('menuitem[action="add"]').hide()}if(j.data.inRole==0){k.down('menuitem[action="remove"]').hide()}k.showAt(l.getXY())},addPermission:function(k){var g=k.up("menu").getRecord(),f=this.getList(),h=f.getSelectionModel().getSelection()[0],j;j=function(){g.reject()};g.set({hasPermission:1});g.save({ci_method:"add_permission",params:{role_id:h.get("id")},failure:j})},removePermission:function(k){var g=k.up("menu").getRecord(),f=this.getList(),h=f.getSelectionModel().getSelection()[0],j;j=function(){g.reject()};g.set({hasPermission:0});g.save({ci_method:"remove_permission",params:{role_id:h.get("id")},failure:j})}},0,0,0,0,0,0,[AppuntoAuth.controller,"Roles"],0));(Ext.cmd.derive("AppuntoAuth.view.permission.Edit",Ext.window.Window,{title:Lang.localize("perm_edit"),iconCls:"lock-edit",layout:"fit",autoShow:false,modal:true,items:[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:320,labelWidth:90,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"id",width:0,type:"hidden"},{name:"name",fieldLabel:Lang.localize("name"),xtype:"textfield",value:"",allowBlank:false},{name:"internal_name",fieldLabel:Lang.localize("perm_internal_name"),xtype:"textfield",value:"",allowBlank:false},{name:"description",fieldLabel:Lang.localize("description"),xtype:"textfield",value:"",allowBlank:true}]}],buttons:[{text:"Save",action:"save"},{text:"Cancel",handler:function(){this.up(".window").close()}}],initComponent:function(){Ext.window.Window.prototype.initComponent.apply(this,arguments);this.down("form").getForm().trackResetOnLoad=true}},0,["appa_permission_edit"],["appa_permission_edit","box","component","container","panel","window"],{appa_permission_edit:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_permission_edit"],0,[AppuntoAuth.view.permission,"Edit"],0));(Ext.cmd.derive("AppuntoAuth.model.Permission",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"hasPermission",type:"int"},{name:"name",type:"string"},{name:"internal_name",type:"string"},{name:"description",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/permission"}},0,0,0,0,0,0,[AppuntoAuth.model,"Permission"],0));(Ext.cmd.derive("AppuntoAuth.view.permission.Add",Ext.window.Window,{autoScroll:true,title:Lang.localize("perm_add"),iconCls:"lock-add",layout:"fit",autoShow:true,modal:true,items:[{xtype:"form",baseCls:"x-plain",border:false,bodyStyle:{padding:"10px"},defaults:{width:320,labelWidth:90,blankText:Lang.localize("field_required"),msgTarget:"under"},items:[{name:"name",fieldLabel:Lang.localize("name"),xtype:"textfield",value:"",minLength:3,maxLength:32,allowBlank:false},{name:"description",fieldLabel:Lang.localize("description"),xtype:"textfield",value:"",maxLength:64,allowBlank:true}]}],buttons:[{text:Lang.localize("save"),action:"save"},{text:Lang.localize("cancel"),handler:function(){this.up(".window").close()}}]},0,["appa_permission_add"],["appa_permission_add","box","component","container","panel","window"],{appa_permission_add:true,box:true,component:true,container:true,panel:true,window:true},["widget.appa_permission_add"],0,[AppuntoAuth.view.permission,"Add"],0));(Ext.cmd.derive("AppuntoAuth.view.permission.ContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("perm_add"),action:"add",iconCls:"lock-add"},{text:Lang.localize("perm_edit"),action:"edit",iconCls:"lock-edit"},{text:Lang.localize("perm_delete"),action:"delete",iconCls:"lock-delete"}]},0,["appa_permission_contextmenu"],["appa_permission_contextmenu","box","component","container","menu","panel"],{appa_permission_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_permission_contextmenu"],0,[AppuntoAuth.view.permission,"ContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.view.permission.List",Ext.grid.Panel,{store:"Permissions",autoScroll:true,viewConfig:{loadMask:{msg:Lang.localize("loading")}},columns:[{header:Lang.localize("name"),dataIndex:"name",flex:1},{header:Lang.localize("perm_internal_name"),dataIndex:"internal_name",flex:1},{header:Lang.localize("name"),dataIndex:"description",flex:2}],tbar:[{xtype:"button",text:Lang.localize("perm_add"),action:"add",cls:"view-selection-button",iconCls:"lock-add"}],bbar:[{type:"button",text:Lang.localize("refresh"),action:"refresh",iconCls:"x-tbar-loading"}]},0,["appa_permission_list"],["appa_permission_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_permission_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_permission_list"],0,[AppuntoAuth.view.permission,"List"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.Permission");(Ext.cmd.derive("AppuntoAuth.store.Permissions",Ext.data.Store,{model:"AppuntoAuth.model.Permission",pageSize:0,remoteSort:true,remoteFilter:true,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"Permissions"],0));(Ext.cmd.derive("AppuntoAuth.controller.Permissions",Ext.app.Controller,{models:["Permission"],stores:["Permissions"],views:["permission.List","permission.ContextMenu","permission.Add","permission.Edit"],refs:[{ref:"list",selector:"appa_permission_list"}],init:function(){this.control({appa_permission_list:{activate:this.refreshList,itemdblclick:this.editPermission,itemcontextmenu:this.showContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},'appa_permission_list button[action="add"]':{click:this.addPermission},'appa_permission_list button[action="refresh"]':{click:this.refreshList},'appa_permission_contextmenu menuitem[action="add"]':{click:this.addPermission},"appa_permission_add button[action=save]":{click:this.createPermission},'appa_permission_contextmenu menuitem[action="edit"]':{click:this.editPermission},"appa_permission_edit button[action=save]":{click:this.updatePermission},'appa_permission_contextmenu menuitem[action="delete"]':{click:this.confirmPermissionDeletion}})},showContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_permission_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);if(j.data.active==1){k.down('menuitem[action="activate"]').hide()}if(j.data.active==0){k.down('menuitem[action="deactivate"]').hide()}k.showAt(l.getXY())},refreshList:function(c){var d=function(b,f,a){if(!a){this.getList().getStore().removeAll()}};this.getList().getStore().load()},addPermission:function(e,g){var h=Ext.widget("appa_permission_add"),f=h.down("form");f.getForm().findField("name").focus(false,100);h.showAt(g.getXY())},createPermission:function(m){var k=m.up("window"),l=k.down("form"),n=l.getValues(),h=Ext.create("AppuntoAuth.model.Permission"),o=this.getList().getStore(),j;j=function(a,b){o.insert(0,a);k.close()};if(l.getForm().isValid()){h.set(n);h.save({success:j})}},editPermission:function(j,k){var h=j.up("menu").getRecord(),e=Ext.widget("appa_permission_edit"),g=e.down("form");g.loadRecord(h);g.getForm().findField("name").focus(false,100);e.showAt(k.getXY())},updatePermission:function(l){var j=l.up("window"),k=j.down("form").form,g=k.getRecord(),m=k.getValues(),h;h=function(a,b){if(b.success==true){j.close()}else{g.reject()}};if(k.isDirty()){if(k.isValid()){g.set(m);g.save({callback:h})}}else{j.close()}},confirmPermissionDeletion:function(e){var g=e.up("menu").getRecord(),f=this.getList().getStore(),h=Lang.localize("role_delete")+": "+g.data.name;Ext.MessageBox.confirm(h,Lang.localize("perm_delete_confirm"),Ext.bind(this.deletePermission,this,[g,f],true))},deletePermission:function(m,k,l,o,n){var h=this.getList(),j;j=function(a,b){if(b.success==true){n.remove(o)}else{n.load({callback:function(){h.getSelectionModel().select(o)}})}};if(m=="yes"){o.erase({callback:j})}}},0,0,0,0,0,0,[AppuntoAuth.controller,"Permissions"],0));(Ext.cmd.derive("AppuntoAuth.model.Path",Ext.data.Model,{fields:[{name:"id",type:"int"},{name:"found",type:"int"},{name:"dir",type:"string"},{name:"full_path",type:"string"},{name:"ci_controller",type:"string"},{name:"ci_method",type:"string"},{name:"public_flag",type:"int"},{name:"permission_id",type:"int"},{name:"permission_name",type:"string"},{name:"note",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/path"}},0,0,0,0,0,0,[AppuntoAuth.model,"Path"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.Path");(Ext.cmd.derive("AppuntoAuth.store.Paths",Ext.data.Store,{model:"AppuntoAuth.model.Path",pageSize:9999,remoteSort:false,remoteFilter:false,groupField:"ci_controller",autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"Paths"],0));(Ext.cmd.derive("AppuntoAuth.store.Controllers",Ext.data.Store,{fields:[{name:"ci_controller",type:"string"},{name:"dir",type:"string"},{name:"full_path",type:"string"},{name:"methods",type:"int"},{name:"public_methods",type:"int"},{name:"private_methods",type:"int"}]},0,0,0,0,0,0,[AppuntoAuth.store,"Controllers"],0));(Ext.cmd.derive("AppuntoAuth.store.PathItems",Ext.data.Store,{fields:[{name:"id",type:"int"},{name:"found",type:"int"},{name:"dir",type:"string"},{name:"full_path",type:"string"},{name:"ci_controller",type:"string"},{name:"ci_method",type:"string"},{name:"public_flag",type:"int"},{name:"permission_id",type:"int"},{name:"permission_name",type:"string"},{name:"note",type:"string"}]},0,0,0,0,0,0,[AppuntoAuth.store,"PathItems"],0));(Ext.cmd.derive("AppuntoAuth.store.PermissionsSelection",Ext.data.Store,{model:"AppuntoAuth.model.Permission",pageSize:9999,remoteSort:true,remoteFilter:true,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"PermissionsSelection"],0));(Ext.cmd.derive("AppuntoAuth.view.path.ContextMenu",Ext.menu.Menu,{config:{record:null},items:[{text:Lang.localize("path_set_private"),action:"set_private",iconCls:"page-delete"},{text:Lang.localize("path_set_public"),action:"set_public",iconCls:"world-link"},{text:Lang.localize("path_set_permission"),action:"set_permission",itemId:"permission-options",iconCls:"lock",menu:[''+Lang.localize("path_permissions")+""]},{text:Lang.localize("path_remove_permission"),action:"remove_permission",iconCls:"lock-delete"},{text:Lang.localize("path_delete"),action:"delete",iconCls:"delete"}]},0,["appa_path_contextmenu"],["appa_path_contextmenu","box","component","container","menu","panel"],{appa_path_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_path_contextmenu"],0,[AppuntoAuth.view.path,"ContextMenu"],0));(Ext.cmd.derive("AppuntoAuth.view.path.Frame",Ext.panel.Panel,{layout:{type:"hbox",align:"stretch"},defaults:{collapsible:false},border:0,createMenuItem:true,items:[{xtype:"panel",title:Lang.localize("path_tab_controllers"),cls:"controller-frame",autoScroll:true,items:[{xtype:"appa_path_controller_view"}],border:0,flex:6},{xtype:"panel",title:Lang.localize("path_tab_paths"),layout:"fit",items:[{xtype:"appa_path_path_view"}],border:0,flex:10}],bbar:[{type:"button",text:Lang.localize("refresh"),action:"verify-paths",iconCls:"x-tbar-loading"}],initComponent:function(){Ext.panel.Panel.prototype.initComponent.apply(this,arguments)}},0,["appa_path_frame"],["appa_path_frame","box","component","container","panel"],{appa_path_frame:true,box:true,component:true,container:true,panel:true},["widget.appa_path_frame"],0,[AppuntoAuth.view.path,"Frame"],0));(Ext.cmd.derive("AppuntoAuth.view.path.ControllerView",Ext.view.View,{store:"Controllers",cls:"controller-view",itemSelector:"div.ci-controller",selectedItemCls:"controller-selected",overItemCls:"controller-rollover",initComponent:function(){this.tpl=new Ext.XTemplate('','
','
',"
",'
',"","',"',"',"
"+Lang.localize("controller_methods")+' : {methods}
"+Lang.localize("controller_public")+' : {public_methods}
"+Lang.localize("controller_private")+' : {private_methods}
","
",'
','{ci_controller}','{full_path}',"
","
","
");Ext.view.View.prototype.initComponent.apply(this,arguments)}},0,["appa_path_controller_view"],["appa_path_controller_view","box","component","dataview"],{appa_path_controller_view:true,box:true,component:true,dataview:true},["widget.appa_path_controller_view"],0,[AppuntoAuth.view.path,"ControllerView"],0));(Ext.cmd.derive("AppuntoAuth.view.path.PathView",Ext.grid.Panel,{store:"PathItems",autoScroll:true,border:0,columns:[{header:"",dataIndex:"found",width:24,sortable:false,menuDisabled:true,align:"center",renderer:function(g,e,h){var f;if(g==0){f="

"+Lang.localize("path_not_found_1")+"

";f+="

"+Lang.localize("path_not_found_2")+"

";e.tdCls="path-not-found";e.tdAttr='data-qtip="'+f+'"'}return""}},{header:"Method",dataIndex:"ci_method",flex:1},{header:Lang.localize("path_path"),dataIndex:"ci_method",sortable:true,menuDisabled:true,flex:2,renderer:function(g,e,h){var f=h.get("dir");path=Ext.util.Format.lowercase(h.get("ci_controller")+"/"+h.get("ci_method"));if(f!="."){path=f+"/"+path}return path}},{header:Lang.localize("path_access"),dataIndex:"public_flag",width:90,renderer:function(f,e,d){if(f==0){e.tdCls="path-private";return Lang.localize("path_private")}else{if(f==1){e.tdCls="path-public";return Lang.localize("path_public")}}return"unknown"}},{header:Lang.localize("path_permission"),dataIndex:"permission_name",flex:2}]},0,["appa_path_path_view"],["appa_path_path_view","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_path_path_view:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_path_path_view"],0,[AppuntoAuth.view.path,"PathView"],0));(Ext.cmd.derive("AppuntoAuth.controller.Paths",Ext.app.Controller,{models:["Path","Permission"],stores:["Paths","Controllers","PathItems","PermissionsSelection"],views:["path.Frame","path.ControllerView","path.PathView","path.ContextMenu"],refs:[{ref:"list",selector:"appa_path_list"},{ref:"delete_unfound_button",selector:'appa_path_list button[action="delete_not_found"]'},{ref:"frame",selector:"appa_path_frame"},{ref:"controllers",selector:"appa_path_controller_view"}],init:function(){this.lastSelected=null;this.control({appa_path_frame:{activate:this.pathsActivate},appa_path_path_view:{itemcontextmenu:this.showContextMenu,containercontextmenu:function(d,c){c.preventDefault()},contextmenu:function(b){b.preventDefault()}},'appa_path_contextmenu menuitem[action="set_public"]':{click:this.setPublic},'appa_path_contextmenu menuitem[action="set_private"]':{click:this.setPrivate},'appa_path_contextmenu menuitem[group="permission"]':{click:this.setPermission},'appa_path_contextmenu menuitem[action="remove_permission"]':{click:this.removePermission},'appa_path_contextmenu menuitem[action="delete"]':{click:this.deletePath},'appa_path_frame button[action="verify-paths"]':{click:this.verifyPaths},appa_path_controller_view:{select:this.controllerSelected}})},pathsActivate:function(){Ext.getStore("PermissionsSelection").load();this.verifyPaths()},verifyPaths:function(){var h=this.getFrame().up("container").getEl(),e=Ext.getStore("Paths"),g=this,f;f=function(b,c,a){h.unmask();if(a&&c.getResultSet().total>0){Ext.Msg.alert(Lang.localize("result"),c.getResultSet().message,g.refreshView,g)}else{g.refreshView()}};h.mask(Lang.localize("path_verify"));e.load({ci_method:"verify_paths",callback:f})},refreshView:function(f,h){var j=this,k=this.getFrame().up("container").getEl(),g;g=function(b,c,a){if(a){j.loadControllers();k.unmask()}else{Ext.getStore("Paths").removeAll()}};this.setLastSelected();k.mask(Lang.localize("path_refreshing"));Ext.getStore("Paths").load({callback:g})},setLastSelected:function(){this.lastSelected=this.getControllers().getSelectionModel().getLastSelected()},restoreSelection:function(){var c=Ext.getStore("Controllers"),d=this.getControllers();if(this.lastSelected!=null&&this.lastSelected!=undefined){idx=c.findExact("ci_controller",this.lastSelected.get("ci_controller"));d.getSelectionModel().select(idx)}},loadControllers:function(){var o=Ext.getStore("Paths"),q=this.getControllers(),j=Ext.getStore("Controllers"),p=o.getRange(),m=[],l=[],n={},k;Ext.Array.each(p,function(a){k=a.get("ci_controller");if(Ext.Array.indexOf(m,k)==-1){Ext.Array.push(m,k)}});Ext.Array.each(m,function(a){n[a]={ci_controller:a,dir:"",full_path:"",methods:0,public_methods:0,private_methods:0}});Ext.Array.each(p,function(a){ci_class=a.get("ci_controller");n[ci_class].dir=a.get("dir");n[ci_class].full_path=a.get("full_path");n[ci_class].methods+=1;if(a.get("public_flag")==1){n[ci_class].public_methods+=1}else{n[ci_class].private_methods+=1}});Ext.Array.each(m,function(a){Ext.Array.push(l,n[a])});j.loadData(l);this.restoreSelection()},controllerSelected:function(d,c){this.loadPaths(c.get("ci_controller"));this.lastSelected=c},loadPaths:function(f){var h=Ext.getStore("Paths"),g=Ext.getStore("PathItems"),e=h.getRange();filtered=[];Ext.Array.each(e,function(a){if(a.get("ci_controller")==f){Ext.Array.push(filtered,a)}});g.loadData(filtered)},expandAllGroups:function(){this.getList().getView().getFeature("grouping").expandAll()},collapseAllGroups:function(){this.getList().getView().getFeature("grouping").collapseAll()},groupingChanged:function(e,f){var g=this.getList(),h=f.items[0].property;g.features[0].groupHeaderTpl=g.getGroupHeader(h)},showContextMenu:function(e,l,o,k,n){n.preventDefault();var m=Ext.widget("appa_path_contextmenu"),q=Ext.getStore("PermissionsSelection"),p=q.getRange();m.setRecord(l);e.getSelectionModel().select(l,false,true);Ext.Array.each(p,function(a){perm_menu_item={text:a.get("name"),value:a.get("id"),checked:l.get("permission_id")==a.get("id"),group:"permission"};m.down('menuitem[action="set_permission"]').menu.add(perm_menu_item)});m.down('menuitem[action="set_private"]').setVisible(l.data.public_flag!=0);m.down('menuitem[action="set_public"]').setVisible(l.data.public_flag!=1);m.down('menuitem[action="set_permission"]').setDisabled(l.data.public_flag==1);m.down('menuitem[action="remove_permission"]').setDisabled(l.data.public_flag==1||l.get("permission_id")==0);m.down('menuitem[action="delete"]').setDisabled(l.data.found!=0);m.showAt(n.getXY())},findPaths:function(){var h=this,g=this.getList(),e=g.getStore(),f;f=function(b,c,a){if(a){if(c.getResultSet().total>0){Ext.Msg.alert("Result",c.getResultSet().message,h.refreshList,h)}else{h.refreshList()}}};e.load({ci_method:"verify_paths",callback:f})},refreshList:function(){var k=this,j=this.getList(),f=j.getStore(),g,h;g=function(b,c,a){if(a){h=f.findBy(function(d){if(d.get("found")==0){return true}});k.getDelete_unfound_button().setDisabled(h==-1)}};f.load({callback:g})},setPublic:function(h){var f=h.up("menu").getRecord(),k=Ext.getStore("Paths"),j=this,g;g=function(a,b){b.success?j.loadControllers():f.reject()};rec=k.getRange(k.findExact("id",f.get("id")))[0];rec.set({public_flag:1});rec.save({callback:g})},setPrivate:function(h){var f=h.up("menu").getRecord(),k=Ext.getStore("Paths"),j=this,g;g=function(a,b){b.success?j.loadControllers():f.reject()};rec=k.getRange(k.findExact("id",f.get("id")))[0];rec.set({public_flag:0});rec.save({callback:g})},denyPermissionChangeForPublic:function(b){return true},updatePath:function(e,d){var f=function(a,b){d.record.reject()};if(d.field=="permission_name"){d.record.set("permission_id",d.value)}if(d.value!=d.originalValue){d.record.save({failure:f})}},setPermission:function(h){var f=h.up("menu").up("menu").getRecord(),k=Ext.getStore("Paths"),j=this,g;g=function(a,b){b.success?j.loadControllers():f.reject()};rec=k.getRange(k.findExact("id",f.get("id")))[0];rec.set({permission_id:h.value});rec.save({callback:g})},removePermission:function(d){var e=d.up("menu").getRecord(),f=function(a,b){e.reject()};e.save({failure:f,ci_method:"remove_permission"})},deletePath:function(k){var g=k.up("menu").getRecord(),m=Ext.getStore("Paths"),l=this,j,h;h=function(a,b){if(b.success){l.refreshView(true)}else{g.reject()}};j=m.getRange(m.findExact("id",g.get("id")))[0];j.erase({callback:h})},deleteNotFound:function(){var h=this,g=this.getList(),e=g.getStore(),f;f=function(b,c,a){if(a){h.findPaths()}};e.load({ci_method:"delete_not_found",callback:f})},filterAuthPaths:function(d){var f=this.getList(),e=f.getStore();if(d.pressed){e.filter({filterFn:function(a){return a.get("dir")!="appunto-auth"}})}else{e.clearFilter()}}},0,0,0,0,0,0,[AppuntoAuth.controller,"Paths"],0));(Ext.cmd.derive("AppuntoAuth.model.Session",Ext.data.Model,{fields:[{name:"id",type:"string"},{name:"username",type:"string"},{name:"last_activity",type:"date",dateFormat:"Y-m-d H:i:s"},{name:"last_page",type:"string"},{name:"ip_address",type:"string"},{name:"user_agent",type:"string"}],proxy:{type:"ci",ci_class:"appunto-auth/ui/session"}},0,0,0,0,0,0,[AppuntoAuth.model,"Session"],0));(Ext.cmd.derive("AppuntoAuth.view.session.ListController",Ext.app.ViewController,{showContextMenu:function(e,j,m,h,l){l.preventDefault();var k=Ext.widget("appa_session_contextmenu");k.setRecord(j);e.getSelectionModel().select(j,false,true);k.showAt(l.getXY())},refreshList:function(b){Ext.getStore("Sessions").load()},confirmSessionDeletion:function(e){var g=e.up("menu").getRecord(),f=Ext.getStore("Sessions"),h="Delete session";if(g.data.username!=""){h=h+" ("+Lang.localize("session_delete_user")+": "+g.data.username+")"}Ext.MessageBox.confirm(h,Lang.localize("session_delete_confirm"),Ext.bind(this.deleteSession,this,[g,f],true))},deleteSession:function(k,h,j,g,f){if(k=="yes"){g.erase({success:function(){f.remove(g)}})}},toggleView:function(d){var f=d.up("appa_session_list"),e=f.getStore();button=f.down("#session-view-toggle");if(d.value==1){e.clearFilter();button.setText(Lang.localize("session_view_all"))}else{e.filter("show_all",0);button.setText(Lang.localize("session_view_logged_in"))}}},0,0,0,0,["controller.session-list"],0,[AppuntoAuth.view.session,"ListController"],0));(Ext.cmd.derive("AppuntoAuth.view.session.List",Ext.grid.Panel,{store:"Sessions",controller:"session-list",autoScroll:true,viewConfig:{loadMask:{msg:Lang.localize("loading")}},columns:[{header:Lang.localize("session_username"),flex:3,sortable:true,dataIndex:"username"},{header:Lang.localize("session_last_activity"),flex:3,sortable:true,renderer:function(f,d,e){return(Ext.util.Format.date(f,"y"))?Ext.util.Format.date(f,"M d, Y h:i:s A"):"unknown"},dataIndex:"last_activity"},{header:Lang.localize("session_last_page"),flex:3,sortable:true,dataIndex:"last_page"},{header:Lang.localize("session_ip_address"),flex:2,sortable:true,dataIndex:"ip_address"},{header:Lang.localize("session_user_agent"),flex:8,sortable:true,dataIndex:"user_agent"}],tbar:[{xtype:"button",itemId:"session-view-toggle",text:Lang.localize("session_view_all"),cls:"view-selection-button",menu:[{text:Lang.localize("session_view_all"),value:"1",checked:true,handler:"toggleView",group:"session-view"},{text:Lang.localize("session_view_logged_in"),value:"0",checked:false,handler:"toggleView",group:"session-view"}]}],bbar:[{xtype:"button",text:Lang.localize("refresh"),iconCls:"x-tbar-loading",handler:"refreshList"}],initComponent:function(){Ext.grid.Panel.prototype.initComponent.apply(this,arguments);this.addListener("activate",this.getController().refreshList);this.addListener("itemcontextmenu",this.getController().showContextMenu);this.addListener("containercontextmenu",function(d,c){c.preventDefault()});this.addListener("contextmenu",function(d,c){c.preventDefault()})}},0,["appa_session_list"],["appa_session_list","box","component","container","grid","gridpanel","panel","tablepanel"],{appa_session_list:true,box:true,component:true,container:true,grid:true,gridpanel:true,panel:true,tablepanel:true},["widget.appa_session_list"],0,[AppuntoAuth.view.session,"List"],0));(Ext.cmd.derive("AppuntoAuth.view.session.ContextMenu",Ext.menu.Menu,{controller:"session-list",config:{record:null},items:[{text:Lang.localize("session_delete"),handler:"confirmSessionDeletion",iconCls:"monitor-delete"}]},0,["appa_session_contextmenu"],["appa_session_contextmenu","box","component","container","menu","panel"],{appa_session_contextmenu:true,box:true,component:true,container:true,menu:true,panel:true},["widget.appa_session_contextmenu"],0,[AppuntoAuth.view.session,"ContextMenu"],0));Ext.require("Ext.data.Store");Ext.require("AppuntoAuth.model.Session");(Ext.cmd.derive("AppuntoAuth.store.Sessions",Ext.data.Store,{model:"AppuntoAuth.model.Session",pageSize:0,remoteSort:false,remoteFilter:true,autoLoad:false},0,0,0,0,0,0,[AppuntoAuth.store,"Sessions"],0));(Ext.cmd.derive("AppuntoAuth.controller.Sessions",Ext.app.Controller,{models:["Session"],stores:["Sessions"],views:["session.List","session.ContextMenu"]},0,0,0,0,0,0,[AppuntoAuth.controller,"Sessions"],0));(Ext.cmd.derive("AppuntoAuth.Application",Ext.app.Application,{name:"AppuntoAuth",enableQuickTips:true,controllers:["Navigation","Status","Users","Roles","Permissions","Paths","Sessions"]},0,0,0,0,0,0,[AppuntoAuth,"Application"],0));(Ext.cmd.derive("AppuntoAuth.view.main.MainController",Ext.app.ViewController,{onClickButton:function(){Ext.Msg.confirm("Confirm","Are you sure?","onConfirm",this)},onConfirm:function(b){if(b==="yes"){}}},0,0,0,0,["controller.main"],0,[AppuntoAuth.view.main,"MainController"],0));(Ext.cmd.derive("AppuntoAuth.view.main.MainModel",Ext.app.ViewModel,{data:{name:"AppuntoAuth"}},0,0,0,0,["viewmodel.main"],0,[AppuntoAuth.view.main,"MainModel"],0));Ext.application({name:"AppuntoAuth",extend:"AppuntoAuth.Application",autoCreateViewport:"AppuntoAuth.view.main.Main"}); \ No newline at end of file diff --git a/app/resources/appunto-auth/lang/english.js b/app/resources/appunto-auth/lang/english.js new file mode 100644 index 00000000..aa2c922b --- /dev/null +++ b/app/resources/appunto-auth/lang/english.js @@ -0,0 +1,140 @@ +var Language = +{ + override: + { + // Global + name : 'Name', //used in headers for various entities + description : 'Description', //used in headers for various entities + refresh : 'Refresh', // reload the data + result : 'Result', + save : 'Save', + cancel : 'Cancel', + yes : 'Yes', + no : 'No', + ok : 'Ok', + loading : 'Loading...', + field_required : 'This field is required', + paging_message : 'Displaying {0} - {1} of {2}', + + // Proxy errors + server_error_title : 'Server error', + server_error_unknown : 'Unknown error: The server did not send any information about the error.', + server_error_no_response: 'Unknown error: Server did not send a response.', + server_error_decode : 'Error decoding the response sent by the server.', + server_error_undefined : 'Undefined Server Error', + + // Application tabs + tab_status : 'Status', + tab_users : 'Users', + tab_user_roles : 'User Roles', + tab_permissions : 'Permissions', + tab_paths : 'Paths', + tab_sessions : 'Sessions', + + // User list + username : 'Username', + name : 'Name', + surname : 'Last name', + email : 'Email', + email_format : 'This field should be an e-mail address in the format "user@example.com"', + password : 'Password', + password_confirm : 'Confirm password', + password_change : 'Change password', + password_match : 'Passwords do not match', + password_format : 'Password must be at least 6 characters, no more than 16 characters, and must include at least one upper case letter, one lower case letter, and one numeric digit.', + user_set_active : 'Set user as active', + active : 'Active', // Whether or not this user has been activated or deactivated + user_add : 'Add user', + user_edit : 'Edit user', + user_delete : 'Delete user', + user_delete_confirm : 'Are you sure you want to delete this user?', + user_activate : 'Activate user', + user_deactivate : 'Deactivate user', + last_ip : 'Last IP', + last_login : 'Last Login', + created : 'Created', + modified : 'Modified', + never : 'Never', + user_select : 'Select a user', + user_select_or : 'Select a User or select Show All above.', + user_no_roles : 'No roles are assigned to this user. Select Show All for a list of available roles', + user_no_perm : 'No permissions are assigned to this user. Select Show All for a list of available permissions', + user_role_list : 'User roles', + user_role_list_for : 'User roles for', //will be followed by username + user_role_add : 'Add user to role', + user_role_remove : 'Remove user from role', + user_perm_list : 'Application permissions', + user_perm_list_for : 'Application permissions for', //wilbe followed by username + user_perm_add : 'Grant user permission', + user_perm_remove : 'Revoke user permission', + user_role_view_all : 'Show all roles', + user_role_view_selected : 'Show only roles for the selected user', + user_perm_view_all : 'Show all permissions', + user_perm_view_selected : 'Show only permissions for the selected user', + granted_to : 'Granted to', // permission is granted to user or to the user's role + grant_role : 'Role', + grant_user : 'User', + user_perm_granted_role : 'permission granted through role', + user_perm_granted_user : 'permission granted to user', + + + // Role list + role_add : 'Add role', + role_edit : 'Edit role', + role_delete : 'Delete role', + role_delete_confirm : 'Are you sure you want to delete this role?', + role_perm_view_all : 'Show all permissions', + role_perm_view_selected : 'Show only permissions for the selected role', + role_perm_for : 'Permissions for', + role_select : 'Select a Role or select Show All above.', + role_perm_add : 'Add permission to role', + role_perm_remove : 'Remove permission from role', + + // Permission list + perm_internal_name : 'Internal Name', + perm_add : 'Add permission', + perm_edit : 'Edit permission', + perm_delete : 'Delete permission', + perm_delete_confirm : 'Are you sure you want to delete this permission?', + + + // Path list + path_tab_controllers : 'Controllers', + path_tab_paths : 'Paths', + controller_methods : 'methods', + controller_public : 'public', + controller_private : 'private', + path_verify : 'Verifing application paths', + path_refreshing : 'Refreshing paths', + path_public : 'Public', + path_private : 'Private', + path_method : 'Method', // A Codeigniter function inside a controller + path_path : 'Path', + path_access : 'Access', // Header for public/private column + path_permission : 'Permission', + path_permissions : 'Permissions', + path_set_public : 'Make path public', + path_set_private : 'Make path private', + path_set_permission : 'Set Permission', + path_remove_permission : 'Remove Permission', + path_delete : 'Delete Path', + path_not_found_1 : 'This method was not found in the Controller but a record of it exists in the database.', + path_not_found_2 : 'You may delete the record of this path.', + + // Session List + session_username : 'Username', + session_last_activity : 'Last Activity', + session_ip_address : 'IP Address', + session_last_page : 'Last Page', + session_user_agent : 'User Agent', // User-Agent string returned by user's browser + session_view_all : 'Show all sessions', + session_view_logged_in : 'Show only logged in sessions', + session_delete : 'Delete Session', + session_delete_confirm : 'Are you sure you want to delete this session?', + session_delete_user : 'user', // used in delete confirmation window title eg: "user: Bob Jones" + + + // dummy val so I don't forget to remove trailing comma + dummy : '' + } +}; diff --git a/app/resources/appunto-auth/lang/portuguese-br.js b/app/resources/appunto-auth/lang/portuguese-br.js new file mode 100644 index 00000000..f10f6f60 --- /dev/null +++ b/app/resources/appunto-auth/lang/portuguese-br.js @@ -0,0 +1,143 @@ +/* + * Translation by Loanda Drew and Ricardo Silva + */ +var Language = +{ + override: + { + // Global + name : 'Nome', //used in headers for various entities + description : 'Descrição', //used in headers for various entities + refresh : 'Atualizar', // reload the data + result : 'Resultado', + save : 'Salvar', + cancel : 'Cancelar', + yes : 'Sim', + no : 'Não', + ok : 'Ok', + loading : 'Carregando...', + field_required : 'Este campo é obrigatório', + paging_message : 'Exibindo {0} - {1} de {2}', + + // Proxy errors + server_error_title : 'Erro de servidor', + server_error_unknown : 'Erro desconhecido: O servidor não enviou qualquer informação sobre o erro.', + server_error_no_response: 'Erro desconhecido: O servidor não enviou nenhuma resposta.', + server_error_decode : 'Erro na decodificação da resposta enviada pelo servidor.', + server_error_undefined : 'Erro de servidor indefinido', + + + // Application tabs + tab_status : 'Status', + tab_users : 'Usuários', + tab_user_roles : 'Funções do usuário', + tab_permissions : 'Permissões', + tab_paths : 'Caminhos', + tab_sessions : 'Sessões', + + // usuário list + username : 'Usuário', + name : 'Nome', + surname : 'Sobrenome', + email : 'Email', + email_format : 'Este campo deve ser um endereço de email no formato "nome@exemplo.com"', + password : 'Senha', + password_confirm : 'Confirmar senha', + password_change : 'Alterar senha', + password_match : 'As senhas usadas não são iguais', + password_format : 'Senhas devem ter entre 6 e 16 caracteres, e incluir no mínimo uma letra maiúscula, uma letra minúscula e um dígito numérico', + user_set_active : 'Configurar usuário como ativo', + active : 'Ativo', // Whether or not this User has been activated or deactivated + user_add : 'Adicionar usuário', + user_edit : 'Editar usuário', + user_delete : 'Apagar usuário', + user_delete_confirm : 'Tem certeza que deseja apagar este usuário?', + user_activate : 'Ativar usuário', + user_deactivate : 'Desativar usuário', + last_ip : 'Último IP', + last_login : 'Último Login', + created : 'Criado', + modified : 'Modificado', + never : 'Nunca', + user_select : 'Selecione um usuário', + user_select_or : 'Selecione um usuário ou Mostre Todos acima.', + user_no_roles : 'Nenhuma função está associada a este usuário. Selecione Mostrar Todos para ver as funções disponíveis.', + user_no_perm : 'Nenhuma permissão está associada a este usuário. Selecione Mostrar Todos para ver as permissões disponíveis.', + user_role_list : 'Funções do usuário', + user_role_list_for : 'Funções do usuário para', //will be followed by username + user_role_add : 'Adicionar usuário a função', + user_role_remove : 'Remover usuário da função', + user_perm_list : 'Permissões do aplicativo', + user_perm_list_for : 'Permissões do aplicativo para', //will be followed by username + user_perm_add : 'Conceder permissão ao usuário', + user_perm_remove : 'Remover permissão do usuário', + user_role_view_all : 'Mostrar todas as funções', + user_role_view_selected : 'Mostrar apenas as funções do usuário selecionado', + user_perm_view_all : 'Mostrar todas as permissões', + user_perm_view_selected : 'Mostrar apenas as permissões do usuário selecionado', + granted_to : 'Concedido a', // permission is granted to user or to the user's role + grant_role : 'Função', + grant_user : 'Usuário', + user_perm_granted_role : 'permissão concedida via função', + user_perm_granted_user : 'permissão concedida ao usuário', + + + // Role list + role_add : 'Adicionar função', + role_edit : 'Editar função', + role_delete : 'Apagar função', + role_delete_confirm : 'Tem certeza que deseja apagar esta função?', + role_perm_view_all : 'Mostrar todas as permissões', + role_perm_view_selected : 'Mostrar apenas as permisões da função selecionada', + role_perm_for : 'Permissões para', + role_select : 'Selecionar uma Função ou Mostrar Todas acima.', + role_perm_add : 'Adicionar permissão à função', + role_perm_remove : 'Remover perissão da função', + + // Permission list + perm_internal_name : 'Nome Interno', + perm_add : 'Adicionar permissão', + perm_edit : 'Editar permissão', + perm_delete : 'Apagar permissão', + perm_delete_confirm : 'Tem certeza que deseja apagar esta permissão?', + + // Path list + path_tab_controllers : 'Controladores', + path_tab_paths : 'Caminhos', + controller_methods : 'métodos', + controller_public : 'público', + controller_private : 'privado', + path_verify : 'Verificando caminhos do aplicativo', + path_refreshing : 'Atualizando caminhos', + path_public : 'Público', + path_private : 'Privado', + path_method : 'Método', // A Codeigniter function inside a controller + path_path : 'Caminho', + path_access : 'Acesso', // Header for public/private column + path_permission : 'Permissão', + path_permissions : 'Permissões', + path_set_public : 'Tornar caminho público', + path_set_private : 'Tornar caminho privado', + path_set_permission : 'Configurar permissão', + path_remove_permission : 'Remover Permissão', + path_delete : 'Apagar caminho', + path_not_found_1 : 'Este método não foi encontrado no controlador, mas existe um registro dele no banco de dados.', + path_not_found_2 : 'Você pode apagar o registro deste caminho.', + + // Session List + session_username : 'usuário', + session_last_activity : 'Última Atividade', + session_ip_address : 'Endereço de IP', + session_last_page : 'Última Página', + session_user_agent : 'User Agent', // User Agent string returned by usuário's browser + session_view_all : 'Mostrar todas as sessões', + session_view_logged_in : 'Mostrar apenas as sessões ativas', + session_delete : 'Apagar sessão', + session_delete_confirm : 'Tem certeza que deseja apagar esta sessão?', + session_delete_user : 'usuário', // used in delete confirmation window title eg: "user: Bob Jones" + + + // dummy val so I don't forget to remove trailing comma + dummy : '' + } +}; diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/boundlist/trigger-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/boundlist/trigger-arrow.png new file mode 100644 index 00000000..11daac3d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/boundlist/trigger-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/corners-blue.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/corners-blue.gif new file mode 100644 index 00000000..fa419b50 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/corners-blue.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/corners.gif new file mode 100644 index 00000000..8aa8cae5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/l-blue.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/l-blue.gif new file mode 100644 index 00000000..5ed7f004 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/l-blue.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/l.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/l.gif new file mode 100644 index 00000000..0160f97f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/l.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/r-blue.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/r-blue.gif new file mode 100644 index 00000000..3ea5cae3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/r-blue.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/r.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/r.gif new file mode 100644 index 00000000..34237f62 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/r.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/tb-blue.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/tb-blue.gif new file mode 100644 index 00000000..562fecca Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/tb-blue.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/box/tb.gif b/app/resources/appunto-auth/theme/appunto-auth/images/box/tb.gif new file mode 100644 index 00000000..435889bf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/box/tb.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open-rtl.gif new file mode 100644 index 00000000..b8c55c37 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open-rtl.png new file mode 100644 index 00000000..d9968ae6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open.gif new file mode 100644 index 00000000..3ab4f71a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open.png new file mode 100644 index 00000000..04b11322 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-open.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-rtl.gif new file mode 100644 index 00000000..e54eacbe Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-rtl.png new file mode 100644 index 00000000..90f717b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow.gif new file mode 100644 index 00000000..b0221875 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow.png new file mode 100644 index 00000000..51d28613 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-left.gif new file mode 100644 index 00000000..2db8cf5c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-left.png new file mode 100644 index 00000000..5ff969ee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-right.gif new file mode 100644 index 00000000..5d5a7ab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-right.png new file mode 100644 index 00000000..6fed21a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-scroll-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open-rtl.gif new file mode 100644 index 00000000..8593bb78 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open-rtl.png new file mode 100644 index 00000000..a8801dfb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open.gif new file mode 100644 index 00000000..23c70b3f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open.png new file mode 100644 index 00000000..19a66732 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-open.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over-rtl.gif new file mode 100644 index 00000000..05790c35 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over-rtl.png new file mode 100644 index 00000000..db04b9d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over.gif new file mode 100644 index 00000000..3f9bd609 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over.png new file mode 100644 index 00000000..5106cdf1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-over.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-rtl.gif new file mode 100644 index 00000000..67cbf4b6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-rtl.png new file mode 100644 index 00000000..658194be Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow.gif new file mode 100644 index 00000000..6b50863a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow.png new file mode 100644 index 00000000..d3d375c2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/breadcrumb/default-split-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-corners.gif new file mode 100644 index 00000000..0f06da96 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-notitle-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-notitle-corners.gif new file mode 100644 index 00000000..0f06da96 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-notitle-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-notitle-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-notitle-sides.gif new file mode 100644 index 00000000..be39f8ae Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-notitle-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-sides.gif new file mode 100644 index 00000000..92b3123b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn-group/btn-group-default-framed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-corners.gif new file mode 100644 index 00000000..fe8d6f8c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-corners.gif new file mode 100644 index 00000000..6a7fdd24 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-fbg.gif new file mode 100644 index 00000000..940b3a6e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-sides.gif new file mode 100644 index 00000000..476747cd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-fbg.gif new file mode 100644 index 00000000..d8e7405a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-corners.gif new file mode 100644 index 00000000..8046f4ce Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-fbg.gif new file mode 100644 index 00000000..d8e7405a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-corners.gif new file mode 100644 index 00000000..8e313b9d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-fbg.gif new file mode 100644 index 00000000..47605ec8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-sides.gif new file mode 100644 index 00000000..426563d9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-corners.gif new file mode 100644 index 00000000..73862353 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-fbg.gif new file mode 100644 index 00000000..2fb9e196 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-sides.gif new file mode 100644 index 00000000..b3c452ad Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-sides.gif new file mode 100644 index 00000000..f534e6f4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-corners.gif new file mode 100644 index 00000000..d423d99e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-fbg.gif new file mode 100644 index 00000000..47605ec8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-sides.gif new file mode 100644 index 00000000..b0ba4e3c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-corners.gif new file mode 100644 index 00000000..46027315 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-fbg.gif new file mode 100644 index 00000000..2fb9e196 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-sides.gif new file mode 100644 index 00000000..0987d81b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-sides.gif new file mode 100644 index 00000000..55c9229d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-large-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-corners.gif new file mode 100644 index 00000000..4846ef4f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-corners.gif new file mode 100644 index 00000000..6125a3c9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-fbg.gif new file mode 100644 index 00000000..33ed9e11 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-sides.gif new file mode 100644 index 00000000..53f68a38 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-fbg.gif new file mode 100644 index 00000000..71489743 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-corners.gif new file mode 100644 index 00000000..84b29d28 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-fbg.gif new file mode 100644 index 00000000..71489743 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-corners.gif new file mode 100644 index 00000000..a4e59979 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-fbg.gif new file mode 100644 index 00000000..0649fc87 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-sides.gif new file mode 100644 index 00000000..c81eea47 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-corners.gif new file mode 100644 index 00000000..918f97da Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-fbg.gif new file mode 100644 index 00000000..22ae35d3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-sides.gif new file mode 100644 index 00000000..7dc4dfb9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-sides.gif new file mode 100644 index 00000000..6743cd36 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-corners.gif new file mode 100644 index 00000000..fef2bda4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-fbg.gif new file mode 100644 index 00000000..0649fc87 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-sides.gif new file mode 100644 index 00000000..b08be609 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-corners.gif new file mode 100644 index 00000000..12be2626 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-fbg.gif new file mode 100644 index 00000000..22ae35d3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-sides.gif new file mode 100644 index 00000000..1c0b2271 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-sides.gif new file mode 100644 index 00000000..fddd0c9d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-medium-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-corners.gif new file mode 100644 index 00000000..fb5eff3c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-corners.gif new file mode 100644 index 00000000..0c67496b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-fbg.gif new file mode 100644 index 00000000..1ed5328c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-sides.gif new file mode 100644 index 00000000..e6988aca Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-fbg.gif new file mode 100644 index 00000000..2d8c6d8d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-corners.gif new file mode 100644 index 00000000..8ff9b323 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-fbg.gif new file mode 100644 index 00000000..2d8c6d8d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-corners.gif new file mode 100644 index 00000000..ada01e9a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-fbg.gif new file mode 100644 index 00000000..562389b9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-sides.gif new file mode 100644 index 00000000..22905938 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-corners.gif new file mode 100644 index 00000000..988aff1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-fbg.gif new file mode 100644 index 00000000..80659002 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-sides.gif new file mode 100644 index 00000000..8f094692 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-sides.gif new file mode 100644 index 00000000..e5122060 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-corners.gif new file mode 100644 index 00000000..dac27ef5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-fbg.gif new file mode 100644 index 00000000..562389b9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-sides.gif new file mode 100644 index 00000000..eced76ec Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-corners.gif new file mode 100644 index 00000000..6896811a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-fbg.gif new file mode 100644 index 00000000..80659002 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-sides.gif new file mode 100644 index 00000000..c46ddc8c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-sides.gif new file mode 100644 index 00000000..beac7f81 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-small-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-corners.gif new file mode 100644 index 00000000..6e6dd298 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-corners.gif new file mode 100644 index 00000000..601a8a8b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-fbg.gif new file mode 100644 index 00000000..ca489cd9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-sides.gif new file mode 100644 index 00000000..a0de586e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-fbg.gif new file mode 100644 index 00000000..fe34b622 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-corners.gif new file mode 100644 index 00000000..142dd29b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-fbg.gif new file mode 100644 index 00000000..fe34b622 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-corners.gif new file mode 100644 index 00000000..a2e12b49 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-fbg.gif new file mode 100644 index 00000000..577568f3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-sides.gif new file mode 100644 index 00000000..cbdf676d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-corners.gif new file mode 100644 index 00000000..65a7d2c9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif new file mode 100644 index 00000000..badff7db Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-sides.gif new file mode 100644 index 00000000..982f1b5c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-sides.gif new file mode 100644 index 00000000..024f634b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-corners.gif new file mode 100644 index 00000000..e343533f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-fbg.gif new file mode 100644 index 00000000..577568f3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-sides.gif new file mode 100644 index 00000000..a248c322 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-corners.gif new file mode 100644 index 00000000..0fef573a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-fbg.gif new file mode 100644 index 00000000..badff7db Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-sides.gif new file mode 100644 index 00000000..a84dc228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-sides.gif new file mode 100644 index 00000000..29f443b7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-large-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-corners.gif new file mode 100644 index 00000000..6e6dd298 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-corners.gif new file mode 100644 index 00000000..601a8a8b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-fbg.gif new file mode 100644 index 00000000..7707aa1d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-sides.gif new file mode 100644 index 00000000..55de8a69 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-fbg.gif new file mode 100644 index 00000000..804354b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-corners.gif new file mode 100644 index 00000000..142dd29b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-fbg.gif new file mode 100644 index 00000000..804354b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-corners.gif new file mode 100644 index 00000000..59a99e33 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-fbg.gif new file mode 100644 index 00000000..3aae9757 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-sides.gif new file mode 100644 index 00000000..b529903c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif new file mode 100644 index 00000000..92267ece Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif new file mode 100644 index 00000000..c5d4e673 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif new file mode 100644 index 00000000..34c16dc8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-sides.gif new file mode 100644 index 00000000..b521c99c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-corners.gif new file mode 100644 index 00000000..f8711fad Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-fbg.gif new file mode 100644 index 00000000..3aae9757 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-sides.gif new file mode 100644 index 00000000..0bda741a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-corners.gif new file mode 100644 index 00000000..74f4c0bc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-fbg.gif new file mode 100644 index 00000000..c5d4e673 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-sides.gif new file mode 100644 index 00000000..0d9f0913 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-sides.gif new file mode 100644 index 00000000..efeaf838 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-medium-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-corners.gif new file mode 100644 index 00000000..6e6dd298 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-corners.gif new file mode 100644 index 00000000..601a8a8b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-fbg.gif new file mode 100644 index 00000000..9a3cdf11 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-sides.gif new file mode 100644 index 00000000..5295a3ee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-fbg.gif new file mode 100644 index 00000000..b362e826 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-corners.gif new file mode 100644 index 00000000..142dd29b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-fbg.gif new file mode 100644 index 00000000..b362e826 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-corners.gif new file mode 100644 index 00000000..59a99e33 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-fbg.gif new file mode 100644 index 00000000..108a3ddf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-sides.gif new file mode 100644 index 00000000..a3a4e139 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-corners.gif new file mode 100644 index 00000000..92267ece Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif new file mode 100644 index 00000000..ed016e18 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-sides.gif new file mode 100644 index 00000000..097bbe04 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-sides.gif new file mode 100644 index 00000000..744e0269 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-corners.gif new file mode 100644 index 00000000..f8711fad Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-fbg.gif new file mode 100644 index 00000000..108a3ddf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-sides.gif new file mode 100644 index 00000000..538d37f1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-corners.gif new file mode 100644 index 00000000..74f4c0bc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-fbg.gif new file mode 100644 index 00000000..ed016e18 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-sides.gif new file mode 100644 index 00000000..bd48a04b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-sides.gif new file mode 100644 index 00000000..97109aa7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-default-toolbar-small-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-corners.gif new file mode 100644 index 00000000..2a55edda Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-fbg.gif new file mode 100644 index 00000000..577568f3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-sides.gif new file mode 100644 index 00000000..cbdf676d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-corners.gif new file mode 100644 index 00000000..ddd5e91b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-fbg.gif new file mode 100644 index 00000000..badff7db Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-sides.gif new file mode 100644 index 00000000..982f1b5c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-corners.gif new file mode 100644 index 00000000..477ef72d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-fbg.gif new file mode 100644 index 00000000..577568f3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-sides.gif new file mode 100644 index 00000000..a248c322 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-corners.gif new file mode 100644 index 00000000..cbdd93bd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-fbg.gif new file mode 100644 index 00000000..badff7db Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-sides.gif new file mode 100644 index 00000000..a84dc228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-large-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-corners.gif new file mode 100644 index 00000000..a049a008 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-fbg.gif new file mode 100644 index 00000000..3aae9757 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-sides.gif new file mode 100644 index 00000000..b529903c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-corners.gif new file mode 100644 index 00000000..faa26129 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-fbg.gif new file mode 100644 index 00000000..c5d4e673 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-sides.gif new file mode 100644 index 00000000..34c16dc8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-corners.gif new file mode 100644 index 00000000..f8711fad Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-fbg.gif new file mode 100644 index 00000000..3aae9757 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-sides.gif new file mode 100644 index 00000000..0bda741a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-corners.gif new file mode 100644 index 00000000..d2605c30 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-fbg.gif new file mode 100644 index 00000000..c5d4e673 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-sides.gif new file mode 100644 index 00000000..0d9f0913 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-medium-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-corners.gif new file mode 100644 index 00000000..59a99e33 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-fbg.gif new file mode 100644 index 00000000..108a3ddf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-sides.gif new file mode 100644 index 00000000..a3a4e139 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-corners.gif new file mode 100644 index 00000000..92267ece Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-fbg.gif new file mode 100644 index 00000000..ed016e18 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-sides.gif new file mode 100644 index 00000000..097bbe04 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-corners.gif new file mode 100644 index 00000000..f8711fad Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-fbg.gif new file mode 100644 index 00000000..108a3ddf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-sides.gif new file mode 100644 index 00000000..538d37f1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-corners.gif new file mode 100644 index 00000000..74f4c0bc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-fbg.gif new file mode 100644 index 00000000..ed016e18 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-sides.gif new file mode 100644 index 00000000..bd48a04b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/btn/btn-plain-toolbar-small-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/arrow-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/arrow-rtl.gif new file mode 100644 index 00000000..b8c55c37 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/arrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/arrow.gif new file mode 100644 index 00000000..3ab4f71a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/arrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/btn-arrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/btn-arrow.gif new file mode 100644 index 00000000..f90d5df4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/btn-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/btn-sprite.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/btn-sprite.gif new file mode 100644 index 00000000..834ff978 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/btn-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/btn.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/btn.gif new file mode 100644 index 00000000..96ea61ab Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/btn.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-arrow-rtl.png new file mode 100644 index 00000000..76beeabd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-arrow.png new file mode 100644 index 00000000..32674e43 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-b-rtl.png new file mode 100644 index 00000000..79677a4e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-b.png new file mode 100644 index 00000000..9f3928a2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-rtl.png new file mode 100644 index 00000000..79850507 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow.png new file mode 100644 index 00000000..06ad27b1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-large-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-arrow-rtl.png new file mode 100644 index 00000000..d54d3a0d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-arrow.png new file mode 100644 index 00000000..e565db49 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-b-rtl.png new file mode 100644 index 00000000..f2fb53be Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-b.png new file mode 100644 index 00000000..ee39ae27 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-rtl.png new file mode 100644 index 00000000..fb111406 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow.png new file mode 100644 index 00000000..c1d18755 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-medium-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-arrow-rtl.png new file mode 100644 index 00000000..35384457 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-arrow.png new file mode 100644 index 00000000..17a9beb1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-b-rtl.png new file mode 100644 index 00000000..2f8b2e57 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-b.png new file mode 100644 index 00000000..afd13fbb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-rtl.png new file mode 100644 index 00000000..f59b7922 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow.png new file mode 100644 index 00000000..eaffbdcb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-small-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-arrow-rtl.png new file mode 100644 index 00000000..d8f0151d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-arrow.png new file mode 100644 index 00000000..31fc36e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-b-rtl.png new file mode 100644 index 00000000..379d2d9f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-b.png new file mode 100644 index 00000000..dcfe8eab Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-rtl.png new file mode 100644 index 00000000..612a6b16 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow.png new file mode 100644 index 00000000..731b207e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-large-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-arrow-rtl.png new file mode 100644 index 00000000..1648e51c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-arrow.png new file mode 100644 index 00000000..65fdd036 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-b-rtl.png new file mode 100644 index 00000000..8d2232b1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-b.png new file mode 100644 index 00000000..2489479f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-rtl.png new file mode 100644 index 00000000..c81c5f2e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow.png new file mode 100644 index 00000000..0a6857aa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-medium-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-arrow-rtl.png new file mode 100644 index 00000000..89191385 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-arrow.png new file mode 100644 index 00000000..b56c2a65 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-b-rtl.png new file mode 100644 index 00000000..11423517 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-b.png new file mode 100644 index 00000000..bb1b08e9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-rtl.png new file mode 100644 index 00000000..9e9e16b0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow.png new file mode 100644 index 00000000..9a728579 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/default-toolbar-small-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-arrow-rtl.png new file mode 100644 index 00000000..3d68e7e2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-arrow.png new file mode 100644 index 00000000..17a9beb1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow-b.png new file mode 100644 index 00000000..afd13fbb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow-rtl.png new file mode 100644 index 00000000..f59b7922 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow.png new file mode 100644 index 00000000..eaffbdcb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/grid-cell-small-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/group-cs.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/group-cs.gif new file mode 100644 index 00000000..7059e2b0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/group-cs.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/group-lr.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/group-lr.gif new file mode 100644 index 00000000..3f41fbd8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/group-lr.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/group-tb.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/group-tb.gif new file mode 100644 index 00000000..c5ea8cab Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/group-tb.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-arrow-rtl.png new file mode 100644 index 00000000..d8f0151d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-arrow.png new file mode 100644 index 00000000..31fc36e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-b-rtl.png new file mode 100644 index 00000000..379d2d9f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-b.png new file mode 100644 index 00000000..dcfe8eab Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-rtl.png new file mode 100644 index 00000000..612a6b16 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow.png new file mode 100644 index 00000000..731b207e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-large-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-arrow-rtl.png new file mode 100644 index 00000000..1648e51c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-arrow.png new file mode 100644 index 00000000..65fdd036 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-b-rtl.png new file mode 100644 index 00000000..8d2232b1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-b.png new file mode 100644 index 00000000..2489479f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-rtl.png new file mode 100644 index 00000000..c81c5f2e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow.png new file mode 100644 index 00000000..0a6857aa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-medium-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-arrow-rtl.png new file mode 100644 index 00000000..89191385 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-arrow.png new file mode 100644 index 00000000..b56c2a65 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-b-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-b-rtl.png new file mode 100644 index 00000000..11423517 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-b-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-b.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-b.png new file mode 100644 index 00000000..bb1b08e9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-b.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-rtl.png new file mode 100644 index 00000000..9e9e16b0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow.png new file mode 100644 index 00000000..9a728579 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/plain-toolbar-small-s-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-b-noline.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-b-noline.gif new file mode 100644 index 00000000..a4220ee9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-b-noline.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-b.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-b.gif new file mode 100644 index 00000000..5b46305b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-b.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-bo.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-bo.gif new file mode 100644 index 00000000..ed6eeca0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-bo.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-light-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-light-rtl.gif new file mode 100644 index 00000000..cfa5ca3b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-light-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-light.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-light.gif new file mode 100644 index 00000000..08783c9d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-light.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-noline-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-noline-rtl.gif new file mode 100644 index 00000000..c242ef2f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-noline-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-noline.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-noline.gif new file mode 100644 index 00000000..0953eab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-noline.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-o-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-o-rtl.gif new file mode 100644 index 00000000..badb3f89 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-o-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-o.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-o.gif new file mode 100644 index 00000000..b6ca4688 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-o.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-rtl.gif new file mode 100644 index 00000000..da278f51 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow.gif new file mode 100644 index 00000000..5692b8ac Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/button/s-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/arrow-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/arrow-left.png new file mode 100644 index 00000000..fc09f9a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/arrow-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/arrow-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/arrow-right.png new file mode 100644 index 00000000..a22b876f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/arrow-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/datepicker-footer-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/datepicker-footer-bg.gif new file mode 100644 index 00000000..2d8439ac Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/datepicker-footer-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/datepicker-header-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/datepicker-header-bg.gif new file mode 100644 index 00000000..9ab1df39 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/datepicker-header-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/month-arrow.png b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/month-arrow.png new file mode 100644 index 00000000..f0b572f6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/datepicker/month-arrow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-add.gif b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-add.gif new file mode 100644 index 00000000..b22cd144 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-add.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-add.png b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-add.png new file mode 100644 index 00000000..a7b8f28d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-add.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-no.gif b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-no.gif new file mode 100644 index 00000000..08d08335 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-no.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-no.png b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-no.png new file mode 100644 index 00000000..02e219a1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-no.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-yes.gif b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-yes.gif new file mode 100644 index 00000000..8aacb307 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-yes.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-yes.png b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-yes.png new file mode 100644 index 00000000..a7b8f28d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/dd/drop-yes.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/editor/tb-sprite.gif b/app/resources/appunto-auth/theme/appunto-auth/images/editor/tb-sprite.gif new file mode 100644 index 00000000..fb705776 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/editor/tb-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/editor/tb-sprite.png b/app/resources/appunto-auth/theme/appunto-auth/images/editor/tb-sprite.png new file mode 100644 index 00000000..98861180 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/editor/tb-sprite.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/fieldset/collapse-tool.png b/app/resources/appunto-auth/theme/appunto-auth/images/fieldset/collapse-tool.png new file mode 100644 index 00000000..97eb83f5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/fieldset/collapse-tool.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/box-select-item-close.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/box-select-item-close.gif new file mode 100644 index 00000000..98d5da95 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/box-select-item-close.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/checkbox.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/checkbox.gif new file mode 100644 index 00000000..835b346c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/checkbox.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/checkbox.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/checkbox.png new file mode 100644 index 00000000..fc2709ca Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/checkbox.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger-rtl.gif new file mode 100644 index 00000000..940399aa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger-rtl.png new file mode 100644 index 00000000..73e1dbe9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger.gif new file mode 100644 index 00000000..be3ff587 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger.png new file mode 100644 index 00000000..73e1dbe9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/clear-trigger.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger-rtl.gif new file mode 100644 index 00000000..63597658 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger-rtl.png new file mode 100644 index 00000000..94894936 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger.gif new file mode 100644 index 00000000..e0537cbc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger.png new file mode 100644 index 00000000..94894936 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/date-trigger.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/error-tip-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/error-tip-corners.gif new file mode 100644 index 00000000..6ea4c383 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/error-tip-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/exclamation.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/exclamation.gif new file mode 100644 index 00000000..ea31a306 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/exclamation.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/exclamation.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/exclamation.png new file mode 100644 index 00000000..3e6e3d08 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/exclamation.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/radio.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/radio.gif new file mode 100644 index 00000000..db3a5305 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/radio.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/radio.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/radio.png new file mode 100644 index 00000000..86644bb8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/radio.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger-rtl.gif new file mode 100644 index 00000000..3ff38462 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger-rtl.png new file mode 100644 index 00000000..15e15f5f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger.gif new file mode 100644 index 00000000..0cc4f596 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger.png new file mode 100644 index 00000000..15e15f5f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/search-trigger.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-rtl.gif new file mode 100644 index 00000000..ff14c066 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-rtl.png new file mode 100644 index 00000000..28d140f3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-small-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-small-rtl.gif new file mode 100644 index 00000000..70c536e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-small-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-small.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-small.gif new file mode 100644 index 00000000..e70f8d80 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner-small.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner.gif new file mode 100644 index 00000000..1e323bf0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner.png new file mode 100644 index 00000000..28d140f3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/spinner.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/tag-field-item-close.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/tag-field-item-close.gif new file mode 100644 index 00000000..63b022ba Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/tag-field-item-close.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/tag-field-item-close.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/tag-field-item-close.png new file mode 100644 index 00000000..bcb2834d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/tag-field-item-close.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/text-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/text-bg.gif new file mode 100644 index 00000000..4179607c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/text-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-rtl.gif new file mode 100644 index 00000000..33e73752 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-rtl.png new file mode 100644 index 00000000..b4e2d5c3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-square-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-square-rtl.gif new file mode 100644 index 00000000..a86f6ce2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-square-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-square.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-square.gif new file mode 100644 index 00000000..7a0f585c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-square.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-tpl-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-tpl-rtl.gif new file mode 100644 index 00000000..1e766e47 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-tpl-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-tpl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-tpl.gif new file mode 100644 index 00000000..e3701a38 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger-tpl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger.gif b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger.gif new file mode 100644 index 00000000..d7be2f31 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger.png b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger.png new file mode 100644 index 00000000..b4e2d5c3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/form/trigger.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif new file mode 100644 index 00000000..5da7277a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif new file mode 100644 index 00000000..2b76e68e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif new file mode 100644 index 00000000..4c455e59 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif new file mode 100644 index 00000000..2b76e68e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/arrow-left-white.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/arrow-left-white.gif new file mode 100644 index 00000000..63088f56 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/arrow-left-white.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/arrow-right-white.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/arrow-right-white.gif new file mode 100644 index 00000000..e9e06789 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/arrow-right-white.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-bg.gif new file mode 100644 index 00000000..d76ffbcc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-bg.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-bg.png new file mode 100644 index 00000000..0bcc2367 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-bg.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-selected-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-selected-bg.gif new file mode 100644 index 00000000..f1da867d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-selected-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-selected-bg.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-selected-bg.png new file mode 100644 index 00000000..500c3bdd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/cell-special-selected-bg.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-bottom.gif new file mode 100644 index 00000000..c525f7eb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-bottom.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-bottom.png new file mode 100644 index 00000000..97822194 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-bottom.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-top.gif new file mode 100644 index 00000000..ccc92b6b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-top.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-top.png new file mode 100644 index 00000000..6e28535a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/col-move-top.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/column-header-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/column-header-bg.gif new file mode 100644 index 00000000..dec6733f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/column-header-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/column-header-over-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/column-header-over-bg.gif new file mode 100644 index 00000000..bd0c1e0f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/column-header-over-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/columns.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/columns.gif new file mode 100644 index 00000000..2d3a8239 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/columns.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/columns.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/columns.png new file mode 100644 index 00000000..70a5c873 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/columns.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-left.gif new file mode 100644 index 00000000..5d923b28 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-left.png new file mode 100644 index 00000000..e8177d05 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-right.gif new file mode 100644 index 00000000..8d154db7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-right.png new file mode 100644 index 00000000..d610f9d5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dd-insert-arrow-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty-rtl.gif new file mode 100644 index 00000000..22fa12a1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty-rtl.png new file mode 100644 index 00000000..5f841228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty.gif new file mode 100644 index 00000000..4f217a47 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty.png new file mode 100644 index 00000000..fc06fdde Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/dirty.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/done.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/done.gif new file mode 100644 index 00000000..a937cb22 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/done.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-no.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-no.gif new file mode 100644 index 00000000..31a332bf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-no.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-no.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-no.png new file mode 100644 index 00000000..02e219a1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-no.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-yes.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-yes.gif new file mode 100644 index 00000000..926010e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-yes.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-yes.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-yes.png new file mode 100644 index 00000000..a7b8f28d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/drop-yes.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/equals.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/equals.png new file mode 100644 index 00000000..c1060cae Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/equals.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/find.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/find.png new file mode 100644 index 00000000..dbfbc16d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/find.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/greater_than.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/greater_than.png new file mode 100644 index 00000000..be41c9a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/greater_than.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/less_than.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/less_than.png new file mode 100644 index 00000000..80aacddf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/filters/less_than.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/footer-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/footer-bg.gif new file mode 100644 index 00000000..126120f7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/footer-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-blue-hd.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-blue-hd.gif new file mode 100644 index 00000000..862094e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-blue-hd.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-blue-split.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-blue-split.gif new file mode 100644 index 00000000..5286f58f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-blue-split.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-hrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-hrow.gif new file mode 100644 index 00000000..63741042 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-hrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-loading.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-loading.gif new file mode 100644 index 00000000..d112c540 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-loading.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-split.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-split.gif new file mode 100644 index 00000000..c76a16e9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-split.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-vista-hd.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-vista-hd.gif new file mode 100644 index 00000000..d0972638 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid-vista-hd.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hd-btn-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hd-btn-left.gif new file mode 100644 index 00000000..78927053 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hd-btn-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hd-btn.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hd-btn.gif new file mode 100644 index 00000000..daf1ef2b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hd-btn.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hrow-over.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hrow-over.gif new file mode 100644 index 00000000..f9c07af1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hrow-over.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hrow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hrow.gif new file mode 100644 index 00000000..8d459a30 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-hrow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-rowheader.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-rowheader.gif new file mode 100644 index 00000000..2799b45c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/grid3-rowheader.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-by.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-by.gif new file mode 100644 index 00000000..d6075bba Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-by.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-by.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-by.png new file mode 100644 index 00000000..8508adeb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-by.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-collapse.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-collapse.gif new file mode 100644 index 00000000..ec980038 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-collapse.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-collapse.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-collapse.png new file mode 100644 index 00000000..49fcc4fd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-collapse.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand-sprite.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand-sprite.gif new file mode 100644 index 00000000..d24891de Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand.gif new file mode 100644 index 00000000..71c8ac43 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand.png new file mode 100644 index 00000000..d65a7df0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/group-expand.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hd-pop.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hd-pop.gif new file mode 100644 index 00000000..eb8ba796 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hd-pop.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hd-pop.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hd-pop.png new file mode 100644 index 00000000..3ad96ef6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hd-pop.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-asc.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-asc.gif new file mode 100644 index 00000000..15058ff6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-asc.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-asc.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-asc.png new file mode 100644 index 00000000..a206d35f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-asc.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-desc.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-desc.gif new file mode 100644 index 00000000..f26b7c2f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-desc.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-desc.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-desc.png new file mode 100644 index 00000000..55a714e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-desc.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-lock.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-lock.gif new file mode 100644 index 00000000..15961261 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-lock.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-lock.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-lock.png new file mode 100644 index 00000000..b293e10d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-lock.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-unlock.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-unlock.gif new file mode 100644 index 00000000..af59cf92 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-unlock.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-unlock.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-unlock.png new file mode 100644 index 00000000..e9e9df59 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/hmenu-unlock.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/invalid_line.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/invalid_line.gif new file mode 100644 index 00000000..fb7e0f34 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/invalid_line.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/loading.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/loading.gif new file mode 100644 index 00000000..81b0f125 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/loading.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/mso-hd.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/mso-hd.gif new file mode 100644 index 00000000..669f3cf0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/mso-hd.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/nowait.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/nowait.gif new file mode 100644 index 00000000..4c5862cd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/nowait.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first-disabled.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first-disabled.gif new file mode 100644 index 00000000..1e02c419 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first.gif new file mode 100644 index 00000000..60be4bcd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first.png new file mode 100644 index 00000000..7691f320 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-first.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last-disabled.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last-disabled.gif new file mode 100644 index 00000000..86970677 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last.gif new file mode 100644 index 00000000..beb4a830 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last.png new file mode 100644 index 00000000..49b13d7e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-last.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next-disabled.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next-disabled.gif new file mode 100644 index 00000000..90a7756f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next.gif new file mode 100644 index 00000000..97db1c22 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next.png new file mode 100644 index 00000000..c3e72bab Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-next.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev-disabled.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev-disabled.gif new file mode 100644 index 00000000..37154d62 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev.gif new file mode 100644 index 00000000..d07e61c3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev.png new file mode 100644 index 00000000..cace90be Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/page-prev.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/pick-button.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/pick-button.gif new file mode 100644 index 00000000..6957924a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/pick-button.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/pick-button.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/pick-button.png new file mode 100644 index 00000000..acafacef Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/pick-button.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/property-cell-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/property-cell-bg.gif new file mode 100644 index 00000000..7890cf9f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/property-cell-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/property-cell-selected-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/property-cell-selected-bg.gif new file mode 100644 index 00000000..1dfe9a69 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/property-cell-selected-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh-disabled.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh-disabled.gif new file mode 100644 index 00000000..607800b8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh.gif new file mode 100644 index 00000000..868b2dc5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh.png new file mode 100644 index 00000000..5320ddde Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/refresh.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-check-sprite.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-check-sprite.gif new file mode 100644 index 00000000..61011646 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-check-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-expand-sprite.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-expand-sprite.gif new file mode 100644 index 00000000..09c00a66 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-expand-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-over.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-over.gif new file mode 100644 index 00000000..b288e387 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-over.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-sel.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-sel.gif new file mode 100644 index 00000000..98209e6e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/row-sel.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort-hd.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort-hd.gif new file mode 100644 index 00000000..4cf483d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort-hd.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_asc.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_asc.gif new file mode 100644 index 00000000..7e562e20 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_asc.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_asc.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_asc.png new file mode 100644 index 00000000..a206d35f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_asc.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_desc.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_desc.gif new file mode 100644 index 00000000..9b7a871b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_desc.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_desc.png b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_desc.png new file mode 100644 index 00000000..55a714e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/sort_desc.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/grid/wait.gif b/app/resources/appunto-auth/theme/appunto-auth/images/grid/wait.gif new file mode 100644 index 00000000..471c1a4f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/grid/wait.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-bottom.gif new file mode 100644 index 00000000..c18f9e34 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-left.gif new file mode 100644 index 00000000..99f7993f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-right.gif new file mode 100644 index 00000000..5b13c5a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-top.gif new file mode 100644 index 00000000..a4ca2bb2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/layout/mini-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/loadmask/loading.gif b/app/resources/appunto-auth/theme/appunto-auth/images/loadmask/loading.gif new file mode 100644 index 00000000..8471b4f0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/loadmask/loading.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/magnify.png b/app/resources/appunto-auth/theme/appunto-auth/images/magnify.png new file mode 100644 index 00000000..b807c42a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/magnify.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-checked.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-checked.gif new file mode 100644 index 00000000..fad58937 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-checked.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-checked.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-checked.png new file mode 100644 index 00000000..4f5157d8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-checked.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-group-checked.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-group-checked.gif new file mode 100644 index 00000000..c8824887 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-group-checked.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-group-checked.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-group-checked.png new file mode 100644 index 00000000..a9f0b80f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-group-checked.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent-left.gif new file mode 100644 index 00000000..1ce2ccb4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent-left.png new file mode 100644 index 00000000..d4575644 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent.gif new file mode 100644 index 00000000..5461a8bf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent.png new file mode 100644 index 00000000..2d2331ed Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-menu-parent.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-bottom.gif new file mode 100644 index 00000000..845f9e52 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-bottom.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-bottom.png new file mode 100644 index 00000000..d89a459a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-bottom.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-top.gif new file mode 100644 index 00000000..4bfa1541 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-top.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-top.png new file mode 100644 index 00000000..bbbf4af7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-scroll-top.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-unchecked.gif b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-unchecked.gif new file mode 100644 index 00000000..43823e52 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-unchecked.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-unchecked.png b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-unchecked.png new file mode 100644 index 00000000..bce8817b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/menu/default-unchecked.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-bottom-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-bottom-bg.gif new file mode 100644 index 00000000..344a10ee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-bottom-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-corners.gif new file mode 100644 index 00000000..a1db0d2b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-fbg.gif new file mode 100644 index 00000000..b4e13fb6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-sides.gif new file mode 100644 index 00000000..edbf0d53 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif new file mode 100644 index 00000000..c58ff41d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif new file mode 100644 index 00000000..b4e13fb6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif new file mode 100644 index 00000000..edbf0d53 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif new file mode 100644 index 00000000..ccad4632 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif new file mode 100644 index 00000000..c58ff41d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif new file mode 100644 index 00000000..2494e614 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif new file mode 100644 index 00000000..44df2cc2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif new file mode 100644 index 00000000..99adc2b9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif new file mode 100644 index 00000000..e44d3491 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif new file mode 100644 index 00000000..ccad4632 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif new file mode 100644 index 00000000..c58ff41d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif new file mode 100644 index 00000000..c61da305 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif new file mode 100644 index 00000000..cc6098a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif new file mode 100644 index 00000000..a5bf6580 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif new file mode 100644 index 00000000..e44d3491 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif new file mode 100644 index 00000000..c58ff41d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif new file mode 100644 index 00000000..a41bdc3e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif new file mode 100644 index 00000000..edbf0d53 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-corners-rtl.gif new file mode 100644 index 00000000..9e7bd913 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-corners.gif new file mode 100644 index 00000000..50034b74 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif new file mode 100644 index 00000000..2494e614 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-fbg.gif new file mode 100644 index 00000000..44df2cc2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-sides-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-sides-rtl.gif new file mode 100644 index 00000000..99adc2b9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-sides.gif new file mode 100644 index 00000000..e44d3491 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-corners-rtl.gif new file mode 100644 index 00000000..d09896dc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-corners.gif new file mode 100644 index 00000000..989f8ae5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif new file mode 100644 index 00000000..c61da305 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-fbg.gif new file mode 100644 index 00000000..cc6098a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-sides-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-sides-rtl.gif new file mode 100644 index 00000000..a5bf6580 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-sides.gif new file mode 100644 index 00000000..e44d3491 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-corners.gif new file mode 100644 index 00000000..76bd8355 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-fbg.gif new file mode 100644 index 00000000..a41bdc3e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-sides.gif new file mode 100644 index 00000000..edbf0d53 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-framed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-left-bg-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-left-bg-rtl.gif new file mode 100644 index 00000000..99f01c70 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-left-bg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-left-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-left-bg.gif new file mode 100644 index 00000000..03818c3d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-left-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-right-bg-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-right-bg-rtl.gif new file mode 100644 index 00000000..d7482f09 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-right-bg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-right-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-right-bg.gif new file mode 100644 index 00000000..37dc9795 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-right-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-top-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-top-bg.gif new file mode 100644 index 00000000..0c6edc3b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-default-top-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-bottom-corners.gif new file mode 100644 index 00000000..c1102d76 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-bottom-sides.gif new file mode 100644 index 00000000..8d1096a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-bottom-corners.gif new file mode 100644 index 00000000..1db31411 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-bottom-sides.gif new file mode 100644 index 00000000..8d1096a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-corners-rtl.gif new file mode 100644 index 00000000..c2f7a6c0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-corners.gif new file mode 100644 index 00000000..8bfada9e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-sides.gif new file mode 100644 index 00000000..6ced6cf1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-corners-rtl.gif new file mode 100644 index 00000000..c2f7a6c0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-corners.gif new file mode 100644 index 00000000..8bfada9e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-sides.gif new file mode 100644 index 00000000..6ced6cf1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-top-corners.gif new file mode 100644 index 00000000..1db31411 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-top-sides.gif new file mode 100644 index 00000000..8d1096a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-collapsed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-corners-rtl.gif new file mode 100644 index 00000000..f4050cc2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-corners.gif new file mode 100644 index 00000000..ef9898f8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-sides.gif new file mode 100644 index 00000000..6ced6cf1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-corners-rtl.gif new file mode 100644 index 00000000..c6be544b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-corners.gif new file mode 100644 index 00000000..a4dec6f0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-sides.gif new file mode 100644 index 00000000..6ced6cf1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-top-corners.gif new file mode 100644 index 00000000..1b713d09 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-top-sides.gif new file mode 100644 index 00000000..8d1096a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel-header/panel-header-light-framed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-default-framed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-default-framed-corners.gif new file mode 100644 index 00000000..c58ff41d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-default-framed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-default-framed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-default-framed-sides.gif new file mode 100644 index 00000000..e44d3491 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-default-framed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-light-framed-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-light-framed-corners.gif new file mode 100644 index 00000000..1db31411 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-light-framed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-light-framed-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-light-framed-sides.gif new file mode 100644 index 00000000..6ced6cf1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/panel/panel-light-framed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/progress/progress-default-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/progress/progress-default-bg.gif new file mode 100644 index 00000000..7c170371 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/progress/progress-default-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/blue-loading.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/blue-loading.gif new file mode 100644 index 00000000..3bbf639e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/blue-loading.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/calendar.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/calendar.gif new file mode 100644 index 00000000..133cf232 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/calendar.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/glass-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/glass-bg.gif new file mode 100644 index 00000000..26fbbae3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/glass-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/hd-sprite.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/hd-sprite.gif new file mode 100644 index 00000000..42da1ea1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/hd-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-error.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-error.gif new file mode 100644 index 00000000..397b655a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-error.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-error.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-error.png new file mode 100644 index 00000000..458c0989 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-error.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-info.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-info.gif new file mode 100644 index 00000000..58281c30 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-info.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-info.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-info.png new file mode 100644 index 00000000..cbccd11c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-info.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-question.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-question.gif new file mode 100644 index 00000000..08abd82a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-question.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-question.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-question.png new file mode 100644 index 00000000..cac922e0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-question.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-warning.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-warning.gif new file mode 100644 index 00000000..27ff98b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-warning.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-warning.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-warning.png new file mode 100644 index 00000000..042ca05c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/icon-warning.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/large-loading.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/large-loading.gif new file mode 100644 index 00000000..b36b555b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/large-loading.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/left-btn.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/left-btn.gif new file mode 100644 index 00000000..3301054f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/left-btn.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/loading-balls.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/loading-balls.gif new file mode 100644 index 00000000..9ce214be Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/loading-balls.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/right-btn.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/right-btn.gif new file mode 100644 index 00000000..c529110f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/right-btn.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow-c.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow-c.png new file mode 100644 index 00000000..d435f80a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow-c.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow-lr.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow-lr.png new file mode 100644 index 00000000..bb88b6f2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow-lr.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow.png b/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow.png new file mode 100644 index 00000000..75c0eba3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/shadow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/shared/warning.gif b/app/resources/appunto-auth/theme/appunto-auth/images/shared/warning.gif new file mode 100644 index 00000000..806d4bc0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/shared/warning.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle-dark.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle-dark.gif new file mode 100644 index 00000000..b5486c1a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle.gif new file mode 100644 index 00000000..a8ed0ede Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle.png b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle.png new file mode 100644 index 00000000..2fe5cb15 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/e-handle.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle-dark.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle-dark.gif new file mode 100644 index 00000000..04e5ecf7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle.gif new file mode 100644 index 00000000..6f7b0c29 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle.png b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle.png new file mode 100644 index 00000000..8d8eb638 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/ne-handle.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle-dark.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle-dark.gif new file mode 100644 index 00000000..6e49d696 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle.gif new file mode 100644 index 00000000..92ad82cf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle.png b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle.png new file mode 100644 index 00000000..9835bea8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/nw-handle.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle-dark.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle-dark.gif new file mode 100644 index 00000000..4eb5f0fc Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle.gif new file mode 100644 index 00000000..d7eeae27 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle.png b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle.png new file mode 100644 index 00000000..06f914e7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/s-handle.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle-dark.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle-dark.gif new file mode 100644 index 00000000..c4c10878 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle.gif new file mode 100644 index 00000000..f011a3bb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle.png b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle.png new file mode 100644 index 00000000..5a2c695c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/se-handle.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/square.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/square.gif new file mode 100644 index 00000000..7751d5e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/square.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle-dark.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle-dark.gif new file mode 100644 index 00000000..77224b0c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle.gif b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle.gif new file mode 100644 index 00000000..aa903dd0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle.png b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle.png new file mode 100644 index 00000000..7f68f406 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/sizer/sw-handle.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-bg.png b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-bg.png new file mode 100644 index 00000000..1ade2925 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-bg.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-thumb.png b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-thumb.png new file mode 100644 index 00000000..d8a03de9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-thumb.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-v-bg.png b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-v-bg.png new file mode 100644 index 00000000..c24663e5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-v-bg.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-v-thumb.png b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-v-thumb.png new file mode 100644 index 00000000..d8a03de9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/slider/slider-v-thumb.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-bottom.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-bottom.png new file mode 100644 index 00000000..813a4d54 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-bottom.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-left.png new file mode 100644 index 00000000..9120ea42 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-right.png new file mode 100644 index 00000000..67fd5a4b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-top.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-top.png new file mode 100644 index 00000000..01ad4ee9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-plain-scroll-top.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom-left.gif new file mode 100644 index 00000000..e6525b97 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom-right.gif new file mode 100644 index 00000000..be657af4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom.png new file mode 100644 index 00000000..ffff826e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-bottom.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left-bottom.gif new file mode 100644 index 00000000..ecc3116e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left-top.gif new file mode 100644 index 00000000..4610705b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left.png new file mode 100644 index 00000000..2c352941 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right-bottom.gif new file mode 100644 index 00000000..737cc3ff Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right-top.gif new file mode 100644 index 00000000..49bc1bf7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right.png new file mode 100644 index 00000000..82dfe01f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top-left.gif new file mode 100644 index 00000000..35048040 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top-right.gif new file mode 100644 index 00000000..eee6080d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top.png new file mode 100644 index 00000000..b2fabfc3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/default-scroll-top.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-bottom-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-bottom-bg.gif new file mode 100644 index 00000000..e8208676 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-bottom-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-left-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-left-bg.gif new file mode 100644 index 00000000..55832036 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-left-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-right-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-right-bg.gif new file mode 100644 index 00000000..d55ba065 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-right-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-top-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-top-bg.gif new file mode 100644 index 00000000..89a116fd Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab-bar/tab-bar-default-top-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-corners.gif new file mode 100644 index 00000000..3923610a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-fbg.gif new file mode 100644 index 00000000..15c66cee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-sides.gif new file mode 100644 index 00000000..66031de3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-corners.gif new file mode 100644 index 00000000..e8b9dea0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-corners.gif new file mode 100644 index 00000000..e8b9dea0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-fbg.gif new file mode 100644 index 00000000..05a1237b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-sides.gif new file mode 100644 index 00000000..d9dc49de Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-fbg.gif new file mode 100644 index 00000000..f003f4d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-corners.gif new file mode 100644 index 00000000..3923610a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-fbg.gif new file mode 100644 index 00000000..15c66cee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-sides.gif new file mode 100644 index 00000000..66031de3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-corners.gif new file mode 100644 index 00000000..488b48e4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-fbg.gif new file mode 100644 index 00000000..05a1237b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-corners.gif new file mode 100644 index 00000000..79d73f02 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-fbg.gif new file mode 100644 index 00000000..05303d2f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-sides.gif new file mode 100644 index 00000000..d156bd21 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-sides.gif new file mode 100644 index 00000000..4e17e833 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-corners.gif new file mode 100644 index 00000000..a47582c5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-fbg.gif new file mode 100644 index 00000000..05303d2f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-sides.gif new file mode 100644 index 00000000..7fb92aff Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-sides.gif new file mode 100644 index 00000000..a438ab1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-close.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-close.gif new file mode 100644 index 00000000..98d5da95 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-close.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-close.png b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-close.png new file mode 100644 index 00000000..46cc89f5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-close.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-corners.gif new file mode 100644 index 00000000..db836931 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-fbg.gif new file mode 100644 index 00000000..60b17a20 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-sides.gif new file mode 100644 index 00000000..3b7b3cd9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-corners.gif new file mode 100644 index 00000000..07db6ca5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-corners.gif new file mode 100644 index 00000000..3e04cb37 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-fbg.gif new file mode 100644 index 00000000..5df23d72 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-sides.gif new file mode 100644 index 00000000..a438ab1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-fbg.gif new file mode 100644 index 00000000..41843484 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-corners.gif new file mode 100644 index 00000000..db836931 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-fbg.gif new file mode 100644 index 00000000..60b17a20 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-sides.gif new file mode 100644 index 00000000..3b7b3cd9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-corners.gif new file mode 100644 index 00000000..6d3222ff Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-fbg.gif new file mode 100644 index 00000000..5df23d72 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-corners.gif new file mode 100644 index 00000000..91a0a361 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-fbg.gif new file mode 100644 index 00000000..d55618b8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-sides.gif new file mode 100644 index 00000000..ef2ca9b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-sides.gif new file mode 100644 index 00000000..f8b810a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-corners.gif new file mode 100644 index 00000000..9b095183 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-fbg.gif new file mode 100644 index 00000000..d55618b8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-sides.gif new file mode 100644 index 00000000..9c93b282 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-sides.gif new file mode 100644 index 00000000..a438ab1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-corners.gif new file mode 100644 index 00000000..d1182767 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-fbg.gif new file mode 100644 index 00000000..60b17a20 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-sides.gif new file mode 100644 index 00000000..3b7b3cd9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-corners.gif new file mode 100644 index 00000000..63e4308d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-corners.gif new file mode 100644 index 00000000..63e4308d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-fbg.gif new file mode 100644 index 00000000..5df23d72 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-sides.gif new file mode 100644 index 00000000..a438ab1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-fbg.gif new file mode 100644 index 00000000..41843484 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-corners.gif new file mode 100644 index 00000000..d1182767 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-fbg.gif new file mode 100644 index 00000000..60b17a20 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-sides.gif new file mode 100644 index 00000000..3b7b3cd9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-corners.gif new file mode 100644 index 00000000..294eda8d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-fbg.gif new file mode 100644 index 00000000..5df23d72 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-corners.gif new file mode 100644 index 00000000..740a940a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-fbg.gif new file mode 100644 index 00000000..d55618b8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-sides.gif new file mode 100644 index 00000000..ef2ca9b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-sides.gif new file mode 100644 index 00000000..f8b810a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-corners.gif new file mode 100644 index 00000000..397714fb Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-fbg.gif new file mode 100644 index 00000000..d55618b8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-sides.gif new file mode 100644 index 00000000..9c93b282 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-sides.gif new file mode 100644 index 00000000..a438ab1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-corners.gif new file mode 100644 index 00000000..3c68591f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-fbg.gif new file mode 100644 index 00000000..15c66cee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-sides.gif new file mode 100644 index 00000000..66031de3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-corners.gif new file mode 100644 index 00000000..fd5c84b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-corners.gif new file mode 100644 index 00000000..fd5c84b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-fbg.gif new file mode 100644 index 00000000..05a1237b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-sides.gif new file mode 100644 index 00000000..d9dc49de Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-fbg.gif new file mode 100644 index 00000000..1ed53562 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-corners.gif new file mode 100644 index 00000000..3c68591f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-fbg.gif new file mode 100644 index 00000000..15c66cee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-sides.gif new file mode 100644 index 00000000..66031de3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-corners.gif new file mode 100644 index 00000000..876edd83 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-fbg.gif new file mode 100644 index 00000000..05a1237b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-corners.gif new file mode 100644 index 00000000..c26e433c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-fbg.gif new file mode 100644 index 00000000..05303d2f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-sides.gif new file mode 100644 index 00000000..d156bd21 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-sides.gif new file mode 100644 index 00000000..4e17e833 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-corners.gif new file mode 100644 index 00000000..63d7d186 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-fbg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-fbg.gif new file mode 100644 index 00000000..05303d2f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-sides.gif new file mode 100644 index 00000000..7fb92aff Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-sides.gif new file mode 100644 index 00000000..a438ab1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tab/tab-default-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-default-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-default-corners.gif new file mode 100644 index 00000000..db531540 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-default-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-default-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-default-sides.gif new file mode 100644 index 00000000..ae67edbf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-default-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-form-invalid-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-form-invalid-corners.gif new file mode 100644 index 00000000..db531540 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-form-invalid-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-form-invalid-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-form-invalid-sides.gif new file mode 100644 index 00000000..ae67edbf Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tip/tip-form-invalid-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more-left.gif new file mode 100644 index 00000000..8f8cbd42 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more-left.png new file mode 100644 index 00000000..b6756e6a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more.gif new file mode 100644 index 00000000..82beafda Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more.png new file mode 100644 index 00000000..b6756e6a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-more.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-bottom.gif new file mode 100644 index 00000000..1296e22d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-bottom.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-bottom.png new file mode 100644 index 00000000..6741161e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-bottom.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-left.gif new file mode 100644 index 00000000..2db8cf5c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-left.png new file mode 100644 index 00000000..5ff969ee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-right.gif new file mode 100644 index 00000000..5d5a7ab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-right.png new file mode 100644 index 00000000..6fed21a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-top.gif new file mode 100644 index 00000000..6545b437 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-top.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-top.png new file mode 100644 index 00000000..2a26ba95 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/default-scroll-top.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more-left.gif new file mode 100644 index 00000000..8f8cbd42 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more-left.png new file mode 100644 index 00000000..b6756e6a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more.gif new file mode 100644 index 00000000..82beafda Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more.png new file mode 100644 index 00000000..b6756e6a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-more.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-left.gif new file mode 100644 index 00000000..2db8cf5c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-left.png new file mode 100644 index 00000000..5ff969ee Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-right.gif new file mode 100644 index 00000000..5d5a7ab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-right.png new file mode 100644 index 00000000..6fed21a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/footer-scroll-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/toolbar-default-bg.gif b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/toolbar-default-bg.gif new file mode 100644 index 00000000..f010d334 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/toolbar/toolbar-default-bg.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprite-tpl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprite-tpl.gif new file mode 100644 index 00000000..18277a3d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprite-tpl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites-dark.png b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites-dark.png new file mode 100644 index 00000000..474088b6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites-dark.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites.gif new file mode 100644 index 00000000..36b6b675 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites.png b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites.png new file mode 100644 index 00000000..17fbc0f1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tool-sprites.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tools/tools-sprites-trans.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tools-sprites-trans.gif new file mode 100644 index 00000000..b6d7ba36 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tools/tools-sprites-trans.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows-rtl.gif new file mode 100644 index 00000000..7083d77d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows-rtl.png new file mode 100644 index 00000000..4aae887d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows.gif new file mode 100644 index 00000000..f7b8b1ca Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows.png new file mode 100644 index 00000000..de10dd6f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/arrows.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-above.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-above.gif new file mode 100644 index 00000000..30d1ca71 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-above.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-above.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-above.png new file mode 100644 index 00000000..57825318 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-above.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-add.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-add.gif new file mode 100644 index 00000000..b22cd144 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-add.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-add.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-add.png new file mode 100644 index 00000000..c9d24fd8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-add.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-append.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-append.gif new file mode 100644 index 00000000..b22cd144 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-append.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-append.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-append.png new file mode 100644 index 00000000..57825318 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-append.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-below.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-below.gif new file mode 100644 index 00000000..85f66b1e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-below.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-below.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-below.png new file mode 100644 index 00000000..57825318 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-below.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-between.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-between.gif new file mode 100644 index 00000000..f5a042d7 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-between.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-between.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-between.png new file mode 100644 index 00000000..57825318 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-between.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-no.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-no.gif new file mode 100644 index 00000000..9d9c6a9c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-no.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-no.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-no.png new file mode 100644 index 00000000..bb89cfc1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-no.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-over.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-over.gif new file mode 100644 index 00000000..2e514e7e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-over.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-over.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-over.png new file mode 100644 index 00000000..70d1807f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-over.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-under.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-under.gif new file mode 100644 index 00000000..8535ef46 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-under.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-under.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-under.png new file mode 100644 index 00000000..3ba23b37 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-under.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-yes.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-yes.gif new file mode 100644 index 00000000..8aacb307 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-yes.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-yes.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-yes.png new file mode 100644 index 00000000..83d0dbc2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/drop-yes.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus-rtl.gif new file mode 100644 index 00000000..10227e60 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus-rtl.png new file mode 100644 index 00000000..2ffe7b2d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus.gif new file mode 100644 index 00000000..55d8a0fa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus.png new file mode 100644 index 00000000..b39a71df Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-minus.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus-rtl.gif new file mode 100644 index 00000000..f4eef893 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus-rtl.png new file mode 100644 index 00000000..bea9892c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus.gif new file mode 100644 index 00000000..a5c62fab Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus.png new file mode 100644 index 00000000..630438f2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-plus.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-rtl.gif new file mode 100644 index 00000000..a5e7248c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-rtl.png new file mode 100644 index 00000000..1d0821b6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end.gif new file mode 100644 index 00000000..406a88df Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end.png new file mode 100644 index 00000000..2eb0ed0c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-end.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line-rtl.gif new file mode 100644 index 00000000..6e5b8b44 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line-rtl.png new file mode 100644 index 00000000..e26b7685 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line.gif new file mode 100644 index 00000000..e25ed03f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line.png new file mode 100644 index 00000000..ac374247 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-line.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl-rtl.gif new file mode 100644 index 00000000..2d8dd984 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl-rtl.png new file mode 100644 index 00000000..1008a544 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl.gif new file mode 100644 index 00000000..f50bd40a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl.png new file mode 100644 index 00000000..f2a805de Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-nl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-rtl.gif new file mode 100644 index 00000000..ed3e5a0d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-rtl.png new file mode 100644 index 00000000..cefb7045 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus.gif new file mode 100644 index 00000000..a7287961 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus.png new file mode 100644 index 00000000..a256b48b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-minus.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl-rtl.gif new file mode 100644 index 00000000..2d1e9174 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl-rtl.png new file mode 100644 index 00000000..e1e6ece6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl.gif new file mode 100644 index 00000000..96f8d723 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl.png new file mode 100644 index 00000000..3a401eaa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-nl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-rtl.gif new file mode 100644 index 00000000..cb0cb492 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-rtl.png new file mode 100644 index 00000000..487f27a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus.gif new file mode 100644 index 00000000..ae41983c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus.png new file mode 100644 index 00000000..03e202af Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-plus.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-rtl.gif new file mode 100644 index 00000000..1139cb02 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-rtl.png new file mode 100644 index 00000000..166e163d Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow.gif new file mode 100644 index 00000000..201c413e Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow.png new file mode 100644 index 00000000..4bf9ae5c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/elbow.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open-rtl.gif new file mode 100644 index 00000000..a34c546c Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open-rtl.png new file mode 100644 index 00000000..bb896d84 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open.gif new file mode 100644 index 00000000..361e1be3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open.png new file mode 100644 index 00000000..50397daa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-open.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-rtl.gif new file mode 100644 index 00000000..4fab30f8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-rtl.png new file mode 100644 index 00000000..3b176721 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder.gif new file mode 100644 index 00000000..b2fd81a1 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder.png new file mode 100644 index 00000000..4b020540 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/folder.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf-rtl.gif new file mode 100644 index 00000000..ab0979a3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf-rtl.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf-rtl.png new file mode 100644 index 00000000..b2e6f6e5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf-rtl.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf.gif new file mode 100644 index 00000000..445769d3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf.png b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf.png new file mode 100644 index 00000000..6acb6358 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/leaf.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/loading.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/loading.gif new file mode 100644 index 00000000..81b0f125 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/loading.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/tree/s.gif b/app/resources/appunto-auth/theme/appunto-auth/images/tree/s.gif new file mode 100644 index 00000000..1d11fa9a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/tree/s.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-bottom.gif b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-bottom.gif new file mode 100644 index 00000000..c18f9e34 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-bottom.png b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-bottom.png new file mode 100644 index 00000000..241209e9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-bottom.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-left.gif b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-left.gif new file mode 100644 index 00000000..99f7993f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-left.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-left.png b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-left.png new file mode 100644 index 00000000..1c40b787 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-left.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-right.gif b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-right.gif new file mode 100644 index 00000000..5b13c5a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-right.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-right.png b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-right.png new file mode 100644 index 00000000..505c3295 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-right.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-top.gif b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-top.gif new file mode 100644 index 00000000..a4ca2bb2 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-top.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-top.png b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-top.png new file mode 100644 index 00000000..4a378a39 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/util/splitter/mini-top.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/ux/dashboard/magnify.png b/app/resources/appunto-auth/theme/appunto-auth/images/ux/dashboard/magnify.png new file mode 100644 index 00000000..0efc4470 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/ux/dashboard/magnify.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-bottom-corners.gif new file mode 100644 index 00000000..ca57ffb3 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-bottom-sides.gif new file mode 100644 index 00000000..aa1d0228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-bottom-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-bottom-corners.gif new file mode 100644 index 00000000..8910f05f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-bottom-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-bottom-sides.gif new file mode 100644 index 00000000..aa1d0228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-corners-rtl.gif new file mode 100644 index 00000000..3b2b0a4b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-corners.gif new file mode 100644 index 00000000..8910f05f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-sides.gif new file mode 100644 index 00000000..f4d7c750 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-corners-rtl.gif new file mode 100644 index 00000000..3b2b0a4b Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-corners.gif new file mode 100644 index 00000000..8910f05f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-sides.gif new file mode 100644 index 00000000..f4d7c750 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-top-corners.gif new file mode 100644 index 00000000..8910f05f Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-top-sides.gif new file mode 100644 index 00000000..aa1d0228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-collapsed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-corners-rtl.gif new file mode 100644 index 00000000..c9d696c9 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-corners.gif new file mode 100644 index 00000000..cde22112 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-sides.gif new file mode 100644 index 00000000..f4d7c750 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-corners-rtl.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-corners-rtl.gif new file mode 100644 index 00000000..d8e0b9ba Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-corners.gif new file mode 100644 index 00000000..c7eaa9d5 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-sides.gif new file mode 100644 index 00000000..f4d7c750 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-top-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-top-corners.gif new file mode 100644 index 00000000..58f46af0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-top-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-top-sides.gif new file mode 100644 index 00000000..aa1d0228 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window-header/window-header-default-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-error.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-error.gif new file mode 100644 index 00000000..397b655a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-error.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-info.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-info.gif new file mode 100644 index 00000000..58281c30 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-info.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-question.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-question.gif new file mode 100644 index 00000000..08abd82a Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-question.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-warning.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-warning.gif new file mode 100644 index 00000000..27ff98b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/icon-warning.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/fade-blue.png b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/fade-blue.png new file mode 100644 index 00000000..4dbf08b0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/fade-blue.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/fader.png b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/fader.png new file mode 100644 index 00000000..be8c27fa Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/fader.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/icon16_error.png b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/icon16_error.png new file mode 100644 index 00000000..5f168d32 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/icon16_error.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/icon16_info.png b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/icon16_info.png new file mode 100644 index 00000000..6c6b32d0 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/toast/icon16_info.png differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/window-default-corners.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window/window-default-corners.gif new file mode 100644 index 00000000..4cbfe1e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/window-default-corners.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/images/window/window-default-sides.gif b/app/resources/appunto-auth/theme/appunto-auth/images/window/window-default-sides.gif new file mode 100644 index 00000000..f4d7c750 Binary files /dev/null and b/app/resources/appunto-auth/theme/appunto-auth/images/window/window-default-sides.gif differ diff --git a/app/resources/appunto-auth/theme/appunto-auth/theme.css b/app/resources/appunto-auth/theme/appunto-auth/theme.css new file mode 100644 index 00000000..980afbbd --- /dev/null +++ b/app/resources/appunto-auth/theme/appunto-auth/theme.css @@ -0,0 +1 @@ +.x-body{margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.x-no-touch-scroll{touch-action:none;-ms-touch-action:none}@-ms-viewport{width:device-width}img{border:0}.x-border-box,.x-border-box *{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-ltr{direction:ltr}.x-clear{overflow:hidden;clear:both;font-size:0;line-height:0;display:table}.x-layer{position:absolute!important;overflow:hidden}.x-fixed-layer{position:fixed!important;overflow:hidden}.x-shim{position:absolute;left:0;top:0;overflow:hidden;filter:alpha(opacity=0);opacity:0}.x-hidden-display{display:none!important}.x-hidden-visibility{visibility:hidden!important}.x-hidden,.x-hidden-offsets{display:block!important;visibility:hidden!important;position:absolute!important;top:-10000px!important}.x-hidden-clip{position:absolute!important;clip:rect(0,0,0,0)}.x-masked-relative{position:relative}.x-ie-shadow{background-color:#777;display:none;position:absolute;overflow:hidden}.x-unselectable{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-drag:none;cursor:default}.x-selectable{cursor:auto;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text;-o-user-select:text}.x-list-plain{list-style-type:none;margin:0;padding:0}.x-table-plain{border-collapse:collapse;border-spacing:0;font-size:1em}.x-frame-tl,.x-frame-tr,.x-frame-tc,.x-frame-bl,.x-frame-br,.x-frame-bc{overflow:hidden;background-repeat:no-repeat}.x-frame-tc,.x-frame-bc{background-repeat:repeat-x}td.x-frame-tl,td.x-frame-tr,td.x-frame-bl,td.x-frame-br{width:1px}.x-frame-mc{background-repeat:repeat-x;overflow:hidden}.x-proxy-el{position:absolute;background:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-css-shadow{position:absolute;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.x-item-disabled,.x-item-disabled *{cursor:default}.x-component,.x-container{position:relative}.x-webkit *:focus{outline:0}.x-touch-scroller{display:table;min-width:100%}.x-box-item{position:absolute!important;left:0;top:0}.x-autocontainer-outerCt{display:table}.x-autocontainer-innerCt{display:table-cell;height:100%;vertical-align:top}.x-mask{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-fixed{position:fixed}.x-mask-shim{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-msg{z-index:101;position:absolute}.x-progress{position:relative;border-style:solid;overflow:hidden}.x-progress-bar{overflow:hidden;position:absolute;width:0;height:100%}.x-progress-text{overflow:hidden;position:absolute}.x-title-icon{background-repeat:no-repeat;background-position:0 0;vertical-align:middle;text-align:center}.x-title{display:table;table-layout:fixed}.x-title-text{display:table-cell;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis;vertical-align:middle}.x-title-align-left{text-align:left}.x-title-align-center{text-align:center}.x-title-align-right{text-align:right}.x-title-rotate-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;-ms-transform:rotate(90deg);-ms-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie8 .x-title-rotate-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-title-rotate-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;-ms-transform:rotate(270deg);-ms-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie8 .x-title-rotate-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-horizontal.x-header .x-title-rotate-right.x-title-align-left>.x-title-item{vertical-align:bottom}.x-horizontal.x-header .x-title-rotate-right.x-title-align-center>.x-title-item{vertical-align:middle}.x-horizontal.x-header .x-title-rotate-right.x-title-align-right>.x-title-item{vertical-align:top}.x-horizontal.x-header .x-title-rotate-left.x-title-align-left>.x-title-item{vertical-align:top}.x-horizontal.x-header .x-title-rotate-left.x-title-align-center>.x-title-item{vertical-align:middle}.x-horizontal.x-header .x-title-rotate-left.x-title-align-right>.x-title-item{vertical-align:bottom}.x-vertical.x-header .x-title-rotate-none.x-title-align-left>.x-title-item{vertical-align:top}.x-vertical.x-header .x-title-rotate-none.x-title-align-center>.x-title-item{vertical-align:middle}.x-vertical.x-header .x-title-rotate-none.x-title-align-right>.x-title-item{vertical-align:bottom}.x-title-icon-wrap{display:table-cell;text-align:center;vertical-align:middle;line-height:0}.x-title-icon-wrap.x-title-icon-top,.x-title-icon-wrap.x-title-icon-bottom{display:table-row}.x-title-icon{display:inline-block;vertical-align:middle;background-position:center;background-repeat:no-repeat}.x-tool{font-size:0;line-height:0}.x-header>.x-box-inner{overflow:visible}.x-btn{display:inline-block;outline:0;cursor:pointer;white-space:nowrap;text-decoration:none;overflow:hidden;position:relative}.x-btn>.x-frame{height:100%;width:100%}.x-btn-wrap{display:table;height:100%;width:100%}.x-btn-button{vertical-align:middle;display:table-cell;white-space:nowrap;line-height:0}.x-btn-inner{display:inline-block;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}.x-btn-icon.x-btn-no-text>.x-btn-inner{display:none}.x-btn-icon-el{display:none;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.x-btn-icon>.x-btn-icon-el{display:inline-block}.x-btn-icon-top>.x-btn-icon-el,.x-btn-icon-bottom>.x-btn-icon-el{display:block}.x-btn-button-center{text-align:center}.x-btn-button-left{text-align:left}.x-btn-button-right{text-align:right}.x-opera12m-btn-arrow-right{display:table}.x-opera12m-btn-arrow-right>.x-btn-arrow-right,.x-opera12m-btn-arrow-right>.x-btn-split-right{display:table-row}.x-btn-arrow:after,.x-btn-split:after{background-repeat:no-repeat;content:'';box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-btn-arrow-right:after,.x-btn-split-right:after{display:table-cell;background-position:right center}.x-btn-arrow-bottom:after,.x-btn-split-bottom:after{display:table-row;background-position:center bottom;content:'\00a0';line-height:0}.x-btn-mc{overflow:visible}.x-splitter{font-size:1px}.x-splitter-horizontal{cursor:e-resize;cursor:row-resize}.x-splitter-vertical{cursor:e-resize;cursor:col-resize}.x-splitter-collapsed,.x-splitter-horizontal-noresize,.x-splitter-vertical-noresize{cursor:default}.x-splitter-active{z-index:4}.x-collapse-el{position:absolute;background-repeat:no-repeat}.x-box-layout-ct{overflow:hidden;position:relative}.x-box-target{position:absolute;width:20000px;top:0;left:0;height:1px}.x-box-inner{overflow:hidden;position:relative;left:0;top:0}.x-box-scroller{position:absolute;background-repeat:no-repeat;background-position:center;line-height:0;font-size:0}.x-box-scroller-top{top:0}.x-box-scroller-right{right:0}.x-box-scroller-bottom{bottom:0}.x-box-scroller-left{left:0}.x-box-menu-body-horizontal{float:left}.x-box-menu-after{position:relative;float:left}.x-toolbar-text{white-space:nowrap}.x-toolbar-separator{display:block;font-size:1px;overflow:hidden;cursor:default;border:0;width:0;height:0;line-height:0}.x-toolbar-scroller{padding-left:0}.x-toolbar-plain{border:0}.x-dd-drag-proxy,.x-dd-drag-current{z-index:1000000!important;pointer-events:none}.x-dd-drag-repair .x-dd-drag-ghost{filter:alpha(opacity=60);opacity:.6}.x-dd-drag-repair .x-dd-drop-icon{display:none}.x-dd-drag-ghost{filter:alpha(opacity=85);opacity:.85;padding:5px;padding-left:20px;white-space:nowrap;color:#000;font:normal 10px helvetica,arial,verdana,sans-serif;border:1px solid;border-color:#ddd #bbb #bbb #ddd;background-color:#fff}.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-ok .x-dd-drop-icon{background-image:url(images/dd/drop-yes.png)}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(images/dd/drop-add.png)}.x-dd-drop-nodrop div.x-dd-drop-icon{background-image:url(images/dd/drop-no.png)}.x-docked{position:absolute!important;z-index:1}.x-docked-vertical{position:static}.x-docked-top{border-bottom-width:0!important}.x-docked-bottom{border-top-width:0!important}.x-docked-left{border-right-width:0!important}.x-docked-right{border-left-width:0!important}.x-docked-noborder-top{border-top-width:0!important}.x-docked-noborder-right{border-right-width:0!important}.x-docked-noborder-bottom{border-bottom-width:0!important}.x-docked-noborder-left{border-left-width:0!important}.x-noborder-l{border-left-width:0!important}.x-noborder-b{border-bottom-width:0!important}.x-noborder-bl{border-bottom-width:0!important;border-left-width:0!important}.x-noborder-r{border-right-width:0!important}.x-noborder-rl{border-right-width:0!important;border-left-width:0!important}.x-noborder-rb{border-right-width:0!important;border-bottom-width:0!important}.x-noborder-rbl{border-right-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-t{border-top-width:0!important}.x-noborder-tl{border-top-width:0!important;border-left-width:0!important}.x-noborder-tb{border-top-width:0!important;border-bottom-width:0!important}.x-noborder-tbl{border-top-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-tr{border-top-width:0!important;border-right-width:0!important}.x-noborder-trl{border-top-width:0!important;border-right-width:0!important;border-left-width:0!important}.x-noborder-trb{border-top-width:0!important;border-right-width:0!important;border-bottom-width:0!important}.x-noborder-trbl{border-width:0!important}.x-panel,.x-plain{overflow:hidden;position:relative}.x-panel{outline:0}td.x-frame-mc{vertical-align:top}.x-panel-body{overflow:hidden;position:relative}.x-panel-header-plain,.x-panel-body-plain{border:0;padding:0}.x-tip{position:absolute;overflow:visible}.x-tip-body{overflow:hidden;position:relative}.x-tip-anchor{position:absolute;overflow:hidden;border-style:solid}.x-form-item{display:table;table-layout:fixed;border-spacing:0;border-collapse:separate}.x-form-item-label{overflow:hidden}.x-form-item-label,.x-form-item-body{display:table-cell}.x-form-item-body{vertical-align:middle;height:100%}.x-form-item-label-inner{display:inline-block}.x-form-item-label-top{display:table-row;height:1px}.x-form-item-label-top>.x-form-item-label-inner{display:table-cell}.x-form-item-label-top-side-error:after{display:table-cell;content:''}.x-form-item-label-right{text-align:right}.x-form-error-wrap-side{display:table-cell;vertical-align:middle}.x-form-error-wrap-under{display:table-row;height:1px}.x-form-error-wrap-under>.x-form-error-msg{display:table-cell}.x-form-error-wrap-under-side-label:before{display:table-cell;content:''}.x-form-invalid-icon{overflow:hidden}.x-form-invalid-icon ul{display:none}.x-form-display-field-body{vertical-align:top}.x-fit-item{position:relative}.x-grid-view{overflow:hidden;position:relative}.x-grid-row-table{width:0;table-layout:fixed;border:0 none;border-collapse:separate;border-spacing:0}.x-grid-item{table-layout:fixed;outline:0}.x-grid-row{outline:0}.x-grid-td{overflow:hidden;border-width:0;vertical-align:top}.x-grid-cell-inner{overflow:hidden;white-space:nowrap}.x-wrap-cell .x-grid-cell-inner{white-space:normal}.x-grid-resize-marker{position:absolute;z-index:5;top:0}.x-view-item-focused{outline:1px dashed #4f0101!important;outline-offset:-1px}.x-form-cb-wrap{vertical-align:top}.x-form-cb-wrap-inner{position:relative}.x-form-cb{position:absolute;left:0;right:auto;vertical-align:top;overflow:hidden;padding:0;border:0}.x-form-cb::-moz-focus-inner{padding:0;border:0}.x-form-cb-after{left:auto;right:0}.x-form-cb-label{display:inline-block}.x-form-cb-wrap-inner-no-box-label>.x-form-cb{position:static}.x-col-move-top,.x-col-move-bottom{position:absolute;top:0;line-height:0;font-size:0;overflow:hidden;z-index:20000;background:no-repeat center top transparent}.x-grid-header-ct{cursor:default}.x-column-header{position:absolute;overflow:hidden;background-repeat:repeat-x}.x-column-header-inner{white-space:nowrap;position:relative;overflow:hidden}.x-column-header-text{white-space:nowrap;background-repeat:no-repeat}.x-column-header-trigger{display:none;height:100%;background-repeat:no-repeat;position:absolute;right:0;top:0;z-index:2}.x-column-header-over .x-column-header-trigger,.x-column-header-open .x-column-header-trigger{display:block}.x-column-header-align-right{text-align:right}.x-column-header-align-left{text-align:left}.x-column-header-align-center{text-align:center}.x-form-trigger-wrap{display:table;width:100%;height:100%}.x-gecko .x-form-trigger-wrap{display:-moz-inline-box;display:inline-flex;vertical-align:top}.x-form-text-wrap{display:table-cell;overflow:hidden;height:100%}.x-gecko .x-form-text-wrap{display:block;-moz-box-flex:1;flex:1}.x-form-item-body.x-form-text-grow{min-width:inherit;max-width:inherit}.x-form-text{border:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;display:block;background:repeat-x 0 0;width:100%;height:100%}.x-webkit .x-form-text{height:calc(100%+3px)}.x-form-trigger{display:table-cell;vertical-align:top;cursor:pointer;overflow:hidden;background-repeat:no-repeat;line-height:0;white-space:nowrap}.x-item-disabled .x-form-trigger{cursor:default}.x-form-trigger.x-form-trigger-cmp{background:0;border:0}.x-gecko .x-form-trigger{display:block}.x-border-layout-ct{overflow:hidden}.x-border-layout-ct{position:relative}.x-border-region-slide-in{z-index:5}.x-region-collapsed-placeholder{z-index:4}.x-tab{display:block;outline:0;cursor:pointer;white-space:nowrap;text-decoration:none;overflow:hidden;position:relative}.x-tab>.x-frame{height:100%;width:100%}.x-tab-wrap{display:table;height:100%;width:100%}.x-tab-button{vertical-align:middle;display:table-cell;white-space:nowrap;line-height:0}.x-tab-inner{display:inline-block;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}.x-tab-icon.x-tab-no-text>.x-tab-inner{display:none}.x-tab-icon-el{display:none;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.x-tab-icon>.x-tab-icon-el{display:inline-block}.x-tab-icon-top>.x-tab-icon-el,.x-tab-icon-bottom>.x-tab-icon-el{display:block}.x-tab-button-center{text-align:center}.x-tab-button-left{text-align:left}.x-tab-button-right{text-align:right}.x-tab-mc{overflow:visible}.x-tab{z-index:1}.x-tab-active{z-index:3}.x-tab-button{position:relative}.x-tab-close-btn{display:block;position:absolute;font-size:0;line-height:0}.x-tab-rotate-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;-ms-transform:rotate(270deg);-ms-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie8 .x-tab-rotate-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-tab-rotate-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;-ms-transform:rotate(90deg);-ms-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie8 .x-tab-rotate-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-tab-tr,.x-tab-br,.x-tab-mr,.x-tab-tl,.x-tab-bl,.x-tab-ml{width:1px}.x-tab-bar{z-index:0;position:relative}.x-tab-bar-body{position:relative}.x-tab-bar-strip{position:absolute;line-height:0;font-size:0;z-index:2}.x-tab-bar-top>.x-tab-bar-strip{bottom:0}.x-tab-bar-bottom>.x-tab-bar-strip{top:0}.x-tab-bar-left>.x-tab-bar-strip{right:0}.x-tab-bar-right>.x-tab-bar-strip{left:0}.x-tab-bar-horizontal .x-tab-bar-strip{width:100%;left:0}.x-tab-bar-vertical{display:table-cell}.x-tab-bar-vertical .x-tab-bar-strip{height:100%;top:0}.x-tab-bar-plain{background:transparent!important}.x-box-scroller-plain{background-color:transparent!important}.x-window{outline:0;overflow:hidden}.x-window .x-window-wrap{position:relative}.x-window-body{position:relative;overflow:hidden}.x-resizable-overlay{position:absolute;left:0;top:0;width:100%;height:100%;display:none;z-index:200000;background-color:#fff;filter:alpha(opacity=0);opacity:0}.x-form-textarea{overflow:auto;resize:none}div.x-form-text-grow .x-form-textarea{min-height:inherit}.x-message-box .x-form-display-field{height:auto}.x-menu{outline:0}.x-menu-item{white-space:nowrap;overflow:hidden;border-color:transparent;border-style:solid}.x-menu-item-cmp{margin:2px}.x-menu-item-cmp .x-field-label-cell{vertical-align:middle}.x-menu-icon-separator{position:absolute;top:0;z-index:0;height:100%;overflow:hidden}.x-menu-plain .x-menu-icon-separator{display:none}.x-menu-item-link{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;text-decoration:none;outline:0;display:block}.x-menu-item-link-href{-webkit-touch-callout:default}.x-menu-item-text{display:inline-block}.x-menu-item-icon,.x-menu-item-icon-right,.x-menu-item-arrow{font-size:0;position:absolute;text-align:center;background-repeat:no-repeat}.x-resizable-wrapped{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-column-header-checkbox .x-column-header-text{display:block;background-repeat:no-repeat;font-size:0}.x-grid-cell-row-checker{vertical-align:middle;background-repeat:no-repeat;font-size:0}.x-body{color:black;font-size:11px;line-height:17px;font-family:helvetica,arial,verdana,sans-serif;background:#f5f5f5}.x-animating-size,.x-collapsed{overflow:hidden!important}.x-mask{filter:alpha(opacity=70);opacity:.7;background:white;cursor:default}.x-mask-msg{padding:8px;-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;background:#e5e5e5}.x-mask-msg-inner{padding:0;background-color:transparent;color:#666;font:normal 11px helvetica,arial,verdana,sans-serif}.x-mask-msg-text{padding:21px 0 0;background-image:url(images/loadmask/loading.gif);background-repeat:no-repeat;background-position:center 0}.x-progress-default{background-color:#f5f5f5;border-width:0;height:20px;border-color:#4f0101}.x-progress-default .x-progress-bar-default{background-image:none;background-color:#d0bcbc}.x-progress-default .x-progress-text{color:#666;font-weight:bold;font-size:11px;font-family:helvetica,arial,verdana,sans-serif;text-align:center;line-height:20px}.x-progress-default .x-progress-text-back{color:#666;line-height:20px}.x-progressbar-default-cell>.x-grid-cell-inner,.x-progressbarwidget-default-cell>.x-grid-cell-inner{padding-top:1px;padding-bottom:1px}.x-progressbar-default-cell>.x-grid-cell-inner .x-progress-default,.x-progressbarwidget-default-cell>.x-grid-cell-inner .x-progress-default{height:20px}.x-tool{cursor:pointer}.x-tool-img{overflow:hidden;width:16px;height:16px;background-image:url(images/tools/tool-sprites.png);margin:0;filter:alpha(opacity=50);opacity:.5}.x-tool-over .x-tool-img{filter:alpha(opacity=60);opacity:.6}.x-tool-pressed .x-tool-img{filter:alpha(opacity=70);opacity:.7}.x-tool-placeholder{visibility:hidden}.x-tool-close{background-position:0 0}.x-tool-minimize{background-position:0 -16px}.x-tool-maximize{background-position:0 -32px}.x-tool-restore{background-position:0 -48px}.x-tool-toggle{background-position:0 -64px}.x-panel-collapsed .x-tool-toggle{background-position:0 -80px}.x-tool-gear{background-position:0 -96px}.x-tool-prev{background-position:0 -112px}.x-tool-next{background-position:0 -128px}.x-tool-pin{background-position:0 -144px}.x-tool-unpin{background-position:0 -160px}.x-tool-right{background-position:0 -176px}.x-tool-left{background-position:0 -192px}.x-tool-down{background-position:0 -208px}.x-tool-up{background-position:0 -224px}.x-tool-refresh{background-position:0 -240px}.x-tool-plus{background-position:0 -256px}.x-tool-minus{background-position:0 -272px}.x-tool-search{background-position:0 -288px}.x-tool-save{background-position:0 -304px}.x-tool-help{background-position:0 -320px}.x-tool-print{background-position:0 -336px}.x-tool-expand{background-position:0 -352px}.x-tool-collapse{background-position:0 -368px}.x-tool-resize{background-position:0 -384px}.x-tool-move{background-position:0 -400px}.x-tool-expand-bottom,.x-tool-collapse-bottom{background-position:0 -208px}.x-tool-expand-top,.x-tool-collapse-top{background-position:0 -224px}.x-tool-expand-left,.x-tool-collapse-left{background-position:0 -192px}.x-tool-expand-right,.x-tool-collapse-right{background-position:0 -176px}.x-header-draggable .x-header-body,.x-header-ghost{cursor:move}.x-header-text{white-space:nowrap}.x-btn-default-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727)}.x-btn-default-small-mc{background-image:url(images/btn/btn-default-small-fbg.gif);background-position:0 top;background-color:#692727}.x-nbr .x-btn-default-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-small-tl{background-position:0 -6px}.x-btn-default-small-tr{background-position:right -9px}.x-btn-default-small-bl{background-position:0 -12px}.x-btn-default-small-br{background-position:right -15px}.x-btn-default-small-ml{background-position:0 top}.x-btn-default-small-mr{background-position:right top}.x-btn-default-small-tc{background-position:0 0}.x-btn-default-small-bc{background-position:0 -3px}.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-mr{padding-right:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-ml{padding-left:3px}.x-btn-default-small-tc{height:3px}.x-btn-default-small-bc{height:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-tc,.x-btn-default-small-bc,.x-btn-default-small-ml,.x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-corners.gif)}.x-btn-default-small-ml,.x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-sides.gif)}.x-btn-default-small-mc{padding:1px 1px 1px 1px}.x-btn-default-small{border-color:#430000}.x-btn-button-default-small{height:16px}.x-btn-inner-default-small{font:bold 12px/16px helvetica,arial,verdana,sans-serif;color:white;padding:0 5px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-small,.x-btn-icon-left>.x-btn-inner-default-small{max-width:calc(100% - 16px)}.x-btn-icon-el-default-small{height:16px}.x-btn-icon-left>.x-btn-icon-el-default-small,.x-btn-icon-right>.x-btn-icon-el-default-small{width:16px}.x-btn-icon-top>.x-btn-icon-el-default-small,.x-btn-icon-bottom>.x-btn-icon-el-default-small{min-width:16px}.x-btn-icon-el-default-small.x-btn-glyph{font-size:16px;line-height:16px;color:white;opacity:.5}.x-ie8 .x-btn-icon-el-default-small.x-btn-glyph{color:#b49393}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-small{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-small{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-small{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-small{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-small{padding-right:5px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-small{margin-right:5px}.x-btn-arrow-bottom>.x-btn-button-default-small,.x-btn-split-bottom>.x-btn-button-default-small{padding-bottom:3px}.x-btn-wrap-default-small.x-btn-arrow-right:after{width:16px;padding-right:16px;background-image:url(images/button/default-small-arrow.png)}.x-btn-wrap-default-small.x-btn-arrow-bottom:after{height:13px;background-image:url(images/button/default-small-arrow.png)}.x-btn-wrap-default-small.x-btn-split-right:after{width:20px;padding-right:20px;background-image:url(images/button/default-small-s-arrow.png)}.x-btn-wrap-default-small.x-btn-split-bottom:after{height:15px;background-image:url(images/button/default-small-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-small{padding-right:5px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-small{margin-right:5px}.x-btn-focus.x-btn-default-small{background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);-webkit-box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset;-moz-box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset;box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset}.x-btn-over.x-btn-default-small{border-color:#3d0000;background-image:none;background-color:#602323;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#6f3838),color-stop(50%,#602323),color-stop(51%,#5b2121),color-stop(100%,#602323));background-image:-webkit-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-moz-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-o-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-ms-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323)}.x-btn-focus.x-btn-over.x-btn-default-small{-webkit-box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset;-moz-box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset;box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-default-small,.x-btn.x-btn-pressed.x-btn-default-small{border-color:#320000;background-image:none;background-color:#4e1d1d;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#4e1d1d),color-stop(50%,#4a1b1b),color-stop(51%,#4e1d1d),color-stop(100%,#5f3333));background-image:-webkit-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-moz-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-o-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-ms-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333)}.x-btn-focus.x-btn-menu-active.x-btn-default-small,.x-btn-focus.x-btn-pressed.x-btn-default-small{-webkit-box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset;-moz-box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset;box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-default-small{background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727)}.x-btn-focus .x-btn-default-small-tl,.x-btn-focus .x-btn-default-small-bl,.x-btn-focus .x-btn-default-small-tr,.x-btn-focus .x-btn-default-small-br,.x-btn-focus .x-btn-default-small-tc,.x-btn-focus .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-focus-corners.gif)}.x-btn-focus .x-btn-default-small-ml,.x-btn-focus .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-focus-sides.gif)}.x-btn-focus .x-btn-default-small-mc{background-color:#692727;background-image:url(images/btn/btn-default-small-focus-fbg.gif)}.x-btn-over .x-btn-default-small-tl,.x-btn-over .x-btn-default-small-bl,.x-btn-over .x-btn-default-small-tr,.x-btn-over .x-btn-default-small-br,.x-btn-over .x-btn-default-small-tc,.x-btn-over .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-over-corners.gif)}.x-btn-over .x-btn-default-small-ml,.x-btn-over .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-over-sides.gif)}.x-btn-over .x-btn-default-small-mc{background-color:#602323;background-image:url(images/btn/btn-default-small-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-small-tl,.x-btn-focus.x-btn-over .x-btn-default-small-bl,.x-btn-focus.x-btn-over .x-btn-default-small-tr,.x-btn-focus.x-btn-over .x-btn-default-small-br,.x-btn-focus.x-btn-over .x-btn-default-small-tc,.x-btn-focus.x-btn-over .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-small-ml,.x-btn-focus.x-btn-over .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-small-mc{background-color:#602323;background-image:url(images/btn/btn-default-small-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-small-tl,.x-btn.x-btn-menu-active .x-btn-default-small-bl,.x-btn.x-btn-menu-active .x-btn-default-small-tr,.x-btn.x-btn-menu-active .x-btn-default-small-br,.x-btn.x-btn-menu-active .x-btn-default-small-tc,.x-btn.x-btn-menu-active .x-btn-default-small-bc,.x-btn.x-btn-pressed .x-btn-default-small-tl,.x-btn.x-btn-pressed .x-btn-default-small-bl,.x-btn.x-btn-pressed .x-btn-default-small-tr,.x-btn.x-btn-pressed .x-btn-default-small-br,.x-btn.x-btn-pressed .x-btn-default-small-tc,.x-btn.x-btn-pressed .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-small-ml,.x-btn.x-btn-menu-active .x-btn-default-small-mr,.x-btn.x-btn-pressed .x-btn-default-small-ml,.x-btn.x-btn-pressed .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-small-mc,.x-btn.x-btn-pressed .x-btn-default-small-mc{background-color:#4e1d1d;background-image:url(images/btn/btn-default-small-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-small-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-small-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-small-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-small-br,.x-btn-focus.x-btn-menu-active .x-btn-default-small-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-small-bc,.x-btn-focus.x-btn-pressed .x-btn-default-small-tl,.x-btn-focus.x-btn-pressed .x-btn-default-small-bl,.x-btn-focus.x-btn-pressed .x-btn-default-small-tr,.x-btn-focus.x-btn-pressed .x-btn-default-small-br,.x-btn-focus.x-btn-pressed .x-btn-default-small-tc,.x-btn-focus.x-btn-pressed .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-small-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-small-mr,.x-btn-focus.x-btn-pressed .x-btn-default-small-ml,.x-btn-focus.x-btn-pressed .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-small-mc,.x-btn-focus.x-btn-pressed .x-btn-default-small-mc{background-color:#4e1d1d;background-image:url(images/btn/btn-default-small-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-small-tl,.x-btn.x-btn-disabled .x-btn-default-small-bl,.x-btn.x-btn-disabled .x-btn-default-small-tr,.x-btn.x-btn-disabled .x-btn-default-small-br,.x-btn.x-btn-disabled .x-btn-default-small-tc,.x-btn.x-btn-disabled .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-small-ml,.x-btn.x-btn-disabled .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-small-mc{background-color:#692727;background-image:url(images/btn/btn-default-small-disabled-fbg.gif)}.x-nbr .x-btn-default-small{background-image:none}.x-btn-disabled.x-btn-default-small{filter:alpha(opacity=50);opacity:.5}.x-btn-default-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727)}.x-btn-default-medium-mc{background-image:url(images/btn/btn-default-medium-fbg.gif);background-position:0 top;background-color:#692727}.x-nbr .x-btn-default-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-medium-tl{background-position:0 -6px}.x-btn-default-medium-tr{background-position:right -9px}.x-btn-default-medium-bl{background-position:0 -12px}.x-btn-default-medium-br{background-position:right -15px}.x-btn-default-medium-ml{background-position:0 top}.x-btn-default-medium-mr{background-position:right top}.x-btn-default-medium-tc{background-position:0 0}.x-btn-default-medium-bc{background-position:0 -3px}.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-mr{padding-right:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-ml{padding-left:3px}.x-btn-default-medium-tc{height:3px}.x-btn-default-medium-bc{height:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-tc,.x-btn-default-medium-bc,.x-btn-default-medium-ml,.x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-corners.gif)}.x-btn-default-medium-ml,.x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-sides.gif)}.x-btn-default-medium-mc{padding:1px 1px 1px 1px}.x-btn-default-medium{border-color:#430000}.x-btn-button-default-medium{height:24px}.x-btn-inner-default-medium{font:bold 14px/18px helvetica,arial,verdana,sans-serif;color:white;padding:0 8px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-medium,.x-btn-icon-left>.x-btn-inner-default-medium{max-width:calc(100% - 24px)}.x-btn-icon-el-default-medium{height:24px}.x-btn-icon-left>.x-btn-icon-el-default-medium,.x-btn-icon-right>.x-btn-icon-el-default-medium{width:24px}.x-btn-icon-top>.x-btn-icon-el-default-medium,.x-btn-icon-bottom>.x-btn-icon-el-default-medium{min-width:24px}.x-btn-icon-el-default-medium.x-btn-glyph{font-size:24px;line-height:24px;color:white;opacity:.5}.x-ie8 .x-btn-icon-el-default-medium.x-btn-glyph{color:#b49393}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-medium{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-medium{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-medium{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-medium{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-medium{padding-right:8px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-medium{margin-right:8px}.x-btn-arrow-bottom>.x-btn-button-default-medium,.x-btn-split-bottom>.x-btn-button-default-medium{padding-bottom:3px}.x-btn-wrap-default-medium.x-btn-arrow-right:after{width:24px;padding-right:24px;background-image:url(images/button/default-medium-arrow.png)}.x-btn-wrap-default-medium.x-btn-arrow-bottom:after{height:18px;background-image:url(images/button/default-medium-arrow.png)}.x-btn-wrap-default-medium.x-btn-split-right:after{width:28px;padding-right:28px;background-image:url(images/button/default-medium-s-arrow.png)}.x-btn-wrap-default-medium.x-btn-split-bottom:after{height:24px;background-image:url(images/button/default-medium-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-medium{padding-right:8px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-medium{margin-right:8px}.x-btn-focus.x-btn-default-medium{background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);-webkit-box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset;-moz-box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset;box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset}.x-btn-over.x-btn-default-medium{border-color:#3d0000;background-image:none;background-color:#602323;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#6f3838),color-stop(50%,#602323),color-stop(51%,#5b2121),color-stop(100%,#602323));background-image:-webkit-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-moz-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-o-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-ms-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323)}.x-btn-focus.x-btn-over.x-btn-default-medium{-webkit-box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset;-moz-box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset;box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-default-medium,.x-btn.x-btn-pressed.x-btn-default-medium{border-color:#320000;background-image:none;background-color:#4e1d1d;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#4e1d1d),color-stop(50%,#4a1b1b),color-stop(51%,#4e1d1d),color-stop(100%,#5f3333));background-image:-webkit-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-moz-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-o-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-ms-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333)}.x-btn-focus.x-btn-menu-active.x-btn-default-medium,.x-btn-focus.x-btn-pressed.x-btn-default-medium{-webkit-box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset;-moz-box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset;box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-default-medium{background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727)}.x-btn-focus .x-btn-default-medium-tl,.x-btn-focus .x-btn-default-medium-bl,.x-btn-focus .x-btn-default-medium-tr,.x-btn-focus .x-btn-default-medium-br,.x-btn-focus .x-btn-default-medium-tc,.x-btn-focus .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-focus-corners.gif)}.x-btn-focus .x-btn-default-medium-ml,.x-btn-focus .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-focus-sides.gif)}.x-btn-focus .x-btn-default-medium-mc{background-color:#692727;background-image:url(images/btn/btn-default-medium-focus-fbg.gif)}.x-btn-over .x-btn-default-medium-tl,.x-btn-over .x-btn-default-medium-bl,.x-btn-over .x-btn-default-medium-tr,.x-btn-over .x-btn-default-medium-br,.x-btn-over .x-btn-default-medium-tc,.x-btn-over .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-over-corners.gif)}.x-btn-over .x-btn-default-medium-ml,.x-btn-over .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-over-sides.gif)}.x-btn-over .x-btn-default-medium-mc{background-color:#602323;background-image:url(images/btn/btn-default-medium-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-medium-tl,.x-btn-focus.x-btn-over .x-btn-default-medium-bl,.x-btn-focus.x-btn-over .x-btn-default-medium-tr,.x-btn-focus.x-btn-over .x-btn-default-medium-br,.x-btn-focus.x-btn-over .x-btn-default-medium-tc,.x-btn-focus.x-btn-over .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-medium-ml,.x-btn-focus.x-btn-over .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-medium-mc{background-color:#602323;background-image:url(images/btn/btn-default-medium-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-medium-tl,.x-btn.x-btn-menu-active .x-btn-default-medium-bl,.x-btn.x-btn-menu-active .x-btn-default-medium-tr,.x-btn.x-btn-menu-active .x-btn-default-medium-br,.x-btn.x-btn-menu-active .x-btn-default-medium-tc,.x-btn.x-btn-menu-active .x-btn-default-medium-bc,.x-btn.x-btn-pressed .x-btn-default-medium-tl,.x-btn.x-btn-pressed .x-btn-default-medium-bl,.x-btn.x-btn-pressed .x-btn-default-medium-tr,.x-btn.x-btn-pressed .x-btn-default-medium-br,.x-btn.x-btn-pressed .x-btn-default-medium-tc,.x-btn.x-btn-pressed .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-medium-ml,.x-btn.x-btn-menu-active .x-btn-default-medium-mr,.x-btn.x-btn-pressed .x-btn-default-medium-ml,.x-btn.x-btn-pressed .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-medium-mc,.x-btn.x-btn-pressed .x-btn-default-medium-mc{background-color:#4e1d1d;background-image:url(images/btn/btn-default-medium-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-medium-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-br,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-bc,.x-btn-focus.x-btn-pressed .x-btn-default-medium-tl,.x-btn-focus.x-btn-pressed .x-btn-default-medium-bl,.x-btn-focus.x-btn-pressed .x-btn-default-medium-tr,.x-btn-focus.x-btn-pressed .x-btn-default-medium-br,.x-btn-focus.x-btn-pressed .x-btn-default-medium-tc,.x-btn-focus.x-btn-pressed .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-medium-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-mr,.x-btn-focus.x-btn-pressed .x-btn-default-medium-ml,.x-btn-focus.x-btn-pressed .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-medium-mc,.x-btn-focus.x-btn-pressed .x-btn-default-medium-mc{background-color:#4e1d1d;background-image:url(images/btn/btn-default-medium-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-medium-tl,.x-btn.x-btn-disabled .x-btn-default-medium-bl,.x-btn.x-btn-disabled .x-btn-default-medium-tr,.x-btn.x-btn-disabled .x-btn-default-medium-br,.x-btn.x-btn-disabled .x-btn-default-medium-tc,.x-btn.x-btn-disabled .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-medium-ml,.x-btn.x-btn-disabled .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-medium-mc{background-color:#692727;background-image:url(images/btn/btn-default-medium-disabled-fbg.gif)}.x-nbr .x-btn-default-medium{background-image:none}.x-btn-disabled.x-btn-default-medium{filter:alpha(opacity=50);opacity:.5}.x-btn-default-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727)}.x-btn-default-large-mc{background-image:url(images/btn/btn-default-large-fbg.gif);background-position:0 top;background-color:#692727}.x-nbr .x-btn-default-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-large-tl{background-position:0 -6px}.x-btn-default-large-tr{background-position:right -9px}.x-btn-default-large-bl{background-position:0 -12px}.x-btn-default-large-br{background-position:right -15px}.x-btn-default-large-ml{background-position:0 top}.x-btn-default-large-mr{background-position:right top}.x-btn-default-large-tc{background-position:0 0}.x-btn-default-large-bc{background-position:0 -3px}.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-mr{padding-right:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-ml{padding-left:3px}.x-btn-default-large-tc{height:3px}.x-btn-default-large-bc{height:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-tc,.x-btn-default-large-bc,.x-btn-default-large-ml,.x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-corners.gif)}.x-btn-default-large-ml,.x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-sides.gif)}.x-btn-default-large-mc{padding:1px 1px 1px 1px}.x-btn-default-large{border-color:#430000}.x-btn-button-default-large{height:32px}.x-btn-inner-default-large{font:bold 16px/20px helvetica,arial,verdana,sans-serif;color:white;padding:0 10px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-large,.x-btn-icon-left>.x-btn-inner-default-large{max-width:calc(100% - 32px)}.x-btn-icon-el-default-large{height:32px}.x-btn-icon-left>.x-btn-icon-el-default-large,.x-btn-icon-right>.x-btn-icon-el-default-large{width:32px}.x-btn-icon-top>.x-btn-icon-el-default-large,.x-btn-icon-bottom>.x-btn-icon-el-default-large{min-width:32px}.x-btn-icon-el-default-large.x-btn-glyph{font-size:32px;line-height:32px;color:white;opacity:.5}.x-ie8 .x-btn-icon-el-default-large.x-btn-glyph{color:#b49393}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-large{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-large{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-large{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-large{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-large{padding-right:10px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-large{margin-right:10px}.x-btn-arrow-bottom>.x-btn-button-default-large,.x-btn-split-bottom>.x-btn-button-default-large{padding-bottom:3px}.x-btn-wrap-default-large.x-btn-arrow-right:after{width:28px;padding-right:28px;background-image:url(images/button/default-large-arrow.png)}.x-btn-wrap-default-large.x-btn-arrow-bottom:after{height:20px;background-image:url(images/button/default-large-arrow.png)}.x-btn-wrap-default-large.x-btn-split-right:after{width:35px;padding-right:35px;background-image:url(images/button/default-large-s-arrow.png)}.x-btn-wrap-default-large.x-btn-split-bottom:after{height:29px;background-image:url(images/button/default-large-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-large{padding-right:10px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-large{margin-right:10px}.x-btn-focus.x-btn-default-large{background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);-webkit-box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset;-moz-box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset;box-shadow:#e1d3d3 0 1px 0 0 inset,#e1d3d3 0 -1px 0 0 inset,#e1d3d3 -1px 0 0 0 inset,#e1d3d3 1px 0 0 0 inset}.x-btn-over.x-btn-default-large{border-color:#3d0000;background-image:none;background-color:#602323;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#6f3838),color-stop(50%,#602323),color-stop(51%,#5b2121),color-stop(100%,#602323));background-image:-webkit-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-moz-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-o-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:-ms-linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323);background-image:linear-gradient(top,#6f3838,#602323 50%,#5b2121 51%,#602323)}.x-btn-focus.x-btn-over.x-btn-default-large{-webkit-box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset;-moz-box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset;box-shadow:#dfd3d3 0 1px 0 0 inset,#dfd3d3 0 -1px 0 0 inset,#dfd3d3 -1px 0 0 0 inset,#dfd3d3 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-default-large,.x-btn.x-btn-pressed.x-btn-default-large{border-color:#320000;background-image:none;background-color:#4e1d1d;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#4e1d1d),color-stop(50%,#4a1b1b),color-stop(51%,#4e1d1d),color-stop(100%,#5f3333));background-image:-webkit-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-moz-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-o-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:-ms-linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333);background-image:linear-gradient(top,#4e1d1d,#4a1b1b 50%,#4e1d1d 51%,#5f3333)}.x-btn-focus.x-btn-menu-active.x-btn-default-large,.x-btn-focus.x-btn-pressed.x-btn-default-large{-webkit-box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset;-moz-box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset;box-shadow:#dbd1d1 0 1px 0 0 inset,#dbd1d1 0 -1px 0 0 inset,#dbd1d1 -1px 0 0 0 inset,#dbd1d1 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-default-large{background-image:none;background-color:#692727;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#783c3c),color-stop(50%,#692727),color-stop(51%,#632525),color-stop(100%,#692727));background-image:-webkit-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-moz-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-o-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:-ms-linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727);background-image:linear-gradient(top,#783c3c,#692727 50%,#632525 51%,#692727)}.x-btn-focus .x-btn-default-large-tl,.x-btn-focus .x-btn-default-large-bl,.x-btn-focus .x-btn-default-large-tr,.x-btn-focus .x-btn-default-large-br,.x-btn-focus .x-btn-default-large-tc,.x-btn-focus .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-focus-corners.gif)}.x-btn-focus .x-btn-default-large-ml,.x-btn-focus .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-focus-sides.gif)}.x-btn-focus .x-btn-default-large-mc{background-color:#692727;background-image:url(images/btn/btn-default-large-focus-fbg.gif)}.x-btn-over .x-btn-default-large-tl,.x-btn-over .x-btn-default-large-bl,.x-btn-over .x-btn-default-large-tr,.x-btn-over .x-btn-default-large-br,.x-btn-over .x-btn-default-large-tc,.x-btn-over .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-over-corners.gif)}.x-btn-over .x-btn-default-large-ml,.x-btn-over .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-over-sides.gif)}.x-btn-over .x-btn-default-large-mc{background-color:#602323;background-image:url(images/btn/btn-default-large-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-large-tl,.x-btn-focus.x-btn-over .x-btn-default-large-bl,.x-btn-focus.x-btn-over .x-btn-default-large-tr,.x-btn-focus.x-btn-over .x-btn-default-large-br,.x-btn-focus.x-btn-over .x-btn-default-large-tc,.x-btn-focus.x-btn-over .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-large-ml,.x-btn-focus.x-btn-over .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-large-mc{background-color:#602323;background-image:url(images/btn/btn-default-large-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-large-tl,.x-btn.x-btn-menu-active .x-btn-default-large-bl,.x-btn.x-btn-menu-active .x-btn-default-large-tr,.x-btn.x-btn-menu-active .x-btn-default-large-br,.x-btn.x-btn-menu-active .x-btn-default-large-tc,.x-btn.x-btn-menu-active .x-btn-default-large-bc,.x-btn.x-btn-pressed .x-btn-default-large-tl,.x-btn.x-btn-pressed .x-btn-default-large-bl,.x-btn.x-btn-pressed .x-btn-default-large-tr,.x-btn.x-btn-pressed .x-btn-default-large-br,.x-btn.x-btn-pressed .x-btn-default-large-tc,.x-btn.x-btn-pressed .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-large-ml,.x-btn.x-btn-menu-active .x-btn-default-large-mr,.x-btn.x-btn-pressed .x-btn-default-large-ml,.x-btn.x-btn-pressed .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-large-mc,.x-btn.x-btn-pressed .x-btn-default-large-mc{background-color:#4e1d1d;background-image:url(images/btn/btn-default-large-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-large-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-large-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-large-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-large-br,.x-btn-focus.x-btn-menu-active .x-btn-default-large-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-large-bc,.x-btn-focus.x-btn-pressed .x-btn-default-large-tl,.x-btn-focus.x-btn-pressed .x-btn-default-large-bl,.x-btn-focus.x-btn-pressed .x-btn-default-large-tr,.x-btn-focus.x-btn-pressed .x-btn-default-large-br,.x-btn-focus.x-btn-pressed .x-btn-default-large-tc,.x-btn-focus.x-btn-pressed .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-large-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-large-mr,.x-btn-focus.x-btn-pressed .x-btn-default-large-ml,.x-btn-focus.x-btn-pressed .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-large-mc,.x-btn-focus.x-btn-pressed .x-btn-default-large-mc{background-color:#4e1d1d;background-image:url(images/btn/btn-default-large-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-large-tl,.x-btn.x-btn-disabled .x-btn-default-large-bl,.x-btn.x-btn-disabled .x-btn-default-large-tr,.x-btn.x-btn-disabled .x-btn-default-large-br,.x-btn.x-btn-disabled .x-btn-default-large-tc,.x-btn.x-btn-disabled .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-large-ml,.x-btn.x-btn-disabled .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-large-mc{background-color:#692727;background-image:url(images/btn/btn-default-large-disabled-fbg.gif)}.x-nbr .x-btn-default-large{background-image:none}.x-btn-disabled.x-btn-default-large{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5)}.x-btn-default-toolbar-small-mc{background-image:url(images/btn/btn-default-toolbar-small-fbg.gif);background-position:0 top;background-color:#f5f5f5}.x-nbr .x-btn-default-toolbar-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-toolbar-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-small-tl{background-position:0 -6px}.x-btn-default-toolbar-small-tr{background-position:right -9px}.x-btn-default-toolbar-small-bl{background-position:0 -12px}.x-btn-default-toolbar-small-br{background-position:right -15px}.x-btn-default-toolbar-small-ml{background-position:0 top}.x-btn-default-toolbar-small-mr{background-position:right top}.x-btn-default-toolbar-small-tc{background-position:0 0}.x-btn-default-toolbar-small-bc{background-position:0 -3px}.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-mr{padding-right:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-ml{padding-left:3px}.x-btn-default-toolbar-small-tc{height:3px}.x-btn-default-toolbar-small-bc{height:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-tc,.x-btn-default-toolbar-small-bc,.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-corners.gif)}.x-btn-default-toolbar-small-ml,.x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-sides.gif)}.x-btn-default-toolbar-small-mc{padding:1px 1px 1px 1px}.x-btn-default-toolbar-small{border-color:#e1e1e1}.x-btn-button-default-toolbar-small{height:16px}.x-btn-inner-default-toolbar-small{font:bold 12px/16px helvetica,arial,verdana,sans-serif;color:#666;padding:0 5px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-toolbar-small,.x-btn-icon-left>.x-btn-inner-default-toolbar-small{max-width:calc(100% - 16px)}.x-btn-icon-el-default-toolbar-small{height:16px}.x-btn-icon-left>.x-btn-icon-el-default-toolbar-small,.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{width:16px}.x-btn-icon-top>.x-btn-icon-el-default-toolbar-small,.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-small{min-width:16px}.x-btn-icon-el-default-toolbar-small.x-btn-glyph{font-size:16px;line-height:16px;color:#666;opacity:.5}.x-ie8 .x-btn-icon-el-default-toolbar-small.x-btn-glyph{color:#adadad}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-toolbar-small{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-toolbar-small{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-small{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-small{padding-right:5px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{margin-right:5px}.x-btn-arrow-bottom>.x-btn-button-default-toolbar-small,.x-btn-split-bottom>.x-btn-button-default-toolbar-small{padding-bottom:3px}.x-btn-wrap-default-toolbar-small.x-btn-arrow-right:after{width:16px;padding-right:16px;background-image:url(images/button/default-toolbar-small-arrow.png)}.x-btn-wrap-default-toolbar-small.x-btn-arrow-bottom:after{height:13px;background-image:url(images/button/default-toolbar-small-arrow.png)}.x-btn-wrap-default-toolbar-small.x-btn-split-right:after{width:20px;padding-right:20px;background-image:url(images/button/default-toolbar-small-s-arrow.png)}.x-btn-wrap-default-toolbar-small.x-btn-split-bottom:after{height:15px;background-image:url(images/button/default-toolbar-small-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-small{padding-right:5px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{margin-right:5px}.x-btn-focus.x-btn-default-toolbar-small{background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn-over.x-btn-default-toolbar-small{border-color:#d8d8d8;background-image:none;background-color:#ebebeb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ededed),color-stop(50%,#ebebeb),color-stop(51%,#dfdfdf),color-stop(100%,#ebebeb));background-image:-webkit-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-moz-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-o-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-ms-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb)}.x-btn-focus.x-btn-over.x-btn-default-toolbar-small{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-default-toolbar-small,.x-btn.x-btn-pressed.x-btn-default-toolbar-small{border-color:#cecece;background-image:none;background-color:#e1e1e1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1e1e1),color-stop(50%,#d5d5d5),color-stop(51%,#e1e1e1),color-stop(100%,#e4e4e4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-moz-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-o-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-ms-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4)}.x-btn-focus.x-btn-menu-active.x-btn-default-toolbar-small,.x-btn-focus.x-btn-pressed.x-btn-default-toolbar-small{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-default-toolbar-small{background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5)}.x-btn-focus .x-btn-default-toolbar-small-tl,.x-btn-focus .x-btn-default-toolbar-small-bl,.x-btn-focus .x-btn-default-toolbar-small-tr,.x-btn-focus .x-btn-default-toolbar-small-br,.x-btn-focus .x-btn-default-toolbar-small-tc,.x-btn-focus .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-corners.gif)}.x-btn-focus .x-btn-default-toolbar-small-ml,.x-btn-focus .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-sides.gif)}.x-btn-focus .x-btn-default-toolbar-small-mc{background-color:#f5f5f5;background-image:url(images/btn/btn-default-toolbar-small-focus-fbg.gif)}.x-btn-over .x-btn-default-toolbar-small-tl,.x-btn-over .x-btn-default-toolbar-small-bl,.x-btn-over .x-btn-default-toolbar-small-tr,.x-btn-over .x-btn-default-toolbar-small-br,.x-btn-over .x-btn-default-toolbar-small-tc,.x-btn-over .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-over-corners.gif)}.x-btn-over .x-btn-default-toolbar-small-ml,.x-btn-over .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-over-sides.gif)}.x-btn-over .x-btn-default-toolbar-small-mc{background-color:#ebebeb;background-image:url(images/btn/btn-default-toolbar-small-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-tl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-bl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-tr,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-br,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-tc,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-ml,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-mc{background-color:#ebebeb;background-image:url(images/btn/btn-default-toolbar-small-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-tl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-bl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-tr,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-br,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-tc,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-bc,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-tl,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-bl,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-tr,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-br,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-tc,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-ml,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-mr,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-ml,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-mc,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-br,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-bc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-tl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-bl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-tr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-br,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-tc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-mr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-ml,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-mc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-small-tl,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-bl,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-tr,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-br,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-tc,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-small-ml,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-small-mc{background-color:#f5f5f5;background-image:url(images/btn/btn-default-toolbar-small-disabled-fbg.gif)}.x-nbr .x-btn-default-toolbar-small{background-image:none}.x-btn-disabled.x-btn-default-toolbar-small{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5)}.x-btn-default-toolbar-medium-mc{background-image:url(images/btn/btn-default-toolbar-medium-fbg.gif);background-position:0 top;background-color:#f5f5f5}.x-nbr .x-btn-default-toolbar-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-toolbar-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-medium-tl{background-position:0 -6px}.x-btn-default-toolbar-medium-tr{background-position:right -9px}.x-btn-default-toolbar-medium-bl{background-position:0 -12px}.x-btn-default-toolbar-medium-br{background-position:right -15px}.x-btn-default-toolbar-medium-ml{background-position:0 top}.x-btn-default-toolbar-medium-mr{background-position:right top}.x-btn-default-toolbar-medium-tc{background-position:0 0}.x-btn-default-toolbar-medium-bc{background-position:0 -3px}.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-mr{padding-right:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-ml{padding-left:3px}.x-btn-default-toolbar-medium-tc{height:3px}.x-btn-default-toolbar-medium-bc{height:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-tc,.x-btn-default-toolbar-medium-bc,.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-corners.gif)}.x-btn-default-toolbar-medium-ml,.x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-sides.gif)}.x-btn-default-toolbar-medium-mc{padding:1px 1px 1px 1px}.x-btn-default-toolbar-medium{border-color:#e1e1e1}.x-btn-button-default-toolbar-medium{height:24px}.x-btn-inner-default-toolbar-medium{font:bold 14px/18px helvetica,arial,verdana,sans-serif;color:#666;padding:0 8px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-toolbar-medium,.x-btn-icon-left>.x-btn-inner-default-toolbar-medium{max-width:calc(100% - 24px)}.x-btn-icon-el-default-toolbar-medium{height:24px}.x-btn-icon-left>.x-btn-icon-el-default-toolbar-medium,.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{width:24px}.x-btn-icon-top>.x-btn-icon-el-default-toolbar-medium,.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-medium{min-width:24px}.x-btn-icon-el-default-toolbar-medium.x-btn-glyph{font-size:24px;line-height:24px;color:#666;opacity:.5}.x-ie8 .x-btn-icon-el-default-toolbar-medium.x-btn-glyph{color:#adadad}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-toolbar-medium{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-toolbar-medium{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-medium{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-medium{padding-right:8px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{margin-right:8px}.x-btn-arrow-bottom>.x-btn-button-default-toolbar-medium,.x-btn-split-bottom>.x-btn-button-default-toolbar-medium{padding-bottom:3px}.x-btn-wrap-default-toolbar-medium.x-btn-arrow-right:after{width:24px;padding-right:24px;background-image:url(images/button/default-toolbar-medium-arrow.png)}.x-btn-wrap-default-toolbar-medium.x-btn-arrow-bottom:after{height:18px;background-image:url(images/button/default-toolbar-medium-arrow.png)}.x-btn-wrap-default-toolbar-medium.x-btn-split-right:after{width:28px;padding-right:28px;background-image:url(images/button/default-toolbar-medium-s-arrow.png)}.x-btn-wrap-default-toolbar-medium.x-btn-split-bottom:after{height:24px;background-image:url(images/button/default-toolbar-medium-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-medium{padding-right:8px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{margin-right:8px}.x-btn-focus.x-btn-default-toolbar-medium{background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn-over.x-btn-default-toolbar-medium{border-color:#d8d8d8;background-image:none;background-color:#ebebeb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ededed),color-stop(50%,#ebebeb),color-stop(51%,#dfdfdf),color-stop(100%,#ebebeb));background-image:-webkit-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-moz-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-o-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-ms-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb)}.x-btn-focus.x-btn-over.x-btn-default-toolbar-medium{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-default-toolbar-medium,.x-btn.x-btn-pressed.x-btn-default-toolbar-medium{border-color:#cecece;background-image:none;background-color:#e1e1e1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1e1e1),color-stop(50%,#d5d5d5),color-stop(51%,#e1e1e1),color-stop(100%,#e4e4e4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-moz-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-o-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-ms-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4)}.x-btn-focus.x-btn-menu-active.x-btn-default-toolbar-medium,.x-btn-focus.x-btn-pressed.x-btn-default-toolbar-medium{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-default-toolbar-medium{background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5)}.x-btn-focus .x-btn-default-toolbar-medium-tl,.x-btn-focus .x-btn-default-toolbar-medium-bl,.x-btn-focus .x-btn-default-toolbar-medium-tr,.x-btn-focus .x-btn-default-toolbar-medium-br,.x-btn-focus .x-btn-default-toolbar-medium-tc,.x-btn-focus .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-corners.gif)}.x-btn-focus .x-btn-default-toolbar-medium-ml,.x-btn-focus .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-sides.gif)}.x-btn-focus .x-btn-default-toolbar-medium-mc{background-color:#f5f5f5;background-image:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif)}.x-btn-over .x-btn-default-toolbar-medium-tl,.x-btn-over .x-btn-default-toolbar-medium-bl,.x-btn-over .x-btn-default-toolbar-medium-tr,.x-btn-over .x-btn-default-toolbar-medium-br,.x-btn-over .x-btn-default-toolbar-medium-tc,.x-btn-over .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-over-corners.gif)}.x-btn-over .x-btn-default-toolbar-medium-ml,.x-btn-over .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-over-sides.gif)}.x-btn-over .x-btn-default-toolbar-medium-mc{background-color:#ebebeb;background-image:url(images/btn/btn-default-toolbar-medium-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-tl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-bl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-tr,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-br,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-tc,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-ml,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-mc{background-color:#ebebeb;background-image:url(images/btn/btn-default-toolbar-medium-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-tl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-bl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-tr,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-br,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-tc,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-bc,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-tl,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-bl,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-tr,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-br,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-tc,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-ml,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-mr,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-ml,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-mc,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-br,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-bc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-tl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-bl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-tr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-br,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-tc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-mr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-ml,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-mc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-tl,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-bl,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-tr,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-br,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-tc,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-ml,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-mc{background-color:#f5f5f5;background-image:url(images/btn/btn-default-toolbar-medium-disabled-fbg.gif)}.x-nbr .x-btn-default-toolbar-medium{background-image:none}.x-btn-disabled.x-btn-default-toolbar-medium{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5)}.x-btn-default-toolbar-large-mc{background-image:url(images/btn/btn-default-toolbar-large-fbg.gif);background-position:0 top;background-color:#f5f5f5}.x-nbr .x-btn-default-toolbar-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-toolbar-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-large-tl{background-position:0 -6px}.x-btn-default-toolbar-large-tr{background-position:right -9px}.x-btn-default-toolbar-large-bl{background-position:0 -12px}.x-btn-default-toolbar-large-br{background-position:right -15px}.x-btn-default-toolbar-large-ml{background-position:0 top}.x-btn-default-toolbar-large-mr{background-position:right top}.x-btn-default-toolbar-large-tc{background-position:0 0}.x-btn-default-toolbar-large-bc{background-position:0 -3px}.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-mr{padding-right:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-ml{padding-left:3px}.x-btn-default-toolbar-large-tc{height:3px}.x-btn-default-toolbar-large-bc{height:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-tc,.x-btn-default-toolbar-large-bc,.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-corners.gif)}.x-btn-default-toolbar-large-ml,.x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-sides.gif)}.x-btn-default-toolbar-large-mc{padding:1px 1px 1px 1px}.x-btn-default-toolbar-large{border-color:#e1e1e1}.x-btn-button-default-toolbar-large{height:32px}.x-btn-inner-default-toolbar-large{font:bold 16px/20px helvetica,arial,verdana,sans-serif;color:#666;padding:0 10px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-toolbar-large,.x-btn-icon-left>.x-btn-inner-default-toolbar-large{max-width:calc(100% - 32px)}.x-btn-icon-el-default-toolbar-large{height:32px}.x-btn-icon-left>.x-btn-icon-el-default-toolbar-large,.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{width:32px}.x-btn-icon-top>.x-btn-icon-el-default-toolbar-large,.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-large{min-width:32px}.x-btn-icon-el-default-toolbar-large.x-btn-glyph{font-size:32px;line-height:32px;color:#666;opacity:.5}.x-ie8 .x-btn-icon-el-default-toolbar-large.x-btn-glyph{color:#adadad}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-toolbar-large{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-toolbar-large{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-large{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-large{padding-right:10px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{margin-right:10px}.x-btn-arrow-bottom>.x-btn-button-default-toolbar-large,.x-btn-split-bottom>.x-btn-button-default-toolbar-large{padding-bottom:3px}.x-btn-wrap-default-toolbar-large.x-btn-arrow-right:after{width:28px;padding-right:28px;background-image:url(images/button/default-toolbar-large-arrow.png)}.x-btn-wrap-default-toolbar-large.x-btn-arrow-bottom:after{height:20px;background-image:url(images/button/default-toolbar-large-arrow.png)}.x-btn-wrap-default-toolbar-large.x-btn-split-right:after{width:35px;padding-right:35px;background-image:url(images/button/default-toolbar-large-s-arrow.png)}.x-btn-wrap-default-toolbar-large.x-btn-split-bottom:after{height:29px;background-image:url(images/button/default-toolbar-large-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-large{padding-right:10px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{margin-right:10px}.x-btn-focus.x-btn-default-toolbar-large{background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn-over.x-btn-default-toolbar-large{border-color:#d8d8d8;background-image:none;background-color:#ebebeb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ededed),color-stop(50%,#ebebeb),color-stop(51%,#dfdfdf),color-stop(100%,#ebebeb));background-image:-webkit-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-moz-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-o-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-ms-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb)}.x-btn-focus.x-btn-over.x-btn-default-toolbar-large{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-default-toolbar-large,.x-btn.x-btn-pressed.x-btn-default-toolbar-large{border-color:#cecece;background-image:none;background-color:#e1e1e1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1e1e1),color-stop(50%,#d5d5d5),color-stop(51%,#e1e1e1),color-stop(100%,#e4e4e4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-moz-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-o-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-ms-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4)}.x-btn-focus.x-btn-menu-active.x-btn-default-toolbar-large,.x-btn-focus.x-btn-pressed.x-btn-default-toolbar-large{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-default-toolbar-large{background-image:none;background-color:#f5f5f5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(50%,#f5f5f5),color-stop(51%,#e8e8e8),color-stop(100%,#f5f5f5));background-image:-webkit-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-moz-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-o-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:-ms-linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5);background-image:linear-gradient(top,#f6f6f6,#f5f5f5 50%,#e8e8e8 51%,#f5f5f5)}.x-btn-focus .x-btn-default-toolbar-large-tl,.x-btn-focus .x-btn-default-toolbar-large-bl,.x-btn-focus .x-btn-default-toolbar-large-tr,.x-btn-focus .x-btn-default-toolbar-large-br,.x-btn-focus .x-btn-default-toolbar-large-tc,.x-btn-focus .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-corners.gif)}.x-btn-focus .x-btn-default-toolbar-large-ml,.x-btn-focus .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-sides.gif)}.x-btn-focus .x-btn-default-toolbar-large-mc{background-color:#f5f5f5;background-image:url(images/btn/btn-default-toolbar-large-focus-fbg.gif)}.x-btn-over .x-btn-default-toolbar-large-tl,.x-btn-over .x-btn-default-toolbar-large-bl,.x-btn-over .x-btn-default-toolbar-large-tr,.x-btn-over .x-btn-default-toolbar-large-br,.x-btn-over .x-btn-default-toolbar-large-tc,.x-btn-over .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-over-corners.gif)}.x-btn-over .x-btn-default-toolbar-large-ml,.x-btn-over .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-over-sides.gif)}.x-btn-over .x-btn-default-toolbar-large-mc{background-color:#ebebeb;background-image:url(images/btn/btn-default-toolbar-large-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-tl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-bl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-tr,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-br,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-tc,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-ml,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-mc{background-color:#ebebeb;background-image:url(images/btn/btn-default-toolbar-large-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-tl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-bl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-tr,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-br,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-tc,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-bc,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-tl,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-bl,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-tr,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-br,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-tc,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-ml,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-mr,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-ml,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-mc,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-br,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-bc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-tl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-bl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-tr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-br,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-tc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-mr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-ml,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-mc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-large-tl,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-bl,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-tr,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-br,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-tc,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-large-ml,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-large-mc{background-color:#f5f5f5;background-image:url(images/btn/btn-default-toolbar-large-disabled-fbg.gif)}.x-nbr .x-btn-default-toolbar-large{background-image:none}.x-btn-disabled.x-btn-default-toolbar-large{filter:alpha(opacity=50);opacity:.5}.x-collapse-el{cursor:pointer}.x-layout-split-left,.x-layout-split-right{top:50%;margin-top:-24px;width:8px;height:48px}.x-layout-split-top,.x-layout-split-bottom{left:50%;width:48px;height:8px;margin-left:-24px}.x-layout-split-left{background-image:url(images/util/splitter/mini-left.png)}.x-layout-split-right{background-image:url(images/util/splitter/mini-right.png)}.x-layout-split-top{background-image:url(images/util/splitter/mini-top.png)}.x-layout-split-bottom{background-image:url(images/util/splitter/mini-bottom.png)}.x-splitter-collapsed .x-layout-split-left{background-image:url(images/util/splitter/mini-right.png)}.x-splitter-collapsed .x-layout-split-right{background-image:url(images/util/splitter/mini-left.png)}.x-splitter-collapsed .x-layout-split-top{background-image:url(images/util/splitter/mini-bottom.png)}.x-splitter-collapsed .x-layout-split-bottom{background-image:url(images/util/splitter/mini-top.png)}.x-splitter-active{background-color:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-splitter-active .x-collapse-el{filter:alpha(opacity=30);opacity:.3}.x-toolbar-default{padding:6px 0 6px 8px;border-style:solid;border-color:#c1c1c1;border-width:1px;background-image:none;background-color:white}.x-toolbar-default .x-tool-img{background-image:url(images/tools/tool-sprites-dark.png);background-color:white}.x-toolbar-default .x-toolbar-item{margin:0 8px 0 0}.x-toolbar-default .x-toolbar-separator-horizontal{margin:0 8px 0 0;height:14px;border-style:solid;border-width:0 0 0 1px;border-left-color:#e1e1e1;border-right-color:white}.x-toolbar-default .x-box-menu-after{margin:0 8px}.x-toolbar-default-vertical{padding:6px 8px 0}.x-toolbar-default-vertical .x-toolbar-item{margin:0 0 6px 0}.x-toolbar-default-vertical .x-toolbar-separator-vertical{margin:0 5px 6px;border-style:solid none;border-width:1px 0 0;border-top-color:#e1e1e1;border-bottom-color:white}.x-toolbar-default-vertical .x-box-menu-after{margin:6px 0}.x-toolbar-text-default{padding:0 4px;color:#490606;font:normal 11px/16px helvetica,arial,verdana,sans-serif}.x-toolbar-spacer-default{width:2px}.x-toolbar-default-scroller .x-box-scroller-body-horizontal{margin-left:16px}.x-toolbar-default-vertical-scroller .x-box-scroller-body-vertical{margin-top:18px}.x-box-scroller-toolbar-default{cursor:pointer;filter:alpha(opacity=60);opacity:.6}.x-box-scroller-toolbar-default.x-box-scroller-hover{filter:alpha(opacity=80);opacity:.8}.x-box-scroller-toolbar-default.x-box-scroller-pressed{filter:alpha(opacity=100);opacity:1}.x-box-scroller-toolbar-default.x-box-scroller-disabled{filter:alpha(opacity=25);opacity:.25;cursor:default}.x-box-scroller-toolbar-default.x-box-scroller-left,.x-box-scroller-toolbar-default.x-box-scroller-right{width:16px;height:16px;top:50%;margin-top:-8px}.x-box-scroller-toolbar-default.x-box-scroller-left{margin-left:4px;margin-right:4px;margin-bottom:0;background-image:url(images/toolbar/default-scroll-left.png)}.x-box-scroller-toolbar-default.x-box-scroller-right{margin-left:4px;margin-right:4px;margin-bottom:0;background-image:url(images/toolbar/default-scroll-right.png)}.x-box-scroller-toolbar-default.x-box-scroller-top,.x-box-scroller-toolbar-default.x-box-scroller-bottom{height:16px;width:16px;left:50%;margin-left:-8px}.x-box-scroller-toolbar-default.x-box-scroller-top{margin-top:4px;margin-right:0;margin-bottom:4px;background-image:url(images/toolbar/default-scroll-top.png)}.x-box-scroller-toolbar-default.x-box-scroller-bottom{margin-top:4px;margin-right:0;margin-bottom:4px;background-image:url(images/toolbar/default-scroll-bottom.png)}.x-ie8 .x-box-scroller-toolbar-default{background-color:white}.x-toolbar-more-icon{background-image:url(images/toolbar/default-more.png)}.x-toolbar-footer{padding:6px 0 6px 6px;border-style:solid;border-color:#c1c1c1;border-width:0;background-image:none;background-color:#e5dddd}.x-toolbar-footer .x-tool-img{background-image:url(images/tools/tool-sprites-dark.png);background-color:#e5dddd}.x-toolbar-footer .x-toolbar-item{margin:0 6px 0 0}.x-toolbar-footer .x-toolbar-separator-horizontal{margin:0 8px 0 0;height:14px;border-style:solid;border-width:0 0 0 1px;border-left-color:#e1e1e1;border-right-color:white}.x-toolbar-footer .x-box-menu-after{margin:0 6px}.x-toolbar-footer-vertical{padding:6px 6px 0}.x-toolbar-footer-vertical .x-toolbar-item{margin:0 0 6px 0}.x-toolbar-footer-vertical .x-toolbar-separator-vertical{margin:0 5px 6px;border-style:solid none;border-width:1px 0 0;border-top-color:#e1e1e1;border-bottom-color:white}.x-toolbar-footer-vertical .x-box-menu-after{margin:6px 0}.x-toolbar-text-footer{padding:0 4px;color:#490606;font:normal 11px/16px helvetica,arial,verdana,sans-serif}.x-toolbar-spacer-footer{width:2px}.x-toolbar-footer-scroller .x-box-scroller-body-horizontal{margin-left:18px}.x-toolbar-footer-vertical-scroller .x-box-scroller-body-vertical{margin-top:18px}.x-box-scroller-toolbar-footer{cursor:pointer;filter:alpha(opacity=60);opacity:.6}.x-box-scroller-toolbar-footer.x-box-scroller-hover{filter:alpha(opacity=80);opacity:.8}.x-box-scroller-toolbar-footer.x-box-scroller-pressed{filter:alpha(opacity=100);opacity:1}.x-box-scroller-toolbar-footer.x-box-scroller-disabled{filter:alpha(opacity=25);opacity:.25;cursor:default}.x-box-scroller-toolbar-footer.x-box-scroller-left,.x-box-scroller-toolbar-footer.x-box-scroller-right{width:16px;height:16px;top:50%;margin-top:-8px}.x-box-scroller-toolbar-footer.x-box-scroller-left{margin-left:4px;margin-right:4px;margin-bottom:0;background-image:url(images/toolbar/footer-scroll-left.png)}.x-box-scroller-toolbar-footer.x-box-scroller-right{margin-left:4px;margin-right:4px;margin-bottom:0;background-image:url(images/toolbar/footer-scroll-right.png)}.x-ie8 .x-box-scroller-toolbar-footer{background-color:#e5dddd}.x-toolbar-more-icon{background-image:url(images/toolbar/footer-more.png)}.x-panel-ghost{filter:alpha(opacity=50);opacity:.5}.x-panel-default{border-color:#4f0101;padding:0}.x-panel-header-default{font-size:13px;border:1px solid #4f0101}.x-panel-header-default .x-tool-img{background-color:#4f0101}.x-panel-header-default-horizontal{padding:9px 9px 10px 9px}.x-panel-header-default-horizontal .x-panel-header-default-tab-bar{margin-top:-9px;margin-bottom:-10px}.x-panel-header-default-horizontal.x-header-noborder{padding:10px 10px 10px 10px}.x-panel-header-default-horizontal.x-header-noborder .x-panel-header-default-tab-bar{margin-top:-10px;margin-bottom:-10px}.x-panel-header-default-vertical{padding:9px 9px 9px 10px}.x-panel-header-default-vertical .x-panel-header-default-tab-bar{margin-right:-9px;margin-left:-10px}.x-panel-header-default-vertical.x-header-noborder{padding:10px 10px 10px 10px}.x-panel-header-default-vertical.x-header-noborder .x-panel-header-default-tab-bar{margin-right:-10px;margin-left:-10px}.x-panel-header-title-default{color:white;font-size:13px;font-weight:bold;font-family:helvetica,arial,verdana,sans-serif;line-height:16px}.x-panel-header-title-default>.x-title-text-default{text-transform:none;padding:0}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-top{height:22px;padding-bottom:6px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-right{width:22px;padding-left:6px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-bottom{height:22px;padding-top:6px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-left{width:22px;padding-right:6px}.x-panel-header-title-default>.x-title-icon-wrap-default>.x-title-icon-default{width:16px;height:16px;background-position:center center}.x-panel-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:white;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-panel-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:#a78080}.x-panel-body-default{background:white;border-color:#c1c1c1;color:black;font-size:11px;font-weight:normal;font-family:helvetica,arial,verdana,sans-serif;border-width:1px;border-style:solid}.x-panel-header-default{background-image:none;background-color:#4f0101}.x-panel-header-default-vertical{background-image:none;background-color:#4f0101}.x-panel .x-panel-header-default-collapsed-border-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-right{border-left-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-left{border-right-width:1px!important}.x-panel-header-default-horizontal .x-tool-after-title{margin:0 0 0 6px}.x-panel-header-default-horizontal .x-tool-before-title{margin:0 6px 0 0}.x-panel-header-default-vertical .x-tool-after-title{margin:6px 0 0 0}.x-panel-header-default-vertical .x-tool-before-title{margin:0 0 6px 0}.x-panel-default-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-default-outer-border-l{border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-b{border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-outer-border-bl{border-bottom-color:#4f0101!important;border-bottom-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-r{border-right-color:#4f0101!important;border-right-width:1px!important}.x-panel-default-outer-border-rl{border-right-color:#4f0101!important;border-right-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-rb{border-right-color:#4f0101!important;border-right-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-outer-border-rbl{border-right-color:#4f0101!important;border-right-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-t{border-top-color:#4f0101!important;border-top-width:1px!important}.x-panel-default-outer-border-tl{border-top-color:#4f0101!important;border-top-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-tb{border-top-color:#4f0101!important;border-top-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-outer-border-tbl{border-top-color:#4f0101!important;border-top-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-tr{border-top-color:#4f0101!important;border-top-width:1px!important;border-right-color:#4f0101!important;border-right-width:1px!important}.x-panel-default-outer-border-trl{border-top-color:#4f0101!important;border-top-width:1px!important;border-right-color:#4f0101!important;border-right-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-outer-border-trb{border-top-color:#4f0101!important;border-top-width:1px!important;border-right-color:#4f0101!important;border-right-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-outer-border-trbl{border-color:#4f0101!important;border-width:1px!important}.x-panel-default-framed{border-color:#4f0101;padding:0}.x-panel-header-default-framed{font-size:13px;border:5px solid #4f0101}.x-panel-header-default-framed .x-tool-img{background-color:#4f0101}.x-panel-header-default-framed-horizontal{padding:5px 5px 5px 5px}.x-panel-header-default-framed-horizontal .x-panel-header-default-framed-tab-bar{margin-top:-5px;margin-bottom:-5px}.x-panel-header-default-framed-horizontal.x-header-noborder{padding:10px 10px 5px 10px}.x-panel-header-default-framed-horizontal.x-header-noborder .x-panel-header-default-framed-tab-bar{margin-top:-10px;margin-bottom:-5px}.x-panel-header-default-framed-vertical{padding:5px 5px 5px 5px}.x-panel-header-default-framed-vertical .x-panel-header-default-framed-tab-bar{margin-right:-5px;margin-left:-5px}.x-panel-header-default-framed-vertical.x-header-noborder{padding:10px 10px 10px 5px}.x-panel-header-default-framed-vertical.x-header-noborder .x-panel-header-default-framed-tab-bar{margin-right:-10px;margin-left:-5px}.x-panel-header-title-default-framed{color:white;font-size:13px;font-weight:bold;font-family:helvetica,arial,verdana,sans-serif;line-height:16px}.x-panel-header-title-default-framed>.x-title-text-default-framed{text-transform:none;padding:0}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-top{height:22px;padding-bottom:6px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-right{width:22px;padding-left:6px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-bottom{height:22px;padding-top:6px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-left{width:22px;padding-right:6px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed>.x-title-icon-default-framed{width:16px;height:16px;background-position:center center}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed>.x-title-glyph{color:white;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed>.x-title-glyph{color:#a78080}.x-panel-body-default-framed{background:white;border-color:#c1c1c1;color:black;font-size:11px;font-weight:normal;font-family:helvetica,arial,verdana,sans-serif;border-width:1px;border-style:solid}.x-panel-default-framed{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:0;border-width:5px;border-style:solid;background-color:white}.x-panel-default-framed-mc{background-color:white}.x-nbr .x-panel-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-default-framed-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-0-0-0-0}.x-panel-default-framed-tl{background-position:0 -10px}.x-panel-default-framed-tr{background-position:right -15px}.x-panel-default-framed-bl{background-position:0 -20px}.x-panel-default-framed-br{background-position:right -25px}.x-panel-default-framed-ml{background-position:0 top}.x-panel-default-framed-mr{background-position:right top}.x-panel-default-framed-tc{background-position:0 0}.x-panel-default-framed-bc{background-position:0 -5px}.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-mr{padding-right:5px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-ml{padding-left:5px}.x-panel-default-framed-tc{height:5px}.x-panel-default-framed-bc{height:5px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-tc,.x-panel-default-framed-bc,.x-panel-default-framed-ml,.x-panel-default-framed-mr{background-image:url(images/panel/panel-default-framed-corners.gif)}.x-panel-default-framed-ml,.x-panel-default-framed-mr{background-image:url(images/panel/panel-default-framed-sides.gif);background-repeat:repeat-y}.x-panel-default-framed-mc{padding:0}.x-panel-header-default-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:5px 5px 0 5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-top-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-top-frameInfo{font-family:dh-5-5-0-5-5-5-0-5-5-5-5-5}.x-panel-header-default-framed-top-tl{background-position:0 -10px}.x-panel-header-default-framed-top-tr{background-position:right -15px}.x-panel-header-default-framed-top-bl{background-position:0 -20px}.x-panel-header-default-framed-top-br{background-position:right -25px}.x-panel-header-default-framed-top-ml{background-position:0 top}.x-panel-header-default-framed-top-mr{background-position:right top}.x-panel-header-default-framed-top-tc{background-position:0 0}.x-panel-header-default-framed-top-bc{background-position:0 -5px}.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-mr{padding-right:5px}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-ml{padding-left:5px}.x-panel-header-default-framed-top-tc{height:5px}.x-panel-header-default-framed-top-bc{height:0}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-tc,.x-panel-header-default-framed-top-bc,.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-top-corners.gif)}.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-top-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-top-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:5px 5px 5px 0;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-right-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-right-frameInfo{font-family:dh-5-5-5-0-5-5-5-0-5-5-5-5}.x-panel-header-default-framed-right-tl{background-position:0 -10px}.x-panel-header-default-framed-right-tr{background-position:right -15px}.x-panel-header-default-framed-right-bl{background-position:0 -20px}.x-panel-header-default-framed-right-br{background-position:right -25px}.x-panel-header-default-framed-right-ml{background-position:right 0}.x-panel-header-default-framed-right-mr{background-position:right 0}.x-panel-header-default-framed-right-tc{background-position:0 0}.x-panel-header-default-framed-right-bc{background-position:0 -5px}.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-mr{padding-right:5px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-ml{padding-left:0}.x-panel-header-default-framed-right-tc{height:5px}.x-panel-header-default-framed-right-bc{height:5px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc,.x-panel-header-default-framed-right-ml,.x-panel-header-default-framed-right-mr{background-image:url(images/panel-header/panel-header-default-framed-right-corners.gif)}.x-panel-header-default-framed-right-ml,.x-panel-header-default-framed-right-mr{background-image:url(images/panel-header/panel-header-default-framed-right-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-right-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:0 5px 5px 5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-bottom-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-bottom-frameInfo{font-family:dh-0-5-5-5-0-5-5-5-5-5-5-5}.x-panel-header-default-framed-bottom-tl{background-position:0 -10px}.x-panel-header-default-framed-bottom-tr{background-position:right -15px}.x-panel-header-default-framed-bottom-bl{background-position:0 -20px}.x-panel-header-default-framed-bottom-br{background-position:right -25px}.x-panel-header-default-framed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-bottom-bc{background-position:0 -5px}.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-mr{padding-right:5px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-ml{padding-left:5px}.x-panel-header-default-framed-bottom-tc{height:0}.x-panel-header-default-framed-bottom-bc{height:5px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-tc,.x-panel-header-default-framed-bottom-bc,.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-bottom-corners.gif)}.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-bottom-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-bottom-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px 0 5px 5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-left-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-left-frameInfo{font-family:dh-5-0-5-5-5-0-5-5-5-5-5-5}.x-panel-header-default-framed-left-tl{background-position:0 -10px}.x-panel-header-default-framed-left-tr{background-position:right -15px}.x-panel-header-default-framed-left-bl{background-position:0 -20px}.x-panel-header-default-framed-left-br{background-position:right -25px}.x-panel-header-default-framed-left-ml{background-position:left 0}.x-panel-header-default-framed-left-mr{background-position:left 0}.x-panel-header-default-framed-left-tc{background-position:0 0}.x-panel-header-default-framed-left-bc{background-position:0 -5px}.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-mr{padding-right:0}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-ml{padding-left:5px}.x-panel-header-default-framed-left-tc{height:5px}.x-panel-header-default-framed-left-bc{height:5px}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc,.x-panel-header-default-framed-left-ml,.x-panel-header-default-framed-left-mr{background-image:url(images/panel-header/panel-header-default-framed-left-corners.gif)}.x-panel-header-default-framed-left-ml,.x-panel-header-default-framed-left-mr{background-image:url(images/panel-header/panel-header-default-framed-left-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-left-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-collapsed-top-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-collapsed-top-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-default-framed-collapsed-top-tl{background-position:0 -10px}.x-panel-header-default-framed-collapsed-top-tr{background-position:right -15px}.x-panel-header-default-framed-collapsed-top-bl{background-position:0 -20px}.x-panel-header-default-framed-collapsed-top-br{background-position:right -25px}.x-panel-header-default-framed-collapsed-top-ml{background-position:0 top}.x-panel-header-default-framed-collapsed-top-mr{background-position:right top}.x-panel-header-default-framed-collapsed-top-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-top-bc{background-position:0 -5px}.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-mr{padding-right:5px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-ml{padding-left:5px}.x-panel-header-default-framed-collapsed-top-tc{height:5px}.x-panel-header-default-framed-collapsed-top-bc{height:5px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-tc,.x-panel-header-default-framed-collapsed-top-bc,.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif)}.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-collapsed-top-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-collapsed-right-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-collapsed-right-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-default-framed-collapsed-right-tl{background-position:0 -10px}.x-panel-header-default-framed-collapsed-right-tr{background-position:right -15px}.x-panel-header-default-framed-collapsed-right-bl{background-position:0 -20px}.x-panel-header-default-framed-collapsed-right-br{background-position:right -25px}.x-panel-header-default-framed-collapsed-right-ml{background-position:right 0}.x-panel-header-default-framed-collapsed-right-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-right-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-right-bc{background-position:0 -5px}.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-mr{padding-right:5px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-ml{padding-left:5px}.x-panel-header-default-framed-collapsed-right-tc{height:5px}.x-panel-header-default-framed-collapsed-right-bc{height:5px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc,.x-panel-header-default-framed-collapsed-right-ml,.x-panel-header-default-framed-collapsed-right-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif)}.x-panel-header-default-framed-collapsed-right-ml,.x-panel-header-default-framed-collapsed-right-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-collapsed-right-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-collapsed-bottom-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-collapsed-bottom-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-default-framed-collapsed-bottom-tl{background-position:0 -10px}.x-panel-header-default-framed-collapsed-bottom-tr{background-position:right -15px}.x-panel-header-default-framed-collapsed-bottom-bl{background-position:0 -20px}.x-panel-header-default-framed-collapsed-bottom-br{background-position:right -25px}.x-panel-header-default-framed-collapsed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-collapsed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-collapsed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-bottom-bc{background-position:0 -5px}.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-mr{padding-right:5px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-ml{padding-left:5px}.x-panel-header-default-framed-collapsed-bottom-tc{height:5px}.x-panel-header-default-framed-collapsed-bottom-bc{height:5px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-tc,.x-panel-header-default-framed-collapsed-bottom-bc,.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif)}.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-collapsed-bottom-mc{padding:5px 5px 5px 5px}.x-panel-header-default-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#4f0101}.x-panel-header-default-framed-collapsed-left-mc{background-color:#4f0101}.x-nbr .x-panel-header-default-framed-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-default-framed-collapsed-left-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-default-framed-collapsed-left-tl{background-position:0 -10px}.x-panel-header-default-framed-collapsed-left-tr{background-position:right -15px}.x-panel-header-default-framed-collapsed-left-bl{background-position:0 -20px}.x-panel-header-default-framed-collapsed-left-br{background-position:right -25px}.x-panel-header-default-framed-collapsed-left-ml{background-position:left 0}.x-panel-header-default-framed-collapsed-left-mr{background-position:left 0}.x-panel-header-default-framed-collapsed-left-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-left-bc{background-position:0 -5px}.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-mr{padding-right:5px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-ml{padding-left:5px}.x-panel-header-default-framed-collapsed-left-tc{height:5px}.x-panel-header-default-framed-collapsed-left-bc{height:5px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc,.x-panel-header-default-framed-collapsed-left-ml,.x-panel-header-default-framed-collapsed-left-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif)}.x-panel-header-default-framed-collapsed-left-ml,.x-panel-header-default-framed-collapsed-left-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif);background-repeat:repeat-y}.x-panel-header-default-framed-collapsed-left-mc{padding:5px 5px 5px 5px}.x-panel .x-panel-header-default-framed-top{border-bottom-width:5px!important}.x-panel .x-panel-header-default-framed-right{border-left-width:5px!important}.x-panel .x-panel-header-default-framed-bottom{border-top-width:5px!important}.x-panel .x-panel-header-default-framed-left{border-right-width:5px!important}.x-nbr .x-panel-header-default-framed-collapsed-top{border-bottom-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-right{border-left-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-bottom{border-top-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-left{border-right-width:0!important}.x-panel-header-default-framed-horizontal .x-tool-after-title{margin:0 0 0 6px}.x-panel-header-default-framed-horizontal .x-tool-before-title{margin:0 6px 0 0}.x-panel-header-default-framed-vertical .x-tool-after-title{margin:6px 0 0 0}.x-panel-header-default-framed-vertical .x-tool-before-title{margin:0 0 6px 0}.x-panel-default-framed-resizable{overflow:visible}.x-panel-default-framed-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-default-framed-resizable .x-panel-handle-north-br{top:-5px}.x-panel-default-framed-resizable .x-panel-handle-south-br{bottom:-5px}.x-panel-default-framed-resizable .x-panel-handle-east-br{right:-5px}.x-panel-default-framed-resizable .x-panel-handle-west-br{left:-5px}.x-panel-default-framed-resizable .x-panel-handle-northwest-br{left:-5px;top:-5px}.x-panel-default-framed-resizable .x-panel-handle-northeast-br{right:-5px;top:-5px}.x-panel-default-framed-resizable .x-panel-handle-southeast-br{right:-5px;bottom:-5px}.x-panel-default-framed-resizable .x-panel-handle-southwest-br{left:-5px;bottom:-5px}.x-panel-default-framed-outer-border-l{border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-b{border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-framed-outer-border-bl{border-bottom-color:#4f0101!important;border-bottom-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-r{border-right-color:#4f0101!important;border-right-width:1px!important}.x-panel-default-framed-outer-border-rl{border-right-color:#4f0101!important;border-right-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-rb{border-right-color:#4f0101!important;border-right-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-framed-outer-border-rbl{border-right-color:#4f0101!important;border-right-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-t{border-top-color:#4f0101!important;border-top-width:1px!important}.x-panel-default-framed-outer-border-tl{border-top-color:#4f0101!important;border-top-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-tb{border-top-color:#4f0101!important;border-top-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-framed-outer-border-tbl{border-top-color:#4f0101!important;border-top-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-tr{border-top-color:#4f0101!important;border-top-width:1px!important;border-right-color:#4f0101!important;border-right-width:1px!important}.x-panel-default-framed-outer-border-trl{border-top-color:#4f0101!important;border-top-width:1px!important;border-right-color:#4f0101!important;border-right-width:1px!important;border-left-color:#4f0101!important;border-left-width:1px!important}.x-panel-default-framed-outer-border-trb{border-top-color:#4f0101!important;border-top-width:1px!important;border-right-color:#4f0101!important;border-right-width:1px!important;border-bottom-color:#4f0101!important;border-bottom-width:1px!important}.x-panel-default-framed-outer-border-trbl{border-color:#4f0101!important;border-width:1px!important}.x-tip-anchor{position:absolute;overflow:hidden;height:10px;width:10px;border-style:solid;border-width:5px;border-color:#e1e1e1}.x-tip-anchor-top{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-bottom{border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-bottom-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-left{border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-left-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-right{border-top-color:transparent;border-bottom-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-default{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:#efe8e8}.x-tip-default-mc{background-color:#efe8e8}.x-nbr .x-tip-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tip-default-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-tip-default-tl{background-position:0 -6px}.x-tip-default-tr{background-position:right -9px}.x-tip-default-bl{background-position:0 -12px}.x-tip-default-br{background-position:right -15px}.x-tip-default-ml{background-position:0 top}.x-tip-default-mr{background-position:right top}.x-tip-default-tc{background-position:0 0}.x-tip-default-bc{background-position:0 -3px}.x-tip-default-tr,.x-tip-default-br,.x-tip-default-mr{padding-right:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-ml{padding-left:3px}.x-tip-default-tc{height:3px}.x-tip-default-bc{height:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-tr,.x-tip-default-br,.x-tip-default-tc,.x-tip-default-bc,.x-tip-default-ml,.x-tip-default-mr{background-image:url(images/tip/tip-default-corners.gif)}.x-tip-default-ml,.x-tip-default-mr{background-image:url(images/tip/tip-default-sides.gif);background-repeat:repeat-y}.x-tip-default-mc{padding:0}.x-tip-default{border-color:#e1e1e1}.x-tip-default .x-tool-img{background-image:url(images/tools/tool-sprites-dark.png);background-color:#efe8e8}.x-tip-header-default .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-default .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-default{padding:3px 3px 0 3px}.x-tip-header-title-default{color:black;font-size:11px;font-weight:bold}.x-tip-body-default{padding:3px;color:black;font-size:11px;font-weight:normal}.x-tip-body-default a{color:black}.x-tip-form-invalid{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:#efe8e8}.x-tip-form-invalid-mc{background-color:#efe8e8}.x-nbr .x-tip-form-invalid{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tip-form-invalid-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-tip-form-invalid-tl{background-position:0 -6px}.x-tip-form-invalid-tr{background-position:right -9px}.x-tip-form-invalid-bl{background-position:0 -12px}.x-tip-form-invalid-br{background-position:right -15px}.x-tip-form-invalid-ml{background-position:0 top}.x-tip-form-invalid-mr{background-position:right top}.x-tip-form-invalid-tc{background-position:0 0}.x-tip-form-invalid-bc{background-position:0 -3px}.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-mr{padding-right:3px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-ml{padding-left:3px}.x-tip-form-invalid-tc{height:3px}.x-tip-form-invalid-bc{height:3px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-tc,.x-tip-form-invalid-bc,.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{background-image:url(images/tip/tip-form-invalid-corners.gif)}.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{background-image:url(images/tip/tip-form-invalid-sides.gif);background-repeat:repeat-y}.x-tip-form-invalid-mc{padding:0}.x-tip-form-invalid{border-color:#e1e1e1}.x-tip-form-invalid .x-tool-img{background-image:url(images/tools/tool-sprites-dark.png);background-color:#efe8e8}.x-tip-header-form-invalid .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-form-invalid .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-form-invalid{padding:3px 3px 0 3px}.x-tip-header-title-form-invalid{color:black;font-size:11px;font-weight:bold}.x-tip-body-form-invalid{padding:3px 3px 3px 22px;color:black;font-size:11px;font-weight:normal}.x-tip-body-form-invalid a{color:black}.x-tip-body-form-invalid{background:1px 1px no-repeat;background-image:url(images/form/exclamation.png)}.x-tip-body-form-invalid li{margin-bottom:4px}.x-tip-body-form-invalid li.last{margin-bottom:0}.x-form-item-label-default{color:black;font:normal 11px/17px helvetica,arial,verdana,sans-serif;min-height:24px;padding-top:4px;padding-right:5px}.x-ie8 .x-form-item-label-default{min-height:20px}.x-form-item-label-default.x-form-item-label-top{height:1px}.x-form-item-label-default.x-form-item-label-top>.x-form-item-label-inner{padding-top:4px;padding-bottom:5px}.x-form-item-label-default.x-form-item-label-top-side-error:after{width:26px}.x-form-item-body-default{min-height:24px}.x-form-invalid-icon-default{width:16px;height:16px;margin:0 5px 0 5px;background:url(images/form/exclamation.png) no-repeat}.x-form-invalid-under-default{padding:2px 2px 2px 20px;color:#cf4c35;font:normal 11px/16px helvetica,arial,verdana,sans-serif;background:no-repeat 0 2px;background-image:url(images/form/exclamation.png)}.x-form-error-wrap-default.x-form-error-wrap-side{width:26px}.x-form-item-default.x-item-disabled{filter:alpha(opacity=30);opacity:.3}.x-autocontainer-form-item,.x-anchor-form-item,.x-vbox-form-item,.x-table-form-item{margin-bottom:5px}.x-form-display-field-default{height:24px;font:normal 11px/17px helvetica,arial,verdana,sans-serif;color:black;margin-top:4px}.x-grid-body{background:white;border-width:1px;border-style:solid;border-color:#c1c1c1}.x-grid-item-container{min-height:1px}.x-grid-empty{padding:10px;color:gray;background-color:white;font:normal 11px helvetica,arial,verdana,sans-serif}.x-grid-item{color:black;font:normal 11px/13px helvetica,arial,verdana,sans-serif;background-color:white}.x-grid-item-alt{background-color:#fafafa}.x-grid-item-over{color:black;background-color:#e9dfdf}.x-grid-item-focused{outline:0;color:black}.x-grid-item-focused .x-grid-cell-inner{z-index:1}.x-grid-item-focused .x-grid-cell-inner:before{content:"";position:absolute;z-index:-1;top:0;right:0;bottom:0;left:0;border:1px solid #6b2d2d}.x-grid-item-selected{color:black;background-color:#d0bcbc}.x-grid-with-row-lines .x-grid-item{border-style:solid;border-width:1px 0 0;border-color:#ededed}.x-grid-with-row-lines .x-grid-item:first-child{border-top-color:white}.x-grid-with-row-lines .x-grid-item.x-grid-item-over{border-style:solid;border-color:#e9dfdf}.x-grid-with-row-lines .x-grid-item-over+.x-grid-item{border-top-style:solid;border-top-color:#e9dfdf}.x-grid-with-row-lines .x-grid-item.x-grid-item-selected{border-style:solid;border-color:#d0bcbc}.x-grid-with-row-lines .x-grid-item-selected+.x-grid-item{border-top-style:solid;border-top-color:#d0bcbc}.x-grid-with-row-lines .x-grid-item:last-child{border-bottom-width:1px}.x-ie8 .x-grid-with-row-lines .x-grid-item{border-width:1px 0;margin-top:-1px}.x-ie8 .x-grid-with-row-lines .x-grid-item:first-child{margin-top:0}.x-grid-cell-inner{position:relative;text-overflow:ellipsis;padding:5px 10px 4px 10px}.x-grid-cell-special{border-color:#ededed;border-style:solid;border-right-width:1px 0}.x-grid-dirty-cell{background:url(images/grid/dirty.png) no-repeat 0 0}.x-grid-row .x-grid-cell-selected{color:black;background-color:#d0bcbc}.x-grid-with-col-lines .x-grid-cell{border-right:1px solid #ededed}.x-grid-resize-marker{width:1px;background-color:#0f0f0f}.x-form-cb-wrap-default{height:24px}.x-form-cb-default{margin-top:5px}.x-form-checkbox-default,.x-form-radio-default{width:15px;height:15px}.x-form-radio-default{background:url(images/form/radio.png) no-repeat}.x-form-cb-checked .x-form-radio-default{background-position:0 -15px}.x-form-checkbox-default{background:url(images/form/checkbox.png) no-repeat}.x-form-cb-checked .x-form-checkbox-default{background-position:0 -15px}.x-field-default-form-checkbox-focus{background-position:-15px 0}.x-form-cb-checked .x-field-default-form-checkbox-focus{background-position:-15px -15px}.x-form-cb-label-default{margin-top:4px;font:normal helvetica,arial,verdana,sans-serif/17px helvetica,arial,verdana,sans-serif}.x-form-cb-label-default.x-form-cb-label-before{padding-right:19px}.x-form-cb-label-default.x-form-cb-label-after{padding-left:19px}.x-col-move-top,.x-col-move-bottom{width:9px;height:9px}.x-col-move-top{background-image:url(images/grid/col-move-top.png)}.x-col-move-bottom{background-image:url(images/grid/col-move-bottom.png)}.x-grid-header-ct{border:1px solid #c1c1c1;border-bottom-color:#f5f5f5;background-color:#f5f5f5}.x-grid-header-ct-hidden{border:0!important}.x-grid-body{border-top-color:#c1c1c1}.x-hmenu-sort-asc{background-image:url(images/grid/hmenu-asc.png)}.x-hmenu-sort-desc{background-image:url(images/grid/hmenu-desc.png)}.x-cols-icon{background-image:url(images/grid/columns.png)}.x-column-header{border-right:1px solid #c1c1c1;color:#666;font:bold 10px/13px helvetica,arial,verdana,sans-serif;outline:0;background-color:#f5f5f5}.x-group-sub-header{background:transparent;border-top:1px solid #c1c1c1}.x-group-sub-header .x-column-header-inner{padding:6px 10px 7px 10px}.x-column-header-inner{position:relative;padding:7px 10px 7px 10px;text-overflow:ellipsis}.x-column-header-inner-empty{text-overflow:clip}.x-column-header.x-column-header-focus{color:black}.x-column-header.x-column-header-focus .x-column-header-inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:1px solid #703131}.x-column-header.x-column-header-focus.x-group-sub-header .x-column-header-inner:before{bottom:0}.x-column-header-over,.x-column-header-sort-ASC,.x-column-header-sort-DESC{background-image:none;background-color:#f2eded}.x-column-header-open{background-color:#f2eded}.x-column-header-open .x-column-header-trigger{background-color:#e5dddd}.x-column-header-trigger{width:18px;cursor:pointer;background-color:transparent;background-position:center center}.x-column-header-align-right .x-column-header-text{margin-right:12px}.x-column-header-sort-ASC .x-column-header-text,.x-column-header-sort-DESC .x-column-header-text{padding-right:17px;background-position:right center}.x-column-header-sort-ASC .x-column-header-text{background-image:url(images/grid/sort_asc.png)}.x-column-header-sort-DESC .x-column-header-text{background-image:url(images/grid/sort_desc.png)}.x-form-text-field-body-default{min-width:170px;max-width:170px}.x-form-trigger-wrap-default{border-width:1px;border-style:solid;border-color:#c1c1c1 #d9d9d9 #d9d9d9}.x-form-trigger-wrap-default.x-form-trigger-wrap-focus{border-color:#3892d3}.x-form-trigger-wrap-default.x-form-trigger-wrap-invalid{border-color:#cf4c35}.x-form-text-default{color:black;padding:4px 6px 3px 6px;background-color:white;font:normal 11px/15px helvetica,arial,verdana,sans-serif;min-height:22px}.x-ie8 .x-form-text-default{min-height:15px}.x-form-text-default.x-form-textarea{line-height:13px;min-height:52px}.x-ie8 .x-form-text-default.x-form-textarea{min-height:45px}.x-form-text-default.x-form-text-file{color:gray}.x-form-empty-field-default{color:gray}.x-form-invalid-field-default{background-color:white}.x-form-trigger-default{background:white url(images/form/trigger.png) no-repeat;background-position:0 center;width:22px}.x-form-trigger-default.x-form-trigger-over{background-position:-22px center}.x-form-trigger-default.x-form-trigger-over.x-form-trigger-focus{background-position:-88px center}.x-form-trigger-default.x-form-trigger-focus{background-position:-66px center}.x-form-trigger.x-form-trigger-default.x-form-trigger-click{background-position:-44px center}.x-form-clear-trigger{background-image:url(images/form/clear-trigger.png)}.x-form-search-trigger{background-image:url(images/form/search-trigger.png)}body.x-border-layout-ct,div.x-border-layout-ct{background-color:#692727}.x-tab-default-top{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:7px 12px 6px 12px;border-width:1px;border-style:solid;background-color:#4f0101}.x-tab-default-top-mc{background-color:#4f0101}.x-nbr .x-tab-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tab-default-top-frameInfo{font-family:th-3-3-3-3-1-1-1-1-7-12-6-12}.x-tab-default-top-tl{background-position:0 -6px}.x-tab-default-top-tr{background-position:right -9px}.x-tab-default-top-bl{background-position:0 -12px}.x-tab-default-top-br{background-position:right -15px}.x-tab-default-top-ml{background-position:0 top}.x-tab-default-top-mr{background-position:right top}.x-tab-default-top-tc{background-position:0 0}.x-tab-default-top-bc{background-position:0 -3px}.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-mr{padding-right:3px}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-ml{padding-left:3px}.x-tab-default-top-tc{height:3px}.x-tab-default-top-bc{height:3px}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-tc,.x-tab-default-top-bc,.x-tab-default-top-ml,.x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-top-ml,.x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-sides.gif);background-repeat:repeat-y}.x-tab-default-top-mc{padding:5px 10px 4px 10px}.x-tab-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;padding:6px 12px 7px 12px;border-width:1px 1px 1px 1px;border-style:solid;background-color:#4f0101}.x-tab-default-bottom-mc{background-color:#4f0101}.x-nbr .x-tab-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tab-default-bottom-frameInfo{font-family:th-3-3-3-3-1-1-1-1-6-12-7-12}.x-tab-default-bottom-tl{background-position:0 -6px}.x-tab-default-bottom-tr{background-position:right -9px}.x-tab-default-bottom-bl{background-position:0 -12px}.x-tab-default-bottom-br{background-position:right -15px}.x-tab-default-bottom-ml{background-position:0 bottom}.x-tab-default-bottom-mr{background-position:right bottom}.x-tab-default-bottom-tc{background-position:0 0}.x-tab-default-bottom-bc{background-position:0 -3px}.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-mr{padding-right:3px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-ml{padding-left:3px}.x-tab-default-bottom-tc{height:3px}.x-tab-default-bottom-bc{height:3px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-tc,.x-tab-default-bottom-bc,.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-corners.gif)}.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-sides.gif);background-repeat:repeat-y}.x-tab-default-bottom-mc{padding:4px 10px 5px 10px}.x-tab-default-left{-moz-border-radius-topleft:3px;-webkit-border-top-left-radius:3px;border-top-left-radius:3px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;border-bottom-left-radius:3px;padding:7px 12px 6px 12px;border-width:1px 1px 1px 1px;border-style:solid;background-color:#4f0101}.x-tab-default-left-mc{background-color:#4f0101}.x-nbr .x-tab-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tab-default-left-frameInfo{font-family:th-3-3-3-3-1-1-1-1-7-12-6-12}.x-tab-default-left-tl{background-position:0 -6px}.x-tab-default-left-tr{background-position:right -9px}.x-tab-default-left-bl{background-position:0 -12px}.x-tab-default-left-br{background-position:right -15px}.x-tab-default-left-ml{background-position:0 top}.x-tab-default-left-mr{background-position:right top}.x-tab-default-left-tc{background-position:0 0}.x-tab-default-left-bc{background-position:0 -3px}.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-mr{padding-right:3px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-ml{padding-left:3px}.x-tab-default-left-tc{height:3px}.x-tab-default-left-bc{height:3px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-tc,.x-tab-default-left-bc,.x-tab-default-left-ml,.x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-corners.gif)}.x-tab-default-left-ml,.x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-sides.gif);background-repeat:repeat-y}.x-tab-default-left-mc{padding:5px 10px 4px 10px}.x-tab-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:3px;-webkit-border-top-right-radius:3px;border-top-right-radius:3px;-moz-border-radius-bottomright:3px;-webkit-border-bottom-right-radius:3px;border-bottom-right-radius:3px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:7px 12px 6px 12px;border-width:1px 1px 1px 1px;border-style:solid;background-color:#4f0101}.x-tab-default-right-mc{background-color:#4f0101}.x-nbr .x-tab-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tab-default-right-frameInfo{font-family:th-3-3-3-3-1-1-1-1-7-12-6-12}.x-tab-default-right-tl{background-position:0 -6px}.x-tab-default-right-tr{background-position:right -9px}.x-tab-default-right-bl{background-position:0 -12px}.x-tab-default-right-br{background-position:right -15px}.x-tab-default-right-ml{background-position:0 top}.x-tab-default-right-mr{background-position:right top}.x-tab-default-right-tc{background-position:0 0}.x-tab-default-right-bc{background-position:0 -3px}.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-mr{padding-right:3px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-ml{padding-left:3px}.x-tab-default-right-tc{height:3px}.x-tab-default-right-bc{height:3px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-tc,.x-tab-default-right-bc,.x-tab-default-right-ml,.x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-corners.gif)}.x-tab-default-right-ml,.x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-sides.gif);background-repeat:repeat-y}.x-tab-default-right-mc{padding:5px 10px 4px 10px}.x-tab-default{border-color:#4f0101;cursor:pointer}.x-tab-default-top{margin:0 1px 0 0}.x-tab-default-top.x-tab-rotate-left{margin:0 0 0 1px}.x-tab-default-top.x-tab-focus{-webkit-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;-moz-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset}.x-tab-default-top.x-tab-focus.x-tab-over{-webkit-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;-moz-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset}.x-tab-default-top.x-tab-focus.x-tab-active{-webkit-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;-moz-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset}.x-tab-default-right{margin:0 0 1px 0}.x-tab-default-right.x-tab-rotate-right{margin:1px 0 0 0}.x-tab-default-right.x-tab-focus{-webkit-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;-moz-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset}.x-tab-default-right.x-tab-focus.x-tab-over{-webkit-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;-moz-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset}.x-tab-default-right.x-tab-focus.x-tab-active{-webkit-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;-moz-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset}.x-tab-default-bottom{margin:0 1px 0 0}.x-tab-default-bottom.x-tab-rotate-left{margin:0 0 0 1px}.x-tab-default-bottom.x-tab-focus{-webkit-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;-moz-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset}.x-tab-default-bottom.x-tab-focus.x-tab-over{-webkit-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;-moz-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset}.x-tab-default-bottom.x-tab-focus.x-tab-active{-webkit-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;-moz-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset}.x-tab-default-left{margin:0 0 1px 0}.x-tab-default-left.x-tab-rotate-right{margin:1px 0 0 0}.x-tab-default-left.x-tab-focus{-webkit-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;-moz-box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset;box-shadow:#dbcccc 0 1px 0 0 inset,#dbcccc 0 -1px 0 0 inset,#dbcccc -1px 0 0 0 inset,#dbcccc 1px 0 0 0 inset}.x-tab-default-left.x-tab-focus.x-tab-over{-webkit-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;-moz-box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset;box-shadow:#e7dcdc 0 1px 0 0 inset,#e7dcdc 0 -1px 0 0 inset,#e7dcdc -1px 0 0 0 inset,#e7dcdc 1px 0 0 0 inset}.x-tab-default-left.x-tab-focus.x-tab-active{-webkit-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;-moz-box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset;box-shadow:#f88802 0 1px 0 0 inset,#f88802 0 -1px 0 0 inset,#f88802 -1px 0 0 0 inset,#f88802 1px 0 0 0 inset}.x-tab-button-default{height:16px}.x-tab-inner-default{font:bold 13px/16px helvetica,arial,verdana,sans-serif;color:white;max-width:100%}.x-tab-icon-right>.x-tab-inner-default,.x-tab-icon-left>.x-tab-inner-default{max-width:calc(100% - 16px)}.x-tab-icon-el-default{height:16px;line-height:16px;background-position:center center}.x-tab-icon-left>.x-tab-icon-el-default,.x-tab-icon-right>.x-tab-icon-el-default{width:16px}.x-tab-icon-top>.x-tab-icon-el-default,.x-tab-icon-bottom>.x-tab-icon-el-default{min-width:16px}.x-tab-icon-el-default.x-tab-glyph{font-size:16px;line-height:16px;color:white;opacity:.5}.x-ie8 .x-tab-icon-el-default.x-tab-glyph{color:#a78080}.x-tab-text.x-tab-icon-left>.x-tab-icon-el-default{margin-right:6px}.x-tab-text.x-tab-icon-right>.x-tab-icon-el-default{margin-left:6px}.x-tab-text.x-tab-icon-top>.x-tab-icon-el-default{margin-bottom:6px}.x-tab-text.x-tab-icon-bottom>.x-tab-icon-el-default{margin-top:6px}.x-tab-over.x-tab-default{border-color:#875252;background-color:#875252}.x-tab.x-tab-active.x-tab-default{border-color:#f88802;background-color:#f88802}.x-tab.x-tab-active.x-tab-default .x-tab-inner-default{color:#4f0101}.x-tab.x-tab-active.x-tab-default .x-tab-glyph{color:#4f0101}.x-ie8 .x-tab.x-tab-active.x-tab-default .x-tab-glyph{color:#a34401}.x-tab.x-tab-disabled.x-tab-default{cursor:default}.x-tab.x-tab-disabled.x-tab-default .x-tab-inner-default{filter:alpha(opacity=30);opacity:.3}.x-tab.x-tab-disabled.x-tab-default .x-tab-icon-el-default{filter:alpha(opacity=50);opacity:.5}.x-tab.x-tab-disabled.x-tab-default .x-tab-glyph{color:white;opacity:.3;filter:none}.x-ie8 .x-tab.x-tab-disabled.x-tab-default .x-tab-glyph{color:#834d4d}.x-nbr .x-tab-default{background-image:none}.x-tab-over .x-tab-default-top-tl,.x-tab-over .x-tab-default-top-bl,.x-tab-over .x-tab-default-top-tr,.x-tab-over .x-tab-default-top-br,.x-tab-over .x-tab-default-top-tc,.x-tab-over .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-over-corners.gif)}.x-tab-over .x-tab-default-top-ml,.x-tab-over .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-over-sides.gif)}.x-tab-over .x-tab-default-top-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-over-fbg.gif)}.x-tab-focus .x-tab-default-top-tl,.x-tab-focus .x-tab-default-top-bl,.x-tab-focus .x-tab-default-top-tr,.x-tab-focus .x-tab-default-top-br,.x-tab-focus .x-tab-default-top-tc,.x-tab-focus .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-focus-corners.gif)}.x-tab-focus .x-tab-default-top-ml,.x-tab-focus .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-focus-sides.gif)}.x-tab-focus .x-tab-default-top-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-top-tl,.x-tab-focus.x-tab-over .x-tab-default-top-bl,.x-tab-focus.x-tab-over .x-tab-default-top-tr,.x-tab-focus.x-tab-over .x-tab-default-top-br,.x-tab-focus.x-tab-over .x-tab-default-top-tc,.x-tab-focus.x-tab-over .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-top-ml,.x-tab-focus.x-tab-over .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-top-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-top-tl,.x-tab.x-tab-active .x-tab-default-top-bl,.x-tab.x-tab-active .x-tab-default-top-tr,.x-tab.x-tab-active .x-tab-default-top-br,.x-tab.x-tab-active .x-tab-default-top-tc,.x-tab.x-tab-active .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-top-ml,.x-tab.x-tab-active .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-top-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-top-tl,.x-tab-focus.x-tab-active .x-tab-default-top-bl,.x-tab-focus.x-tab-active .x-tab-default-top-tr,.x-tab-focus.x-tab-active .x-tab-default-top-br,.x-tab-focus.x-tab-active .x-tab-default-top-tc,.x-tab-focus.x-tab-active .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-top-ml,.x-tab-focus.x-tab-active .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-top-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-top-tl,.x-tab.x-tab-disabled .x-tab-default-top-bl,.x-tab.x-tab-disabled .x-tab-default-top-tr,.x-tab.x-tab-disabled .x-tab-default-top-br,.x-tab.x-tab-disabled .x-tab-default-top-tc,.x-tab.x-tab-disabled .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-top-ml,.x-tab.x-tab-disabled .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-top-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-disabled-fbg.gif)}.x-tab-over .x-tab-default-right-tl,.x-tab-over .x-tab-default-right-bl,.x-tab-over .x-tab-default-right-tr,.x-tab-over .x-tab-default-right-br,.x-tab-over .x-tab-default-right-tc,.x-tab-over .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-over-corners.gif)}.x-tab-over .x-tab-default-right-ml,.x-tab-over .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-over-sides.gif)}.x-tab-over .x-tab-default-right-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-over-fbg.gif)}.x-tab-focus .x-tab-default-right-tl,.x-tab-focus .x-tab-default-right-bl,.x-tab-focus .x-tab-default-right-tr,.x-tab-focus .x-tab-default-right-br,.x-tab-focus .x-tab-default-right-tc,.x-tab-focus .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-focus-corners.gif)}.x-tab-focus .x-tab-default-right-ml,.x-tab-focus .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-focus-sides.gif)}.x-tab-focus .x-tab-default-right-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-right-tl,.x-tab-focus.x-tab-over .x-tab-default-right-bl,.x-tab-focus.x-tab-over .x-tab-default-right-tr,.x-tab-focus.x-tab-over .x-tab-default-right-br,.x-tab-focus.x-tab-over .x-tab-default-right-tc,.x-tab-focus.x-tab-over .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-right-ml,.x-tab-focus.x-tab-over .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-right-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-right-tl,.x-tab.x-tab-active .x-tab-default-right-bl,.x-tab.x-tab-active .x-tab-default-right-tr,.x-tab.x-tab-active .x-tab-default-right-br,.x-tab.x-tab-active .x-tab-default-right-tc,.x-tab.x-tab-active .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-right-ml,.x-tab.x-tab-active .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-right-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-right-tl,.x-tab-focus.x-tab-active .x-tab-default-right-bl,.x-tab-focus.x-tab-active .x-tab-default-right-tr,.x-tab-focus.x-tab-active .x-tab-default-right-br,.x-tab-focus.x-tab-active .x-tab-default-right-tc,.x-tab-focus.x-tab-active .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-right-ml,.x-tab-focus.x-tab-active .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-right-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-right-tl,.x-tab.x-tab-disabled .x-tab-default-right-bl,.x-tab.x-tab-disabled .x-tab-default-right-tr,.x-tab.x-tab-disabled .x-tab-default-right-br,.x-tab.x-tab-disabled .x-tab-default-right-tc,.x-tab.x-tab-disabled .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-right-ml,.x-tab.x-tab-disabled .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-right-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-disabled-fbg.gif)}.x-tab-over .x-tab-default-bottom-tl,.x-tab-over .x-tab-default-bottom-bl,.x-tab-over .x-tab-default-bottom-tr,.x-tab-over .x-tab-default-bottom-br,.x-tab-over .x-tab-default-bottom-tc,.x-tab-over .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-over-corners.gif)}.x-tab-over .x-tab-default-bottom-ml,.x-tab-over .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-over-sides.gif)}.x-tab-over .x-tab-default-bottom-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-over-fbg.gif)}.x-tab-focus .x-tab-default-bottom-tl,.x-tab-focus .x-tab-default-bottom-bl,.x-tab-focus .x-tab-default-bottom-tr,.x-tab-focus .x-tab-default-bottom-br,.x-tab-focus .x-tab-default-bottom-tc,.x-tab-focus .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-focus-corners.gif)}.x-tab-focus .x-tab-default-bottom-ml,.x-tab-focus .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-focus-sides.gif)}.x-tab-focus .x-tab-default-bottom-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-bottom-tl,.x-tab-focus.x-tab-over .x-tab-default-bottom-bl,.x-tab-focus.x-tab-over .x-tab-default-bottom-tr,.x-tab-focus.x-tab-over .x-tab-default-bottom-br,.x-tab-focus.x-tab-over .x-tab-default-bottom-tc,.x-tab-focus.x-tab-over .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-bottom-ml,.x-tab-focus.x-tab-over .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-bottom-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-bottom-tl,.x-tab.x-tab-active .x-tab-default-bottom-bl,.x-tab.x-tab-active .x-tab-default-bottom-tr,.x-tab.x-tab-active .x-tab-default-bottom-br,.x-tab.x-tab-active .x-tab-default-bottom-tc,.x-tab.x-tab-active .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-bottom-ml,.x-tab.x-tab-active .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-bottom-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-bottom-tl,.x-tab-focus.x-tab-active .x-tab-default-bottom-bl,.x-tab-focus.x-tab-active .x-tab-default-bottom-tr,.x-tab-focus.x-tab-active .x-tab-default-bottom-br,.x-tab-focus.x-tab-active .x-tab-default-bottom-tc,.x-tab-focus.x-tab-active .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-bottom-ml,.x-tab-focus.x-tab-active .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-bottom-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-bottom-tl,.x-tab.x-tab-disabled .x-tab-default-bottom-bl,.x-tab.x-tab-disabled .x-tab-default-bottom-tr,.x-tab.x-tab-disabled .x-tab-default-bottom-br,.x-tab.x-tab-disabled .x-tab-default-bottom-tc,.x-tab.x-tab-disabled .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-bottom-ml,.x-tab.x-tab-disabled .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-bottom-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-disabled-fbg.gif)}.x-tab-over .x-tab-default-left-tl,.x-tab-over .x-tab-default-left-bl,.x-tab-over .x-tab-default-left-tr,.x-tab-over .x-tab-default-left-br,.x-tab-over .x-tab-default-left-tc,.x-tab-over .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-over-corners.gif)}.x-tab-over .x-tab-default-left-ml,.x-tab-over .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-over-sides.gif)}.x-tab-over .x-tab-default-left-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-over-fbg.gif)}.x-tab-focus .x-tab-default-left-tl,.x-tab-focus .x-tab-default-left-bl,.x-tab-focus .x-tab-default-left-tr,.x-tab-focus .x-tab-default-left-br,.x-tab-focus .x-tab-default-left-tc,.x-tab-focus .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-focus-corners.gif)}.x-tab-focus .x-tab-default-left-ml,.x-tab-focus .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-focus-sides.gif)}.x-tab-focus .x-tab-default-left-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-left-tl,.x-tab-focus.x-tab-over .x-tab-default-left-bl,.x-tab-focus.x-tab-over .x-tab-default-left-tr,.x-tab-focus.x-tab-over .x-tab-default-left-br,.x-tab-focus.x-tab-over .x-tab-default-left-tc,.x-tab-focus.x-tab-over .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-left-ml,.x-tab-focus.x-tab-over .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-left-mc{background-color:#875252;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-left-tl,.x-tab.x-tab-active .x-tab-default-left-bl,.x-tab.x-tab-active .x-tab-default-left-tr,.x-tab.x-tab-active .x-tab-default-left-br,.x-tab.x-tab-active .x-tab-default-left-tc,.x-tab.x-tab-active .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-left-ml,.x-tab.x-tab-active .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-left-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-left-tl,.x-tab-focus.x-tab-active .x-tab-default-left-bl,.x-tab-focus.x-tab-active .x-tab-default-left-tr,.x-tab-focus.x-tab-active .x-tab-default-left-br,.x-tab-focus.x-tab-active .x-tab-default-left-tc,.x-tab-focus.x-tab-active .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-left-ml,.x-tab-focus.x-tab-active .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-left-mc{background-color:#f88802;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-left-tl,.x-tab.x-tab-disabled .x-tab-default-left-bl,.x-tab.x-tab-disabled .x-tab-default-left-tr,.x-tab.x-tab-disabled .x-tab-default-left-br,.x-tab.x-tab-disabled .x-tab-default-left-tc,.x-tab.x-tab-disabled .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-left-ml,.x-tab.x-tab-disabled .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-left-mc{background-color:#4f0101;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-disabled-fbg.gif)}.x-tab-default-tl,.x-tab-default-bl,.x-tab-default-tr,.x-tab-default-br{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.x-tab-default .x-tab-close-btn{top:2px;right:2px;width:12px;height:12px;background:url(images/tab/tab-default-close.png) 0 0}.x-tab-default .x-tab-close-btn-over{background-position:-12px 0}.x-tab-default .x-tab-close-btn-pressed{background-position:-24px 0}.x-tab-default.x-tab-active .x-tab-close-btn{background-position:0 -12px}.x-tab-default.x-tab-active .x-tab-close-btn-over{background-position:-12px -12px}.x-tab-default.x-tab-active .x-tab-close-btn-pressed{background-position:-24px -12px}.x-tab-default.x-tab-disabled .x-tab-close-btn{filter:alpha(opacity=30);opacity:.3;background-position:0 0}.x-tab-closable.x-tab-default .x-tab-button{padding-right:15px}.x-tab-bar-default{background-color:#4f0101}.x-tab-bar-default-top>.x-tab-bar-body-default{padding:0}.x-tab-bar-default-bottom>.x-tab-bar-body-default{padding:0}.x-tab-bar-default-left>.x-tab-bar-body-default{padding:0}.x-tab-bar-default-right>.x-tab-bar-body-default{padding:0}.x-tab-bar-plain.x-tab-bar-default-horizontal{border-top-color:transparent;border-bottom-color:transparent;border-left-width:0;border-right-width:0}.x-tab-bar-plain.x-tab-bar-default-vertical{border-right-color:transparent;border-left-color:transparent;border-top-width:0;border-bottom-width:0}.x-tab-bar-top>.x-tab-bar-body-default{padding-bottom:5px}.x-tab-bar-bottom>.x-tab-bar-body-default{padding-top:5px}.x-tab-bar-left>.x-tab-bar-body-default{padding-right:5px}.x-tab-bar-right>.x-tab-bar-body-default{padding-left:5px}.x-tab-bar-strip-default{border-style:solid;border-color:#4f0101;background-color:#f88802}.x-tab-bar-top>.x-tab-bar-strip-default{border-width:0;height:5px}.x-tab-bar-top.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:0}.x-tab-bar-bottom>.x-tab-bar-strip-default{border-width:0;height:5px}.x-tab-bar-bottom.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:0}.x-tab-bar-left>.x-tab-bar-strip-default{border-width:0;width:5px}.x-tab-bar-left.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:0}.x-tab-bar-right>.x-tab-bar-strip-default{border-width:0;width:5px}.x-tab-bar-right.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:0}.x-tab-bar-horizontal>.x-tab-bar-body-default{min-height:34px}.x-ie9m .x-tab-bar-horizontal>.x-tab-bar-body-default{min-height:29px}.x-tab-bar-vertical>.x-tab-bar-body-default{min-width:34px}.x-ie9m .x-tab-bar-vertical>.x-tab-bar-body-default{min-width:29px}.x-tab-bar-default-scroller .x-box-scroller-body-horizontal{margin-left:24px}.x-tab-bar-default-vertical-scroller .x-box-scroller-body-vertical{margin-top:24px}.x-box-scroller-tab-bar-default{cursor:pointer;filter:alpha(opacity=50);opacity:.5}.x-box-scroller-tab-bar-default.x-box-scroller-hover{filter:alpha(opacity=60);opacity:.6}.x-box-scroller-tab-bar-default.x-box-scroller-pressed{filter:alpha(opacity=70);opacity:.7}.x-box-scroller-tab-bar-default.x-box-scroller-disabled{filter:alpha(opacity=25);opacity:.25;cursor:default}.x-box-scroller-tab-bar-default.x-box-scroller-left,.x-box-scroller-tab-bar-default.x-box-scroller-right{width:24px;height:24px;top:50%;margin-top:-12px}.x-box-scroller-tab-bar-default.x-box-scroller-left{margin-left:0;margin-right:0;margin-bottom:0;background-image:url(images/tab-bar/default-scroll-left.png)}.x-box-scroller-tab-bar-default.x-box-scroller-right{margin-left:0;margin-right:0;margin-bottom:0;background-image:url(images/tab-bar/default-scroll-right.png)}.x-box-scroller-tab-bar-default.x-box-scroller-top,.x-box-scroller-tab-bar-default.x-box-scroller-bottom{height:24px;width:24px;left:50%;margin-left:-12px}.x-box-scroller-tab-bar-default.x-box-scroller-top{margin-top:0;margin-right:0;margin-bottom:0;background-image:url(images/tab-bar/default-scroll-top.png)}.x-box-scroller-tab-bar-default.x-box-scroller-bottom{margin-top:0;margin-right:0;margin-bottom:0;background-image:url(images/tab-bar/default-scroll-bottom.png)}.x-tab-bar-default-top .x-box-scroller-tab-bar-default{margin-top:-14px}.x-tab-bar-default-right .x-box-scroller-tab-bar-default{margin-left:-10px}.x-tab-bar-default-bottom .x-box-scroller-tab-bar-default{margin-top:-10px}.x-tab-bar-default-left .x-box-scroller-tab-bar-default{margin-left:-14px}.x-box-scroller-tab-bar-default{background-color:#4f0101}.x-box-scroller-tab-bar-default .x-ie8 .x-box-scroller-plain{background-color:#fff}.x-box-scroller-plain.x-box-scroller-tab-bar-default.x-box-scroller-left{background-image:url(images/tab-bar/default-plain-scroll-left.png)}.x-box-scroller-plain.x-box-scroller-tab-bar-default.x-box-scroller-right{background-image:url(images/tab-bar/default-plain-scroll-right.png)}.x-box-scroller-plain.x-box-scroller-tab-bar-default.x-box-scroller-top{background-image:url(images/tab-bar/default-plain-scroll-top.png)}.x-box-scroller-plain.x-box-scroller-tab-bar-default.x-box-scroller-bottom{background-image:url(images/tab-bar/default-plain-scroll-bottom.png)}.x-window-ghost{filter:alpha(opacity=50);opacity:.5}.x-window-default{border-color:#692727;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.x-window-default{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:0;border-width:5px;border-style:solid;background-color:white}.x-window-default-mc{background-color:white}.x-nbr .x-window-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-default-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-0-0-0-0}.x-window-default-tl{background-position:0 -10px}.x-window-default-tr{background-position:right -15px}.x-window-default-bl{background-position:0 -20px}.x-window-default-br{background-position:right -25px}.x-window-default-ml{background-position:0 top}.x-window-default-mr{background-position:right top}.x-window-default-tc{background-position:0 0}.x-window-default-bc{background-position:0 -5px}.x-window-default-tr,.x-window-default-br,.x-window-default-mr{padding-right:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-ml{padding-left:5px}.x-window-default-tc{height:5px}.x-window-default-bc{height:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-tr,.x-window-default-br,.x-window-default-tc,.x-window-default-bc,.x-window-default-ml,.x-window-default-mr{background-image:url(images/window/window-default-corners.gif)}.x-window-default-ml,.x-window-default-mr{background-image:url(images/window/window-default-sides.gif);background-repeat:repeat-y}.x-window-default-mc{padding:0}.x-window-body-default{border-color:#692727;border-width:1px;border-style:solid;background:white;color:black;font-size:11px;font-weight:normal;font-family:helvetica,arial,verdana,sans-serif}.x-window-header-default{font-size:13px;border-color:#692727;background-color:#692727}.x-window-header-default .x-tool-img{background-color:#692727}.x-window-header-default-horizontal .x-window-header-default-tab-bar{margin-top:-5px;margin-bottom:-5px}.x-window-header-default-vertical .x-window-header-default-tab-bar{margin-right:-5px;margin-left:-5px}.x-window-header-title-default{color:white;font-size:13px;font-weight:bold;font-family:helvetica,arial,verdana,sans-serif;line-height:16px}.x-window-header-title-default>.x-title-text-default{padding:0;text-transform:none}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-top{height:22px;padding-bottom:6px}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-right{width:22px;padding-left:6px}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-bottom{height:22px;padding-top:6px}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-left{width:22px;padding-right:6px}.x-window-header-title-default>.x-title-icon-wrap-default>.x-title-icon-default{width:16px;height:16px;background-position:center center}.x-window-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:white;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-window-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:#b49393}.x-window-header-default-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:5px 5px 5px 5px;border-style:solid;background-color:#692727}.x-window-header-default-top-mc{background-color:#692727}.x-nbr .x-window-header-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-top-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-top-tl{background-position:0 -10px}.x-window-header-default-top-tr{background-position:right -15px}.x-window-header-default-top-bl{background-position:0 -20px}.x-window-header-default-top-br{background-position:right -25px}.x-window-header-default-top-ml{background-position:0 top}.x-window-header-default-top-mr{background-position:right top}.x-window-header-default-top-tc{background-position:0 0}.x-window-header-default-top-bc{background-position:0 -5px}.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-mr{padding-right:5px}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-ml{padding-left:5px}.x-window-header-default-top-tc{height:5px}.x-window-header-default-top-bc{height:5px}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-tc,.x-window-header-default-top-bc,.x-window-header-default-top-ml,.x-window-header-default-top-mr{background-image:url(images/window-header/window-header-default-top-corners.gif)}.x-window-header-default-top-ml,.x-window-header-default-top-mr{background-image:url(images/window-header/window-header-default-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-top-mc{padding:5px 5px 5px 5px}.x-window-header-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:5px 5px 5px 5px;border-style:solid;background-color:#692727}.x-window-header-default-right-mc{background-color:#692727}.x-nbr .x-window-header-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-right-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-right-tl{background-position:0 -10px}.x-window-header-default-right-tr{background-position:right -15px}.x-window-header-default-right-bl{background-position:0 -20px}.x-window-header-default-right-br{background-position:right -25px}.x-window-header-default-right-ml{background-position:0 top}.x-window-header-default-right-mr{background-position:right top}.x-window-header-default-right-tc{background-position:0 0}.x-window-header-default-right-bc{background-position:0 -5px}.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-mr{padding-right:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-ml{padding-left:5px}.x-window-header-default-right-tc{height:5px}.x-window-header-default-right-bc{height:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-tc,.x-window-header-default-right-bc,.x-window-header-default-right-ml,.x-window-header-default-right-mr{background-image:url(images/window-header/window-header-default-right-corners.gif)}.x-window-header-default-right-ml,.x-window-header-default-right-mr{background-image:url(images/window-header/window-header-default-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-right-mc{padding:5px 5px 5px 5px}.x-window-header-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px 5px 5px 5px;border-style:solid;background-color:#692727}.x-window-header-default-bottom-mc{background-color:#692727}.x-nbr .x-window-header-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-bottom-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-bottom-tl{background-position:0 -10px}.x-window-header-default-bottom-tr{background-position:right -15px}.x-window-header-default-bottom-bl{background-position:0 -20px}.x-window-header-default-bottom-br{background-position:right -25px}.x-window-header-default-bottom-ml{background-position:0 top}.x-window-header-default-bottom-mr{background-position:right top}.x-window-header-default-bottom-tc{background-position:0 0}.x-window-header-default-bottom-bc{background-position:0 -5px}.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-mr{padding-right:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-ml{padding-left:5px}.x-window-header-default-bottom-tc{height:5px}.x-window-header-default-bottom-bc{height:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-tc,.x-window-header-default-bottom-bc,.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{background-image:url(images/window-header/window-header-default-bottom-corners.gif)}.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{background-image:url(images/window-header/window-header-default-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-bottom-mc{padding:5px 5px 5px 5px}.x-window-header-default-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px 5px 5px 5px;border-style:solid;background-color:#692727}.x-window-header-default-left-mc{background-color:#692727}.x-nbr .x-window-header-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-left-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-left-tl{background-position:0 -10px}.x-window-header-default-left-tr{background-position:right -15px}.x-window-header-default-left-bl{background-position:0 -20px}.x-window-header-default-left-br{background-position:right -25px}.x-window-header-default-left-ml{background-position:0 top}.x-window-header-default-left-mr{background-position:right top}.x-window-header-default-left-tc{background-position:0 0}.x-window-header-default-left-bc{background-position:0 -5px}.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-mr{padding-right:5px}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-ml{padding-left:5px}.x-window-header-default-left-tc{height:5px}.x-window-header-default-left-bc{height:5px}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-tc,.x-window-header-default-left-bc,.x-window-header-default-left-ml,.x-window-header-default-left-mr{background-image:url(images/window-header/window-header-default-left-corners.gif)}.x-window-header-default-left-ml,.x-window-header-default-left-mr{background-image:url(images/window-header/window-header-default-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-left-mc{padding:5px 5px 5px 5px}.x-window-header-default-collapsed-top{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#692727}.x-window-header-default-collapsed-top-mc{background-color:#692727}.x-nbr .x-window-header-default-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-top-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-collapsed-top-tl{background-position:0 -10px}.x-window-header-default-collapsed-top-tr{background-position:right -15px}.x-window-header-default-collapsed-top-bl{background-position:0 -20px}.x-window-header-default-collapsed-top-br{background-position:right -25px}.x-window-header-default-collapsed-top-ml{background-position:0 top}.x-window-header-default-collapsed-top-mr{background-position:right top}.x-window-header-default-collapsed-top-tc{background-position:0 0}.x-window-header-default-collapsed-top-bc{background-position:0 -5px}.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-mr{padding-right:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-ml{padding-left:5px}.x-window-header-default-collapsed-top-tc{height:5px}.x-window-header-default-collapsed-top-bc{height:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-tc,.x-window-header-default-collapsed-top-bc,.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{background-image:url(images/window-header/window-header-default-collapsed-top-corners.gif)}.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{background-image:url(images/window-header/window-header-default-collapsed-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-top-mc{padding:5px 5px 5px 5px}.x-window-header-default-collapsed-right{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#692727}.x-window-header-default-collapsed-right-mc{background-color:#692727}.x-nbr .x-window-header-default-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-right-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-collapsed-right-tl{background-position:0 -10px}.x-window-header-default-collapsed-right-tr{background-position:right -15px}.x-window-header-default-collapsed-right-bl{background-position:0 -20px}.x-window-header-default-collapsed-right-br{background-position:right -25px}.x-window-header-default-collapsed-right-ml{background-position:0 top}.x-window-header-default-collapsed-right-mr{background-position:right top}.x-window-header-default-collapsed-right-tc{background-position:0 0}.x-window-header-default-collapsed-right-bc{background-position:0 -5px}.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-mr{padding-right:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-ml{padding-left:5px}.x-window-header-default-collapsed-right-tc{height:5px}.x-window-header-default-collapsed-right-bc{height:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-tc,.x-window-header-default-collapsed-right-bc,.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{background-image:url(images/window-header/window-header-default-collapsed-right-corners.gif)}.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{background-image:url(images/window-header/window-header-default-collapsed-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-right-mc{padding:5px 5px 5px 5px}.x-window-header-default-collapsed-bottom{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#692727}.x-window-header-default-collapsed-bottom-mc{background-color:#692727}.x-nbr .x-window-header-default-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-bottom-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-collapsed-bottom-tl{background-position:0 -10px}.x-window-header-default-collapsed-bottom-tr{background-position:right -15px}.x-window-header-default-collapsed-bottom-bl{background-position:0 -20px}.x-window-header-default-collapsed-bottom-br{background-position:right -25px}.x-window-header-default-collapsed-bottom-ml{background-position:0 top}.x-window-header-default-collapsed-bottom-mr{background-position:right top}.x-window-header-default-collapsed-bottom-tc{background-position:0 0}.x-window-header-default-collapsed-bottom-bc{background-position:0 -5px}.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-mr{padding-right:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-ml{padding-left:5px}.x-window-header-default-collapsed-bottom-tc{height:5px}.x-window-header-default-collapsed-bottom-bc{height:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-tc,.x-window-header-default-collapsed-bottom-bc,.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{background-image:url(images/window-header/window-header-default-collapsed-bottom-corners.gif)}.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{background-image:url(images/window-header/window-header-default-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-bottom-mc{padding:5px 5px 5px 5px}.x-window-header-default-collapsed-left{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#692727}.x-window-header-default-collapsed-left-mc{background-color:#692727}.x-nbr .x-window-header-default-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-left-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-window-header-default-collapsed-left-tl{background-position:0 -10px}.x-window-header-default-collapsed-left-tr{background-position:right -15px}.x-window-header-default-collapsed-left-bl{background-position:0 -20px}.x-window-header-default-collapsed-left-br{background-position:right -25px}.x-window-header-default-collapsed-left-ml{background-position:0 top}.x-window-header-default-collapsed-left-mr{background-position:right top}.x-window-header-default-collapsed-left-tc{background-position:0 0}.x-window-header-default-collapsed-left-bc{background-position:0 -5px}.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-mr{padding-right:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-ml{padding-left:5px}.x-window-header-default-collapsed-left-tc{height:5px}.x-window-header-default-collapsed-left-bc{height:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-tc,.x-window-header-default-collapsed-left-bc,.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{background-image:url(images/window-header/window-header-default-collapsed-left-corners.gif)}.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{background-image:url(images/window-header/window-header-default-collapsed-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-left-mc{padding:5px 5px 5px 5px}.x-window-header-default .x-window-header-icon{width:16px;height:16px;color:white;font-size:16px;line-height:16px;background-position:center center}.x-window-header-default .x-window-header-glyph{color:white;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-window-header-default .x-window-header-glyph{color:#b49393}.x-window-header-default-horizontal .x-tool-after-title{margin:0 0 0 6px}.x-window-header-default-horizontal .x-tool-before-title{margin:0 6px 0 0}.x-window-header-default-vertical .x-tool-after-title{margin:6px 0 0 0}.x-window-header-default-vertical .x-tool-before-title{margin:0 0 6px 0}.x-window-header-default{border-width:5px!important}.x-nbr .x-window-default-collapsed .x-window-header{border-width:0!important}.x-window-default-resizable{overflow:visible}.x-window-default-resizable .x-window-handle-north-br{top:-5px}.x-window-default-resizable .x-window-handle-south-br{bottom:-5px}.x-window-default-resizable .x-window-handle-east-br{right:-5px}.x-window-default-resizable .x-window-handle-west-br{left:-5px}.x-window-default-resizable .x-window-handle-northwest-br{left:-5px;top:-5px}.x-window-default-resizable .x-window-handle-northeast-br{right:-5px;top:-5px}.x-window-default-resizable .x-window-handle-southeast-br{right:-5px;bottom:-5px}.x-window-default-resizable .x-window-handle-southwest-br{left:-5px;bottom:-5px}.x-window-default-outer-border-l{border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-b{border-bottom-color:#692727!important;border-bottom-width:1px!important}.x-window-default-outer-border-bl{border-bottom-color:#692727!important;border-bottom-width:1px!important;border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-r{border-right-color:#692727!important;border-right-width:1px!important}.x-window-default-outer-border-rl{border-right-color:#692727!important;border-right-width:1px!important;border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-rb{border-right-color:#692727!important;border-right-width:1px!important;border-bottom-color:#692727!important;border-bottom-width:1px!important}.x-window-default-outer-border-rbl{border-right-color:#692727!important;border-right-width:1px!important;border-bottom-color:#692727!important;border-bottom-width:1px!important;border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-t{border-top-color:#692727!important;border-top-width:1px!important}.x-window-default-outer-border-tl{border-top-color:#692727!important;border-top-width:1px!important;border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-tb{border-top-color:#692727!important;border-top-width:1px!important;border-bottom-color:#692727!important;border-bottom-width:1px!important}.x-window-default-outer-border-tbl{border-top-color:#692727!important;border-top-width:1px!important;border-bottom-color:#692727!important;border-bottom-width:1px!important;border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-tr{border-top-color:#692727!important;border-top-width:1px!important;border-right-color:#692727!important;border-right-width:1px!important}.x-window-default-outer-border-trl{border-top-color:#692727!important;border-top-width:1px!important;border-right-color:#692727!important;border-right-width:1px!important;border-left-color:#692727!important;border-left-width:1px!important}.x-window-default-outer-border-trb{border-top-color:#692727!important;border-top-width:1px!important;border-right-color:#692727!important;border-right-width:1px!important;border-bottom-color:#692727!important;border-bottom-width:1px!important}.x-window-default-outer-border-trbl{border-color:#692727!important;border-width:1px!important}.x-window-body-plain{background-color:transparent}.x-message-box .x-window-body{background-color:white;border-width:0}.x-message-box-info,.x-message-box-warning,.x-message-box-question,.x-message-box-error{background-position:left top;background-repeat:no-repeat}.x-message-box-icon{height:32px;width:32px;margin-right:10px}.x-message-box-info{background-image:url(images/shared/icon-info.png)}.x-message-box-warning{background-image:url(images/shared/icon-warning.png)}.x-message-box-question{background-image:url(images/shared/icon-question.png)}.x-message-box-error{background-image:url(images/shared/icon-error.png)}.x-form-trigger-spinner-default{width:22px}.x-form-spinner-default{background-image:url(images/form/spinner.png);background-color:white;width:22px;height:11px}.x-form-spinner-up-default{background-position:0 0}.x-form-spinner-up-default.x-form-spinner-over{background-position:-22px 0}.x-form-spinner-up-default.x-form-spinner-over.x-form-spinner-focus{background-position:-88px 0}.x-form-spinner-up-default.x-form-spinner-focus{background-position:-66px 0}.x-form-spinner-up-default.x-form-spinner.x-form-spinner-click{background-position:-44px 0}.x-form-spinner-down-default{background-position:0 -11px}.x-form-spinner-down-default.x-form-spinner-over{background-position:-22px -11px}.x-form-spinner-down-default.x-form-spinner-over.x-form-spinner-focus{background-position:-88px -11px}.x-form-spinner-down-default.x-form-spinner-focus{background-position:-66px -11px}.x-form-spinner-down-default.x-form-spinner.x-form-spinner-click{background-position:-44px -11px}.x-tbar-page-number{width:30px}.x-tbar-page-first{background-image:url(images/grid/page-first.png)}.x-tbar-page-prev{background-image:url(images/grid/page-prev.png)}.x-tbar-page-next{background-image:url(images/grid/page-next.png)}.x-tbar-page-last{background-image:url(images/grid/page-last.png)}.x-tbar-loading{background-image:url(images/grid/refresh.png)}.x-menu-default{border-style:solid;border-width:1px;border-color:#e1e1e1}.x-menu-body-default{background:white;padding:0}.x-menu-icon-separator-default{left:26px;border-left:solid 1px #e1e1e1;background-color:white;width:1px}.x-menu-item-default{border-width:0;cursor:pointer}.x-menu-item-default.x-menu-item-active{background-image:none;background-color:#e0d2d2}.x-nlg .x-menu-item-default.x-menu-item-active{background:#e0d2d2 repeat-x left top;background-image:url(images/menu/menu-item-default-active-bg.gif)}.x-menu-item-default.x-menu-item-separator{height:1px;border-top:solid 1px #e1e1e1;background-color:white;margin:2px 0;padding:0}.x-menu-item-default.x-menu-item-disabled{filter:alpha(opacity=50);opacity:.5}.x-ie9m .x-menu-item-default.x-menu-item-disabled .x-menu-item-icon-ui{filter:alpha(opacity=50);opacity:.5}.x-ie9m .x-menu-item-default.x-menu-item-disabled .x-menu-item-text-default{background-color:transparent}.x-menu-item-default .x-form-item-label{font-size:11px;color:black}.x-menu-item-text-default,.x-menu-item-cmp-default{margin:0 5px 0 5px}.x-menu-item-text-default{font:normal 11px helvetica,arial,verdana,sans-serif;line-height:23px;padding-top:1px;color:black;cursor:pointer}.x-menu-item-text-default.x-menu-item-indent{margin-left:32px}.x-menu-item-text-default.x-menu-item-indent-no-separator{margin-left:26px}.x-menu-item-text-default.x-menu-item-indent-right-icon{margin-right:31px}.x-menu-item-text-default.x-menu-item-indent-right-arrow{margin-right:22px}.x-menu-item-indent-default{margin-left:32px}.x-menu-item-icon-default{width:16px;height:16px;top:4px;left:5px;background-position:center center}.x-menu-item-icon-default.x-menu-item-glyph{font-size:16px;line-height:16px;color:gray;opacity:.5}.x-ie8 .x-menu-item-icon-default.x-menu-item-glyph{color:#bfbfbf}.x-menu-item-icon-default.x-menu-item-icon-right{width:16px;height:16px;top:4px;right:5px;left:auto;background-position:center center}.x-menu-item-checked .x-menu-item-icon-default.x-menu-item-checkbox{background-image:url(images/menu/default-checked.png)}.x-menu-item-unchecked .x-menu-item-icon-default.x-menu-item-checkbox{background-image:url(images/menu/default-unchecked.png)}.x-menu-item-checked .x-menu-item-icon-default.x-menu-group-icon{background-image:url(images/menu/default-group-checked.png)}.x-menu-item-unchecked .x-menu-item-icon-default.x-menu-group-icon{background-image:none}.x-menu-item-arrow-default{width:12px;height:9px;top:8px;right:0;background-image:url(images/menu/default-menu-parent.png)}.x-menu-item-active .x-menu-item-arrow-default{top:8px;right:0}.x-menu-default-scroller .x-box-scroller-body-horizontal{margin-left:16px}.x-menu-default-vertical-scroller .x-box-scroller-body-vertical{margin-top:24px}.x-box-scroller-menu-default{cursor:pointer;filter:alpha(opacity=50);opacity:.5}.x-box-scroller-menu-default.x-box-scroller-hover{filter:alpha(opacity=60);opacity:.6}.x-box-scroller-menu-default.x-box-scroller-pressed{filter:alpha(opacity=70);opacity:.7}.x-box-scroller-menu-default.x-box-scroller-disabled{filter:alpha(opacity=25);opacity:.25;cursor:default}.x-box-scroller-menu-default.x-box-scroller-top,.x-box-scroller-menu-default.x-box-scroller-bottom{height:16px;width:16px;left:50%;margin-left:-8px}.x-box-scroller-menu-default.x-box-scroller-top{margin-top:4px;margin-right:0;margin-bottom:4px;background-image:url(images/menu/default-scroll-top.png)}.x-box-scroller-menu-default.x-box-scroller-bottom{margin-top:4px;margin-right:0;margin-bottom:4px;background-image:url(images/menu/default-scroll-bottom.png)}.x-ie8 .x-box-scroller-menu-default{background-color:white}.x-grid-locked .x-grid-inner-locked{border-width:0 1px 0 0;border-style:solid}.x-grid-locked-split .x-grid-inner-normal{border-width:0 0 0 1px;border-style:solid}.x-grid-inner-locked{border-right-color:#4f0101}.x-grid-inner-locked .x-column-header-last,.x-grid-inner-locked .x-grid-cell-last{border-right-width:0!important}.x-hmenu-lock{background-image:url(images/grid/hmenu-lock.png)}.x-hmenu-unlock{background-image:url(images/grid/hmenu-unlock.png)}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:5px;overflow:hidden;filter:alpha(opacity=0);opacity:0;background-color:#fff;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.x-collapsed .x-resizable-handle{display:none}.x-resizable-handle-north{cursor:n-resize}.x-resizable-handle-south{cursor:s-resize}.x-resizable-handle-east{cursor:e-resize}.x-resizable-handle-west{cursor:w-resize}.x-resizable-handle-southeast{cursor:se-resize}.x-resizable-handle-northwest{cursor:nw-resize}.x-resizable-handle-northeast{cursor:ne-resize}.x-resizable-handle-southwest{cursor:sw-resize}.x-resizable-handle-east{width:5px;height:100%;right:0;top:0}.x-resizable-handle-south{width:100%;height:5px;left:0;bottom:0}.x-resizable-handle-west{width:5px;height:100%;left:0;top:0}.x-resizable-handle-north{width:100%;height:5px;left:0;top:0}.x-resizable-handle-southeast{width:5px;height:5px;right:0;bottom:0;z-index:101}.x-resizable-handle-northwest{width:5px;height:5px;left:0;top:0;z-index:101}.x-resizable-handle-northeast{width:5px;height:5px;right:0;top:0;z-index:101}.x-resizable-handle-southwest{width:5px;height:5px;left:0;bottom:0;z-index:101}.x-window .x-window-handle{filter:alpha(opacity=0);opacity:0}.x-window-collapsed .x-window-handle{display:none}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;z-index:50000}.x-resizable-handle-over,.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1}.x-resizable-handle-east-over,.x-resizable-handle-west-over{background-image:url(images/sizer/e-handle.png)}.x-resizable-handle-south-over,.x-resizable-handle-north-over{background-image:url(images/sizer/s-handle.png)}.x-resizable-handle-southeast-over{background-position:top left;background-image:url(images/sizer/se-handle.png)}.x-resizable-handle-northwest-over{background-position:bottom right;background-image:url(images/sizer/nw-handle.png)}.x-resizable-handle-northeast-over{background-position:bottom left;background-image:url(images/sizer/ne-handle.png)}.x-resizable-handle-southwest-over{background-position:top right;background-image:url(images/sizer/sw-handle.png)}.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-image:url(images/sizer/e-handle.png)}.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-image:url(images/sizer/s-handle.png)}.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;background-image:url(images/sizer/se-handle.png)}.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;background-image:url(images/sizer/nw-handle.png)}.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;background-image:url(images/sizer/ne-handle.png)}.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;background-image:url(images/sizer/sw-handle.png)}.x-scroll-indicator{position:absolute;background-color:black;opacity:.5;border-radius:3px;margin:2px}.x-scroll-indicator-x{bottom:0;height:6px}.x-scroll-indicator-y{right:0;width:6px}.x-column-header-checkbox{border-color:#f5f5f5}.x-grid-row-checker,.x-column-header-checkbox .x-column-header-text{height:15px;width:15px;background-image:url(images/form/checkbox.png);line-height:15px}.x-column-header-checkbox .x-column-header-inner{padding:6px 4px 6px 4px}.x-grid-cell-row-checker .x-grid-cell-inner{padding:4px 4px 3px 4px}.x-grid-hd-checker-on .x-column-header-text,.x-grid-item-selected .x-grid-row-checker,.x-grid-item-selected .x-grid-row-checker{background-position:0 -15px}.x-btn-plain-toolbar-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:transparent}.x-btn-plain-toolbar-small-mc{background-image:url(images/btn/btn-plain-toolbar-small-fbg.gif);background-position:0 top;background-color:transparent}.x-nbr .x-btn-plain-toolbar-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-plain-toolbar-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-plain-toolbar-small-tl{background-position:0 -6px}.x-btn-plain-toolbar-small-tr{background-position:right -9px}.x-btn-plain-toolbar-small-bl{background-position:0 -12px}.x-btn-plain-toolbar-small-br{background-position:right -15px}.x-btn-plain-toolbar-small-ml{background-position:0 top}.x-btn-plain-toolbar-small-mr{background-position:right top}.x-btn-plain-toolbar-small-tc{background-position:0 0}.x-btn-plain-toolbar-small-bc{background-position:0 -3px}.x-btn-plain-toolbar-small-tr,.x-btn-plain-toolbar-small-br,.x-btn-plain-toolbar-small-mr{padding-right:3px}.x-btn-plain-toolbar-small-tl,.x-btn-plain-toolbar-small-bl,.x-btn-plain-toolbar-small-ml{padding-left:3px}.x-btn-plain-toolbar-small-tc{height:3px}.x-btn-plain-toolbar-small-bc{height:3px}.x-btn-plain-toolbar-small-mc{padding:1px 1px 1px 1px}.x-btn-plain-toolbar-small{border-color:transparent}.x-btn-button-plain-toolbar-small{height:16px}.x-btn-inner-plain-toolbar-small{font:bold 12px/16px helvetica,arial,verdana,sans-serif;color:#666;padding:0 5px;max-width:100%}.x-btn-icon-right>.x-btn-inner-plain-toolbar-small,.x-btn-icon-left>.x-btn-inner-plain-toolbar-small{max-width:calc(100% - 16px)}.x-btn-icon-el-plain-toolbar-small{height:16px}.x-btn-icon-left>.x-btn-icon-el-plain-toolbar-small,.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-small{width:16px}.x-btn-icon-top>.x-btn-icon-el-plain-toolbar-small,.x-btn-icon-bottom>.x-btn-icon-el-plain-toolbar-small{min-width:16px}.x-btn-icon-el-plain-toolbar-small.x-btn-glyph{font-size:16px;line-height:16px;color:#666;opacity:.5}.x-ie8 .x-btn-icon-el-plain-toolbar-small.x-btn-glyph{color:#b2b2b2}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-plain-toolbar-small{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-small{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-plain-toolbar-small{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-plain-toolbar-small{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-plain-toolbar-small{padding-right:5px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-small{margin-right:5px}.x-btn-arrow-bottom>.x-btn-button-plain-toolbar-small,.x-btn-split-bottom>.x-btn-button-plain-toolbar-small{padding-bottom:3px}.x-btn-wrap-plain-toolbar-small.x-btn-arrow-right:after{width:16px;padding-right:16px;background-image:url(images/button/plain-toolbar-small-arrow.png)}.x-btn-wrap-plain-toolbar-small.x-btn-arrow-bottom:after{height:13px;background-image:url(images/button/plain-toolbar-small-arrow.png)}.x-btn-wrap-plain-toolbar-small.x-btn-split-right:after{width:20px;padding-right:20px;background-image:url(images/button/plain-toolbar-small-s-arrow.png)}.x-btn-wrap-plain-toolbar-small.x-btn-split-bottom:after{height:15px;background-image:url(images/button/plain-toolbar-small-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-plain-toolbar-small{padding-right:5px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-small{margin-right:5px}.x-btn-focus.x-btn-plain-toolbar-small{background-image:none;background-color:transparent;-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn-over.x-btn-plain-toolbar-small{border-color:#d8d8d8;background-image:none;background-color:#ebebeb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ededed),color-stop(50%,#ebebeb),color-stop(51%,#dfdfdf),color-stop(100%,#ebebeb));background-image:-webkit-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-moz-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-o-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-ms-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb)}.x-btn-focus.x-btn-over.x-btn-plain-toolbar-small{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-plain-toolbar-small,.x-btn.x-btn-pressed.x-btn-plain-toolbar-small{border-color:#cecece;background-image:none;background-color:#e1e1e1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1e1e1),color-stop(50%,#d5d5d5),color-stop(51%,#e1e1e1),color-stop(100%,#e4e4e4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-moz-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-o-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-ms-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4)}.x-btn-focus.x-btn-menu-active.x-btn-plain-toolbar-small,.x-btn-focus.x-btn-pressed.x-btn-plain-toolbar-small{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-plain-toolbar-small{background-image:none;background-color:transparent}.x-btn-focus .x-btn-plain-toolbar-small-tl,.x-btn-focus .x-btn-plain-toolbar-small-bl,.x-btn-focus .x-btn-plain-toolbar-small-tr,.x-btn-focus .x-btn-plain-toolbar-small-br,.x-btn-focus .x-btn-plain-toolbar-small-tc,.x-btn-focus .x-btn-plain-toolbar-small-bc{background-image:url(images/btn/btn-plain-toolbar-small-focus-corners.gif)}.x-btn-focus .x-btn-plain-toolbar-small-ml,.x-btn-focus .x-btn-plain-toolbar-small-mr{background-image:url(images/btn/btn-plain-toolbar-small-focus-sides.gif)}.x-btn-focus .x-btn-plain-toolbar-small-mc{background-color:transparent;background-image:url(images/btn/btn-plain-toolbar-small-focus-fbg.gif)}.x-btn-over .x-btn-plain-toolbar-small-tl,.x-btn-over .x-btn-plain-toolbar-small-bl,.x-btn-over .x-btn-plain-toolbar-small-tr,.x-btn-over .x-btn-plain-toolbar-small-br,.x-btn-over .x-btn-plain-toolbar-small-tc,.x-btn-over .x-btn-plain-toolbar-small-bc{background-image:url(images/btn/btn-plain-toolbar-small-over-corners.gif)}.x-btn-over .x-btn-plain-toolbar-small-ml,.x-btn-over .x-btn-plain-toolbar-small-mr{background-image:url(images/btn/btn-plain-toolbar-small-over-sides.gif)}.x-btn-over .x-btn-plain-toolbar-small-mc{background-color:#ebebeb;background-image:url(images/btn/btn-plain-toolbar-small-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-tl,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-bl,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-tr,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-br,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-tc,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-bc{background-image:url(images/btn/btn-plain-toolbar-small-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-ml,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-mr{background-image:url(images/btn/btn-plain-toolbar-small-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-small-mc{background-color:#ebebeb;background-image:url(images/btn/btn-plain-toolbar-small-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-tl,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-bl,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-tr,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-br,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-tc,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-bc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-tl,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-bl,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-tr,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-br,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-tc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-bc{background-image:url(images/btn/btn-plain-toolbar-small-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-ml,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-mr,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-ml,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-mr{background-image:url(images/btn/btn-plain-toolbar-small-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-small-mc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-small-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-plain-toolbar-small-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-tl,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-bl,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-tr,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-br,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-tc,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-bc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-tl,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-bl,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-tr,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-br,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-tc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-bc{background-image:url(images/btn/btn-plain-toolbar-small-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-ml,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-mr,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-ml,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-mr{background-image:url(images/btn/btn-plain-toolbar-small-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-small-mc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-small-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-plain-toolbar-small-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-tl,.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-bl,.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-tr,.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-br,.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-tc,.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-bc{background-image:url(images/btn/btn-plain-toolbar-small-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-ml,.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-mr{background-image:url(images/btn/btn-plain-toolbar-small-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-small-mc{background-color:transparent;background-image:url(images/btn/btn-plain-toolbar-small-disabled-fbg.gif)}.x-nbr .x-btn-plain-toolbar-small{background-image:none}.x-btn-disabled.x-btn-plain-toolbar-small{filter:alpha(opacity=50);opacity:.5}.x-btn-plain-toolbar-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:transparent}.x-btn-plain-toolbar-medium-mc{background-image:url(images/btn/btn-plain-toolbar-medium-fbg.gif);background-position:0 top;background-color:transparent}.x-nbr .x-btn-plain-toolbar-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-plain-toolbar-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-plain-toolbar-medium-tl{background-position:0 -6px}.x-btn-plain-toolbar-medium-tr{background-position:right -9px}.x-btn-plain-toolbar-medium-bl{background-position:0 -12px}.x-btn-plain-toolbar-medium-br{background-position:right -15px}.x-btn-plain-toolbar-medium-ml{background-position:0 top}.x-btn-plain-toolbar-medium-mr{background-position:right top}.x-btn-plain-toolbar-medium-tc{background-position:0 0}.x-btn-plain-toolbar-medium-bc{background-position:0 -3px}.x-btn-plain-toolbar-medium-tr,.x-btn-plain-toolbar-medium-br,.x-btn-plain-toolbar-medium-mr{padding-right:3px}.x-btn-plain-toolbar-medium-tl,.x-btn-plain-toolbar-medium-bl,.x-btn-plain-toolbar-medium-ml{padding-left:3px}.x-btn-plain-toolbar-medium-tc{height:3px}.x-btn-plain-toolbar-medium-bc{height:3px}.x-btn-plain-toolbar-medium-mc{padding:1px 1px 1px 1px}.x-btn-plain-toolbar-medium{border-color:transparent}.x-btn-button-plain-toolbar-medium{height:24px}.x-btn-inner-plain-toolbar-medium{font:bold 14px/18px helvetica,arial,verdana,sans-serif;color:#666;padding:0 8px;max-width:100%}.x-btn-icon-right>.x-btn-inner-plain-toolbar-medium,.x-btn-icon-left>.x-btn-inner-plain-toolbar-medium{max-width:calc(100% - 24px)}.x-btn-icon-el-plain-toolbar-medium{height:24px}.x-btn-icon-left>.x-btn-icon-el-plain-toolbar-medium,.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-medium{width:24px}.x-btn-icon-top>.x-btn-icon-el-plain-toolbar-medium,.x-btn-icon-bottom>.x-btn-icon-el-plain-toolbar-medium{min-width:24px}.x-btn-icon-el-plain-toolbar-medium.x-btn-glyph{font-size:24px;line-height:24px;color:#666;opacity:.5}.x-ie8 .x-btn-icon-el-plain-toolbar-medium.x-btn-glyph{color:#b2b2b2}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-plain-toolbar-medium{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-medium{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-plain-toolbar-medium{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-plain-toolbar-medium{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-plain-toolbar-medium{padding-right:8px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-medium{margin-right:8px}.x-btn-arrow-bottom>.x-btn-button-plain-toolbar-medium,.x-btn-split-bottom>.x-btn-button-plain-toolbar-medium{padding-bottom:3px}.x-btn-wrap-plain-toolbar-medium.x-btn-arrow-right:after{width:24px;padding-right:24px;background-image:url(images/button/plain-toolbar-medium-arrow.png)}.x-btn-wrap-plain-toolbar-medium.x-btn-arrow-bottom:after{height:18px;background-image:url(images/button/plain-toolbar-medium-arrow.png)}.x-btn-wrap-plain-toolbar-medium.x-btn-split-right:after{width:28px;padding-right:28px;background-image:url(images/button/plain-toolbar-medium-s-arrow.png)}.x-btn-wrap-plain-toolbar-medium.x-btn-split-bottom:after{height:24px;background-image:url(images/button/plain-toolbar-medium-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-plain-toolbar-medium{padding-right:8px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-medium{margin-right:8px}.x-btn-focus.x-btn-plain-toolbar-medium{background-image:none;background-color:transparent;-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn-over.x-btn-plain-toolbar-medium{border-color:#d8d8d8;background-image:none;background-color:#ebebeb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ededed),color-stop(50%,#ebebeb),color-stop(51%,#dfdfdf),color-stop(100%,#ebebeb));background-image:-webkit-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-moz-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-o-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-ms-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb)}.x-btn-focus.x-btn-over.x-btn-plain-toolbar-medium{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-plain-toolbar-medium,.x-btn.x-btn-pressed.x-btn-plain-toolbar-medium{border-color:#cecece;background-image:none;background-color:#e1e1e1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1e1e1),color-stop(50%,#d5d5d5),color-stop(51%,#e1e1e1),color-stop(100%,#e4e4e4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-moz-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-o-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-ms-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4)}.x-btn-focus.x-btn-menu-active.x-btn-plain-toolbar-medium,.x-btn-focus.x-btn-pressed.x-btn-plain-toolbar-medium{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-plain-toolbar-medium{background-image:none;background-color:transparent}.x-btn-focus .x-btn-plain-toolbar-medium-tl,.x-btn-focus .x-btn-plain-toolbar-medium-bl,.x-btn-focus .x-btn-plain-toolbar-medium-tr,.x-btn-focus .x-btn-plain-toolbar-medium-br,.x-btn-focus .x-btn-plain-toolbar-medium-tc,.x-btn-focus .x-btn-plain-toolbar-medium-bc{background-image:url(images/btn/btn-plain-toolbar-medium-focus-corners.gif)}.x-btn-focus .x-btn-plain-toolbar-medium-ml,.x-btn-focus .x-btn-plain-toolbar-medium-mr{background-image:url(images/btn/btn-plain-toolbar-medium-focus-sides.gif)}.x-btn-focus .x-btn-plain-toolbar-medium-mc{background-color:transparent;background-image:url(images/btn/btn-plain-toolbar-medium-focus-fbg.gif)}.x-btn-over .x-btn-plain-toolbar-medium-tl,.x-btn-over .x-btn-plain-toolbar-medium-bl,.x-btn-over .x-btn-plain-toolbar-medium-tr,.x-btn-over .x-btn-plain-toolbar-medium-br,.x-btn-over .x-btn-plain-toolbar-medium-tc,.x-btn-over .x-btn-plain-toolbar-medium-bc{background-image:url(images/btn/btn-plain-toolbar-medium-over-corners.gif)}.x-btn-over .x-btn-plain-toolbar-medium-ml,.x-btn-over .x-btn-plain-toolbar-medium-mr{background-image:url(images/btn/btn-plain-toolbar-medium-over-sides.gif)}.x-btn-over .x-btn-plain-toolbar-medium-mc{background-color:#ebebeb;background-image:url(images/btn/btn-plain-toolbar-medium-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-tl,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-bl,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-tr,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-br,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-tc,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-bc{background-image:url(images/btn/btn-plain-toolbar-medium-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-ml,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-mr{background-image:url(images/btn/btn-plain-toolbar-medium-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-medium-mc{background-color:#ebebeb;background-image:url(images/btn/btn-plain-toolbar-medium-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-tl,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-bl,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-tr,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-br,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-tc,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-bc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-tl,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-bl,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-tr,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-br,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-tc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-bc{background-image:url(images/btn/btn-plain-toolbar-medium-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-ml,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-mr,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-ml,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-mr{background-image:url(images/btn/btn-plain-toolbar-medium-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-medium-mc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-medium-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-plain-toolbar-medium-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-tl,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-bl,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-tr,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-br,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-tc,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-bc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-tl,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-bl,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-tr,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-br,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-tc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-bc{background-image:url(images/btn/btn-plain-toolbar-medium-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-ml,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-mr,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-ml,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-mr{background-image:url(images/btn/btn-plain-toolbar-medium-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-medium-mc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-medium-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-plain-toolbar-medium-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-tl,.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-bl,.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-tr,.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-br,.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-tc,.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-bc{background-image:url(images/btn/btn-plain-toolbar-medium-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-ml,.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-mr{background-image:url(images/btn/btn-plain-toolbar-medium-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-medium-mc{background-color:transparent;background-image:url(images/btn/btn-plain-toolbar-medium-disabled-fbg.gif)}.x-nbr .x-btn-plain-toolbar-medium{background-image:none}.x-btn-disabled.x-btn-plain-toolbar-medium{filter:alpha(opacity=50);opacity:.5}.x-btn-plain-toolbar-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:transparent}.x-btn-plain-toolbar-large-mc{background-image:url(images/btn/btn-plain-toolbar-large-fbg.gif);background-position:0 top;background-color:transparent}.x-nbr .x-btn-plain-toolbar-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-plain-toolbar-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-plain-toolbar-large-tl{background-position:0 -6px}.x-btn-plain-toolbar-large-tr{background-position:right -9px}.x-btn-plain-toolbar-large-bl{background-position:0 -12px}.x-btn-plain-toolbar-large-br{background-position:right -15px}.x-btn-plain-toolbar-large-ml{background-position:0 top}.x-btn-plain-toolbar-large-mr{background-position:right top}.x-btn-plain-toolbar-large-tc{background-position:0 0}.x-btn-plain-toolbar-large-bc{background-position:0 -3px}.x-btn-plain-toolbar-large-tr,.x-btn-plain-toolbar-large-br,.x-btn-plain-toolbar-large-mr{padding-right:3px}.x-btn-plain-toolbar-large-tl,.x-btn-plain-toolbar-large-bl,.x-btn-plain-toolbar-large-ml{padding-left:3px}.x-btn-plain-toolbar-large-tc{height:3px}.x-btn-plain-toolbar-large-bc{height:3px}.x-btn-plain-toolbar-large-mc{padding:1px 1px 1px 1px}.x-btn-plain-toolbar-large{border-color:transparent}.x-btn-button-plain-toolbar-large{height:32px}.x-btn-inner-plain-toolbar-large{font:bold 16px/20px helvetica,arial,verdana,sans-serif;color:#666;padding:0 10px;max-width:100%}.x-btn-icon-right>.x-btn-inner-plain-toolbar-large,.x-btn-icon-left>.x-btn-inner-plain-toolbar-large{max-width:calc(100% - 32px)}.x-btn-icon-el-plain-toolbar-large{height:32px}.x-btn-icon-left>.x-btn-icon-el-plain-toolbar-large,.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-large{width:32px}.x-btn-icon-top>.x-btn-icon-el-plain-toolbar-large,.x-btn-icon-bottom>.x-btn-icon-el-plain-toolbar-large{min-width:32px}.x-btn-icon-el-plain-toolbar-large.x-btn-glyph{font-size:32px;line-height:32px;color:#666;opacity:.5}.x-ie8 .x-btn-icon-el-plain-toolbar-large.x-btn-glyph{color:#b2b2b2}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-plain-toolbar-large{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-large{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-plain-toolbar-large{margin-bottom:5px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-plain-toolbar-large{margin-top:5px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-plain-toolbar-large{padding-right:10px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-large{margin-right:10px}.x-btn-arrow-bottom>.x-btn-button-plain-toolbar-large,.x-btn-split-bottom>.x-btn-button-plain-toolbar-large{padding-bottom:3px}.x-btn-wrap-plain-toolbar-large.x-btn-arrow-right:after{width:28px;padding-right:28px;background-image:url(images/button/plain-toolbar-large-arrow.png)}.x-btn-wrap-plain-toolbar-large.x-btn-arrow-bottom:after{height:20px;background-image:url(images/button/plain-toolbar-large-arrow.png)}.x-btn-wrap-plain-toolbar-large.x-btn-split-right:after{width:35px;padding-right:35px;background-image:url(images/button/plain-toolbar-large-s-arrow.png)}.x-btn-wrap-plain-toolbar-large.x-btn-split-bottom:after{height:29px;background-image:url(images/button/plain-toolbar-large-s-arrow-b.png)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-plain-toolbar-large{padding-right:10px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-plain-toolbar-large{margin-right:10px}.x-btn-focus.x-btn-plain-toolbar-large{background-image:none;background-color:transparent;-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn-over.x-btn-plain-toolbar-large{border-color:#d8d8d8;background-image:none;background-color:#ebebeb;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#ededed),color-stop(50%,#ebebeb),color-stop(51%,#dfdfdf),color-stop(100%,#ebebeb));background-image:-webkit-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-moz-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-o-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:-ms-linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb);background-image:linear-gradient(top,#ededed,#ebebeb 50%,#dfdfdf 51%,#ebebeb)}.x-btn-focus.x-btn-over.x-btn-plain-toolbar-large{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-menu-active.x-btn-plain-toolbar-large,.x-btn.x-btn-pressed.x-btn-plain-toolbar-large{border-color:#cecece;background-image:none;background-color:#e1e1e1;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e1e1e1),color-stop(50%,#d5d5d5),color-stop(51%,#e1e1e1),color-stop(100%,#e4e4e4));background-image:-webkit-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-moz-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-o-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:-ms-linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4);background-image:linear-gradient(top,#e1e1e1,#d5d5d5 50%,#e1e1e1 51%,#e4e4e4)}.x-btn-focus.x-btn-menu-active.x-btn-plain-toolbar-large,.x-btn-focus.x-btn-pressed.x-btn-plain-toolbar-large{-webkit-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;-moz-box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset;box-shadow:#703131 0 1px 0 0 inset,#703131 0 -1px 0 0 inset,#703131 -1px 0 0 0 inset,#703131 1px 0 0 0 inset}.x-btn.x-btn-disabled.x-btn-plain-toolbar-large{background-image:none;background-color:transparent}.x-btn-focus .x-btn-plain-toolbar-large-tl,.x-btn-focus .x-btn-plain-toolbar-large-bl,.x-btn-focus .x-btn-plain-toolbar-large-tr,.x-btn-focus .x-btn-plain-toolbar-large-br,.x-btn-focus .x-btn-plain-toolbar-large-tc,.x-btn-focus .x-btn-plain-toolbar-large-bc{background-image:url(images/btn/btn-plain-toolbar-large-focus-corners.gif)}.x-btn-focus .x-btn-plain-toolbar-large-ml,.x-btn-focus .x-btn-plain-toolbar-large-mr{background-image:url(images/btn/btn-plain-toolbar-large-focus-sides.gif)}.x-btn-focus .x-btn-plain-toolbar-large-mc{background-color:transparent;background-image:url(images/btn/btn-plain-toolbar-large-focus-fbg.gif)}.x-btn-over .x-btn-plain-toolbar-large-tl,.x-btn-over .x-btn-plain-toolbar-large-bl,.x-btn-over .x-btn-plain-toolbar-large-tr,.x-btn-over .x-btn-plain-toolbar-large-br,.x-btn-over .x-btn-plain-toolbar-large-tc,.x-btn-over .x-btn-plain-toolbar-large-bc{background-image:url(images/btn/btn-plain-toolbar-large-over-corners.gif)}.x-btn-over .x-btn-plain-toolbar-large-ml,.x-btn-over .x-btn-plain-toolbar-large-mr{background-image:url(images/btn/btn-plain-toolbar-large-over-sides.gif)}.x-btn-over .x-btn-plain-toolbar-large-mc{background-color:#ebebeb;background-image:url(images/btn/btn-plain-toolbar-large-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-tl,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-bl,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-tr,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-br,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-tc,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-bc{background-image:url(images/btn/btn-plain-toolbar-large-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-ml,.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-mr{background-image:url(images/btn/btn-plain-toolbar-large-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-plain-toolbar-large-mc{background-color:#ebebeb;background-image:url(images/btn/btn-plain-toolbar-large-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-tl,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-bl,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-tr,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-br,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-tc,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-bc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-tl,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-bl,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-tr,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-br,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-tc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-bc{background-image:url(images/btn/btn-plain-toolbar-large-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-ml,.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-mr,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-ml,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-mr{background-image:url(images/btn/btn-plain-toolbar-large-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-plain-toolbar-large-mc,.x-btn.x-btn-pressed .x-btn-plain-toolbar-large-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-plain-toolbar-large-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-tl,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-bl,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-tr,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-br,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-tc,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-bc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-tl,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-bl,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-tr,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-br,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-tc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-bc{background-image:url(images/btn/btn-plain-toolbar-large-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-ml,.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-mr,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-ml,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-mr{background-image:url(images/btn/btn-plain-toolbar-large-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-plain-toolbar-large-mc,.x-btn-focus.x-btn-pressed .x-btn-plain-toolbar-large-mc{background-color:#e1e1e1;background-image:url(images/btn/btn-plain-toolbar-large-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-tl,.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-bl,.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-tr,.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-br,.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-tc,.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-bc{background-image:url(images/btn/btn-plain-toolbar-large-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-ml,.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-mr{background-image:url(images/btn/btn-plain-toolbar-large-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-plain-toolbar-large-mc{background-color:transparent;background-image:url(images/btn/btn-plain-toolbar-large-disabled-fbg.gif)}.x-nbr .x-btn-plain-toolbar-large{background-image:none}.x-btn-disabled.x-btn-plain-toolbar-large{filter:alpha(opacity=50);opacity:.5}.x-btn-plain-toolbar-small-disabled .x-btn-icon-el,.x-btn-plain-toolbar-medium-disabled .x-btn-icon-el,.x-btn-plain-toolbar-large-disabled .x-btn-icon-el{background-color:white}.x-ie8 .x-btn-plain-toolbar-small-disabled .x-btn-icon-el,.x-ie8 .x-btn-plain-toolbar-medium-disabled .x-btn-icon-el,.x-ie8 .x-btn-plain-toolbar-large-disabled .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-panel-light{border-color:#e5dddd;padding:0}.x-panel-header-light{font-size:11px;border:1px solid #e5dddd}.x-panel-header-light .x-tool-img{background-image:url(images/tools/tool-sprites-dark.png);background-color:#e5dddd}.x-panel-header-light-horizontal{padding:9px 9px 10px 9px}.x-panel-header-light-horizontal .x-panel-header-light-tab-bar{margin-top:-9px;margin-bottom:-10px}.x-panel-header-light-horizontal.x-header-noborder{padding:10px 10px 10px 10px}.x-panel-header-light-horizontal.x-header-noborder .x-panel-header-light-tab-bar{margin-top:-10px;margin-bottom:-10px}.x-panel-header-light-vertical{padding:9px 9px 9px 10px}.x-panel-header-light-vertical .x-panel-header-light-tab-bar{margin-right:-9px;margin-left:-10px}.x-panel-header-light-vertical.x-header-noborder{padding:10px 10px 10px 10px}.x-panel-header-light-vertical.x-header-noborder .x-panel-header-light-tab-bar{margin-right:-10px;margin-left:-10px}.x-panel-header-title-light{color:#666;font-size:11px;font-weight:bold;font-family:helvetica,arial,verdana,sans-serif;line-height:16px}.x-panel-header-title-light>.x-title-text-light{text-transform:none;padding:0}.x-panel-header-title-light>.x-title-icon-wrap-light.x-title-icon-top{height:22px;padding-bottom:6px}.x-panel-header-title-light>.x-title-icon-wrap-light.x-title-icon-right{width:22px;padding-left:6px}.x-panel-header-title-light>.x-title-icon-wrap-light.x-title-icon-bottom{height:22px;padding-top:6px}.x-panel-header-title-light>.x-title-icon-wrap-light.x-title-icon-left{width:22px;padding-right:6px}.x-panel-header-title-light>.x-title-icon-wrap-light>.x-title-icon-light{width:16px;height:16px;background-position:center center}.x-panel-header-title-light>.x-title-icon-wrap-light>.x-title-glyph{color:white;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-panel-header-title-light>.x-title-icon-wrap-light>.x-title-glyph{color:#f2eeee}.x-panel-body-light{background:white;border-color:#e5dddd;color:black;font-size:11px;font-weight:normal;font-family:helvetica,arial,verdana,sans-serif;border-width:1px;border-style:solid}.x-panel-header-light{background-image:none;background-color:#e5dddd}.x-panel-header-light-vertical{background-image:none;background-color:#e5dddd}.x-panel .x-panel-header-light-collapsed-border-top{border-bottom-width:1px!important}.x-panel .x-panel-header-light-collapsed-border-right{border-left-width:1px!important}.x-panel .x-panel-header-light-collapsed-border-bottom{border-top-width:1px!important}.x-panel .x-panel-header-light-collapsed-border-left{border-right-width:1px!important}.x-panel-header-light-horizontal .x-tool-after-title{margin:0 0 0 6px}.x-panel-header-light-horizontal .x-tool-before-title{margin:0 6px 0 0}.x-panel-header-light-vertical .x-tool-after-title{margin:6px 0 0 0}.x-panel-header-light-vertical .x-tool-before-title{margin:0 0 6px 0}.x-panel-light-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-light-outer-border-l{border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-b{border-bottom-color:#e5dddd!important;border-bottom-width:1px!important}.x-panel-light-outer-border-bl{border-bottom-color:#e5dddd!important;border-bottom-width:1px!important;border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-r{border-right-color:#e5dddd!important;border-right-width:1px!important}.x-panel-light-outer-border-rl{border-right-color:#e5dddd!important;border-right-width:1px!important;border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-rb{border-right-color:#e5dddd!important;border-right-width:1px!important;border-bottom-color:#e5dddd!important;border-bottom-width:1px!important}.x-panel-light-outer-border-rbl{border-right-color:#e5dddd!important;border-right-width:1px!important;border-bottom-color:#e5dddd!important;border-bottom-width:1px!important;border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-t{border-top-color:#e5dddd!important;border-top-width:1px!important}.x-panel-light-outer-border-tl{border-top-color:#e5dddd!important;border-top-width:1px!important;border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-tb{border-top-color:#e5dddd!important;border-top-width:1px!important;border-bottom-color:#e5dddd!important;border-bottom-width:1px!important}.x-panel-light-outer-border-tbl{border-top-color:#e5dddd!important;border-top-width:1px!important;border-bottom-color:#e5dddd!important;border-bottom-width:1px!important;border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-tr{border-top-color:#e5dddd!important;border-top-width:1px!important;border-right-color:#e5dddd!important;border-right-width:1px!important}.x-panel-light-outer-border-trl{border-top-color:#e5dddd!important;border-top-width:1px!important;border-right-color:#e5dddd!important;border-right-width:1px!important;border-left-color:#e5dddd!important;border-left-width:1px!important}.x-panel-light-outer-border-trb{border-top-color:#e5dddd!important;border-top-width:1px!important;border-right-color:#e5dddd!important;border-right-width:1px!important;border-bottom-color:#e5dddd!important;border-bottom-width:1px!important}.x-panel-light-outer-border-trbl{border-color:#e5dddd!important;border-width:1px!important}.x-panel-light-framed{border-color:#e5dddd;padding:0}.x-panel-header-light-framed{font-size:11px;border:5px solid #e5dddd}.x-panel-header-light-framed .x-tool-img{background-image:url(images/tools/tool-sprites-dark.png);background-color:#e5dddd}.x-panel-header-light-framed-horizontal{padding:5px 5px 5px 5px}.x-panel-header-light-framed-horizontal .x-panel-header-light-framed-tab-bar{margin-top:-5px;margin-bottom:-5px}.x-panel-header-light-framed-horizontal.x-header-noborder{padding:10px 10px 5px 10px}.x-panel-header-light-framed-horizontal.x-header-noborder .x-panel-header-light-framed-tab-bar{margin-top:-10px;margin-bottom:-5px}.x-panel-header-light-framed-vertical{padding:5px 5px 5px 5px}.x-panel-header-light-framed-vertical .x-panel-header-light-framed-tab-bar{margin-right:-5px;margin-left:-5px}.x-panel-header-light-framed-vertical.x-header-noborder{padding:10px 10px 10px 5px}.x-panel-header-light-framed-vertical.x-header-noborder .x-panel-header-light-framed-tab-bar{margin-right:-10px;margin-left:-5px}.x-panel-header-title-light-framed{color:#666;font-size:11px;font-weight:bold;font-family:helvetica,arial,verdana,sans-serif;line-height:16px}.x-panel-header-title-light-framed>.x-title-text-light-framed{text-transform:none;padding:0}.x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed.x-title-icon-top{height:22px;padding-bottom:6px}.x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed.x-title-icon-right{width:22px;padding-left:6px}.x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed.x-title-icon-bottom{height:22px;padding-top:6px}.x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed.x-title-icon-left{width:22px;padding-right:6px}.x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed>.x-title-icon-light-framed{width:16px;height:16px;background-position:center center}.x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed>.x-title-glyph{color:white;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-panel-header-title-light-framed>.x-title-icon-wrap-light-framed>.x-title-glyph{color:#f2eeee}.x-panel-body-light-framed{background:white;border-color:#e5dddd;color:black;font-size:11px;font-weight:normal;font-family:helvetica,arial,verdana,sans-serif;border-width:1px;border-style:solid}.x-panel-light-framed{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:0;border-width:5px;border-style:solid;background-color:white}.x-panel-light-framed-mc{background-color:white}.x-nbr .x-panel-light-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-light-framed-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-0-0-0-0}.x-panel-light-framed-tl{background-position:0 -10px}.x-panel-light-framed-tr{background-position:right -15px}.x-panel-light-framed-bl{background-position:0 -20px}.x-panel-light-framed-br{background-position:right -25px}.x-panel-light-framed-ml{background-position:0 top}.x-panel-light-framed-mr{background-position:right top}.x-panel-light-framed-tc{background-position:0 0}.x-panel-light-framed-bc{background-position:0 -5px}.x-panel-light-framed-tr,.x-panel-light-framed-br,.x-panel-light-framed-mr{padding-right:5px}.x-panel-light-framed-tl,.x-panel-light-framed-bl,.x-panel-light-framed-ml{padding-left:5px}.x-panel-light-framed-tc{height:5px}.x-panel-light-framed-bc{height:5px}.x-panel-light-framed-tl,.x-panel-light-framed-bl,.x-panel-light-framed-tr,.x-panel-light-framed-br,.x-panel-light-framed-tc,.x-panel-light-framed-bc,.x-panel-light-framed-ml,.x-panel-light-framed-mr{background-image:url(images/panel/panel-light-framed-corners.gif)}.x-panel-light-framed-ml,.x-panel-light-framed-mr{background-image:url(images/panel/panel-light-framed-sides.gif);background-repeat:repeat-y}.x-panel-light-framed-mc{padding:0}.x-panel-header-light-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:5px 5px 0 5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-top-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-top-frameInfo{font-family:dh-5-5-0-5-5-5-0-5-5-5-5-5}.x-panel-header-light-framed-top-tl{background-position:0 -10px}.x-panel-header-light-framed-top-tr{background-position:right -15px}.x-panel-header-light-framed-top-bl{background-position:0 -20px}.x-panel-header-light-framed-top-br{background-position:right -25px}.x-panel-header-light-framed-top-ml{background-position:0 top}.x-panel-header-light-framed-top-mr{background-position:right top}.x-panel-header-light-framed-top-tc{background-position:0 0}.x-panel-header-light-framed-top-bc{background-position:0 -5px}.x-panel-header-light-framed-top-tr,.x-panel-header-light-framed-top-br,.x-panel-header-light-framed-top-mr{padding-right:5px}.x-panel-header-light-framed-top-tl,.x-panel-header-light-framed-top-bl,.x-panel-header-light-framed-top-ml{padding-left:5px}.x-panel-header-light-framed-top-tc{height:5px}.x-panel-header-light-framed-top-bc{height:0}.x-panel-header-light-framed-top-tl,.x-panel-header-light-framed-top-bl,.x-panel-header-light-framed-top-tr,.x-panel-header-light-framed-top-br,.x-panel-header-light-framed-top-tc,.x-panel-header-light-framed-top-bc,.x-panel-header-light-framed-top-ml,.x-panel-header-light-framed-top-mr{background-image:url(images/panel-header/panel-header-light-framed-top-corners.gif)}.x-panel-header-light-framed-top-ml,.x-panel-header-light-framed-top-mr{background-image:url(images/panel-header/panel-header-light-framed-top-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-top-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:5px 5px 5px 0;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-right-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-right-frameInfo{font-family:dh-5-5-5-0-5-5-5-0-5-5-5-5}.x-panel-header-light-framed-right-tl{background-position:0 -10px}.x-panel-header-light-framed-right-tr{background-position:right -15px}.x-panel-header-light-framed-right-bl{background-position:0 -20px}.x-panel-header-light-framed-right-br{background-position:right -25px}.x-panel-header-light-framed-right-ml{background-position:right 0}.x-panel-header-light-framed-right-mr{background-position:right 0}.x-panel-header-light-framed-right-tc{background-position:0 0}.x-panel-header-light-framed-right-bc{background-position:0 -5px}.x-panel-header-light-framed-right-tr,.x-panel-header-light-framed-right-br,.x-panel-header-light-framed-right-mr{padding-right:5px}.x-panel-header-light-framed-right-tl,.x-panel-header-light-framed-right-bl,.x-panel-header-light-framed-right-ml{padding-left:0}.x-panel-header-light-framed-right-tc{height:5px}.x-panel-header-light-framed-right-bc{height:5px}.x-panel-header-light-framed-right-tl,.x-panel-header-light-framed-right-bl,.x-panel-header-light-framed-right-tr,.x-panel-header-light-framed-right-br,.x-panel-header-light-framed-right-tc,.x-panel-header-light-framed-right-bc,.x-panel-header-light-framed-right-ml,.x-panel-header-light-framed-right-mr{background-image:url(images/panel-header/panel-header-light-framed-right-corners.gif)}.x-panel-header-light-framed-right-ml,.x-panel-header-light-framed-right-mr{background-image:url(images/panel-header/panel-header-light-framed-right-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-right-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:0 5px 5px 5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-bottom-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-bottom-frameInfo{font-family:dh-0-5-5-5-0-5-5-5-5-5-5-5}.x-panel-header-light-framed-bottom-tl{background-position:0 -10px}.x-panel-header-light-framed-bottom-tr{background-position:right -15px}.x-panel-header-light-framed-bottom-bl{background-position:0 -20px}.x-panel-header-light-framed-bottom-br{background-position:right -25px}.x-panel-header-light-framed-bottom-ml{background-position:0 bottom}.x-panel-header-light-framed-bottom-mr{background-position:right bottom}.x-panel-header-light-framed-bottom-tc{background-position:0 0}.x-panel-header-light-framed-bottom-bc{background-position:0 -5px}.x-panel-header-light-framed-bottom-tr,.x-panel-header-light-framed-bottom-br,.x-panel-header-light-framed-bottom-mr{padding-right:5px}.x-panel-header-light-framed-bottom-tl,.x-panel-header-light-framed-bottom-bl,.x-panel-header-light-framed-bottom-ml{padding-left:5px}.x-panel-header-light-framed-bottom-tc{height:0}.x-panel-header-light-framed-bottom-bc{height:5px}.x-panel-header-light-framed-bottom-tl,.x-panel-header-light-framed-bottom-bl,.x-panel-header-light-framed-bottom-tr,.x-panel-header-light-framed-bottom-br,.x-panel-header-light-framed-bottom-tc,.x-panel-header-light-framed-bottom-bc,.x-panel-header-light-framed-bottom-ml,.x-panel-header-light-framed-bottom-mr{background-image:url(images/panel-header/panel-header-light-framed-bottom-corners.gif)}.x-panel-header-light-framed-bottom-ml,.x-panel-header-light-framed-bottom-mr{background-image:url(images/panel-header/panel-header-light-framed-bottom-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-bottom-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px 0 5px 5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-left-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-left-frameInfo{font-family:dh-5-0-5-5-5-0-5-5-5-5-5-5}.x-panel-header-light-framed-left-tl{background-position:0 -10px}.x-panel-header-light-framed-left-tr{background-position:right -15px}.x-panel-header-light-framed-left-bl{background-position:0 -20px}.x-panel-header-light-framed-left-br{background-position:right -25px}.x-panel-header-light-framed-left-ml{background-position:left 0}.x-panel-header-light-framed-left-mr{background-position:left 0}.x-panel-header-light-framed-left-tc{background-position:0 0}.x-panel-header-light-framed-left-bc{background-position:0 -5px}.x-panel-header-light-framed-left-tr,.x-panel-header-light-framed-left-br,.x-panel-header-light-framed-left-mr{padding-right:0}.x-panel-header-light-framed-left-tl,.x-panel-header-light-framed-left-bl,.x-panel-header-light-framed-left-ml{padding-left:5px}.x-panel-header-light-framed-left-tc{height:5px}.x-panel-header-light-framed-left-bc{height:5px}.x-panel-header-light-framed-left-tl,.x-panel-header-light-framed-left-bl,.x-panel-header-light-framed-left-tr,.x-panel-header-light-framed-left-br,.x-panel-header-light-framed-left-tc,.x-panel-header-light-framed-left-bc,.x-panel-header-light-framed-left-ml,.x-panel-header-light-framed-left-mr{background-image:url(images/panel-header/panel-header-light-framed-left-corners.gif)}.x-panel-header-light-framed-left-ml,.x-panel-header-light-framed-left-mr{background-image:url(images/panel-header/panel-header-light-framed-left-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-left-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-collapsed-top-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-collapsed-top-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-light-framed-collapsed-top-tl{background-position:0 -10px}.x-panel-header-light-framed-collapsed-top-tr{background-position:right -15px}.x-panel-header-light-framed-collapsed-top-bl{background-position:0 -20px}.x-panel-header-light-framed-collapsed-top-br{background-position:right -25px}.x-panel-header-light-framed-collapsed-top-ml{background-position:0 top}.x-panel-header-light-framed-collapsed-top-mr{background-position:right top}.x-panel-header-light-framed-collapsed-top-tc{background-position:0 0}.x-panel-header-light-framed-collapsed-top-bc{background-position:0 -5px}.x-panel-header-light-framed-collapsed-top-tr,.x-panel-header-light-framed-collapsed-top-br,.x-panel-header-light-framed-collapsed-top-mr{padding-right:5px}.x-panel-header-light-framed-collapsed-top-tl,.x-panel-header-light-framed-collapsed-top-bl,.x-panel-header-light-framed-collapsed-top-ml{padding-left:5px}.x-panel-header-light-framed-collapsed-top-tc{height:5px}.x-panel-header-light-framed-collapsed-top-bc{height:5px}.x-panel-header-light-framed-collapsed-top-tl,.x-panel-header-light-framed-collapsed-top-bl,.x-panel-header-light-framed-collapsed-top-tr,.x-panel-header-light-framed-collapsed-top-br,.x-panel-header-light-framed-collapsed-top-tc,.x-panel-header-light-framed-collapsed-top-bc,.x-panel-header-light-framed-collapsed-top-ml,.x-panel-header-light-framed-collapsed-top-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-top-corners.gif)}.x-panel-header-light-framed-collapsed-top-ml,.x-panel-header-light-framed-collapsed-top-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-top-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-collapsed-top-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-collapsed-right-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-collapsed-right-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-light-framed-collapsed-right-tl{background-position:0 -10px}.x-panel-header-light-framed-collapsed-right-tr{background-position:right -15px}.x-panel-header-light-framed-collapsed-right-bl{background-position:0 -20px}.x-panel-header-light-framed-collapsed-right-br{background-position:right -25px}.x-panel-header-light-framed-collapsed-right-ml{background-position:right 0}.x-panel-header-light-framed-collapsed-right-mr{background-position:right 0}.x-panel-header-light-framed-collapsed-right-tc{background-position:0 0}.x-panel-header-light-framed-collapsed-right-bc{background-position:0 -5px}.x-panel-header-light-framed-collapsed-right-tr,.x-panel-header-light-framed-collapsed-right-br,.x-panel-header-light-framed-collapsed-right-mr{padding-right:5px}.x-panel-header-light-framed-collapsed-right-tl,.x-panel-header-light-framed-collapsed-right-bl,.x-panel-header-light-framed-collapsed-right-ml{padding-left:5px}.x-panel-header-light-framed-collapsed-right-tc{height:5px}.x-panel-header-light-framed-collapsed-right-bc{height:5px}.x-panel-header-light-framed-collapsed-right-tl,.x-panel-header-light-framed-collapsed-right-bl,.x-panel-header-light-framed-collapsed-right-tr,.x-panel-header-light-framed-collapsed-right-br,.x-panel-header-light-framed-collapsed-right-tc,.x-panel-header-light-framed-collapsed-right-bc,.x-panel-header-light-framed-collapsed-right-ml,.x-panel-header-light-framed-collapsed-right-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-right-corners.gif)}.x-panel-header-light-framed-collapsed-right-ml,.x-panel-header-light-framed-collapsed-right-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-right-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-collapsed-right-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-collapsed-bottom-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-collapsed-bottom-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-light-framed-collapsed-bottom-tl{background-position:0 -10px}.x-panel-header-light-framed-collapsed-bottom-tr{background-position:right -15px}.x-panel-header-light-framed-collapsed-bottom-bl{background-position:0 -20px}.x-panel-header-light-framed-collapsed-bottom-br{background-position:right -25px}.x-panel-header-light-framed-collapsed-bottom-ml{background-position:0 bottom}.x-panel-header-light-framed-collapsed-bottom-mr{background-position:right bottom}.x-panel-header-light-framed-collapsed-bottom-tc{background-position:0 0}.x-panel-header-light-framed-collapsed-bottom-bc{background-position:0 -5px}.x-panel-header-light-framed-collapsed-bottom-tr,.x-panel-header-light-framed-collapsed-bottom-br,.x-panel-header-light-framed-collapsed-bottom-mr{padding-right:5px}.x-panel-header-light-framed-collapsed-bottom-tl,.x-panel-header-light-framed-collapsed-bottom-bl,.x-panel-header-light-framed-collapsed-bottom-ml{padding-left:5px}.x-panel-header-light-framed-collapsed-bottom-tc{height:5px}.x-panel-header-light-framed-collapsed-bottom-bc{height:5px}.x-panel-header-light-framed-collapsed-bottom-tl,.x-panel-header-light-framed-collapsed-bottom-bl,.x-panel-header-light-framed-collapsed-bottom-tr,.x-panel-header-light-framed-collapsed-bottom-br,.x-panel-header-light-framed-collapsed-bottom-tc,.x-panel-header-light-framed-collapsed-bottom-bc,.x-panel-header-light-framed-collapsed-bottom-ml,.x-panel-header-light-framed-collapsed-bottom-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-bottom-corners.gif)}.x-panel-header-light-framed-collapsed-bottom-ml,.x-panel-header-light-framed-collapsed-bottom-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-collapsed-bottom-mc{padding:5px 5px 5px 5px}.x-panel-header-light-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:5px;border-style:solid;background-color:#e5dddd}.x-panel-header-light-framed-collapsed-left-mc{background-color:#e5dddd}.x-nbr .x-panel-header-light-framed-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-header-light-framed-collapsed-left-frameInfo{font-family:dh-5-5-5-5-5-5-5-5-5-5-5-5}.x-panel-header-light-framed-collapsed-left-tl{background-position:0 -10px}.x-panel-header-light-framed-collapsed-left-tr{background-position:right -15px}.x-panel-header-light-framed-collapsed-left-bl{background-position:0 -20px}.x-panel-header-light-framed-collapsed-left-br{background-position:right -25px}.x-panel-header-light-framed-collapsed-left-ml{background-position:left 0}.x-panel-header-light-framed-collapsed-left-mr{background-position:left 0}.x-panel-header-light-framed-collapsed-left-tc{background-position:0 0}.x-panel-header-light-framed-collapsed-left-bc{background-position:0 -5px}.x-panel-header-light-framed-collapsed-left-tr,.x-panel-header-light-framed-collapsed-left-br,.x-panel-header-light-framed-collapsed-left-mr{padding-right:5px}.x-panel-header-light-framed-collapsed-left-tl,.x-panel-header-light-framed-collapsed-left-bl,.x-panel-header-light-framed-collapsed-left-ml{padding-left:5px}.x-panel-header-light-framed-collapsed-left-tc{height:5px}.x-panel-header-light-framed-collapsed-left-bc{height:5px}.x-panel-header-light-framed-collapsed-left-tl,.x-panel-header-light-framed-collapsed-left-bl,.x-panel-header-light-framed-collapsed-left-tr,.x-panel-header-light-framed-collapsed-left-br,.x-panel-header-light-framed-collapsed-left-tc,.x-panel-header-light-framed-collapsed-left-bc,.x-panel-header-light-framed-collapsed-left-ml,.x-panel-header-light-framed-collapsed-left-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-left-corners.gif)}.x-panel-header-light-framed-collapsed-left-ml,.x-panel-header-light-framed-collapsed-left-mr{background-image:url(images/panel-header/panel-header-light-framed-collapsed-left-sides.gif);background-repeat:repeat-y}.x-panel-header-light-framed-collapsed-left-mc{padding:5px 5px 5px 5px}.x-panel .x-panel-header-light-framed-top{border-bottom-width:5px!important}.x-panel .x-panel-header-light-framed-right{border-left-width:5px!important}.x-panel .x-panel-header-light-framed-bottom{border-top-width:5px!important}.x-panel .x-panel-header-light-framed-left{border-right-width:5px!important}.x-nbr .x-panel-header-light-framed-collapsed-top{border-bottom-width:0!important}.x-nbr .x-panel-header-light-framed-collapsed-right{border-left-width:0!important}.x-nbr .x-panel-header-light-framed-collapsed-bottom{border-top-width:0!important}.x-nbr .x-panel-header-light-framed-collapsed-left{border-right-width:0!important}.x-panel-header-light-framed-horizontal .x-tool-after-title{margin:0 0 0 6px}.x-panel-header-light-framed-horizontal .x-tool-before-title{margin:0 6px 0 0}.x-panel-header-light-framed-vertical .x-tool-after-title{margin:6px 0 0 0}.x-panel-header-light-framed-vertical .x-tool-before-title{margin:0 0 6px 0}.x-panel-light-framed-resizable{overflow:visible}.x-panel-light-framed-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-light-framed-resizable .x-panel-handle-north-br{top:-5px}.x-panel-light-framed-resizable .x-panel-handle-south-br{bottom:-5px}.x-panel-light-framed-resizable .x-panel-handle-east-br{right:-5px}.x-panel-light-framed-resizable .x-panel-handle-west-br{left:-5px}.x-panel-light-framed-resizable .x-panel-handle-northwest-br{left:-5px;top:-5px}.x-panel-light-framed-resizable .x-panel-handle-northeast-br{right:-5px;top:-5px}.x-panel-light-framed-resizable .x-panel-handle-southeast-br{right:-5px;bottom:-5px}.x-panel-light-framed-resizable .x-panel-handle-southwest-br{left:-5px;bottom:-5px}.x-panel-light-framed-outer-border-l{border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-b{border-bottom-color:#e5dddd!important;border-bottom-width:5px!important}.x-panel-light-framed-outer-border-bl{border-bottom-color:#e5dddd!important;border-bottom-width:5px!important;border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-r{border-right-color:#e5dddd!important;border-right-width:5px!important}.x-panel-light-framed-outer-border-rl{border-right-color:#e5dddd!important;border-right-width:5px!important;border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-rb{border-right-color:#e5dddd!important;border-right-width:5px!important;border-bottom-color:#e5dddd!important;border-bottom-width:5px!important}.x-panel-light-framed-outer-border-rbl{border-right-color:#e5dddd!important;border-right-width:5px!important;border-bottom-color:#e5dddd!important;border-bottom-width:5px!important;border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-t{border-top-color:#e5dddd!important;border-top-width:5px!important}.x-panel-light-framed-outer-border-tl{border-top-color:#e5dddd!important;border-top-width:5px!important;border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-tb{border-top-color:#e5dddd!important;border-top-width:5px!important;border-bottom-color:#e5dddd!important;border-bottom-width:5px!important}.x-panel-light-framed-outer-border-tbl{border-top-color:#e5dddd!important;border-top-width:5px!important;border-bottom-color:#e5dddd!important;border-bottom-width:5px!important;border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-tr{border-top-color:#e5dddd!important;border-top-width:5px!important;border-right-color:#e5dddd!important;border-right-width:5px!important}.x-panel-light-framed-outer-border-trl{border-top-color:#e5dddd!important;border-top-width:5px!important;border-right-color:#e5dddd!important;border-right-width:5px!important;border-left-color:#e5dddd!important;border-left-width:5px!important}.x-panel-light-framed-outer-border-trb{border-top-color:#e5dddd!important;border-top-width:5px!important;border-right-color:#e5dddd!important;border-right-width:5px!important;border-bottom-color:#e5dddd!important;border-bottom-width:5px!important}.x-panel-light-framed-outer-border-trbl{border-color:#e5dddd!important;border-width:5px!important}.x-grid-header-ct{border:1px solid #c1c1c1}.x-column-header-trigger{background:#f2eded url(images/grid/hd-pop.png) no-repeat center center;border-left:1px solid #c1c1c1}.x-column-header-last{border-right-width:0}.x-column-header-last .x-column-header-over .x-column-header-trigger{border-right:1px solid #c1c1c1}.x-resizable-handle{background-color:#c1c1c1;background-repeat:no-repeat}.x-resizable-handle-east-over,.x-resizable-handle-west-over{background-position:center}.x-resizable-handle-south-over,.x-resizable-handle-north-over{background-position:center}.x-resizable-handle-southeast-over{background-position:-2px -2px}.x-resizable-handle-northwest-over{background-position:2px 2px}.x-resizable-handle-northeast-over{background-position:-2px 2px}.x-resizable-handle-southwest-over{background-position:2px -2px}.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-position:center}.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-position:center}.x-resizable-pinned .x-resizable-handle-southeast{background-position:-2px -2px}.x-resizable-pinned .x-resizable-handle-northwest{background-position:2px 2px}.x-resizable-pinned .x-resizable-handle-northeast{background-position:-2px 2px}.x-resizable-pinned .x-resizable-handle-southwest{background-position:2px -2px} \ No newline at end of file diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/boundlist/trigger-arrow.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/boundlist/trigger-arrow.png new file mode 100644 index 00000000..11daac3d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/boundlist/trigger-arrow.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/corners-blue.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/corners-blue.gif new file mode 100644 index 00000000..fa419b50 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/corners-blue.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/corners.gif new file mode 100644 index 00000000..8aa8cae5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/l-blue.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/l-blue.gif new file mode 100644 index 00000000..5ed7f004 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/l-blue.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/l.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/l.gif new file mode 100644 index 00000000..0160f97f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/l.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/r-blue.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/r-blue.gif new file mode 100644 index 00000000..3ea5cae3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/r-blue.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/r.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/r.gif new file mode 100644 index 00000000..34237f62 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/r.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/tb-blue.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/tb-blue.gif new file mode 100644 index 00000000..562fecca Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/tb-blue.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/box/tb.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/tb.gif new file mode 100644 index 00000000..435889bf Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/box/tb.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-open-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-open-rtl.gif new file mode 100644 index 00000000..b8c55c37 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-open-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-open.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-open.gif new file mode 100644 index 00000000..3ab4f71a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-open.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-rtl.gif new file mode 100644 index 00000000..e54eacbe Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow.gif new file mode 100644 index 00000000..b0221875 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-scroll-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-scroll-left.gif new file mode 100644 index 00000000..2db8cf5c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-scroll-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-scroll-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-scroll-right.gif new file mode 100644 index 00000000..5d5a7ab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-scroll-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-open-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-open-rtl.gif new file mode 100644 index 00000000..8593bb78 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-open-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-open.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-open.gif new file mode 100644 index 00000000..23c70b3f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-open.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-over-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-over-rtl.gif new file mode 100644 index 00000000..05790c35 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-over-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-over.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-over.gif new file mode 100644 index 00000000..3f9bd609 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-over.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-rtl.gif new file mode 100644 index 00000000..67cbf4b6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow.gif new file mode 100644 index 00000000..6b50863a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/breadcrumb/default-split-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-corners.gif new file mode 100644 index 00000000..049f8a66 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-notitle-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-notitle-corners.gif new file mode 100644 index 00000000..049f8a66 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-notitle-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-notitle-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-notitle-sides.gif new file mode 100644 index 00000000..e7c9480e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-notitle-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-sides.gif new file mode 100644 index 00000000..17149958 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn-group/btn-group-default-framed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-corners.gif new file mode 100644 index 00000000..db044654 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-corners.gif new file mode 100644 index 00000000..65a7b9e7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-fbg.gif new file mode 100644 index 00000000..3259bafe Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-sides.gif new file mode 100644 index 00000000..1ef57a61 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-fbg.gif new file mode 100644 index 00000000..346d491b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-fbg.gif new file mode 100644 index 00000000..42f02696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-fbg.gif new file mode 100644 index 00000000..42f02696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-sides.gif new file mode 100644 index 00000000..7228fc08 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-corners.gif new file mode 100644 index 00000000..36e7d8c6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-fbg.gif new file mode 100644 index 00000000..11268b70 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-sides.gif new file mode 100644 index 00000000..bfe23769 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-sides.gif new file mode 100644 index 00000000..7228fc08 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-fbg.gif new file mode 100644 index 00000000..42f02696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-sides.gif new file mode 100644 index 00000000..7228fc08 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-corners.gif new file mode 100644 index 00000000..36e7d8c6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-fbg.gif new file mode 100644 index 00000000..11268b70 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-sides.gif new file mode 100644 index 00000000..bfe23769 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-sides.gif new file mode 100644 index 00000000..b9f47771 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-large-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-corners.gif new file mode 100644 index 00000000..db044654 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-corners.gif new file mode 100644 index 00000000..65a7b9e7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-fbg.gif new file mode 100644 index 00000000..716d6421 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-sides.gif new file mode 100644 index 00000000..74c933f1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-fbg.gif new file mode 100644 index 00000000..8cbb503b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-fbg.gif new file mode 100644 index 00000000..8f585ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-fbg.gif new file mode 100644 index 00000000..8f585ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-sides.gif new file mode 100644 index 00000000..7d75be5e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-corners.gif new file mode 100644 index 00000000..36e7d8c6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-fbg.gif new file mode 100644 index 00000000..bb8fc6b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-sides.gif new file mode 100644 index 00000000..c975dad8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-sides.gif new file mode 100644 index 00000000..7d75be5e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-fbg.gif new file mode 100644 index 00000000..8f585ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-sides.gif new file mode 100644 index 00000000..7d75be5e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-corners.gif new file mode 100644 index 00000000..36e7d8c6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-fbg.gif new file mode 100644 index 00000000..bb8fc6b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-sides.gif new file mode 100644 index 00000000..c975dad8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-sides.gif new file mode 100644 index 00000000..cf6da871 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-medium-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-corners.gif new file mode 100644 index 00000000..307913cb Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-corners.gif new file mode 100644 index 00000000..65a7b9e7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-fbg.gif new file mode 100644 index 00000000..223c1261 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-sides.gif new file mode 100644 index 00000000..ddb20190 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-fbg.gif new file mode 100644 index 00000000..16a04a4f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-corners.gif new file mode 100644 index 00000000..25a9e7a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-fbg.gif new file mode 100644 index 00000000..4febe541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-corners.gif new file mode 100644 index 00000000..2f4aec09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-fbg.gif new file mode 100644 index 00000000..4febe541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-sides.gif new file mode 100644 index 00000000..0baef7a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-corners.gif new file mode 100644 index 00000000..6483b245 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-fbg.gif new file mode 100644 index 00000000..b809e56b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-sides.gif new file mode 100644 index 00000000..36c717d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-sides.gif new file mode 100644 index 00000000..0baef7a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-corners.gif new file mode 100644 index 00000000..f8be1d9a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-fbg.gif new file mode 100644 index 00000000..4febe541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-sides.gif new file mode 100644 index 00000000..0baef7a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-corners.gif new file mode 100644 index 00000000..6483b245 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-fbg.gif new file mode 100644 index 00000000..b809e56b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-sides.gif new file mode 100644 index 00000000..36c717d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-sides.gif new file mode 100644 index 00000000..129eb8a5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-small-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-corners.gif new file mode 100644 index 00000000..786bcc9d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-fbg.gif new file mode 100644 index 00000000..48a5a75c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-sides.gif new file mode 100644 index 00000000..51e74c41 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-fbg.gif new file mode 100644 index 00000000..42f02696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-fbg.gif new file mode 100644 index 00000000..42f02696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-sides.gif new file mode 100644 index 00000000..7228fc08 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-corners.gif new file mode 100644 index 00000000..2acf3b18 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif new file mode 100644 index 00000000..11268b70 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-sides.gif new file mode 100644 index 00000000..bfe23769 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-sides.gif new file mode 100644 index 00000000..7228fc08 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-fbg.gif new file mode 100644 index 00000000..42f02696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-sides.gif new file mode 100644 index 00000000..7228fc08 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-corners.gif new file mode 100644 index 00000000..2acf3b18 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-fbg.gif new file mode 100644 index 00000000..11268b70 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-sides.gif new file mode 100644 index 00000000..bfe23769 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-large-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-corners.gif new file mode 100644 index 00000000..786bcc9d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-fbg.gif new file mode 100644 index 00000000..48a5a75c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-sides.gif new file mode 100644 index 00000000..51e74c41 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-fbg.gif new file mode 100644 index 00000000..8f585ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-fbg.gif new file mode 100644 index 00000000..8f585ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-sides.gif new file mode 100644 index 00000000..7d75be5e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif new file mode 100644 index 00000000..2acf3b18 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif new file mode 100644 index 00000000..bb8fc6b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif new file mode 100644 index 00000000..c975dad8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-sides.gif new file mode 100644 index 00000000..7d75be5e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-fbg.gif new file mode 100644 index 00000000..8f585ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-sides.gif new file mode 100644 index 00000000..7d75be5e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-corners.gif new file mode 100644 index 00000000..2acf3b18 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-fbg.gif new file mode 100644 index 00000000..bb8fc6b2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-sides.gif new file mode 100644 index 00000000..c975dad8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-medium-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-corners.gif new file mode 100644 index 00000000..786bcc9d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-fbg.gif new file mode 100644 index 00000000..48a5a75c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-sides.gif new file mode 100644 index 00000000..51e74c41 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-fbg.gif new file mode 100644 index 00000000..4febe541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-corners.gif new file mode 100644 index 00000000..0cca1ff0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-fbg.gif new file mode 100644 index 00000000..4febe541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-sides.gif new file mode 100644 index 00000000..0baef7a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-corners.gif new file mode 100644 index 00000000..e75afb67 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif new file mode 100644 index 00000000..b809e56b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-sides.gif new file mode 100644 index 00000000..36c717d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-sides.gif new file mode 100644 index 00000000..0baef7a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-corners.gif new file mode 100644 index 00000000..0f500ebb Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-fbg.gif new file mode 100644 index 00000000..4febe541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-sides.gif new file mode 100644 index 00000000..0baef7a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-corners.gif new file mode 100644 index 00000000..e75afb67 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-fbg.gif new file mode 100644 index 00000000..b809e56b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-sides.gif new file mode 100644 index 00000000..36c717d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/btn/btn-default-toolbar-small-pressed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/arrow-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/arrow-rtl.gif new file mode 100644 index 00000000..b8c55c37 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/arrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/arrow.gif new file mode 100644 index 00000000..3ab4f71a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/arrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn-arrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn-arrow.gif new file mode 100644 index 00000000..f90d5df4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn-sprite.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn-sprite.gif new file mode 100644 index 00000000..834ff978 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn.gif new file mode 100644 index 00000000..96ea61ab Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/btn.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-cs.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-cs.gif new file mode 100644 index 00000000..7059e2b0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-cs.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-lr.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-lr.gif new file mode 100644 index 00000000..3f41fbd8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-lr.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-tb.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-tb.gif new file mode 100644 index 00000000..c5ea8cab Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/group-tb.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-b-noline.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-b-noline.gif new file mode 100644 index 00000000..a4220ee9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-b-noline.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-b.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-b.gif new file mode 100644 index 00000000..5b46305b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-b.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-bo.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-bo.gif new file mode 100644 index 00000000..ed6eeca0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-bo.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-light-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-light-rtl.gif new file mode 100644 index 00000000..cfa5ca3b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-light-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-light.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-light.gif new file mode 100644 index 00000000..08783c9d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-light.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-noline-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-noline-rtl.gif new file mode 100644 index 00000000..c242ef2f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-noline-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-noline.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-noline.gif new file mode 100644 index 00000000..0953eab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-noline.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-o-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-o-rtl.gif new file mode 100644 index 00000000..badb3f89 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-o-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-o.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-o.gif new file mode 100644 index 00000000..b6ca4688 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-o.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-rtl.gif new file mode 100644 index 00000000..da278f51 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow.gif new file mode 100644 index 00000000..5692b8ac Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/button/s-arrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/datepicker/datepicker-footer-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/datepicker/datepicker-footer-bg.gif new file mode 100644 index 00000000..2d8439ac Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/datepicker/datepicker-footer-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/datepicker/datepicker-header-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/datepicker/datepicker-header-bg.gif new file mode 100644 index 00000000..9ab1df39 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/datepicker/datepicker-header-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-add.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-add.gif new file mode 100644 index 00000000..b22cd144 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-add.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-no.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-no.gif new file mode 100644 index 00000000..08d08335 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-no.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-yes.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-yes.gif new file mode 100644 index 00000000..8aacb307 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/dd/drop-yes.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/editor/tb-sprite.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/editor/tb-sprite.gif new file mode 100644 index 00000000..fb705776 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/editor/tb-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/box-select-item-close.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/box-select-item-close.gif new file mode 100644 index 00000000..98d5da95 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/box-select-item-close.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/checkbox.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/checkbox.gif new file mode 100644 index 00000000..835b346c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/checkbox.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/clear-trigger-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/clear-trigger-rtl.gif new file mode 100644 index 00000000..940399aa Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/clear-trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/clear-trigger.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/clear-trigger.gif new file mode 100644 index 00000000..be3ff587 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/clear-trigger.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/date-trigger-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/date-trigger-rtl.gif new file mode 100644 index 00000000..63597658 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/date-trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/date-trigger.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/date-trigger.gif new file mode 100644 index 00000000..e0537cbc Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/date-trigger.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/error-tip-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/error-tip-corners.gif new file mode 100644 index 00000000..6ea4c383 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/error-tip-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/exclamation.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/exclamation.gif new file mode 100644 index 00000000..ea31a306 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/exclamation.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/radio.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/radio.gif new file mode 100644 index 00000000..db3a5305 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/radio.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/search-trigger-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/search-trigger-rtl.gif new file mode 100644 index 00000000..3ff38462 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/search-trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/search-trigger.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/search-trigger.gif new file mode 100644 index 00000000..0cc4f596 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/search-trigger.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-rtl.gif new file mode 100644 index 00000000..ff14c066 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-small-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-small-rtl.gif new file mode 100644 index 00000000..70c536e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-small-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-small.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-small.gif new file mode 100644 index 00000000..e70f8d80 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner-small.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner.gif new file mode 100644 index 00000000..1e323bf0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/spinner.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/tag-field-item-close.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/tag-field-item-close.gif new file mode 100644 index 00000000..63b022ba Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/tag-field-item-close.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/text-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/text-bg.gif new file mode 100644 index 00000000..4179607c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/text-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-rtl.gif new file mode 100644 index 00000000..33e73752 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-square-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-square-rtl.gif new file mode 100644 index 00000000..a86f6ce2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-square-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-square.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-square.gif new file mode 100644 index 00000000..7a0f585c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-square.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-tpl-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-tpl-rtl.gif new file mode 100644 index 00000000..1e766e47 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-tpl-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-tpl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-tpl.gif new file mode 100644 index 00000000..e3701a38 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger-tpl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger.gif new file mode 100644 index 00000000..d7be2f31 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/form/trigger.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif new file mode 100644 index 00000000..79c147ad Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif new file mode 100644 index 00000000..7d0af3d7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif new file mode 100644 index 00000000..42c40b18 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif new file mode 100644 index 00000000..7d0af3d7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid-row-editor-buttons/grid-row-editor-buttons-default-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/arrow-left-white.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/arrow-left-white.gif new file mode 100644 index 00000000..63088f56 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/arrow-left-white.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/arrow-right-white.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/arrow-right-white.gif new file mode 100644 index 00000000..e9e06789 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/arrow-right-white.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-bg.gif new file mode 100644 index 00000000..d76ffbcc Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-bg.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-bg.png new file mode 100644 index 00000000..0bcc2367 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-bg.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-selected-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-selected-bg.gif new file mode 100644 index 00000000..f1da867d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-selected-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-selected-bg.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-selected-bg.png new file mode 100644 index 00000000..500c3bdd Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/cell-special-selected-bg.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/col-move-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/col-move-bottom.gif new file mode 100644 index 00000000..c525f7eb Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/col-move-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/col-move-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/col-move-top.gif new file mode 100644 index 00000000..ccc92b6b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/col-move-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/column-header-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/column-header-bg.gif new file mode 100644 index 00000000..dec6733f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/column-header-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/column-header-over-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/column-header-over-bg.gif new file mode 100644 index 00000000..bd0c1e0f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/column-header-over-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/columns.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/columns.gif new file mode 100644 index 00000000..2d3a8239 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/columns.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-left.gif new file mode 100644 index 00000000..5d923b28 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-left.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-left.png new file mode 100644 index 00000000..5dc69678 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-left.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-right.gif new file mode 100644 index 00000000..8d154db7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-right.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-right.png new file mode 100644 index 00000000..b1a18192 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dd-insert-arrow-right.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dirty-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dirty-rtl.gif new file mode 100644 index 00000000..22fa12a1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dirty-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dirty.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dirty.gif new file mode 100644 index 00000000..4f217a47 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/dirty.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/done.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/done.gif new file mode 100644 index 00000000..a937cb22 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/done.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/drop-no.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/drop-no.gif new file mode 100644 index 00000000..31a332bf Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/drop-no.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/drop-yes.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/drop-yes.gif new file mode 100644 index 00000000..926010e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/drop-yes.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/equals.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/equals.png new file mode 100644 index 00000000..ea1dffbb Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/equals.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/find.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/find.png new file mode 100644 index 00000000..15474796 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/find.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/greater_than.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/greater_than.png new file mode 100644 index 00000000..edbf2fe7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/greater_than.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/less_than.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/less_than.png new file mode 100644 index 00000000..5eda3a52 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/filters/less_than.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/footer-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/footer-bg.gif new file mode 100644 index 00000000..126120f7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/footer-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-blue-hd.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-blue-hd.gif new file mode 100644 index 00000000..862094e6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-blue-hd.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-blue-split.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-blue-split.gif new file mode 100644 index 00000000..5286f58f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-blue-split.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-hrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-hrow.gif new file mode 100644 index 00000000..63741042 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-hrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-loading.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-loading.gif new file mode 100644 index 00000000..d112c540 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-loading.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-split.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-split.gif new file mode 100644 index 00000000..c76a16e9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-split.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-vista-hd.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-vista-hd.gif new file mode 100644 index 00000000..d0972638 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid-vista-hd.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hd-btn-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hd-btn-left.gif new file mode 100644 index 00000000..78927053 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hd-btn-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hd-btn.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hd-btn.gif new file mode 100644 index 00000000..daf1ef2b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hd-btn.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hrow-over.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hrow-over.gif new file mode 100644 index 00000000..f9c07af1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hrow-over.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hrow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hrow.gif new file mode 100644 index 00000000..8d459a30 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-hrow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-rowheader.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-rowheader.gif new file mode 100644 index 00000000..2799b45c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/grid3-rowheader.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-by.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-by.gif new file mode 100644 index 00000000..d6075bba Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-by.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-collapse.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-collapse.gif new file mode 100644 index 00000000..ec980038 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-collapse.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-expand-sprite.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-expand-sprite.gif new file mode 100644 index 00000000..d24891de Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-expand-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-expand.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-expand.gif new file mode 100644 index 00000000..71c8ac43 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/group-expand.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hd-pop.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hd-pop.gif new file mode 100644 index 00000000..eb8ba796 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hd-pop.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-asc.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-asc.gif new file mode 100644 index 00000000..15058ff6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-asc.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-desc.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-desc.gif new file mode 100644 index 00000000..f26b7c2f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-desc.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-lock.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-lock.gif new file mode 100644 index 00000000..15961261 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-lock.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-lock.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-lock.png new file mode 100644 index 00000000..8b81e7ff Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-lock.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-unlock.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-unlock.gif new file mode 100644 index 00000000..af59cf92 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-unlock.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-unlock.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-unlock.png new file mode 100644 index 00000000..9dd5df34 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/hmenu-unlock.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/invalid_line.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/invalid_line.gif new file mode 100644 index 00000000..fb7e0f34 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/invalid_line.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/loading.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/loading.gif new file mode 100644 index 00000000..e846e1d6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/loading.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/mso-hd.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/mso-hd.gif new file mode 100644 index 00000000..669f3cf0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/mso-hd.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/nowait.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/nowait.gif new file mode 100644 index 00000000..4c5862cd Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/nowait.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-first-disabled.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-first-disabled.gif new file mode 100644 index 00000000..1e02c419 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-first-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-first.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-first.gif new file mode 100644 index 00000000..60be4bcd Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-first.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-last-disabled.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-last-disabled.gif new file mode 100644 index 00000000..86970677 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-last-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-last.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-last.gif new file mode 100644 index 00000000..beb4a830 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-last.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-next-disabled.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-next-disabled.gif new file mode 100644 index 00000000..90a7756f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-next-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-next.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-next.gif new file mode 100644 index 00000000..97db1c22 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-next.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-prev-disabled.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-prev-disabled.gif new file mode 100644 index 00000000..37154d62 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-prev-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-prev.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-prev.gif new file mode 100644 index 00000000..d07e61c3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/page-prev.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/pick-button.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/pick-button.gif new file mode 100644 index 00000000..6957924a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/pick-button.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/property-cell-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/property-cell-bg.gif new file mode 100644 index 00000000..7890cf9f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/property-cell-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/property-cell-selected-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/property-cell-selected-bg.gif new file mode 100644 index 00000000..1dfe9a69 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/property-cell-selected-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/refresh-disabled.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/refresh-disabled.gif new file mode 100644 index 00000000..607800b8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/refresh-disabled.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/refresh.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/refresh.gif new file mode 100644 index 00000000..868b2dc5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/refresh.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-check-sprite.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-check-sprite.gif new file mode 100644 index 00000000..61011646 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-check-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-expand-sprite.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-expand-sprite.gif new file mode 100644 index 00000000..09c00a66 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-expand-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-over.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-over.gif new file mode 100644 index 00000000..b288e387 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-over.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-sel.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-sel.gif new file mode 100644 index 00000000..98209e6e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/row-sel.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort-hd.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort-hd.gif new file mode 100644 index 00000000..4cf483d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort-hd.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort_asc.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort_asc.gif new file mode 100644 index 00000000..7e562e20 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort_asc.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort_desc.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort_desc.gif new file mode 100644 index 00000000..9b7a871b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/sort_desc.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/wait.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/wait.gif new file mode 100644 index 00000000..471c1a4f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/grid/wait.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-bottom.gif new file mode 100644 index 00000000..c18f9e34 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-left.gif new file mode 100644 index 00000000..99f7993f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-right.gif new file mode 100644 index 00000000..5b13c5a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-top.gif new file mode 100644 index 00000000..a4ca2bb2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/layout/mini-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/magnify.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/magnify.png new file mode 100644 index 00000000..b807c42a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/magnify.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-checked.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-checked.gif new file mode 100644 index 00000000..fad58937 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-checked.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-group-checked.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-group-checked.gif new file mode 100644 index 00000000..c8824887 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-group-checked.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-menu-parent-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-menu-parent-left.gif new file mode 100644 index 00000000..1ce2ccb4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-menu-parent-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-menu-parent.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-menu-parent.gif new file mode 100644 index 00000000..5461a8bf Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-menu-parent.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-scroll-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-scroll-bottom.gif new file mode 100644 index 00000000..845f9e52 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-scroll-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-scroll-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-scroll-top.gif new file mode 100644 index 00000000..4bfa1541 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-scroll-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-unchecked.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-unchecked.gif new file mode 100644 index 00000000..43823e52 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/menu/default-unchecked.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-bottom-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-bottom-bg.gif new file mode 100644 index 00000000..344a10ee Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-bottom-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-corners.gif new file mode 100644 index 00000000..2bc1bb5a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-fbg.gif new file mode 100644 index 00000000..b4e13fb6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-sides.gif new file mode 100644 index 00000000..425e3146 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif new file mode 100644 index 00000000..c346d7dd Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif new file mode 100644 index 00000000..b4e13fb6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif new file mode 100644 index 00000000..425e3146 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif new file mode 100644 index 00000000..caf1c2e5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif new file mode 100644 index 00000000..fc187976 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif new file mode 100644 index 00000000..2494e614 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif new file mode 100644 index 00000000..44df2cc2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif new file mode 100644 index 00000000..99adc2b9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif new file mode 100644 index 00000000..ec85f654 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif new file mode 100644 index 00000000..76634a06 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif new file mode 100644 index 00000000..7f15dedc Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif new file mode 100644 index 00000000..c61da305 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif new file mode 100644 index 00000000..cc6098a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif new file mode 100644 index 00000000..a5bf6580 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif new file mode 100644 index 00000000..9cbb323c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif new file mode 100644 index 00000000..18cb6228 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif new file mode 100644 index 00000000..a41bdc3e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif new file mode 100644 index 00000000..26b70a24 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-collapsed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-corners-rtl.gif new file mode 100644 index 00000000..593948ef Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-corners.gif new file mode 100644 index 00000000..46572c07 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif new file mode 100644 index 00000000..2494e614 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-fbg.gif new file mode 100644 index 00000000..44df2cc2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-sides-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-sides-rtl.gif new file mode 100644 index 00000000..99adc2b9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-sides.gif new file mode 100644 index 00000000..ec85f654 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-corners-rtl.gif new file mode 100644 index 00000000..dadc4ce9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-corners.gif new file mode 100644 index 00000000..223f3cb0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif new file mode 100644 index 00000000..c61da305 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-fbg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-fbg.gif new file mode 100644 index 00000000..cc6098a6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-sides-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-sides-rtl.gif new file mode 100644 index 00000000..a5bf6580 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-sides-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-sides.gif new file mode 100644 index 00000000..9cbb323c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-corners.gif new file mode 100644 index 00000000..30dd99e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-fbg.gif new file mode 100644 index 00000000..a41bdc3e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-sides.gif new file mode 100644 index 00000000..26b70a24 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-framed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-left-bg-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-left-bg-rtl.gif new file mode 100644 index 00000000..99f01c70 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-left-bg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-left-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-left-bg.gif new file mode 100644 index 00000000..03818c3d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-left-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-right-bg-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-right-bg-rtl.gif new file mode 100644 index 00000000..d7482f09 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-right-bg-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-right-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-right-bg.gif new file mode 100644 index 00000000..37dc9795 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-right-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-top-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-top-bg.gif new file mode 100644 index 00000000..0c6edc3b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel-header/panel-header-default-top-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel/panel-default-framed-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel/panel-default-framed-corners.gif new file mode 100644 index 00000000..af225730 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel/panel-default-framed-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/panel/panel-default-framed-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel/panel-default-framed-sides.gif new file mode 100644 index 00000000..8f9df70f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/panel/panel-default-framed-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/progress/progress-default-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/progress/progress-default-bg.gif new file mode 100644 index 00000000..7c170371 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/progress/progress-default-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/blue-loading.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/blue-loading.gif new file mode 100644 index 00000000..3bbf639e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/blue-loading.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/calendar.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/calendar.gif new file mode 100644 index 00000000..133cf232 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/calendar.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/glass-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/glass-bg.gif new file mode 100644 index 00000000..26fbbae3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/glass-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/hd-sprite.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/hd-sprite.gif new file mode 100644 index 00000000..42da1ea1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/hd-sprite.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-error.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-error.gif new file mode 100644 index 00000000..397b655a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-error.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-info.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-info.gif new file mode 100644 index 00000000..58281c30 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-info.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-question.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-question.gif new file mode 100644 index 00000000..08abd82a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-question.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-warning.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-warning.gif new file mode 100644 index 00000000..27ff98b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/icon-warning.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/large-loading.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/large-loading.gif new file mode 100644 index 00000000..b36b555b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/large-loading.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/left-btn.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/left-btn.gif new file mode 100644 index 00000000..3301054f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/left-btn.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/loading-balls.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/loading-balls.gif new file mode 100644 index 00000000..9ce214be Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/loading-balls.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/right-btn.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/right-btn.gif new file mode 100644 index 00000000..c529110f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/right-btn.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow-c.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow-c.png new file mode 100644 index 00000000..d435f80a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow-c.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow-lr.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow-lr.png new file mode 100644 index 00000000..bb88b6f2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow-lr.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow.png new file mode 100644 index 00000000..75c0eba3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/shadow.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/warning.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/warning.gif new file mode 100644 index 00000000..806d4bc0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/shared/warning.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/e-handle-dark.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/e-handle-dark.gif new file mode 100644 index 00000000..b5486c1a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/e-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/e-handle.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/e-handle.gif new file mode 100644 index 00000000..a8ed0ede Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/e-handle.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/ne-handle-dark.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/ne-handle-dark.gif new file mode 100644 index 00000000..04e5ecf7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/ne-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/ne-handle.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/ne-handle.gif new file mode 100644 index 00000000..6f7b0c29 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/ne-handle.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/nw-handle-dark.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/nw-handle-dark.gif new file mode 100644 index 00000000..6e49d696 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/nw-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/nw-handle.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/nw-handle.gif new file mode 100644 index 00000000..92ad82cf Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/nw-handle.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/s-handle-dark.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/s-handle-dark.gif new file mode 100644 index 00000000..4eb5f0fc Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/s-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/s-handle.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/s-handle.gif new file mode 100644 index 00000000..d7eeae27 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/s-handle.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/se-handle-dark.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/se-handle-dark.gif new file mode 100644 index 00000000..c4c10878 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/se-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/se-handle.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/se-handle.gif new file mode 100644 index 00000000..f011a3bb Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/se-handle.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/square.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/square.gif new file mode 100644 index 00000000..7751d5e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/square.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/sw-handle-dark.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/sw-handle-dark.gif new file mode 100644 index 00000000..77224b0c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/sw-handle-dark.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/sw-handle.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/sw-handle.gif new file mode 100644 index 00000000..aa903dd0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/sizer/sw-handle.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-bg.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-bg.png new file mode 100644 index 00000000..10ede26b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-bg.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-thumb.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-thumb.png new file mode 100644 index 00000000..f427af56 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-thumb.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-v-bg.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-v-bg.png new file mode 100644 index 00000000..6ed116a0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-v-bg.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-v-thumb.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-v-thumb.png new file mode 100644 index 00000000..8be11b94 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/slider/slider-v-thumb.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-bottom-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-bottom-left.gif new file mode 100644 index 00000000..e6525b97 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-bottom-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-bottom-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-bottom-right.gif new file mode 100644 index 00000000..be657af4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-bottom-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-left-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-left-bottom.gif new file mode 100644 index 00000000..ecc3116e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-left-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-left-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-left-top.gif new file mode 100644 index 00000000..4610705b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-left-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-right-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-right-bottom.gif new file mode 100644 index 00000000..737cc3ff Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-right-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-right-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-right-top.gif new file mode 100644 index 00000000..49bc1bf7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-right-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-top-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-top-left.gif new file mode 100644 index 00000000..35048040 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-top-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-top-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-top-right.gif new file mode 100644 index 00000000..eee6080d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/default-scroll-top-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-bottom-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-bottom-bg.gif new file mode 100644 index 00000000..e8208676 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-bottom-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-left-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-left-bg.gif new file mode 100644 index 00000000..55832036 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-left-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-right-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-right-bg.gif new file mode 100644 index 00000000..d55ba065 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-right-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-top-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-top-bg.gif new file mode 100644 index 00000000..89a116fd Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab-bar/tab-bar-default-top-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-corners.gif new file mode 100644 index 00000000..436d5153 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-fbg.gif new file mode 100644 index 00000000..880b797c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-sides.gif new file mode 100644 index 00000000..a95afbda Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-corners.gif new file mode 100644 index 00000000..0c7dcdef Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-corners.gif new file mode 100644 index 00000000..2a4b2e91 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-fbg.gif new file mode 100644 index 00000000..6023a7e8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-sides.gif new file mode 100644 index 00000000..44ab77bf Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-fbg.gif new file mode 100644 index 00000000..f003f4d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-corners.gif new file mode 100644 index 00000000..436d5153 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-fbg.gif new file mode 100644 index 00000000..880b797c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-sides.gif new file mode 100644 index 00000000..a95afbda Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-corners.gif new file mode 100644 index 00000000..0c7dcdef Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-fbg.gif new file mode 100644 index 00000000..f003f4d2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-corners.gif new file mode 100644 index 00000000..b42ccb7f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-fbg.gif new file mode 100644 index 00000000..3a09e17e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-sides.gif new file mode 100644 index 00000000..7fd4dd2d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-sides.gif new file mode 100644 index 00000000..5d557b40 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-corners.gif new file mode 100644 index 00000000..b42ccb7f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-fbg.gif new file mode 100644 index 00000000..3a09e17e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-sides.gif new file mode 100644 index 00000000..7fd4dd2d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-sides.gif new file mode 100644 index 00000000..5d557b40 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-close.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-close.gif new file mode 100644 index 00000000..98d5da95 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-close.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-corners.gif new file mode 100644 index 00000000..060497d0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-fbg.gif new file mode 100644 index 00000000..feade9c0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-sides.gif new file mode 100644 index 00000000..408a9884 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-corners.gif new file mode 100644 index 00000000..55edfe5b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-corners.gif new file mode 100644 index 00000000..872758e1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-fbg.gif new file mode 100644 index 00000000..40ca14aa Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-sides.gif new file mode 100644 index 00000000..2dedd9c5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-fbg.gif new file mode 100644 index 00000000..41843484 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-corners.gif new file mode 100644 index 00000000..060497d0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-fbg.gif new file mode 100644 index 00000000..feade9c0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-sides.gif new file mode 100644 index 00000000..408a9884 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-corners.gif new file mode 100644 index 00000000..55edfe5b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-fbg.gif new file mode 100644 index 00000000..6a23385b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-corners.gif new file mode 100644 index 00000000..80d0c08c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-fbg.gif new file mode 100644 index 00000000..fbeab2db Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-sides.gif new file mode 100644 index 00000000..28ab7147 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-sides.gif new file mode 100644 index 00000000..00a70323 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-corners.gif new file mode 100644 index 00000000..80d0c08c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-fbg.gif new file mode 100644 index 00000000..fbeab2db Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-sides.gif new file mode 100644 index 00000000..28ab7147 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-sides.gif new file mode 100644 index 00000000..91df4148 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-corners.gif new file mode 100644 index 00000000..4b9b1d85 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-fbg.gif new file mode 100644 index 00000000..feade9c0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-sides.gif new file mode 100644 index 00000000..77530f42 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-corners.gif new file mode 100644 index 00000000..cdd0ac5b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-corners.gif new file mode 100644 index 00000000..cd5787d9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-fbg.gif new file mode 100644 index 00000000..40ca14aa Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-sides.gif new file mode 100644 index 00000000..2ee83192 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-fbg.gif new file mode 100644 index 00000000..41843484 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-corners.gif new file mode 100644 index 00000000..4b9b1d85 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-fbg.gif new file mode 100644 index 00000000..feade9c0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-sides.gif new file mode 100644 index 00000000..77530f42 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-corners.gif new file mode 100644 index 00000000..cdd0ac5b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-fbg.gif new file mode 100644 index 00000000..6a23385b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-corners.gif new file mode 100644 index 00000000..15e73874 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-fbg.gif new file mode 100644 index 00000000..fbeab2db Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-sides.gif new file mode 100644 index 00000000..648185d3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-sides.gif new file mode 100644 index 00000000..f1405a14 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-corners.gif new file mode 100644 index 00000000..15e73874 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-fbg.gif new file mode 100644 index 00000000..fbeab2db Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-sides.gif new file mode 100644 index 00000000..648185d3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-sides.gif new file mode 100644 index 00000000..53b27416 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-corners.gif new file mode 100644 index 00000000..be17b68c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-fbg.gif new file mode 100644 index 00000000..2d8c6fef Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-sides.gif new file mode 100644 index 00000000..6ed493f9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-corners.gif new file mode 100644 index 00000000..f05f8a8f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-corners.gif new file mode 100644 index 00000000..5b4a9002 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-fbg.gif new file mode 100644 index 00000000..a38b6281 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-sides.gif new file mode 100644 index 00000000..a19cc7e8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-disabled-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-fbg.gif new file mode 100644 index 00000000..1ed53562 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-corners.gif new file mode 100644 index 00000000..be17b68c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-fbg.gif new file mode 100644 index 00000000..2d8c6fef Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-sides.gif new file mode 100644 index 00000000..6ed493f9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-active-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-corners.gif new file mode 100644 index 00000000..f05f8a8f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-fbg.gif new file mode 100644 index 00000000..1ed53562 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-corners.gif new file mode 100644 index 00000000..96817de9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-fbg.gif new file mode 100644 index 00000000..94bfb45d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-sides.gif new file mode 100644 index 00000000..6ac4aa9a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-sides.gif new file mode 100644 index 00000000..2f644d13 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-focus-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-corners.gif new file mode 100644 index 00000000..96817de9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-fbg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-fbg.gif new file mode 100644 index 00000000..94bfb45d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-fbg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-sides.gif new file mode 100644 index 00000000..6ac4aa9a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-over-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-sides.gif new file mode 100644 index 00000000..2f644d13 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tab/tab-default-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-default-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-default-corners.gif new file mode 100644 index 00000000..0999a53f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-default-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-default-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-default-sides.gif new file mode 100644 index 00000000..5f2e4bfa Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-default-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-form-invalid-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-form-invalid-corners.gif new file mode 100644 index 00000000..b27398dc Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-form-invalid-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-form-invalid-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-form-invalid-sides.gif new file mode 100644 index 00000000..b39a15bb Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tip/tip-form-invalid-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-more-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-more-left.gif new file mode 100644 index 00000000..8f8cbd42 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-more-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-more.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-more.gif new file mode 100644 index 00000000..82beafda Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-more.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-bottom.gif new file mode 100644 index 00000000..1296e22d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-left.gif new file mode 100644 index 00000000..2db8cf5c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-right.gif new file mode 100644 index 00000000..5d5a7ab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-top.gif new file mode 100644 index 00000000..6545b437 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/default-scroll-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-more-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-more-left.gif new file mode 100644 index 00000000..8f8cbd42 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-more-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-more.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-more.gif new file mode 100644 index 00000000..82beafda Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-more.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-scroll-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-scroll-left.gif new file mode 100644 index 00000000..2db8cf5c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-scroll-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-scroll-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-scroll-right.gif new file mode 100644 index 00000000..5d5a7ab5 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/footer-scroll-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/toolbar-default-bg.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/toolbar-default-bg.gif new file mode 100644 index 00000000..f010d334 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/toolbar/toolbar-default-bg.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tool-sprite-tpl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tool-sprite-tpl.gif new file mode 100644 index 00000000..18277a3d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tool-sprite-tpl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tool-sprites.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tool-sprites.gif new file mode 100644 index 00000000..36b6b675 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tool-sprites.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tools-sprites-trans.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tools-sprites-trans.gif new file mode 100644 index 00000000..b6d7ba36 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tools/tools-sprites-trans.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/arrows-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/arrows-rtl.gif new file mode 100644 index 00000000..7083d77d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/arrows-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/arrows.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/arrows.gif new file mode 100644 index 00000000..f7b8b1ca Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/arrows.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-above.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-above.gif new file mode 100644 index 00000000..30d1ca71 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-above.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-add.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-add.gif new file mode 100644 index 00000000..b22cd144 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-add.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-append.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-append.gif new file mode 100644 index 00000000..b22cd144 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-append.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-below.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-below.gif new file mode 100644 index 00000000..85f66b1e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-below.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-between.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-between.gif new file mode 100644 index 00000000..5c6c09d9 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-between.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-no.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-no.gif new file mode 100644 index 00000000..9d9c6a9c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-no.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-over.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-over.gif new file mode 100644 index 00000000..30d1ca71 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-over.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-under.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-under.gif new file mode 100644 index 00000000..85f66b1e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-under.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-yes.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-yes.gif new file mode 100644 index 00000000..8aacb307 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/drop-yes.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-minus-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-minus-rtl.gif new file mode 100644 index 00000000..10227e60 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-minus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-minus.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-minus.gif new file mode 100644 index 00000000..55d8a0fa Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-minus.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-plus-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-plus-rtl.gif new file mode 100644 index 00000000..f4eef893 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-plus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-plus.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-plus.gif new file mode 100644 index 00000000..a5c62fab Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-plus.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-rtl.gif new file mode 100644 index 00000000..a5e7248c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end.gif new file mode 100644 index 00000000..406a88df Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-end.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-line-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-line-rtl.gif new file mode 100644 index 00000000..6e5b8b44 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-line-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-line.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-line.gif new file mode 100644 index 00000000..e25ed03f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-line.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-nl-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-nl-rtl.gif new file mode 100644 index 00000000..2d8dd984 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-nl-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-nl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-nl.gif new file mode 100644 index 00000000..f50bd40a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-nl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-rtl.gif new file mode 100644 index 00000000..ed3e5a0d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus.gif new file mode 100644 index 00000000..a7287961 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-minus.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-nl-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-nl-rtl.gif new file mode 100644 index 00000000..2d1e9174 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-nl-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-nl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-nl.gif new file mode 100644 index 00000000..96f8d723 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-nl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-rtl.gif new file mode 100644 index 00000000..cb0cb492 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus.gif new file mode 100644 index 00000000..ae41983c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-plus.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-rtl.gif new file mode 100644 index 00000000..1139cb02 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow.gif new file mode 100644 index 00000000..201c413e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/elbow.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-open-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-open-rtl.gif new file mode 100644 index 00000000..a34c546c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-open-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-open.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-open.gif new file mode 100644 index 00000000..361e1be3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-open.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-rtl.gif new file mode 100644 index 00000000..4fab30f8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder.gif new file mode 100644 index 00000000..b2fd81a1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/folder.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/leaf-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/leaf-rtl.gif new file mode 100644 index 00000000..ab0979a3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/leaf-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/leaf.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/leaf.gif new file mode 100644 index 00000000..445769d3 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/leaf.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/loading.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/loading.gif new file mode 100644 index 00000000..e846e1d6 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/loading.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/s.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/s.gif new file mode 100644 index 00000000..1d11fa9a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/tree/s.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-bottom.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-bottom.gif new file mode 100644 index 00000000..c18f9e34 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-bottom.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-left.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-left.gif new file mode 100644 index 00000000..99f7993f Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-left.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-right.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-right.gif new file mode 100644 index 00000000..5b13c5a8 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-right.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-top.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-top.gif new file mode 100644 index 00000000..a4ca2bb2 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/util/splitter/mini-top.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/ux/dashboard/magnify.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/ux/dashboard/magnify.png new file mode 100644 index 00000000..0efc4470 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/ux/dashboard/magnify.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-bottom-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-bottom-corners.gif new file mode 100644 index 00000000..6e44aba4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-bottom-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-bottom-sides.gif new file mode 100644 index 00000000..d0f60e65 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-bottom-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-bottom-corners.gif new file mode 100644 index 00000000..dce586d4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-bottom-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-bottom-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-bottom-sides.gif new file mode 100644 index 00000000..46901d8a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-bottom-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-corners-rtl.gif new file mode 100644 index 00000000..aa043c6a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-corners.gif new file mode 100644 index 00000000..0dfd487c Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-sides.gif new file mode 100644 index 00000000..11bfe125 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-corners-rtl.gif new file mode 100644 index 00000000..51939545 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-corners.gif new file mode 100644 index 00000000..ba0497a7 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-sides.gif new file mode 100644 index 00000000..41939a96 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-top-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-top-corners.gif new file mode 100644 index 00000000..5040891b Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-top-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-top-sides.gif new file mode 100644 index 00000000..46901d8a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-collapsed-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-corners-rtl.gif new file mode 100644 index 00000000..60d74998 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-corners.gif new file mode 100644 index 00000000..75bac703 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-sides.gif new file mode 100644 index 00000000..7022ec9e Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-left-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-corners-rtl.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-corners-rtl.gif new file mode 100644 index 00000000..d7f1704d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-corners-rtl.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-corners.gif new file mode 100644 index 00000000..875c04b1 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-sides.gif new file mode 100644 index 00000000..e100d454 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-right-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-top-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-top-corners.gif new file mode 100644 index 00000000..16e61866 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-top-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-top-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-top-sides.gif new file mode 100644 index 00000000..d0f60e65 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window-header/window-header-default-top-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-error.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-error.gif new file mode 100644 index 00000000..397b655a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-error.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-info.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-info.gif new file mode 100644 index 00000000..58281c30 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-info.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-question.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-question.gif new file mode 100644 index 00000000..08abd82a Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-question.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-warning.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-warning.gif new file mode 100644 index 00000000..27ff98b4 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/icon-warning.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/fade-blue.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/fade-blue.png new file mode 100644 index 00000000..4dbf08b0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/fade-blue.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/fader.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/fader.png new file mode 100644 index 00000000..be8c27fa Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/fader.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/icon16_error.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/icon16_error.png new file mode 100644 index 00000000..5f168d32 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/icon16_error.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/icon16_info.png b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/icon16_info.png new file mode 100644 index 00000000..6c6b32d0 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/toast/icon16_info.png differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/window-default-corners.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/window-default-corners.gif new file mode 100644 index 00000000..c6081732 Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/window-default-corners.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/images/window/window-default-sides.gif b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/window-default-sides.gif new file mode 100644 index 00000000..4b1d651d Binary files /dev/null and b/app/resources/appunto-auth/theme/ext-theme-gray/images/window/window-default-sides.gif differ diff --git a/app/resources/appunto-auth/theme/ext-theme-gray/theme.css b/app/resources/appunto-auth/theme/ext-theme-gray/theme.css new file mode 100644 index 00000000..52ffc3bf --- /dev/null +++ b/app/resources/appunto-auth/theme/ext-theme-gray/theme.css @@ -0,0 +1 @@ +.x-body{margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.x-no-touch-scroll{touch-action:none;-ms-touch-action:none}@-ms-viewport{width:device-width}img{border:0}.x-border-box,.x-border-box *{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-ltr{direction:ltr}.x-clear{overflow:hidden;clear:both;font-size:0;line-height:0;display:table}.x-layer{position:absolute!important;overflow:hidden}.x-fixed-layer{position:fixed!important;overflow:hidden}.x-shim{position:absolute;left:0;top:0;overflow:hidden;filter:alpha(opacity=0);opacity:0}.x-hidden-display{display:none!important}.x-hidden-visibility{visibility:hidden!important}.x-hidden,.x-hidden-offsets{display:block!important;visibility:hidden!important;position:absolute!important;top:-10000px!important}.x-hidden-clip{position:absolute!important;clip:rect(0,0,0,0)}.x-masked-relative{position:relative}.x-ie-shadow{background-color:#777;display:none;position:absolute;overflow:hidden}.x-unselectable{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:-moz-none;-webkit-user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-drag:none;cursor:default}.x-selectable{cursor:auto;-moz-user-select:text;-webkit-user-select:text;-ms-user-select:text;user-select:text;-o-user-select:text}.x-list-plain{list-style-type:none;margin:0;padding:0}.x-table-plain{border-collapse:collapse;border-spacing:0;font-size:1em}.x-frame-tl,.x-frame-tr,.x-frame-tc,.x-frame-bl,.x-frame-br,.x-frame-bc{overflow:hidden;background-repeat:no-repeat}.x-frame-tc,.x-frame-bc{background-repeat:repeat-x}td.x-frame-tl,td.x-frame-tr,td.x-frame-bl,td.x-frame-br{width:1px}.x-frame-mc{background-repeat:repeat-x;overflow:hidden}.x-proxy-el{position:absolute;background:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-css-shadow{position:absolute;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.x-item-disabled,.x-item-disabled *{cursor:default}.x-component,.x-container{position:relative}.x-webkit *:focus{outline:0}.x-touch-scroller{display:table;min-width:100%}.x-box-item{position:absolute!important;left:0;top:0}.x-autocontainer-outerCt{display:table}.x-autocontainer-innerCt{display:table-cell;height:100%;vertical-align:top}.x-mask{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-fixed{position:fixed}.x-mask-shim{z-index:100;position:absolute;top:0;left:0;width:100%;height:100%}.x-mask-msg{z-index:101;position:absolute}.x-progress{position:relative;border-style:solid;overflow:hidden}.x-progress-bar{overflow:hidden;position:absolute;width:0;height:100%}.x-progress-text{overflow:hidden;position:absolute}.x-title-icon{background-repeat:no-repeat;background-position:0 0;vertical-align:middle;text-align:center}.x-title{display:table;table-layout:fixed}.x-title-text{display:table-cell;overflow:hidden;white-space:nowrap;-o-text-overflow:ellipsis;text-overflow:ellipsis;vertical-align:middle}.x-title-align-left{text-align:left}.x-title-align-center{text-align:center}.x-title-align-right{text-align:right}.x-title-rotate-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;-ms-transform:rotate(90deg);-ms-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie8 .x-title-rotate-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-title-rotate-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;-ms-transform:rotate(270deg);-ms-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie8 .x-title-rotate-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-horizontal.x-header .x-title-rotate-right.x-title-align-left>.x-title-item{vertical-align:bottom}.x-horizontal.x-header .x-title-rotate-right.x-title-align-center>.x-title-item{vertical-align:middle}.x-horizontal.x-header .x-title-rotate-right.x-title-align-right>.x-title-item{vertical-align:top}.x-horizontal.x-header .x-title-rotate-left.x-title-align-left>.x-title-item{vertical-align:top}.x-horizontal.x-header .x-title-rotate-left.x-title-align-center>.x-title-item{vertical-align:middle}.x-horizontal.x-header .x-title-rotate-left.x-title-align-right>.x-title-item{vertical-align:bottom}.x-vertical.x-header .x-title-rotate-none.x-title-align-left>.x-title-item{vertical-align:top}.x-vertical.x-header .x-title-rotate-none.x-title-align-center>.x-title-item{vertical-align:middle}.x-vertical.x-header .x-title-rotate-none.x-title-align-right>.x-title-item{vertical-align:bottom}.x-title-icon-wrap{display:table-cell;text-align:center;vertical-align:middle;line-height:0}.x-title-icon-wrap.x-title-icon-top,.x-title-icon-wrap.x-title-icon-bottom{display:table-row}.x-title-icon{display:inline-block;vertical-align:middle;background-position:center;background-repeat:no-repeat}.x-tool{font-size:0;line-height:0}.x-header>.x-box-inner{overflow:visible}.x-btn{display:inline-block;outline:0;cursor:pointer;white-space:nowrap;text-decoration:none;overflow:hidden;position:relative}.x-btn>.x-frame{height:100%;width:100%}.x-btn-wrap{display:table;height:100%;width:100%}.x-btn-button{vertical-align:middle;display:table-cell;white-space:nowrap;line-height:0}.x-btn-inner{display:inline-block;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}.x-btn-icon.x-btn-no-text>.x-btn-inner{display:none}.x-btn-icon-el{display:none;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.x-btn-icon>.x-btn-icon-el{display:inline-block}.x-btn-icon-top>.x-btn-icon-el,.x-btn-icon-bottom>.x-btn-icon-el{display:block}.x-btn-button-center{text-align:center}.x-btn-button-left{text-align:left}.x-btn-button-right{text-align:right}.x-opera12m-btn-arrow-right{display:table}.x-opera12m-btn-arrow-right>.x-btn-arrow-right,.x-opera12m-btn-arrow-right>.x-btn-split-right{display:table-row}.x-btn-arrow:after,.x-btn-split:after{background-repeat:no-repeat;content:'';box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-btn-arrow-right:after,.x-btn-split-right:after{display:table-cell;background-position:right center}.x-btn-arrow-bottom:after,.x-btn-split-bottom:after{display:table-row;background-position:center bottom;content:'\00a0';line-height:0}.x-btn-mc{overflow:visible}.x-splitter{font-size:1px}.x-splitter-horizontal{cursor:e-resize;cursor:row-resize}.x-splitter-vertical{cursor:e-resize;cursor:col-resize}.x-splitter-collapsed,.x-splitter-horizontal-noresize,.x-splitter-vertical-noresize{cursor:default}.x-splitter-active{z-index:4}.x-collapse-el{position:absolute;background-repeat:no-repeat}.x-box-layout-ct{overflow:hidden;position:relative}.x-box-target{position:absolute;width:20000px;top:0;left:0;height:1px}.x-box-inner{overflow:hidden;position:relative;left:0;top:0}.x-box-scroller{position:absolute;background-repeat:no-repeat;background-position:center;line-height:0;font-size:0}.x-box-scroller-top{top:0}.x-box-scroller-right{right:0}.x-box-scroller-bottom{bottom:0}.x-box-scroller-left{left:0}.x-box-menu-body-horizontal{float:left}.x-box-menu-after{position:relative;float:left}.x-toolbar-text{white-space:nowrap}.x-toolbar-separator{display:block;font-size:1px;overflow:hidden;cursor:default;border:0;width:0;height:0;line-height:0}.x-toolbar-scroller{padding-left:0}.x-toolbar-plain{border:0}.x-dd-drag-proxy,.x-dd-drag-current{z-index:1000000!important;pointer-events:none}.x-dd-drag-repair .x-dd-drag-ghost{filter:alpha(opacity=60);opacity:.6}.x-dd-drag-repair .x-dd-drop-icon{display:none}.x-dd-drag-ghost{filter:alpha(opacity=85);opacity:.85;padding:5px;padding-left:20px;white-space:nowrap;color:#000;font:normal 11px tahoma,arial,verdana,sans-serif;border:1px solid;border-color:#ddd #bbb #bbb #ddd;background-color:#fff}.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-ok .x-dd-drop-icon{background-image:url(images/dd/drop-yes.gif)}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url(images/dd/drop-add.gif)}.x-dd-drop-nodrop div.x-dd-drop-icon{background-image:url(images/dd/drop-no.gif)}.x-docked{position:absolute!important;z-index:1}.x-docked-vertical{position:static}.x-docked-top{border-bottom-width:0!important}.x-docked-bottom{border-top-width:0!important}.x-docked-left{border-right-width:0!important}.x-docked-right{border-left-width:0!important}.x-docked-noborder-top{border-top-width:0!important}.x-docked-noborder-right{border-right-width:0!important}.x-docked-noborder-bottom{border-bottom-width:0!important}.x-docked-noborder-left{border-left-width:0!important}.x-noborder-l{border-left-width:0!important}.x-noborder-b{border-bottom-width:0!important}.x-noborder-bl{border-bottom-width:0!important;border-left-width:0!important}.x-noborder-r{border-right-width:0!important}.x-noborder-rl{border-right-width:0!important;border-left-width:0!important}.x-noborder-rb{border-right-width:0!important;border-bottom-width:0!important}.x-noborder-rbl{border-right-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-t{border-top-width:0!important}.x-noborder-tl{border-top-width:0!important;border-left-width:0!important}.x-noborder-tb{border-top-width:0!important;border-bottom-width:0!important}.x-noborder-tbl{border-top-width:0!important;border-bottom-width:0!important;border-left-width:0!important}.x-noborder-tr{border-top-width:0!important;border-right-width:0!important}.x-noborder-trl{border-top-width:0!important;border-right-width:0!important;border-left-width:0!important}.x-noborder-trb{border-top-width:0!important;border-right-width:0!important;border-bottom-width:0!important}.x-noborder-trbl{border-width:0!important}.x-panel,.x-plain{overflow:hidden;position:relative}.x-panel{outline:0}td.x-frame-mc{vertical-align:top}.x-panel-body{overflow:hidden;position:relative}.x-panel-header-plain,.x-panel-body-plain{border:0;padding:0}.x-tip{position:absolute;overflow:visible}.x-tip-body{overflow:hidden;position:relative}.x-tip-anchor{position:absolute;overflow:hidden;border-style:solid}.x-form-item{display:table;table-layout:fixed;border-spacing:0;border-collapse:separate}.x-form-item-label{overflow:hidden}.x-form-item-label,.x-form-item-body{display:table-cell}.x-form-item-body{vertical-align:middle;height:100%}.x-form-item-label-inner{display:inline-block}.x-form-item-label-top{display:table-row;height:1px}.x-form-item-label-top>.x-form-item-label-inner{display:table-cell}.x-form-item-label-top-side-error:after{display:table-cell;content:''}.x-form-item-label-right{text-align:right}.x-form-error-wrap-side{display:table-cell;vertical-align:middle}.x-form-error-wrap-under{display:table-row;height:1px}.x-form-error-wrap-under>.x-form-error-msg{display:table-cell}.x-form-error-wrap-under-side-label:before{display:table-cell;content:''}.x-form-invalid-icon{overflow:hidden}.x-form-invalid-icon ul{display:none}.x-form-display-field-body{vertical-align:top}.x-fit-item{position:relative}.x-grid-view{overflow:hidden;position:relative}.x-grid-row-table{width:0;table-layout:fixed;border:0 none;border-collapse:separate;border-spacing:0}.x-grid-item{table-layout:fixed;outline:0}.x-grid-row{outline:0}.x-grid-td{overflow:hidden;border-width:0;vertical-align:top}.x-grid-cell-inner{overflow:hidden;white-space:nowrap}.x-wrap-cell .x-grid-cell-inner{white-space:normal}.x-grid-resize-marker{position:absolute;z-index:5;top:0}.x-view-item-focused{outline:1px dashed #ccc!important;outline-offset:-1px}.x-form-cb-wrap{vertical-align:top}.x-form-cb-wrap-inner{position:relative}.x-form-cb{position:absolute;left:0;right:auto;vertical-align:top;overflow:hidden;padding:0;border:0}.x-form-cb::-moz-focus-inner{padding:0;border:0}.x-form-cb-after{left:auto;right:0}.x-form-cb-label{display:inline-block}.x-form-cb-wrap-inner-no-box-label>.x-form-cb{position:static}.x-col-move-top,.x-col-move-bottom{position:absolute;top:0;line-height:0;font-size:0;overflow:hidden;z-index:20000;background:no-repeat center top transparent}.x-grid-header-ct{cursor:default}.x-column-header{position:absolute;overflow:hidden;background-repeat:repeat-x}.x-column-header-inner{white-space:nowrap;position:relative;overflow:hidden}.x-column-header-text{white-space:nowrap;background-repeat:no-repeat}.x-column-header-trigger{display:none;height:100%;background-repeat:no-repeat;position:absolute;right:0;top:0;z-index:2}.x-column-header-over .x-column-header-trigger,.x-column-header-open .x-column-header-trigger{display:block}.x-column-header-align-right{text-align:right}.x-column-header-align-left{text-align:left}.x-column-header-align-center{text-align:center}.x-form-trigger-wrap{display:table;width:100%;height:100%}.x-gecko .x-form-trigger-wrap{display:-moz-inline-box;display:inline-flex;vertical-align:top}.x-form-text-wrap{display:table-cell;overflow:hidden;height:100%}.x-gecko .x-form-text-wrap{display:block;-moz-box-flex:1;flex:1}.x-form-item-body.x-form-text-grow{min-width:inherit;max-width:inherit}.x-form-text{border:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;display:block;background:repeat-x 0 0;width:100%;height:100%}.x-webkit .x-form-text{height:calc(100%+3px)}.x-form-trigger{display:table-cell;vertical-align:top;cursor:pointer;overflow:hidden;background-repeat:no-repeat;line-height:0;white-space:nowrap}.x-item-disabled .x-form-trigger{cursor:default}.x-form-trigger.x-form-trigger-cmp{background:0;border:0}.x-gecko .x-form-trigger{display:block}.x-border-layout-ct{overflow:hidden}.x-border-layout-ct{position:relative}.x-border-region-slide-in{z-index:5}.x-region-collapsed-placeholder{z-index:4}.x-tab{display:block;outline:0;cursor:pointer;white-space:nowrap;text-decoration:none;overflow:hidden;position:relative}.x-tab>.x-frame{height:100%;width:100%}.x-tab-wrap{display:table;height:100%;width:100%}.x-tab-button{vertical-align:middle;display:table-cell;white-space:nowrap;line-height:0}.x-tab-inner{display:inline-block;vertical-align:middle;overflow:hidden;text-overflow:ellipsis}.x-tab-icon.x-tab-no-text>.x-tab-inner{display:none}.x-tab-icon-el{display:none;vertical-align:middle;background-position:center center;background-repeat:no-repeat}.x-tab-icon>.x-tab-icon-el{display:inline-block}.x-tab-icon-top>.x-tab-icon-el,.x-tab-icon-bottom>.x-tab-icon-el{display:block}.x-tab-button-center{text-align:center}.x-tab-button-left{text-align:left}.x-tab-button-right{text-align:right}.x-tab-mc{overflow:visible}.x-tab{z-index:1}.x-tab-active{z-index:3}.x-tab-button{position:relative}.x-tab-close-btn{display:block;position:absolute;font-size:0;line-height:0}.x-tab-rotate-left{-webkit-transform:rotate(270deg);-webkit-transform-origin:100% 0;-moz-transform:rotate(270deg);-moz-transform-origin:100% 0;-o-transform:rotate(270deg);-o-transform-origin:100% 0;-ms-transform:rotate(270deg);-ms-transform-origin:100% 0;transform:rotate(270deg);transform-origin:100% 0}.x-ie8 .x-tab-rotate-left{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3)}.x-tab-rotate-right{-webkit-transform:rotate(90deg);-webkit-transform-origin:0 0;-moz-transform:rotate(90deg);-moz-transform-origin:0 0;-o-transform:rotate(90deg);-o-transform-origin:0 0;-ms-transform:rotate(90deg);-ms-transform-origin:0 0;transform:rotate(90deg);transform-origin:0 0}.x-ie8 .x-tab-rotate-right{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1)}.x-tab-tr,.x-tab-br,.x-tab-mr,.x-tab-tl,.x-tab-bl,.x-tab-ml{width:1px}.x-tab-bar{z-index:0;position:relative}.x-tab-bar-body{position:relative}.x-tab-bar-strip{position:absolute;line-height:0;font-size:0;z-index:2}.x-tab-bar-top>.x-tab-bar-strip{bottom:0}.x-tab-bar-bottom>.x-tab-bar-strip{top:0}.x-tab-bar-left>.x-tab-bar-strip{right:0}.x-tab-bar-right>.x-tab-bar-strip{left:0}.x-tab-bar-horizontal .x-tab-bar-strip{width:100%;left:0}.x-tab-bar-vertical{display:table-cell}.x-tab-bar-vertical .x-tab-bar-strip{height:100%;top:0}.x-tab-bar-plain{background:transparent!important}.x-box-scroller-plain{background-color:transparent!important}.x-window{outline:0;overflow:hidden}.x-window .x-window-wrap{position:relative}.x-window-body{position:relative;overflow:hidden}.x-resizable-overlay{position:absolute;left:0;top:0;width:100%;height:100%;display:none;z-index:200000;background-color:#fff;filter:alpha(opacity=0);opacity:0}.x-form-textarea{overflow:auto;resize:none}div.x-form-text-grow .x-form-textarea{min-height:inherit}.x-message-box .x-form-display-field{height:auto}.x-menu{outline:0}.x-menu-item{white-space:nowrap;overflow:hidden;border-color:transparent;border-style:solid}.x-menu-item-cmp .x-field-label-cell{vertical-align:middle}.x-menu-icon-separator{position:absolute;top:0;z-index:0;height:100%;overflow:hidden}.x-menu-plain .x-menu-icon-separator{display:none}.x-menu-item-link{-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;text-decoration:none;outline:0;display:block}.x-menu-item-link-href{-webkit-touch-callout:default}.x-menu-item-text{display:inline-block}.x-menu-item-icon,.x-menu-item-icon-right,.x-menu-item-arrow{font-size:0;position:absolute;text-align:center;background-repeat:no-repeat}.x-resizable-wrapped{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-column-header-checkbox .x-column-header-text{display:block;background-repeat:no-repeat;font-size:0}.x-grid-cell-row-checker{vertical-align:middle;background-repeat:no-repeat;font-size:0}.x-body{color:black;font-size:12px;font-family:tahoma,arial,verdana,sans-serif}.x-animating-size,.x-collapsed{overflow:hidden!important}.x-mask{filter:alpha(opacity=50);opacity:.5;background:#ccc;cursor:default}.x-mask-msg{padding:2px;border-style:solid;border-width:1px;border-color:#bcb0b0;background:#e0e0e0}.x-mask-msg-inner{padding:0 5px;border-style:solid;border-width:1px;border-color:#b3b3b3;background-color:#eee;color:#222;font:normal 11px tahoma,arial,verdana,sans-serif}.x-mask-msg-text{padding:5px 5px 5px 20px;background-image:url(images/grid/loading.gif);background-repeat:no-repeat;background-position:0 center}.x-progress-default{background-color:#f1f1f1;border-width:1px;height:20px;border-color:#8e8e8e}.x-progress-default .x-progress-bar-default{background-image:none;background-color:#ababab;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#d1d1d1),color-stop(50%,#b8b8b8),color-stop(51%,#ababab),color-stop(100%,#9e9e9e));background-image:-webkit-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-moz-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-o-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:-ms-linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e);background-image:linear-gradient(top,#d1d1d1,#b8b8b8 50%,#ababab 51%,#9e9e9e)}.x-nlg .x-progress-default .x-progress-bar-default{background:repeat-x;background-image:url(images/progress/progress-default-bg.gif)}.x-progress-default .x-progress-text{color:white;font-weight:bold;font-size:11px;font-family:tahoma,arial,verdana,sans-serif;text-align:center;line-height:18px}.x-progress-default .x-progress-text-back{color:#5d5d5d;line-height:18px}.x-progressbar-default-cell>.x-grid-cell-inner,.x-progressbarwidget-default-cell>.x-grid-cell-inner{padding-top:0;padding-bottom:0}.x-progressbar-default-cell>.x-grid-cell-inner .x-progress-default,.x-progressbarwidget-default-cell>.x-grid-cell-inner .x-progress-default{height:18px}.x-tool{cursor:pointer}.x-tool-img{overflow:hidden;width:15px;height:15px;background-image:url(images/tools/tool-sprites.gif);margin:0}.x-tool-placeholder{visibility:hidden}.x-tool-close{background-position:0 0}.x-tool-minimize{background-position:0 -15px}.x-tool-maximize{background-position:0 -30px}.x-tool-restore{background-position:0 -45px}.x-tool-toggle{background-position:0 -60px}.x-panel-collapsed .x-tool-toggle{background-position:0 -75px}.x-tool-gear{background-position:0 -90px}.x-tool-prev{background-position:0 -105px}.x-tool-next{background-position:0 -120px}.x-tool-pin{background-position:0 -135px}.x-tool-unpin{background-position:0 -150px}.x-tool-right{background-position:0 -165px}.x-tool-left{background-position:0 -180px}.x-tool-down{background-position:0 -195px}.x-tool-up{background-position:0 -210px}.x-tool-refresh{background-position:0 -225px}.x-tool-plus{background-position:0 -240px}.x-tool-minus{background-position:0 -255px}.x-tool-search{background-position:0 -270px}.x-tool-save{background-position:0 -285px}.x-tool-help{background-position:0 -300px}.x-tool-print{background-position:0 -315px}.x-tool-expand{background-position:0 -330px}.x-tool-collapse{background-position:0 -345px}.x-tool-resize{background-position:0 -360px}.x-tool-move{background-position:0 -375px}.x-tool-expand-bottom,.x-tool-collapse-bottom{background-position:0 -195px}.x-tool-expand-top,.x-tool-collapse-top{background-position:0 -210px}.x-tool-expand-left,.x-tool-collapse-left{background-position:0 -180px}.x-tool-expand-right,.x-tool-collapse-right{background-position:0 -165px}.x-tool-over .x-tool-close{background-position:-15px 0}.x-tool-over .x-tool-minimize{background-position:-15px -15px}.x-tool-over .x-tool-maximize{background-position:-15px -30px}.x-tool-over .x-tool-restore{background-position:-15px -45px}.x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-panel-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.x-tool-over .x-tool-gear{background-position:-15px -90px}.x-tool-over .x-tool-prev{background-position:-15px -105px}.x-tool-over .x-tool-next{background-position:-15px -120px}.x-tool-over .x-tool-pin{background-position:-15px -135px}.x-tool-over .x-tool-unpin{background-position:-15px -150px}.x-tool-over .x-tool-right{background-position:-15px -165px}.x-tool-over .x-tool-left{background-position:-15px -180px}.x-tool-over .x-tool-down{background-position:-15px -195px}.x-tool-over .x-tool-up{background-position:-15px -210px}.x-tool-over .x-tool-refresh{background-position:-15px -225px}.x-tool-over .x-tool-plus{background-position:-15px -240px}.x-tool-over .x-tool-minus{background-position:-15px -255px}.x-tool-over .x-tool-search{background-position:-15px -270px}.x-tool-over .x-tool-save{background-position:-15px -285px}.x-tool-over .x-tool-help{background-position:-15px -300px}.x-tool-over .x-tool-print{background-position:-15px -315px}.x-tool-over .x-tool-expand{background-position:-15px -330px}.x-tool-over .x-tool-collapse{background-position:-15px -345px}.x-tool-over .x-tool-resize{background-position:-15px -360px}.x-tool-over .x-tool-move{background-position:-15px -375px}.x-tool-over .x-tool-expand-bottom,.x-tool-over .x-tool-collapse-bottom{background-position:-15px -195px}.x-tool-over .x-tool-expand-top,.x-tool-over .x-tool-collapse-top{background-position:-15px -210px}.x-tool-over .x-tool-expand-left,.x-tool-over .x-tool-collapse-left{background-position:-15px -180px}.x-tool-over .x-tool-expand-right,.x-tool-over .x-tool-collapse-right{background-position:-15px -165px}.x-header-draggable .x-header-body,.x-header-ghost{cursor:move}.x-header-text{white-space:nowrap}.x-btn-default-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:-ms-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-small-mc{background-image:url(images/btn/btn-default-small-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nbr .x-btn-default-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-btn-default-small-tl{background-position:0 -6px}.x-btn-default-small-tr{background-position:right -9px}.x-btn-default-small-bl{background-position:0 -12px}.x-btn-default-small-br{background-position:right -15px}.x-btn-default-small-ml{background-position:0 top}.x-btn-default-small-mr{background-position:right top}.x-btn-default-small-tc{background-position:0 0}.x-btn-default-small-bc{background-position:0 -3px}.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-mr{padding-right:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-ml{padding-left:3px}.x-btn-default-small-tc{height:3px}.x-btn-default-small-bc{height:3px}.x-btn-default-small-tl,.x-btn-default-small-bl,.x-btn-default-small-tr,.x-btn-default-small-br,.x-btn-default-small-tc,.x-btn-default-small-bc,.x-btn-default-small-ml,.x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-corners.gif)}.x-btn-default-small-ml,.x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-sides.gif)}.x-btn-default-small-mc{padding:0}.x-btn-default-small{border-color:#bbb}.x-btn-button-default-small{height:16px}.x-btn-inner-default-small{font:normal 11px/16px tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-small,.x-btn-icon-left>.x-btn-inner-default-small{max-width:calc(100% - 16px)}.x-btn-icon-el-default-small{height:16px}.x-btn-icon-left>.x-btn-icon-el-default-small,.x-btn-icon-right>.x-btn-icon-el-default-small{width:16px}.x-btn-icon-top>.x-btn-icon-el-default-small,.x-btn-icon-bottom>.x-btn-icon-el-default-small{min-width:16px}.x-btn-icon-el-default-small.x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8 .x-btn-icon-el-default-small.x-btn-glyph{color:#959595}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-small{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-small{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-small{margin-bottom:4px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-small{margin-top:4px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-small{padding-right:4px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-small{margin-right:4px}.x-btn-arrow-bottom>.x-btn-button-default-small,.x-btn-split-bottom>.x-btn-button-default-small{padding-bottom:2px}.x-btn-wrap-default-small.x-btn-arrow-right:after{width:8px;padding-right:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-small.x-btn-arrow-bottom:after{height:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-small.x-btn-split-right:after{width:14px;padding-right:14px;background-image:url(images/button/s-arrow.gif)}.x-btn-wrap-default-small.x-btn-split-bottom:after{height:14px;background-image:url(images/button/s-arrow-b.gif)}.x-btn-over>.x-btn-wrap-default-small.x-btn-split-right:after{background-image:url(images/button/s-arrow-o.gif)}.x-btn-over>.x-btn-wrap-default-small.x-btn-split-bottom:after{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-small{padding-right:4px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-small{margin-right:4px}.x-btn-focus.x-btn-default-small{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-focus.x-btn-default-small .x-btn-wrap{outline:1px dotted #333}.x-btn-over.x-btn-default-small{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn.x-btn-menu-active.x-btn-default-small,.x-btn.x-btn-pressed.x-btn-default-small{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-ms-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn.x-btn-disabled.x-btn-default-small{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-ms-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-focus .x-btn-default-small-tl,.x-btn-focus .x-btn-default-small-bl,.x-btn-focus .x-btn-default-small-tr,.x-btn-focus .x-btn-default-small-br,.x-btn-focus .x-btn-default-small-tc,.x-btn-focus .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-focus-corners.gif)}.x-btn-focus .x-btn-default-small-ml,.x-btn-focus .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-focus-sides.gif)}.x-btn-focus .x-btn-default-small-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-focus-fbg.gif)}.x-btn-over .x-btn-default-small-tl,.x-btn-over .x-btn-default-small-bl,.x-btn-over .x-btn-default-small-tr,.x-btn-over .x-btn-default-small-br,.x-btn-over .x-btn-default-small-tc,.x-btn-over .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-over-corners.gif)}.x-btn-over .x-btn-default-small-ml,.x-btn-over .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-over-sides.gif)}.x-btn-over .x-btn-default-small-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-small-tl,.x-btn-focus.x-btn-over .x-btn-default-small-bl,.x-btn-focus.x-btn-over .x-btn-default-small-tr,.x-btn-focus.x-btn-over .x-btn-default-small-br,.x-btn-focus.x-btn-over .x-btn-default-small-tc,.x-btn-focus.x-btn-over .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-small-ml,.x-btn-focus.x-btn-over .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-small-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-small-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-small-tl,.x-btn.x-btn-menu-active .x-btn-default-small-bl,.x-btn.x-btn-menu-active .x-btn-default-small-tr,.x-btn.x-btn-menu-active .x-btn-default-small-br,.x-btn.x-btn-menu-active .x-btn-default-small-tc,.x-btn.x-btn-menu-active .x-btn-default-small-bc,.x-btn.x-btn-pressed .x-btn-default-small-tl,.x-btn.x-btn-pressed .x-btn-default-small-bl,.x-btn.x-btn-pressed .x-btn-default-small-tr,.x-btn.x-btn-pressed .x-btn-default-small-br,.x-btn.x-btn-pressed .x-btn-default-small-tc,.x-btn.x-btn-pressed .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-small-ml,.x-btn.x-btn-menu-active .x-btn-default-small-mr,.x-btn.x-btn-pressed .x-btn-default-small-ml,.x-btn.x-btn-pressed .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-small-mc,.x-btn.x-btn-pressed .x-btn-default-small-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-small-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-small-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-small-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-small-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-small-br,.x-btn-focus.x-btn-menu-active .x-btn-default-small-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-small-bc,.x-btn-focus.x-btn-pressed .x-btn-default-small-tl,.x-btn-focus.x-btn-pressed .x-btn-default-small-bl,.x-btn-focus.x-btn-pressed .x-btn-default-small-tr,.x-btn-focus.x-btn-pressed .x-btn-default-small-br,.x-btn-focus.x-btn-pressed .x-btn-default-small-tc,.x-btn-focus.x-btn-pressed .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-small-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-small-mr,.x-btn-focus.x-btn-pressed .x-btn-default-small-ml,.x-btn-focus.x-btn-pressed .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-small-mc,.x-btn-focus.x-btn-pressed .x-btn-default-small-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-small-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-small-tl,.x-btn.x-btn-disabled .x-btn-default-small-bl,.x-btn.x-btn-disabled .x-btn-default-small-tr,.x-btn.x-btn-disabled .x-btn-default-small-br,.x-btn.x-btn-disabled .x-btn-default-small-tc,.x-btn.x-btn-disabled .x-btn-default-small-bc{background-image:url(images/btn/btn-default-small-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-small-ml,.x-btn.x-btn-disabled .x-btn-default-small-mr{background-image:url(images/btn/btn-default-small-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-small-mc{background-color:#ececec;background-image:url(images/btn/btn-default-small-disabled-fbg.gif)}.x-nbr .x-btn-default-small{background-image:none}.x-btn-disabled.x-btn-default-small .x-btn-inner,.x-btn-disabled.x-btn-default-small .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:-ms-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-medium-mc{background-image:url(images/btn/btn-default-medium-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nbr .x-btn-default-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-medium-tl{background-position:0 -6px}.x-btn-default-medium-tr{background-position:right -9px}.x-btn-default-medium-bl{background-position:0 -12px}.x-btn-default-medium-br{background-position:right -15px}.x-btn-default-medium-ml{background-position:0 top}.x-btn-default-medium-mr{background-position:right top}.x-btn-default-medium-tc{background-position:0 0}.x-btn-default-medium-bc{background-position:0 -3px}.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-mr{padding-right:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-ml{padding-left:3px}.x-btn-default-medium-tc{height:3px}.x-btn-default-medium-bc{height:3px}.x-btn-default-medium-tl,.x-btn-default-medium-bl,.x-btn-default-medium-tr,.x-btn-default-medium-br,.x-btn-default-medium-tc,.x-btn-default-medium-bc,.x-btn-default-medium-ml,.x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-corners.gif)}.x-btn-default-medium-ml,.x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-sides.gif)}.x-btn-default-medium-mc{padding:1px 1px 1px 1px}.x-btn-default-medium{border-color:#bbb}.x-btn-button-default-medium{height:24px}.x-btn-inner-default-medium{font:normal 11px/16px tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-medium,.x-btn-icon-left>.x-btn-inner-default-medium{max-width:calc(100% - 24px)}.x-btn-icon-el-default-medium{height:24px}.x-btn-icon-left>.x-btn-icon-el-default-medium,.x-btn-icon-right>.x-btn-icon-el-default-medium{width:24px}.x-btn-icon-top>.x-btn-icon-el-default-medium,.x-btn-icon-bottom>.x-btn-icon-el-default-medium{min-width:24px}.x-btn-icon-el-default-medium.x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8 .x-btn-icon-el-default-medium.x-btn-glyph{color:#959595}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-medium{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-medium{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-medium{margin-bottom:4px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-medium{margin-top:4px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-medium{padding-right:4px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-medium{margin-right:4px}.x-btn-arrow-bottom>.x-btn-button-default-medium,.x-btn-split-bottom>.x-btn-button-default-medium{padding-bottom:3px}.x-btn-wrap-default-medium.x-btn-arrow-right:after{width:8px;padding-right:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-medium.x-btn-arrow-bottom:after{height:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-medium.x-btn-split-right:after{width:14px;padding-right:14px;background-image:url(images/button/s-arrow.gif)}.x-btn-wrap-default-medium.x-btn-split-bottom:after{height:14px;background-image:url(images/button/s-arrow-b.gif)}.x-btn-over>.x-btn-wrap-default-medium.x-btn-split-right:after{background-image:url(images/button/s-arrow-o.gif)}.x-btn-over>.x-btn-wrap-default-medium.x-btn-split-bottom:after{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-medium{padding-right:4px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-medium{margin-right:4px}.x-btn-focus.x-btn-default-medium{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-focus.x-btn-default-medium .x-btn-wrap{outline:1px dotted #333}.x-btn-over.x-btn-default-medium{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn.x-btn-menu-active.x-btn-default-medium,.x-btn.x-btn-pressed.x-btn-default-medium{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-ms-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn.x-btn-disabled.x-btn-default-medium{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-ms-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-focus .x-btn-default-medium-tl,.x-btn-focus .x-btn-default-medium-bl,.x-btn-focus .x-btn-default-medium-tr,.x-btn-focus .x-btn-default-medium-br,.x-btn-focus .x-btn-default-medium-tc,.x-btn-focus .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-focus-corners.gif)}.x-btn-focus .x-btn-default-medium-ml,.x-btn-focus .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-focus-sides.gif)}.x-btn-focus .x-btn-default-medium-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-focus-fbg.gif)}.x-btn-over .x-btn-default-medium-tl,.x-btn-over .x-btn-default-medium-bl,.x-btn-over .x-btn-default-medium-tr,.x-btn-over .x-btn-default-medium-br,.x-btn-over .x-btn-default-medium-tc,.x-btn-over .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-over-corners.gif)}.x-btn-over .x-btn-default-medium-ml,.x-btn-over .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-over-sides.gif)}.x-btn-over .x-btn-default-medium-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-medium-tl,.x-btn-focus.x-btn-over .x-btn-default-medium-bl,.x-btn-focus.x-btn-over .x-btn-default-medium-tr,.x-btn-focus.x-btn-over .x-btn-default-medium-br,.x-btn-focus.x-btn-over .x-btn-default-medium-tc,.x-btn-focus.x-btn-over .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-medium-ml,.x-btn-focus.x-btn-over .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-medium-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-medium-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-medium-tl,.x-btn.x-btn-menu-active .x-btn-default-medium-bl,.x-btn.x-btn-menu-active .x-btn-default-medium-tr,.x-btn.x-btn-menu-active .x-btn-default-medium-br,.x-btn.x-btn-menu-active .x-btn-default-medium-tc,.x-btn.x-btn-menu-active .x-btn-default-medium-bc,.x-btn.x-btn-pressed .x-btn-default-medium-tl,.x-btn.x-btn-pressed .x-btn-default-medium-bl,.x-btn.x-btn-pressed .x-btn-default-medium-tr,.x-btn.x-btn-pressed .x-btn-default-medium-br,.x-btn.x-btn-pressed .x-btn-default-medium-tc,.x-btn.x-btn-pressed .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-medium-ml,.x-btn.x-btn-menu-active .x-btn-default-medium-mr,.x-btn.x-btn-pressed .x-btn-default-medium-ml,.x-btn.x-btn-pressed .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-medium-mc,.x-btn.x-btn-pressed .x-btn-default-medium-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-medium-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-medium-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-br,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-bc,.x-btn-focus.x-btn-pressed .x-btn-default-medium-tl,.x-btn-focus.x-btn-pressed .x-btn-default-medium-bl,.x-btn-focus.x-btn-pressed .x-btn-default-medium-tr,.x-btn-focus.x-btn-pressed .x-btn-default-medium-br,.x-btn-focus.x-btn-pressed .x-btn-default-medium-tc,.x-btn-focus.x-btn-pressed .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-medium-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-medium-mr,.x-btn-focus.x-btn-pressed .x-btn-default-medium-ml,.x-btn-focus.x-btn-pressed .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-medium-mc,.x-btn-focus.x-btn-pressed .x-btn-default-medium-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-medium-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-medium-tl,.x-btn.x-btn-disabled .x-btn-default-medium-bl,.x-btn.x-btn-disabled .x-btn-default-medium-tr,.x-btn.x-btn-disabled .x-btn-default-medium-br,.x-btn.x-btn-disabled .x-btn-default-medium-tc,.x-btn.x-btn-disabled .x-btn-default-medium-bc{background-image:url(images/btn/btn-default-medium-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-medium-ml,.x-btn.x-btn-disabled .x-btn-default-medium-mr{background-image:url(images/btn/btn-default-medium-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-medium-mc{background-color:#ececec;background-image:url(images/btn/btn-default-medium-disabled-fbg.gif)}.x-nbr .x-btn-default-medium{background-image:none}.x-btn-disabled.x-btn-default-medium .x-btn-inner,.x-btn-disabled.x-btn-default-medium .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#f8f8f8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#fff,#eee);background-image:-moz-linear-gradient(top,#fff,#eee);background-image:-o-linear-gradient(top,#fff,#eee);background-image:-ms-linear-gradient(top,#fff,#eee);background-image:linear-gradient(top,#fff,#eee)}.x-btn-default-large-mc{background-image:url(images/btn/btn-default-large-fbg.gif);background-position:0 top;background-color:#f8f8f8}.x-nbr .x-btn-default-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-btn-default-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-large-tl{background-position:0 -6px}.x-btn-default-large-tr{background-position:right -9px}.x-btn-default-large-bl{background-position:0 -12px}.x-btn-default-large-br{background-position:right -15px}.x-btn-default-large-ml{background-position:0 top}.x-btn-default-large-mr{background-position:right top}.x-btn-default-large-tc{background-position:0 0}.x-btn-default-large-bc{background-position:0 -3px}.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-mr{padding-right:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-ml{padding-left:3px}.x-btn-default-large-tc{height:3px}.x-btn-default-large-bc{height:3px}.x-btn-default-large-tl,.x-btn-default-large-bl,.x-btn-default-large-tr,.x-btn-default-large-br,.x-btn-default-large-tc,.x-btn-default-large-bc,.x-btn-default-large-ml,.x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-corners.gif)}.x-btn-default-large-ml,.x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-sides.gif)}.x-btn-default-large-mc{padding:1px 1px 1px 1px}.x-btn-default-large{border-color:#bbb}.x-btn-button-default-large{height:32px}.x-btn-inner-default-large{font:normal 11px/16px tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-large,.x-btn-icon-left>.x-btn-inner-default-large{max-width:calc(100% - 32px)}.x-btn-icon-el-default-large{height:32px}.x-btn-icon-left>.x-btn-icon-el-default-large,.x-btn-icon-right>.x-btn-icon-el-default-large{width:32px}.x-btn-icon-top>.x-btn-icon-el-default-large,.x-btn-icon-bottom>.x-btn-icon-el-default-large{min-width:32px}.x-btn-icon-el-default-large.x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8 .x-btn-icon-el-default-large.x-btn-glyph{color:#959595}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-large{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-large{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-large{margin-bottom:4px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-large{margin-top:4px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-large{padding-right:4px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-large{margin-right:4px}.x-btn-arrow-bottom>.x-btn-button-default-large,.x-btn-split-bottom>.x-btn-button-default-large{padding-bottom:3px}.x-btn-wrap-default-large.x-btn-arrow-right:after{width:8px;padding-right:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-large.x-btn-arrow-bottom:after{height:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-large.x-btn-split-right:after{width:14px;padding-right:14px;background-image:url(images/button/s-arrow.gif)}.x-btn-wrap-default-large.x-btn-split-bottom:after{height:14px;background-image:url(images/button/s-arrow-b.gif)}.x-btn-over>.x-btn-wrap-default-large.x-btn-split-right:after{background-image:url(images/button/s-arrow-o.gif)}.x-btn-over>.x-btn-wrap-default-large.x-btn-split-bottom:after{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-large{padding-right:4px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-large{margin-right:4px}.x-btn-focus.x-btn-default-large{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-focus.x-btn-default-large .x-btn-wrap{outline:1px dotted #333}.x-btn-over.x-btn-default-large{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn.x-btn-menu-active.x-btn-default-large,.x-btn.x-btn-pressed.x-btn-default-large{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-ms-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn.x-btn-disabled.x-btn-default-large{border-color:#d7d7d7;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f4f4f4),color-stop(100%,#e2e2e2));background-image:-webkit-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-moz-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-o-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:-ms-linear-gradient(top,#f4f4f4,#e2e2e2);background-image:linear-gradient(top,#f4f4f4,#e2e2e2)}.x-btn-focus .x-btn-default-large-tl,.x-btn-focus .x-btn-default-large-bl,.x-btn-focus .x-btn-default-large-tr,.x-btn-focus .x-btn-default-large-br,.x-btn-focus .x-btn-default-large-tc,.x-btn-focus .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-focus-corners.gif)}.x-btn-focus .x-btn-default-large-ml,.x-btn-focus .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-focus-sides.gif)}.x-btn-focus .x-btn-default-large-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-focus-fbg.gif)}.x-btn-over .x-btn-default-large-tl,.x-btn-over .x-btn-default-large-bl,.x-btn-over .x-btn-default-large-tr,.x-btn-over .x-btn-default-large-br,.x-btn-over .x-btn-default-large-tc,.x-btn-over .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-over-corners.gif)}.x-btn-over .x-btn-default-large-ml,.x-btn-over .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-over-sides.gif)}.x-btn-over .x-btn-default-large-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-large-tl,.x-btn-focus.x-btn-over .x-btn-default-large-bl,.x-btn-focus.x-btn-over .x-btn-default-large-tr,.x-btn-focus.x-btn-over .x-btn-default-large-br,.x-btn-focus.x-btn-over .x-btn-default-large-tc,.x-btn-focus.x-btn-over .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-large-ml,.x-btn-focus.x-btn-over .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-large-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-large-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-large-tl,.x-btn.x-btn-menu-active .x-btn-default-large-bl,.x-btn.x-btn-menu-active .x-btn-default-large-tr,.x-btn.x-btn-menu-active .x-btn-default-large-br,.x-btn.x-btn-menu-active .x-btn-default-large-tc,.x-btn.x-btn-menu-active .x-btn-default-large-bc,.x-btn.x-btn-pressed .x-btn-default-large-tl,.x-btn.x-btn-pressed .x-btn-default-large-bl,.x-btn.x-btn-pressed .x-btn-default-large-tr,.x-btn.x-btn-pressed .x-btn-default-large-br,.x-btn.x-btn-pressed .x-btn-default-large-tc,.x-btn.x-btn-pressed .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-large-ml,.x-btn.x-btn-menu-active .x-btn-default-large-mr,.x-btn.x-btn-pressed .x-btn-default-large-ml,.x-btn.x-btn-pressed .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-large-mc,.x-btn.x-btn-pressed .x-btn-default-large-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-large-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-large-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-large-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-large-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-large-br,.x-btn-focus.x-btn-menu-active .x-btn-default-large-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-large-bc,.x-btn-focus.x-btn-pressed .x-btn-default-large-tl,.x-btn-focus.x-btn-pressed .x-btn-default-large-bl,.x-btn-focus.x-btn-pressed .x-btn-default-large-tr,.x-btn-focus.x-btn-pressed .x-btn-default-large-br,.x-btn-focus.x-btn-pressed .x-btn-default-large-tc,.x-btn-focus.x-btn-pressed .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-large-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-large-mr,.x-btn-focus.x-btn-pressed .x-btn-default-large-ml,.x-btn-focus.x-btn-pressed .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-large-mc,.x-btn-focus.x-btn-pressed .x-btn-default-large-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-large-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-large-tl,.x-btn.x-btn-disabled .x-btn-default-large-bl,.x-btn.x-btn-disabled .x-btn-default-large-tr,.x-btn.x-btn-disabled .x-btn-default-large-br,.x-btn.x-btn-disabled .x-btn-default-large-tc,.x-btn.x-btn-disabled .x-btn-default-large-bc{background-image:url(images/btn/btn-default-large-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-large-ml,.x-btn.x-btn-disabled .x-btn-default-large-mr{background-image:url(images/btn/btn-default-large-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-large-mc{background-color:#ececec;background-image:url(images/btn/btn-default-large-disabled-fbg.gif)}.x-nbr .x-btn-default-large{background-image:none}.x-btn-disabled.x-btn-default-large .x-btn-inner,.x-btn-disabled.x-btn-default-large .x-btn-icon-el{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-small{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-small-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-small{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-btn-default-toolbar-small-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-btn-default-toolbar-small-tl{background-position:0 -6px}.x-btn-default-toolbar-small-tr{background-position:right -9px}.x-btn-default-toolbar-small-bl{background-position:0 -12px}.x-btn-default-toolbar-small-br{background-position:right -15px}.x-btn-default-toolbar-small-ml{background-position:0 top}.x-btn-default-toolbar-small-mr{background-position:right top}.x-btn-default-toolbar-small-tc{background-position:0 0}.x-btn-default-toolbar-small-bc{background-position:0 -3px}.x-btn-default-toolbar-small-tr,.x-btn-default-toolbar-small-br,.x-btn-default-toolbar-small-mr{padding-right:3px}.x-btn-default-toolbar-small-tl,.x-btn-default-toolbar-small-bl,.x-btn-default-toolbar-small-ml{padding-left:3px}.x-btn-default-toolbar-small-tc{height:3px}.x-btn-default-toolbar-small-bc{height:3px}.x-btn-default-toolbar-small-mc{padding:0}.x-btn-default-toolbar-small{border-color:transparent}.x-btn-button-default-toolbar-small{height:16px}.x-btn-inner-default-toolbar-small{font:normal 11px/16px tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-toolbar-small,.x-btn-icon-left>.x-btn-inner-default-toolbar-small{max-width:calc(100% - 16px)}.x-btn-icon-el-default-toolbar-small{height:16px}.x-btn-icon-left>.x-btn-icon-el-default-toolbar-small,.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{width:16px}.x-btn-icon-top>.x-btn-icon-el-default-toolbar-small,.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-small{min-width:16px}.x-btn-icon-el-default-toolbar-small.x-btn-glyph{font-size:16px;line-height:16px;color:#333;opacity:.5}.x-ie8 .x-btn-icon-el-default-toolbar-small.x-btn-glyph{color:#999}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-toolbar-small{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-toolbar-small{margin-bottom:4px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-small{margin-top:4px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-small{padding-right:4px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{margin-right:4px}.x-btn-arrow-bottom>.x-btn-button-default-toolbar-small,.x-btn-split-bottom>.x-btn-button-default-toolbar-small{padding-bottom:2px}.x-btn-wrap-default-toolbar-small.x-btn-arrow-right:after{width:8px;padding-right:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-toolbar-small.x-btn-arrow-bottom:after{height:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-toolbar-small.x-btn-split-right:after{width:14px;padding-right:14px;background-image:url(images/button/s-arrow-noline.gif)}.x-btn-wrap-default-toolbar-small.x-btn-split-bottom:after{height:14px;background-image:url(images/button/s-arrow-b-noline.gif)}.x-btn-over>.x-btn-wrap-default-toolbar-small.x-btn-split-right:after{background-image:url(images/button/s-arrow-o.gif)}.x-btn-over>.x-btn-wrap-default-toolbar-small.x-btn-split-bottom:after{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-small{padding-right:4px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-small{margin-right:4px}.x-btn-focus.x-btn-default-toolbar-small{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-focus.x-btn-default-toolbar-small .x-btn-wrap{outline:1px dotted #333}.x-btn-over.x-btn-default-toolbar-small{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn.x-btn-menu-active.x-btn-default-toolbar-small,.x-btn.x-btn-pressed.x-btn-default-toolbar-small{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-ms-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn.x-btn-disabled.x-btn-default-toolbar-small{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn.x-btn-disabled.x-btn-default-toolbar-small .x-btn-inner{color:#8c8c8c}.x-btn-focus .x-btn-default-toolbar-small-tl,.x-btn-focus .x-btn-default-toolbar-small-bl,.x-btn-focus .x-btn-default-toolbar-small-tr,.x-btn-focus .x-btn-default-toolbar-small-br,.x-btn-focus .x-btn-default-toolbar-small-tc,.x-btn-focus .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-corners.gif)}.x-btn-focus .x-btn-default-toolbar-small-ml,.x-btn-focus .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-sides.gif)}.x-btn-focus .x-btn-default-toolbar-small-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-focus-fbg.gif)}.x-btn-over .x-btn-default-toolbar-small-tl,.x-btn-over .x-btn-default-toolbar-small-bl,.x-btn-over .x-btn-default-toolbar-small-tr,.x-btn-over .x-btn-default-toolbar-small-br,.x-btn-over .x-btn-default-toolbar-small-tc,.x-btn-over .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-over-corners.gif)}.x-btn-over .x-btn-default-toolbar-small-ml,.x-btn-over .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-over-sides.gif)}.x-btn-over .x-btn-default-toolbar-small-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-tl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-bl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-tr,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-br,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-tc,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-ml,.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-small-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-small-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-tl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-bl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-tr,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-br,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-tc,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-bc,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-tl,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-bl,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-tr,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-br,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-tc,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-ml,.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-mr,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-ml,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-small-mc,.x-btn.x-btn-pressed .x-btn-default-toolbar-small-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-small-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-br,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-bc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-tl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-bl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-tr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-br,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-tc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-mr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-ml,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-small-mc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-small-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-small-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-small-tl,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-bl,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-tr,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-br,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-tc,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-bc{background-image:url(images/btn/btn-default-toolbar-small-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-small-ml,.x-btn.x-btn-disabled .x-btn-default-toolbar-small-mr{background-image:url(images/btn/btn-default-toolbar-small-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-small-mc{background-color:transparent;background-image:url(images/btn/btn-default-toolbar-small-disabled-fbg.gif)}.x-nbr .x-btn-default-toolbar-small{background-image:none}.x-btn-disabled.x-btn-default-toolbar-small{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-medium{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-medium-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-medium{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-btn-default-toolbar-medium-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-medium-tl{background-position:0 -6px}.x-btn-default-toolbar-medium-tr{background-position:right -9px}.x-btn-default-toolbar-medium-bl{background-position:0 -12px}.x-btn-default-toolbar-medium-br{background-position:right -15px}.x-btn-default-toolbar-medium-ml{background-position:0 top}.x-btn-default-toolbar-medium-mr{background-position:right top}.x-btn-default-toolbar-medium-tc{background-position:0 0}.x-btn-default-toolbar-medium-bc{background-position:0 -3px}.x-btn-default-toolbar-medium-tr,.x-btn-default-toolbar-medium-br,.x-btn-default-toolbar-medium-mr{padding-right:3px}.x-btn-default-toolbar-medium-tl,.x-btn-default-toolbar-medium-bl,.x-btn-default-toolbar-medium-ml{padding-left:3px}.x-btn-default-toolbar-medium-tc{height:3px}.x-btn-default-toolbar-medium-bc{height:3px}.x-btn-default-toolbar-medium-mc{padding:1px 1px 1px 1px}.x-btn-default-toolbar-medium{border-color:transparent}.x-btn-button-default-toolbar-medium{height:24px}.x-btn-inner-default-toolbar-medium{font:normal 11px/16px tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-toolbar-medium,.x-btn-icon-left>.x-btn-inner-default-toolbar-medium{max-width:calc(100% - 24px)}.x-btn-icon-el-default-toolbar-medium{height:24px}.x-btn-icon-left>.x-btn-icon-el-default-toolbar-medium,.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{width:24px}.x-btn-icon-top>.x-btn-icon-el-default-toolbar-medium,.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-medium{min-width:24px}.x-btn-icon-el-default-toolbar-medium.x-btn-glyph{font-size:24px;line-height:24px;color:#333;opacity:.5}.x-ie8 .x-btn-icon-el-default-toolbar-medium.x-btn-glyph{color:#999}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-toolbar-medium{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-toolbar-medium{margin-bottom:4px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-medium{margin-top:4px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-medium{padding-right:4px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{margin-right:4px}.x-btn-arrow-bottom>.x-btn-button-default-toolbar-medium,.x-btn-split-bottom>.x-btn-button-default-toolbar-medium{padding-bottom:3px}.x-btn-wrap-default-toolbar-medium.x-btn-arrow-right:after{width:8px;padding-right:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-toolbar-medium.x-btn-arrow-bottom:after{height:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-toolbar-medium.x-btn-split-right:after{width:14px;padding-right:14px;background-image:url(images/button/s-arrow-noline.gif)}.x-btn-wrap-default-toolbar-medium.x-btn-split-bottom:after{height:14px;background-image:url(images/button/s-arrow-b-noline.gif)}.x-btn-over>.x-btn-wrap-default-toolbar-medium.x-btn-split-right:after{background-image:url(images/button/s-arrow-o.gif)}.x-btn-over>.x-btn-wrap-default-toolbar-medium.x-btn-split-bottom:after{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-medium{padding-right:4px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-medium{margin-right:4px}.x-btn-focus.x-btn-default-toolbar-medium{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-focus.x-btn-default-toolbar-medium .x-btn-wrap{outline:1px dotted #333}.x-btn-over.x-btn-default-toolbar-medium{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn.x-btn-menu-active.x-btn-default-toolbar-medium,.x-btn.x-btn-pressed.x-btn-default-toolbar-medium{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-ms-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn.x-btn-disabled.x-btn-default-toolbar-medium{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn.x-btn-disabled.x-btn-default-toolbar-medium .x-btn-inner{color:#8c8c8c}.x-btn-focus .x-btn-default-toolbar-medium-tl,.x-btn-focus .x-btn-default-toolbar-medium-bl,.x-btn-focus .x-btn-default-toolbar-medium-tr,.x-btn-focus .x-btn-default-toolbar-medium-br,.x-btn-focus .x-btn-default-toolbar-medium-tc,.x-btn-focus .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-corners.gif)}.x-btn-focus .x-btn-default-toolbar-medium-ml,.x-btn-focus .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-sides.gif)}.x-btn-focus .x-btn-default-toolbar-medium-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-focus-fbg.gif)}.x-btn-over .x-btn-default-toolbar-medium-tl,.x-btn-over .x-btn-default-toolbar-medium-bl,.x-btn-over .x-btn-default-toolbar-medium-tr,.x-btn-over .x-btn-default-toolbar-medium-br,.x-btn-over .x-btn-default-toolbar-medium-tc,.x-btn-over .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-over-corners.gif)}.x-btn-over .x-btn-default-toolbar-medium-ml,.x-btn-over .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-over-sides.gif)}.x-btn-over .x-btn-default-toolbar-medium-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-tl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-bl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-tr,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-br,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-tc,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-ml,.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-medium-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-medium-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-tl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-bl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-tr,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-br,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-tc,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-bc,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-tl,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-bl,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-tr,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-br,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-tc,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-ml,.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-mr,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-ml,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-medium-mc,.x-btn.x-btn-pressed .x-btn-default-toolbar-medium-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-medium-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-br,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-bc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-tl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-bl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-tr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-br,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-tc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-mr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-ml,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-medium-mc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-medium-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-medium-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-tl,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-bl,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-tr,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-br,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-tc,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-bc{background-image:url(images/btn/btn-default-toolbar-medium-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-ml,.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-mr{background-image:url(images/btn/btn-default-toolbar-medium-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-medium-mc{background-color:transparent;background-image:url(images/btn/btn-default-toolbar-medium-disabled-fbg.gif)}.x-nbr .x-btn-default-toolbar-medium{background-image:none}.x-btn-disabled.x-btn-default-toolbar-medium{filter:alpha(opacity=50);opacity:.5}.x-btn-default-toolbar-large{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-color:transparent}.x-btn-default-toolbar-large-mc{background-color:transparent}.x-nbr .x-btn-default-toolbar-large{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-btn-default-toolbar-large-frameInfo{font-family:th-3-3-3-3-1-1-1-1-3-3-3-3}.x-btn-default-toolbar-large-tl{background-position:0 -6px}.x-btn-default-toolbar-large-tr{background-position:right -9px}.x-btn-default-toolbar-large-bl{background-position:0 -12px}.x-btn-default-toolbar-large-br{background-position:right -15px}.x-btn-default-toolbar-large-ml{background-position:0 top}.x-btn-default-toolbar-large-mr{background-position:right top}.x-btn-default-toolbar-large-tc{background-position:0 0}.x-btn-default-toolbar-large-bc{background-position:0 -3px}.x-btn-default-toolbar-large-tr,.x-btn-default-toolbar-large-br,.x-btn-default-toolbar-large-mr{padding-right:3px}.x-btn-default-toolbar-large-tl,.x-btn-default-toolbar-large-bl,.x-btn-default-toolbar-large-ml{padding-left:3px}.x-btn-default-toolbar-large-tc{height:3px}.x-btn-default-toolbar-large-bc{height:3px}.x-btn-default-toolbar-large-mc{padding:1px 1px 1px 1px}.x-btn-default-toolbar-large{border-color:transparent}.x-btn-button-default-toolbar-large{height:32px}.x-btn-inner-default-toolbar-large{font:normal 11px/16px tahoma,arial,verdana,sans-serif;color:#333;padding:0 4px;max-width:100%}.x-btn-icon-right>.x-btn-inner-default-toolbar-large,.x-btn-icon-left>.x-btn-inner-default-toolbar-large{max-width:calc(100% - 32px)}.x-btn-icon-el-default-toolbar-large{height:32px}.x-btn-icon-left>.x-btn-icon-el-default-toolbar-large,.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{width:32px}.x-btn-icon-top>.x-btn-icon-el-default-toolbar-large,.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-large{min-width:32px}.x-btn-icon-el-default-toolbar-large.x-btn-glyph{font-size:32px;line-height:32px;color:#333;opacity:.5}.x-ie8 .x-btn-icon-el-default-toolbar-large.x-btn-glyph{color:#999}.x-btn-text.x-btn-icon-left>.x-btn-icon-el-default-toolbar-large{margin-right:0}.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{margin-left:0}.x-btn-text.x-btn-icon-top>.x-btn-icon-el-default-toolbar-large{margin-bottom:4px}.x-btn-text.x-btn-icon-bottom>.x-btn-icon-el-default-toolbar-large{margin-top:4px}.x-btn-arrow-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-large{padding-right:4px}.x-btn-arrow-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{margin-right:4px}.x-btn-arrow-bottom>.x-btn-button-default-toolbar-large,.x-btn-split-bottom>.x-btn-button-default-toolbar-large{padding-bottom:3px}.x-btn-wrap-default-toolbar-large.x-btn-arrow-right:after{width:8px;padding-right:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-toolbar-large.x-btn-arrow-bottom:after{height:8px;background-image:url(images/button/arrow.gif)}.x-btn-wrap-default-toolbar-large.x-btn-split-right:after{width:14px;padding-right:14px;background-image:url(images/button/s-arrow-noline.gif)}.x-btn-wrap-default-toolbar-large.x-btn-split-bottom:after{height:14px;background-image:url(images/button/s-arrow-b-noline.gif)}.x-btn-over>.x-btn-wrap-default-toolbar-large.x-btn-split-right:after{background-image:url(images/button/s-arrow-o.gif)}.x-btn-over>.x-btn-wrap-default-toolbar-large.x-btn-split-bottom:after{background-image:url(images/button/s-arrow-bo.gif)}.x-btn-split-right>.x-btn-icon.x-btn-no-text.x-btn-button-default-toolbar-large{padding-right:4px}.x-btn-split-right>.x-btn-text.x-btn-icon-right>.x-btn-icon-el-default-toolbar-large{margin-right:4px}.x-btn-focus.x-btn-default-toolbar-large{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn-focus.x-btn-default-toolbar-large .x-btn-wrap{outline:1px dotted #333}.x-btn-over.x-btn-default-toolbar-large{border-color:#9d9d9d;background-image:none;background-color:#f3f3f3;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fbfbfb),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-moz-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-o-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:-ms-linear-gradient(top,#fbfbfb,#e9e9e9);background-image:linear-gradient(top,#fbfbfb,#e9e9e9)}.x-btn.x-btn-menu-active.x-btn-default-toolbar-large,.x-btn.x-btn-pressed.x-btn-default-toolbar-large{border-color:#9d9d9d;background-image:none;background-color:#d6d6d6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#c7c7c7),color-stop(100%,#e0e0e0));background-image:-webkit-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-moz-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-o-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:-ms-linear-gradient(top,#c7c7c7,#e0e0e0);background-image:linear-gradient(top,#c7c7c7,#e0e0e0)}.x-btn.x-btn-disabled.x-btn-default-toolbar-large{border-color:#d7d7d7;background-image:none;background-color:transparent}.x-btn.x-btn-disabled.x-btn-default-toolbar-large .x-btn-inner{color:#8c8c8c}.x-btn-focus .x-btn-default-toolbar-large-tl,.x-btn-focus .x-btn-default-toolbar-large-bl,.x-btn-focus .x-btn-default-toolbar-large-tr,.x-btn-focus .x-btn-default-toolbar-large-br,.x-btn-focus .x-btn-default-toolbar-large-tc,.x-btn-focus .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-corners.gif)}.x-btn-focus .x-btn-default-toolbar-large-ml,.x-btn-focus .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-sides.gif)}.x-btn-focus .x-btn-default-toolbar-large-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-focus-fbg.gif)}.x-btn-over .x-btn-default-toolbar-large-tl,.x-btn-over .x-btn-default-toolbar-large-bl,.x-btn-over .x-btn-default-toolbar-large-tr,.x-btn-over .x-btn-default-toolbar-large-br,.x-btn-over .x-btn-default-toolbar-large-tc,.x-btn-over .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-over-corners.gif)}.x-btn-over .x-btn-default-toolbar-large-ml,.x-btn-over .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-over-sides.gif)}.x-btn-over .x-btn-default-toolbar-large-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-over-fbg.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-tl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-bl,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-tr,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-br,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-tc,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-over-corners.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-ml,.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-over-sides.gif)}.x-btn-focus.x-btn-over .x-btn-default-toolbar-large-mc{background-color:#f3f3f3;background-image:url(images/btn/btn-default-toolbar-large-focus-over-fbg.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-tl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-bl,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-tr,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-br,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-tc,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-bc,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-tl,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-bl,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-tr,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-br,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-tc,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-pressed-corners.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-ml,.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-mr,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-ml,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-pressed-sides.gif)}.x-btn.x-btn-menu-active .x-btn-default-toolbar-large-mc,.x-btn.x-btn-pressed .x-btn-default-toolbar-large-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-large-pressed-fbg.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-tl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-bl,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-tr,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-br,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-tc,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-bc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-tl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-bl,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-tr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-br,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-tc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-focus-pressed-corners.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-ml,.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-mr,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-ml,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-focus-pressed-sides.gif)}.x-btn-focus.x-btn-menu-active .x-btn-default-toolbar-large-mc,.x-btn-focus.x-btn-pressed .x-btn-default-toolbar-large-mc{background-color:#d6d6d6;background-image:url(images/btn/btn-default-toolbar-large-focus-pressed-fbg.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-large-tl,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-bl,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-tr,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-br,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-tc,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-bc{background-image:url(images/btn/btn-default-toolbar-large-disabled-corners.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-large-ml,.x-btn.x-btn-disabled .x-btn-default-toolbar-large-mr{background-image:url(images/btn/btn-default-toolbar-large-disabled-sides.gif)}.x-btn.x-btn-disabled .x-btn-default-toolbar-large-mc{background-color:transparent;background-image:url(images/btn/btn-default-toolbar-large-disabled-fbg.gif)}.x-nbr .x-btn-default-toolbar-large{background-image:none}.x-btn-disabled.x-btn-default-toolbar-large{filter:alpha(opacity=50);opacity:.5}.x-collapse-el{cursor:pointer}.x-layout-split-left,.x-layout-split-right{top:50%;margin-top:-18px;width:5px;height:35px}.x-layout-split-top,.x-layout-split-bottom{left:50%;width:35px;height:5px;margin-left:-18px}.x-layout-split-left{background-image:url(images/util/splitter/mini-left.gif)}.x-layout-split-right{background-image:url(images/util/splitter/mini-right.gif)}.x-layout-split-top{background-image:url(images/util/splitter/mini-top.gif)}.x-layout-split-bottom{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-left{background-image:url(images/util/splitter/mini-right.gif)}.x-splitter-collapsed .x-layout-split-right{background-image:url(images/util/splitter/mini-left.gif)}.x-splitter-collapsed .x-layout-split-top{background-image:url(images/util/splitter/mini-bottom.gif)}.x-splitter-collapsed .x-layout-split-bottom{background-image:url(images/util/splitter/mini-top.gif)}.x-splitter-active{background-color:#b4b4b4;filter:alpha(opacity=80);opacity:.8}.x-splitter-active .x-collapse-el{filter:alpha(opacity=30);opacity:.3}.x-toolbar-default{padding:2px 0 2px 2px;border-style:solid;border-color:#bcb0b0;border-width:1px;background-image:none;background-color:#d8d8d8;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#e6e6e6),color-stop(100%,#efefef));background-image:-webkit-linear-gradient(top,#e6e6e6,#efefef);background-image:-moz-linear-gradient(top,#e6e6e6,#efefef);background-image:-o-linear-gradient(top,#e6e6e6,#efefef);background-image:-ms-linear-gradient(top,#e6e6e6,#efefef);background-image:linear-gradient(top,#e6e6e6,#efefef)}.x-toolbar-default .x-toolbar-item{margin:0 2px 0 0}.x-toolbar-default .x-toolbar-separator-horizontal{margin:0 2px 0 0;height:14px;border-style:solid;border-width:0 1px;border-left-color:#aca899;border-right-color:white}.x-toolbar-default .x-box-menu-after{margin:0 2px}.x-toolbar-default-vertical{padding:2px 2px 0}.x-toolbar-default-vertical .x-toolbar-item{margin:0 0 2px 0}.x-toolbar-default-vertical .x-toolbar-separator-vertical{margin:0 5px 2px;border-style:solid none;border-width:1px 0;border-top-color:#aca899;border-bottom-color:white}.x-toolbar-default-vertical .x-box-menu-after{margin:2px 0}.x-nlg .x-toolbar-default{background-image:url(images/toolbar/toolbar-default-bg.gif)!important;background-repeat:repeat-x}.x-toolbar-text-default{padding:0 4px;color:black;font:normal 11px/16px tahoma,arial,verdana,sans-serif}.x-toolbar-spacer-default{width:2px}.x-toolbar-default-scroller .x-box-scroller-body-horizontal{margin-left:12px}.x-toolbar-default-vertical-scroller .x-box-scroller-body-vertical{margin-top:13px}.x-box-scroller-toolbar-default{cursor:pointer}.x-box-scroller-toolbar-default.x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-box-scroller-toolbar-default.x-box-scroller-left,.x-box-scroller-toolbar-default.x-box-scroller-right{width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;top:50%;margin-top:-11px}.x-box-scroller-toolbar-default.x-box-scroller-left{margin-left:0;margin-right:0;margin-bottom:0;background-image:url(images/toolbar/default-scroll-left.gif);background-position:-14px 0}.x-box-scroller-toolbar-default.x-box-scroller-left.x-box-scroller-hover{background-position:0 0}.x-box-scroller-toolbar-default.x-box-scroller-right{margin-left:0;margin-right:0;margin-bottom:0;background-image:url(images/toolbar/default-scroll-right.gif);background-position:0 0}.x-box-scroller-toolbar-default.x-box-scroller-right.x-box-scroller-hover{background-position:-14px 0}.x-box-scroller-toolbar-default.x-box-scroller-top,.x-box-scroller-toolbar-default.x-box-scroller-bottom{height:5px;width:35px;left:50%;margin-left:-17px}.x-box-scroller-toolbar-default.x-box-scroller-top{margin-top:5px;margin-right:0;margin-bottom:5px;background-image:url(images/toolbar/default-scroll-top.gif);background-position:0 -5px}.x-box-scroller-toolbar-default.x-box-scroller-top.x-box-scroller-hover{background-position:0 0}.x-box-scroller-toolbar-default.x-box-scroller-bottom{margin-top:5px;margin-right:0;margin-bottom:5px;background-image:url(images/toolbar/default-scroll-bottom.gif);background-position:0 0}.x-box-scroller-toolbar-default.x-box-scroller-bottom.x-box-scroller-hover{background-position:0 -5px}.x-ie8 .x-box-scroller-toolbar-default{background-color:#d8d8d8}.x-toolbar-more-icon{background-image:url(images/toolbar/default-more.gif)}.x-toolbar-footer{padding:4px 0 4px 6px;border-style:solid;border-color:#bcb0b0;border-width:0;background-image:none;background-color:transparent}.x-toolbar-footer .x-toolbar-item{margin:0 6px 0 0}.x-toolbar-footer .x-toolbar-separator-horizontal{margin:0 2px 0 0;height:14px;border-style:solid;border-width:0 1px;border-left-color:#aca899;border-right-color:white}.x-toolbar-footer .x-box-menu-after{margin:0 6px}.x-toolbar-footer-vertical{padding:4px 6px 0}.x-toolbar-footer-vertical .x-toolbar-item{margin:0 0 4px 0}.x-toolbar-footer-vertical .x-toolbar-separator-vertical{margin:0 5px 2px;border-style:solid none;border-width:1px 0;border-top-color:#aca899;border-bottom-color:white}.x-toolbar-footer-vertical .x-box-menu-after{margin:4px 0}.x-nlg .x-toolbar-footer{background-image:url(images/toolbar/toolbar-footer-bg.gif)!important;background-repeat:repeat-x}.x-toolbar-text-footer{padding:0 4px;color:black;font:normal 11px/16px tahoma,arial,verdana,sans-serif}.x-toolbar-spacer-footer{width:2px}.x-toolbar-footer-scroller .x-box-scroller-body-horizontal{margin-left:8px}.x-toolbar-footer-vertical-scroller .x-box-scroller-body-vertical{margin-top:11px}.x-box-scroller-toolbar-footer{cursor:pointer}.x-box-scroller-toolbar-footer.x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-box-scroller-toolbar-footer.x-box-scroller-left,.x-box-scroller-toolbar-footer.x-box-scroller-right{width:14px;height:22px;border-style:solid;border-color:#8db2e3;border-width:0 0 1px;top:50%;margin-top:-11px}.x-box-scroller-toolbar-footer.x-box-scroller-left{margin-left:0;margin-right:0;margin-bottom:0;background-image:url(images/toolbar/footer-scroll-left.gif);background-position:-14px 0}.x-box-scroller-toolbar-footer.x-box-scroller-left.x-box-scroller-hover{background-position:0 0}.x-box-scroller-toolbar-footer.x-box-scroller-right{margin-left:0;margin-right:0;margin-bottom:0;background-image:url(images/toolbar/footer-scroll-right.gif);background-position:0 0}.x-box-scroller-toolbar-footer.x-box-scroller-right.x-box-scroller-hover{background-position:-14px 0}.x-ie8 .x-box-scroller-toolbar-footer{background-color:transparent}.x-toolbar-more-icon{background-image:url(images/toolbar/footer-more.gif)}.x-panel-ghost{filter:alpha(opacity=65);opacity:.65}.x-panel-default{border-color:#d0d0d0;padding:0}.x-panel-header-default{font-size:11px;border:1px solid #d0d0d0}.x-panel-header-default-horizontal{padding:5px}.x-panel-header-default-horizontal .x-panel-header-default-tab-bar{margin-top:-5px;margin-bottom:-5px}.x-panel-header-default-horizontal.x-header-noborder{padding:6px 6px 5px 6px}.x-panel-header-default-horizontal.x-header-noborder .x-panel-header-default-tab-bar{margin-top:-6px;margin-bottom:-5px}.x-panel-header-default-vertical{padding:5px 5px 5px 5px}.x-panel-header-default-vertical .x-panel-header-default-tab-bar{margin-right:-5px;margin-left:-5px}.x-panel-header-default-vertical.x-header-noborder{padding:6px 6px 6px 5px}.x-panel-header-default-vertical.x-header-noborder .x-panel-header-default-tab-bar{margin-right:-6px;margin-left:-5px}.x-panel-header-title-default{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px}.x-panel-header-title-default>.x-title-text-default{text-transform:none;padding:0 2px 1px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-top{height:18px;padding-bottom:2px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-right{width:18px;padding-left:2px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-bottom{height:18px;padding-top:2px}.x-panel-header-title-default>.x-title-icon-wrap-default.x-title-icon-left{width:18px;padding-right:2px}.x-panel-header-title-default>.x-title-icon-wrap-default>.x-title-icon-default{width:16px;height:16px;background-position:center center}.x-panel-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-panel-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:#858282}.x-panel-body-default{background:white;border-color:#d0d0d0;color:black;font-size:12px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;border-width:1px;border-style:solid}.x-panel-header-default{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-vertical{background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-nlg .x-panel-header-default-top{background:url(images/panel-header/panel-header-default-top-bg.gif)}.x-nlg .x-panel-header-default-bottom{background:url(images/panel-header/panel-header-default-bottom-bg.gif) bottom left}.x-nlg .x-panel-header-default-left{background:url(images/panel-header/panel-header-default-left-bg.gif) top left}.x-nlg .x-panel-header-default-right{background:url(images/panel-header/panel-header-default-right-bg.gif) top right}.x-panel .x-panel-header-default-collapsed-border-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-right{border-left-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-collapsed-border-left{border-right-width:1px!important}.x-panel-header-default-top{-webkit-box-shadow:#ececec 0 1px 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset}.x-panel-header-default-right{-webkit-box-shadow:#ececec -1px 0 0 0 inset;-moz-box-shadow:#ececec -1px 0 0 0 inset;box-shadow:#ececec -1px 0 0 0 inset}.x-panel-header-default-bottom{-webkit-box-shadow:#ececec 0 -1px 0 0 inset;-moz-box-shadow:#ececec 0 -1px 0 0 inset;box-shadow:#ececec 0 -1px 0 0 inset}.x-panel-header-default-left{-webkit-box-shadow:#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 1px 0 0 0 inset;box-shadow:#ececec 1px 0 0 0 inset}.x-panel-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-default-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-panel-default-framed{border-color:#d0d0d0;padding:4px}.x-panel-header-default-framed{font-size:11px;border:1px solid #d0d0d0}.x-panel-header-default-framed-horizontal{padding:5px}.x-panel-header-default-framed-horizontal .x-panel-header-default-framed-tab-bar{margin-top:-5px;margin-bottom:-5px}.x-panel-header-default-framed-horizontal.x-header-noborder{padding:6px 6px 5px 6px}.x-panel-header-default-framed-horizontal.x-header-noborder .x-panel-header-default-framed-tab-bar{margin-top:-6px;margin-bottom:-5px}.x-panel-header-default-framed-vertical{padding:5px 5px 5px 5px}.x-panel-header-default-framed-vertical .x-panel-header-default-framed-tab-bar{margin-right:-5px;margin-left:-5px}.x-panel-header-default-framed-vertical.x-header-noborder{padding:6px 6px 6px 5px}.x-panel-header-default-framed-vertical.x-header-noborder .x-panel-header-default-framed-tab-bar{margin-right:-6px;margin-left:-5px}.x-panel-header-title-default-framed{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px}.x-panel-header-title-default-framed>.x-title-text-default-framed{text-transform:none;padding:0 2px 1px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-top{height:18px;padding-bottom:2px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-right{width:18px;padding-left:2px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-bottom{height:18px;padding-top:2px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed.x-title-icon-left{width:18px;padding-right:2px}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed>.x-title-icon-default-framed{width:16px;height:16px;background-position:center center}.x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed>.x-title-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-panel-header-title-default-framed>.x-title-icon-wrap-default-framed>.x-title-glyph{color:#858282}.x-panel-body-default-framed{background:#f1f1f1;border-color:#d0d0d0;color:black;font-size:12px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;border-width:0;border-style:solid}.x-panel-default-framed{-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#f1f1f1}.x-panel-default-framed-mc{background-color:#f1f1f1}.x-nbr .x-panel-default-framed{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-panel-default-framed-frameInfo{font-family:dh-4-4-4-4-1-1-1-1-4-4-4-4}.x-panel-default-framed-tl{background-position:0 -8px}.x-panel-default-framed-tr{background-position:right -12px}.x-panel-default-framed-bl{background-position:0 -16px}.x-panel-default-framed-br{background-position:right -20px}.x-panel-default-framed-ml{background-position:0 top}.x-panel-default-framed-mr{background-position:right top}.x-panel-default-framed-tc{background-position:0 0}.x-panel-default-framed-bc{background-position:0 -4px}.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-mr{padding-right:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-ml{padding-left:4px}.x-panel-default-framed-tc{height:4px}.x-panel-default-framed-bc{height:4px}.x-panel-default-framed-tl,.x-panel-default-framed-bl,.x-panel-default-framed-tr,.x-panel-default-framed-br,.x-panel-default-framed-tc,.x-panel-default-framed-bc,.x-panel-default-framed-ml,.x-panel-default-framed-mr{background-image:url(images/panel/panel-default-framed-corners.gif)}.x-panel-default-framed-ml,.x-panel-default-framed-mr{background-image:url(images/panel/panel-default-framed-sides.gif);background-repeat:repeat-y}.x-panel-default-framed-mc{padding:1px 1px 1px 1px}.x-panel-header-default-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-top-fbg.gif);background-position:0 top;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-top-frameInfo{font-family:dh-4-4-0-4-1-1-0-1-5-5-5-5}.x-panel-header-default-framed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-top-tr{background-position:right -12px}.x-panel-header-default-framed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-top-br{background-position:right -20px}.x-panel-header-default-framed-top-ml{background-position:0 top}.x-panel-header-default-framed-top-mr{background-position:right top}.x-panel-header-default-framed-top-tc{background-position:0 0}.x-panel-header-default-framed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-mr{padding-right:4px}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-ml{padding-left:4px}.x-panel-header-default-framed-top-tc{height:4px}.x-panel-header-default-framed-top-bc{height:0}.x-panel-header-default-framed-top-tl,.x-panel-header-default-framed-top-bl,.x-panel-header-default-framed-top-tr,.x-panel-header-default-framed-top-br,.x-panel-header-default-framed-top-tc,.x-panel-header-default-framed-top-bc,.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-top-corners.gif)}.x-panel-header-default-framed-top-ml,.x-panel-header-default-framed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-top-sides.gif)}.x-panel-header-default-framed-top-mc{padding:2px 2px 5px 2px}.x-panel-header-default-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 5px;border-width:1px 1px 1px 0;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-right-fbg.gif);background-position:right 0;background-repeat:repeat-y;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-right-frameInfo{font-family:dv-4-4-4-0-1-1-1-0-5-5-5-5}.x-panel-header-default-framed-right-tl{background-position:0 0}.x-panel-header-default-framed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-right-br{background-position:0 -12px}.x-panel-header-default-framed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-right-mr{background-position:right 0}.x-panel-header-default-framed-right-tc{background-position:right 0}.x-panel-header-default-framed-right-bc{background-position:right -4px}.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-mr{padding-right:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-ml{padding-left:0}.x-panel-header-default-framed-right-tc{height:4px}.x-panel-header-default-framed-right-bc{height:4px}.x-panel-header-default-framed-right-tl,.x-panel-header-default-framed-right-bl,.x-panel-header-default-framed-right-tr,.x-panel-header-default-framed-right-br,.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc,.x-panel-header-default-framed-right-ml,.x-panel-header-default-framed-right-mr{background-image:url(images/panel-header/panel-header-default-framed-right-corners.gif)}.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-bc{background-image:url(images/panel-header/panel-header-default-framed-right-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-right-mc{padding:2px 2px 2px 5px}.x-panel-header-default-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-bottom-fbg.gif);background-position:0 bottom;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-bottom-frameInfo{font-family:dh-0-4-4-4-0-1-1-1-5-5-5-5}.x-panel-header-default-framed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-bottom-tc{height:0}.x-panel-header-default-framed-bottom-bc{height:4px}.x-panel-header-default-framed-bottom-tl,.x-panel-header-default-framed-bottom-bl,.x-panel-header-default-framed-bottom-tr,.x-panel-header-default-framed-bottom-br,.x-panel-header-default-framed-bottom-tc,.x-panel-header-default-framed-bottom-bc,.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-bottom-corners.gif)}.x-panel-header-default-framed-bottom-ml,.x-panel-header-default-framed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-bottom-sides.gif)}.x-panel-header-default-framed-bottom-mc{padding:5px 2px 2px 2px}.x-panel-header-default-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:1px 0 1px 1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-left-fbg.gif);background-position:left 0;background-repeat:repeat-y;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-left-frameInfo{font-family:dv-4-0-4-4-1-0-1-1-5-5-5-5}.x-panel-header-default-framed-left-tl{background-position:0 0}.x-panel-header-default-framed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-left-br{background-position:0 -12px}.x-panel-header-default-framed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-left-mr{background-position:right 0}.x-panel-header-default-framed-left-tc{background-position:left 0}.x-panel-header-default-framed-left-bc{background-position:left -4px}.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-mr{padding-right:0}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-ml{padding-left:4px}.x-panel-header-default-framed-left-tc{height:4px}.x-panel-header-default-framed-left-bc{height:4px}.x-panel-header-default-framed-left-tl,.x-panel-header-default-framed-left-bl,.x-panel-header-default-framed-left-tr,.x-panel-header-default-framed-left-br,.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc,.x-panel-header-default-framed-left-ml,.x-panel-header-default-framed-left-mr{background-image:url(images/panel-header/panel-header-default-framed-left-corners.gif)}.x-panel-header-default-framed-left-tc,.x-panel-header-default-framed-left-bc{background-image:url(images/panel-header/panel-header-default-framed-left-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-left-mc{padding:2px 5px 2px 2px}.x-panel-header-default-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-top-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-fbg.gif);background-position:0 top;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-collapsed-top-frameInfo{font-family:dh-4-4-4-4-1-1-1-1-5-5-5-5}.x-panel-header-default-framed-collapsed-top-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-top-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-top-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-top-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-top-ml{background-position:0 top}.x-panel-header-default-framed-collapsed-top-mr{background-position:right top}.x-panel-header-default-framed-collapsed-top-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-top-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-top-tc{height:4px}.x-panel-header-default-framed-collapsed-top-bc{height:4px}.x-panel-header-default-framed-collapsed-top-tl,.x-panel-header-default-framed-collapsed-top-bl,.x-panel-header-default-framed-collapsed-top-tr,.x-panel-header-default-framed-collapsed-top-br,.x-panel-header-default-framed-collapsed-top-tc,.x-panel-header-default-framed-collapsed-top-bc,.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-corners.gif)}.x-panel-header-default-framed-collapsed-top-ml,.x-panel-header-default-framed-collapsed-top-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-top-sides.gif)}.x-panel-header-default-framed-collapsed-top-mc{padding:2px 2px 2px 2px}.x-panel-header-default-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-right-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-fbg.gif);background-position:right 0;background-repeat:repeat-y;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-collapsed-right-frameInfo{font-family:dv-4-4-4-4-1-1-1-1-5-5-5-5}.x-panel-header-default-framed-collapsed-right-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-right-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-right-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-right-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-right-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-right-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-right-tc{background-position:right 0}.x-panel-header-default-framed-collapsed-right-bc{background-position:right -4px}.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-right-tc{height:4px}.x-panel-header-default-framed-collapsed-right-bc{height:4px}.x-panel-header-default-framed-collapsed-right-tl,.x-panel-header-default-framed-collapsed-right-bl,.x-panel-header-default-framed-collapsed-right-tr,.x-panel-header-default-framed-collapsed-right-br,.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc,.x-panel-header-default-framed-collapsed-right-ml,.x-panel-header-default-framed-collapsed-right-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-corners.gif)}.x-panel-header-default-framed-collapsed-right-tc,.x-panel-header-default-framed-collapsed-right-bc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-right-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-collapsed-right-mc{padding:2px 2px 2px 2px}.x-panel-header-default-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(top,#f0f0f0,#d7d7d7);background-image:linear-gradient(top,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-bottom-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-fbg.gif);background-position:0 bottom;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-collapsed-bottom-frameInfo{font-family:dh-4-4-4-4-1-1-1-1-5-5-5-5}.x-panel-header-default-framed-collapsed-bottom-tl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-bottom-tr{background-position:right -12px}.x-panel-header-default-framed-collapsed-bottom-bl{background-position:0 -16px}.x-panel-header-default-framed-collapsed-bottom-br{background-position:right -20px}.x-panel-header-default-framed-collapsed-bottom-ml{background-position:0 bottom}.x-panel-header-default-framed-collapsed-bottom-mr{background-position:right bottom}.x-panel-header-default-framed-collapsed-bottom-tc{background-position:0 0}.x-panel-header-default-framed-collapsed-bottom-bc{background-position:0 -4px}.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-bottom-tc{height:4px}.x-panel-header-default-framed-collapsed-bottom-bc{height:4px}.x-panel-header-default-framed-collapsed-bottom-tl,.x-panel-header-default-framed-collapsed-bottom-bl,.x-panel-header-default-framed-collapsed-bottom-tr,.x-panel-header-default-framed-collapsed-bottom-br,.x-panel-header-default-framed-collapsed-bottom-tc,.x-panel-header-default-framed-collapsed-bottom-bc,.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif)}.x-panel-header-default-framed-collapsed-bottom-ml,.x-panel-header-default-framed-collapsed-bottom-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif)}.x-panel-header-default-framed-collapsed-bottom-mc{padding:2px 2px 2px 2px}.x-panel-header-default-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d7d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#f0f0f0),color-stop(100%,#d7d7d7));background-image:-webkit-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-moz-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-o-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:-ms-linear-gradient(right,#f0f0f0,#d7d7d7);background-image:linear-gradient(right,#f0f0f0,#d7d7d7)}.x-panel-header-default-framed-collapsed-left-mc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-fbg.gif);background-position:left 0;background-repeat:repeat-y;background-color:#d7d2d2}.x-nbr .x-panel-header-default-framed-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-panel-header-default-framed-collapsed-left-frameInfo{font-family:dv-4-4-4-4-1-1-1-1-5-5-5-5}.x-panel-header-default-framed-collapsed-left-tl{background-position:0 0}.x-panel-header-default-framed-collapsed-left-tr{background-position:0 -4px}.x-panel-header-default-framed-collapsed-left-bl{background-position:0 -8px}.x-panel-header-default-framed-collapsed-left-br{background-position:0 -12px}.x-panel-header-default-framed-collapsed-left-ml{background-position:-4px 0}.x-panel-header-default-framed-collapsed-left-mr{background-position:right 0}.x-panel-header-default-framed-collapsed-left-tc{background-position:left 0}.x-panel-header-default-framed-collapsed-left-bc{background-position:left -4px}.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-mr{padding-right:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-ml{padding-left:4px}.x-panel-header-default-framed-collapsed-left-tc{height:4px}.x-panel-header-default-framed-collapsed-left-bc{height:4px}.x-panel-header-default-framed-collapsed-left-tl,.x-panel-header-default-framed-collapsed-left-bl,.x-panel-header-default-framed-collapsed-left-tr,.x-panel-header-default-framed-collapsed-left-br,.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc,.x-panel-header-default-framed-collapsed-left-ml,.x-panel-header-default-framed-collapsed-left-mr{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-corners.gif)}.x-panel-header-default-framed-collapsed-left-tc,.x-panel-header-default-framed-collapsed-left-bc{background-image:url(images/panel-header/panel-header-default-framed-collapsed-left-sides.gif);background-repeat:repeat-x}.x-panel-header-default-framed-collapsed-left-mc{padding:2px 2px 2px 2px}.x-panel .x-panel-header-default-framed-top{border-bottom-width:1px!important}.x-panel .x-panel-header-default-framed-right{border-left-width:1px!important}.x-panel .x-panel-header-default-framed-bottom{border-top-width:1px!important}.x-panel .x-panel-header-default-framed-left{border-right-width:1px!important}.x-nbr .x-panel-header-default-framed-collapsed-top{border-bottom-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-right{border-left-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-bottom{border-top-width:0!important}.x-nbr .x-panel-header-default-framed-collapsed-left{border-right-width:0!important}.x-panel-header-default-framed-top{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-right{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset}.x-panel-header-default-framed-bottom{-webkit-box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 -1px 0 0 inset,#ececec -1px 0 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-left{-webkit-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset;-moz-box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset;box-shadow:#ececec 0 1px 0 0 inset,#ececec 0 -1px 0 0 inset,#ececec 1px 0 0 0 inset}.x-panel-header-default-framed-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-panel-header-default-framed-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-panel-header-default-framed-vertical .x-tool-after-title{margin:2px 0 0 0}.x-panel-header-default-framed-vertical .x-tool-before-title{margin:0 0 2px 0}.x-panel-default-framed-resizable .x-panel-handle{filter:alpha(opacity=0);opacity:0}.x-tip-anchor{position:absolute;overflow:hidden;height:10px;width:10px;border-style:solid;border-width:5px;border-color:#868686}.x-tip-anchor-top{border-top-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-bottom{border-bottom-color:transparent;border-left-color:transparent;border-right-color:transparent;_border-bottom-color:pink;_border-left-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-left{border-top-color:transparent;border-bottom-color:transparent;border-left-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-left-color:pink;_filter:chroma(color=pink)}.x-tip-anchor-right{border-top-color:transparent;border-bottom-color:transparent;border-right-color:transparent;_border-top-color:pink;_border-bottom-color:pink;_border-right-color:pink;_filter:chroma(color=pink)}.x-tip-default{-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-color:#ccc}.x-tip-default-mc{background-color:#ccc}.x-nbr .x-tip-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tip-default-frameInfo{font-family:th-3-3-3-3-1-1-1-1-2-2-2-2}.x-tip-default-tl{background-position:0 -6px}.x-tip-default-tr{background-position:right -9px}.x-tip-default-bl{background-position:0 -12px}.x-tip-default-br{background-position:right -15px}.x-tip-default-ml{background-position:0 top}.x-tip-default-mr{background-position:right top}.x-tip-default-tc{background-position:0 0}.x-tip-default-bc{background-position:0 -3px}.x-tip-default-tr,.x-tip-default-br,.x-tip-default-mr{padding-right:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-ml{padding-left:3px}.x-tip-default-tc{height:3px}.x-tip-default-bc{height:3px}.x-tip-default-tl,.x-tip-default-bl,.x-tip-default-tr,.x-tip-default-br,.x-tip-default-tc,.x-tip-default-bc,.x-tip-default-ml,.x-tip-default-mr{background-image:url(images/tip/tip-default-corners.gif)}.x-tip-default-ml,.x-tip-default-mr{background-image:url(images/tip/tip-default-sides.gif);background-repeat:repeat-y}.x-tip-default-mc{padding:0}.x-tip-default{border-color:#868686}.x-tip-default .x-tool-img{background-color:#ccc}.x-tip-header-default .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-default .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-default{padding:3px 3px 0 3px}.x-tip-header-title-default{color:#444;font-size:11px;font-weight:bold}.x-tip-body-default{padding:3px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-default a{color:#2a2a2a}.x-tip-form-invalid{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:white}.x-tip-form-invalid-mc{background-color:white}.x-nbr .x-tip-form-invalid{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-tip-form-invalid-frameInfo{font-family:th-5-5-5-5-1-1-1-1-4-4-4-4}.x-tip-form-invalid-tl{background-position:0 -10px}.x-tip-form-invalid-tr{background-position:right -15px}.x-tip-form-invalid-bl{background-position:0 -20px}.x-tip-form-invalid-br{background-position:right -25px}.x-tip-form-invalid-ml{background-position:0 top}.x-tip-form-invalid-mr{background-position:right top}.x-tip-form-invalid-tc{background-position:0 0}.x-tip-form-invalid-bc{background-position:0 -5px}.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-mr{padding-right:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-ml{padding-left:5px}.x-tip-form-invalid-tc{height:5px}.x-tip-form-invalid-bc{height:5px}.x-tip-form-invalid-tl,.x-tip-form-invalid-bl,.x-tip-form-invalid-tr,.x-tip-form-invalid-br,.x-tip-form-invalid-tc,.x-tip-form-invalid-bc,.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{background-image:url(images/tip/tip-form-invalid-corners.gif)}.x-tip-form-invalid-ml,.x-tip-form-invalid-mr{background-image:url(images/tip/tip-form-invalid-sides.gif);background-repeat:repeat-y}.x-tip-form-invalid-mc{padding:0}.x-tip-form-invalid{border-color:#a1311f;-webkit-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;-moz-box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset;box-shadow:#d87166 0 1px 0 0 inset,#d87166 0 -1px 0 0 inset,#d87166 -1px 0 0 0 inset,#d87166 1px 0 0 0 inset}.x-tip-form-invalid .x-tool-img{background-color:white}.x-tip-header-form-invalid .x-tool-after-title{margin:0 0 0 6px}.x-tip-header-form-invalid .x-tool-before-title{margin:0 6px 0 0}.x-tip-header-form-invalid{padding:3px 3px 0 3px}.x-tip-header-title-form-invalid{color:#444;font-size:11px;font-weight:bold}.x-tip-body-form-invalid{padding:3px 3px 3px 22px;color:#444;font-size:11px;font-weight:normal}.x-tip-body-form-invalid a{color:#2a2a2a}.x-tip-body-form-invalid{background:1px 1px no-repeat;background-image:url(images/form/exclamation.gif)}.x-tip-body-form-invalid li{margin-bottom:4px}.x-tip-body-form-invalid li.last{margin-bottom:0}.x-form-item-label-default{color:black;font:normal 12px/14px tahoma,arial,verdana,sans-serif;min-height:22px;padding-top:4px;padding-right:5px}.x-ie8 .x-form-item-label-default{min-height:18px}.x-form-item-label-default.x-form-item-label-top{height:1px}.x-form-item-label-default.x-form-item-label-top>.x-form-item-label-inner{padding-top:4px;padding-bottom:5px}.x-form-item-label-default.x-form-item-label-top-side-error:after{width:18px}.x-form-item-body-default{min-height:22px}.x-form-invalid-icon-default{width:16px;height:16px;margin:0 1px 0 1px;background:url(images/form/exclamation.gif) no-repeat}.x-form-invalid-under-default{padding:2px 2px 2px 20px;color:#c0272b;font:normal 11px/16px tahoma,arial,verdana,sans-serif;background:no-repeat 0 2px;background-image:url(images/form/exclamation.gif)}.x-form-error-wrap-default.x-form-error-wrap-side{width:18px}.x-form-item-default.x-item-disabled{filter:alpha(opacity=30);opacity:.3}.x-form-item-label-toolbar{color:black;font:normal 11px/13px tahoma,arial,verdana,sans-serif;min-height:20px;padding-top:4px;padding-right:5px}.x-ie8 .x-form-item-label-toolbar{min-height:16px}.x-form-item-label-toolbar.x-form-item-label-top{height:1px}.x-form-item-label-toolbar.x-form-item-label-top>.x-form-item-label-inner{padding-top:4px;padding-bottom:5px}.x-form-item-label-toolbar.x-form-item-label-top-side-error:after{width:18px}.x-form-item-body-toolbar{min-height:20px}.x-form-invalid-icon-toolbar{width:16px;height:16px;margin:0 1px 0 1px;background:url(images/form/exclamation.gif) no-repeat}.x-form-invalid-under-toolbar{padding:2px 2px 2px 20px;color:#c30;font:normal 12px/16px tahoma,arial,verdana,sans-serif;background:no-repeat 0 2px;background-image:url(images/form/exclamation.gif)}.x-form-error-wrap-toolbar.x-form-error-wrap-side{width:18px}.x-form-item-toolbar.x-item-disabled{filter:alpha(opacity=30);opacity:.3}.x-autocontainer-form-item,.x-anchor-form-item,.x-vbox-form-item,.x-table-form-item{margin-bottom:5px}.x-form-display-field-default{height:22px;font:normal 12px/14px tahoma,arial,verdana,sans-serif;color:black;margin-top:4px}.x-form-display-field-toolbar{height:22px;font:normal 11px/13px tahoma,arial,verdana,sans-serif;color:black;margin-top:5px}.x-grid-body{background:white;border-width:1px;border-style:solid;border-color:#d0d0d0}.x-grid-item-container{min-height:1px}.x-grid-empty{padding:10px;color:gray;background-color:white;font:normal 11px tahoma,arial,verdana,sans-serif}.x-grid-item{color:black;font:normal 11px/13px tahoma,arial,verdana,sans-serif;background-color:white}.x-grid-item-alt{background-color:#fafafa}.x-grid-item-over{color:black;background-color:#efefef}.x-grid-item-focused{outline:0;color:black}.x-grid-item-focused .x-grid-cell-inner{z-index:1}.x-grid-item-focused .x-grid-cell-inner:before{content:"";position:absolute;z-index:-1;top:0;right:0;bottom:0;left:0;border:1px dotted #464646}.x-grid-item-selected{color:black;background-color:#e0e0e0}.x-grid-with-row-lines .x-grid-item{border-style:solid;border-width:1px 0 0;border-color:#ededed}.x-grid-with-row-lines .x-grid-item:first-child{border-top-color:white}.x-grid-with-row-lines .x-grid-item.x-grid-item-over{border-style:solid;border-color:#ddd}.x-grid-with-row-lines .x-grid-item-over+.x-grid-item{border-top-style:solid;border-top-color:#ddd}.x-grid-with-row-lines .x-grid-item.x-grid-item-selected{border-style:dotted;border-color:#bfb8b8}.x-grid-with-row-lines .x-grid-item-selected+.x-grid-item{border-top-style:dotted;border-top-color:#bfb8b8}.x-grid-with-row-lines .x-grid-item:last-child{border-bottom-width:1px}.x-ie8 .x-grid-with-row-lines .x-grid-item{border-width:1px 0;margin-top:-1px}.x-ie8 .x-grid-with-row-lines .x-grid-item:first-child{margin-top:0}.x-grid-cell-inner{position:relative;text-overflow:ellipsis;padding:3px 6px 4px 6px}.x-grid-cell-special{border-color:#c6c6c6;border-style:solid;border-right-width:1px;background-image:none;background-color:#f6f6f6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f6f6f6),color-stop(100%,#e9e9e9));background-image:-webkit-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-moz-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-o-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:-ms-linear-gradient(top,#f6f6f6,#e9e9e9);background-image:linear-gradient(top,#f6f6f6,#e9e9e9)}.x-grid-item-selected .x-grid-cell-special{border-right-color:#d4b7b7;background-image:none;background-color:#e0e0e0;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#e0e0e0),color-stop(100%,#d3d3d3));background-image:-webkit-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-moz-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-o-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:-ms-linear-gradient(left,#e0e0e0,#d3d3d3);background-image:linear-gradient(left,#e0e0e0,#d3d3d3)}.x-nlg .x-grid-cell-special{background-repeat:repeat-y;background-image:url(images/grid/cell-special-bg.gif)}.x-nlg .x-grid-item-selected .x-grid-cell-special{background-image:url(images/grid/cell-special-selected-bg.gif)}.x-grid-cell-special .x-cmd-slicer.x-grid-cell-special:before{display:none;content:"x-slicer:bg:url(images/grid/cell-special-bg.gif)"!important}.x-grid-cell-special .x-cmd-slicer.x-grid-cell-special-selected:before{display:none;content:"x-slicer:bg:url(images/grid/cell-special-selected-bg.gif)"!important}.x-grid-dirty-cell{background:url(images/grid/dirty.gif) no-repeat 0 0}.x-grid-row .x-grid-cell-selected{color:black;background-color:#b8cfee}.x-grid-with-col-lines .x-grid-cell{border-right:1px solid #c6c6c6}.x-grid-resize-marker{width:1px;background-color:#0f0f0f}.x-form-cb-wrap-default{height:22px}.x-form-cb-default{margin-top:5px}.x-form-checkbox-default,.x-form-radio-default{width:13px;height:13px}.x-form-radio-default{background:url(images/form/radio.gif) no-repeat}.x-form-cb-checked .x-form-radio-default{background-position:0 -13px}.x-form-checkbox-default{background:url(images/form/checkbox.gif) no-repeat}.x-form-cb-checked .x-form-checkbox-default{background-position:0 -13px}.x-field-default-form-checkbox-focus{background-position:-13px 0}.x-form-cb-checked .x-field-default-form-checkbox-focus{background-position:-13px -13px}.x-form-cb-label-default{margin-top:4px;font:normal tahoma,arial,verdana,sans-serif/14px tahoma,arial,verdana,sans-serif}.x-form-cb-label-default.x-form-cb-label-before{padding-right:17px}.x-form-cb-label-default.x-form-cb-label-after{padding-left:17px}.x-form-cb-wrap-toolbar{height:20px}.x-form-cb-toolbar{margin-top:4px}.x-form-checkbox-toolbar,.x-form-radio-toolbar{width:13px;height:13px}.x-form-radio-toolbar{background:url(images/form/radio.gif) no-repeat}.x-form-cb-checked .x-form-radio-toolbar{background-position:0 -13px}.x-form-checkbox-toolbar{background:url(images/form/checkbox.gif) no-repeat}.x-form-cb-checked .x-form-checkbox-toolbar{background-position:0 -13px}.x-field-toolbar-form-checkbox-focus{background-position:-13px 0}.x-form-cb-checked .x-field-toolbar-form-checkbox-focus{background-position:-13px -13px}.x-form-cb-label-toolbar{margin-top:4px;font:normal tahoma,arial,verdana,sans-serif/13px tahoma,arial,verdana,sans-serif}.x-form-cb-label-toolbar.x-form-cb-label-before{padding-right:17px}.x-form-cb-label-toolbar.x-form-cb-label-after{padding-left:17px}.x-col-move-top,.x-col-move-bottom{width:9px;height:9px}.x-col-move-top{background-image:url(images/grid/col-move-top.gif)}.x-col-move-bottom{background-image:url(images/grid/col-move-bottom.gif)}.x-grid-header-ct{border:1px solid #d0d0d0;border-bottom-color:#c5c5c5;background-color:#c5c5c5;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-ms-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-grid-header-ct-hidden{border:0!important}.x-grid-body{border-top-color:#c5c5c5}.x-hmenu-sort-asc{background-image:url(images/grid/hmenu-asc.gif)}.x-hmenu-sort-desc{background-image:url(images/grid/hmenu-desc.gif)}.x-cols-icon{background-image:url(images/grid/columns.gif)}.x-column-header{border-right:1px solid #c5c5c5;color:black;font:normal 11px/13px tahoma,arial,verdana,sans-serif;outline:0;background-image:none;background-color:#c5c5c5;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#f9f9f9),color-stop(100%,#e3e4e6));background-image:-webkit-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-moz-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-o-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:-ms-linear-gradient(top,#f9f9f9,#e3e4e6);background-image:linear-gradient(top,#f9f9f9,#e3e4e6)}.x-group-sub-header{background:transparent;border-top:1px solid #c5c5c5}.x-group-sub-header .x-column-header-inner{padding:3px 6px 5px 6px}.x-column-header-inner{position:relative;padding:4px 6px 5px 6px;text-overflow:ellipsis}.x-column-header-inner-empty{text-overflow:clip}.x-column-header.x-column-header-focus{color:black}.x-column-header.x-column-header-focus .x-column-header-inner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border:1px dotted #333}.x-column-header.x-column-header-focus.x-group-sub-header .x-column-header-inner:before{bottom:0}.x-column-header-over,.x-column-header-sort-ASC,.x-column-header-sort-DESC{background-image:none;background-color:#f0f0f0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(top,#fff,#f0f0f0);background-image:-moz-linear-gradient(top,#fff,#f0f0f0);background-image:-o-linear-gradient(top,#fff,#f0f0f0);background-image:-ms-linear-gradient(top,#fff,#f0f0f0);background-image:linear-gradient(top,#fff,#f0f0f0)}.x-nlg .x-grid-header-ct,.x-nlg .x-column-header{background-image:url(images/grid/column-header-bg.gif)}.x-nlg .x-column-header-over,.x-nlg .x-column-header-sort-ASC,.x-nlg .x-column-header-sort-DESC{background-image:url(images/grid/column-header-over-bg.gif)}.x-column-header-open{background-color:transparent}.x-column-header-open .x-column-header-trigger{background-color:transparent}.x-column-header-trigger{width:14px;cursor:pointer;background-color:transparent;background-position:0 center}.x-column-header-align-right .x-column-header-text{margin-right:9px}.x-column-header-sort-ASC .x-column-header-text,.x-column-header-sort-DESC .x-column-header-text{padding-right:12px;background-position:right center}.x-column-header-sort-ASC .x-column-header-text{background-image:url(images/grid/sort_asc.gif)}.x-column-header-sort-DESC .x-column-header-text{background-image:url(images/grid/sort_desc.gif)}.x-form-text-field-body-default{min-width:150px;max-width:150px}.x-form-text-wrap-default{border-width:1px;border-style:solid;border-color:#b5b8c8}.x-form-text-wrap-default.x-form-text-wrap-focus{border-color:#a1a1a1}.x-form-text-wrap-default.x-form-text-wrap-invalid{border-color:#c30}.x-form-text-default{color:black;padding:1px 3px 2px 3px;background-color:white;background-image:url(images/form/text-bg.gif);font:normal 12px/17px tahoma,arial,verdana,sans-serif;min-height:20px}.x-ie8 .x-form-text-default{min-height:17px}.x-form-text-default.x-form-textarea{line-height:14px;min-height:56px}.x-ie8 .x-form-text-default.x-form-textarea{min-height:53px}.x-form-text-default.x-form-text-file{color:gray}.x-form-empty-field-default{color:gray}.x-form-invalid-field-default{background-color:white;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom}.x-form-trigger-default{background:transparent url(images/form/trigger.gif) no-repeat;background-position:0 0;width:17px;border-width:0 0 1px;border-color:#b5b8c8;border-style:solid}.x-form-trigger-default.x-form-trigger-over{background-position:-17px 0;border-color:#a1a1a1}.x-form-trigger-default.x-form-trigger-over.x-form-trigger-focus{background-position:-68px 0}.x-form-trigger-default.x-form-trigger-focus{background-position:-51px 0;border-color:#a1a1a1}.x-form-trigger.x-form-trigger-default.x-form-trigger-click{background-position:-34px 0}.x-form-text-field-body-toolbar{min-width:150px;max-width:150px}.x-form-text-wrap-toolbar{border-width:1px;border-style:solid;border-color:#b5b8c8}.x-form-text-wrap-toolbar.x-form-text-wrap-focus{border-color:#a1a1a1}.x-form-text-wrap-toolbar.x-form-text-wrap-invalid{border-color:#c30}.x-form-text-toolbar{color:black;padding:1px 3px 2px 3px;background-color:white;background-image:url(images/form/text-bg.gif);font:normal 12px/15px tahoma,arial,verdana,sans-serif;min-height:18px}.x-ie8 .x-form-text-toolbar{min-height:15px}.x-form-text-toolbar.x-form-textarea{line-height:14px;min-height:56px}.x-ie8 .x-form-text-toolbar.x-form-textarea{min-height:53px}.x-form-text-toolbar.x-form-text-file{color:gray}.x-form-empty-field-toolbar{color:gray}.x-form-invalid-field-toolbar{background-color:white;background-image:url(images/grid/invalid_line.gif);background-repeat:repeat-x;background-position:bottom}.x-form-trigger-toolbar{background:white url(images/form/trigger.gif) no-repeat;background-position:0 0;width:17px;border-width:0 0 1px;border-color:#b5b8c8;border-style:solid}.x-form-trigger-toolbar.x-form-trigger-over{background-position:-17px 0}.x-form-trigger-toolbar.x-form-trigger-over.x-form-trigger-focus{background-position:-68px 0}.x-form-trigger-toolbar.x-form-trigger-focus{background-position:-51px 0;border-color:null}.x-form-trigger.x-form-trigger-toolbar.x-form-trigger-click{background-position:-34px 0}.x-form-clear-trigger{background-image:url(images/form/clear-trigger.gif)}.x-form-search-trigger{background-image:url(images/form/search-trigger.gif)}body.x-border-layout-ct,div.x-border-layout-ct{background-color:#e0e0e0}.x-tab-default-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 0 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-ms-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-top-mc{background-image:url(images/tab/tab-default-top-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nbr .x-tab-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-tab-default-top-frameInfo{font-family:th-4-4-0-4-1-1-0-1-3-9-3-9}.x-tab-default-top-tl{background-position:0 -8px}.x-tab-default-top-tr{background-position:right -12px}.x-tab-default-top-bl{background-position:0 -16px}.x-tab-default-top-br{background-position:right -20px}.x-tab-default-top-ml{background-position:0 top}.x-tab-default-top-mr{background-position:right top}.x-tab-default-top-tc{background-position:0 0}.x-tab-default-top-bc{background-position:0 -4px}.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-mr{padding-right:4px}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-ml{padding-left:4px}.x-tab-default-top-tc{height:4px}.x-tab-default-top-bc{height:0}.x-tab-default-top-tl,.x-tab-default-top-bl,.x-tab-default-top-tr,.x-tab-default-top-br,.x-tab-default-top-tc,.x-tab-default-top-bc,.x-tab-default-top-ml,.x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-corners.gif)}.x-tab-default-top-ml,.x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-sides.gif)}.x-tab-default-top-mc{padding:0 6px 3px 6px}.x-tab-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 9px 3px 9px;border-width:0 1px 1px 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:-ms-linear-gradient(bottom,#dcdcdc,#eaeaea);background-image:linear-gradient(bottom,#dcdcdc,#eaeaea)}.x-tab-default-bottom-mc{background-image:url(images/tab/tab-default-bottom-fbg.gif);background-position:0 bottom;background-color:#eaeaea}.x-nbr .x-tab-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-tab-default-bottom-frameInfo{font-family:th-4-4-4-4-0-1-1-1-4-9-3-9}.x-tab-default-bottom-tl{background-position:0 -8px}.x-tab-default-bottom-tr{background-position:right -12px}.x-tab-default-bottom-bl{background-position:0 -16px}.x-tab-default-bottom-br{background-position:right -20px}.x-tab-default-bottom-ml{background-position:0 bottom}.x-tab-default-bottom-mr{background-position:right bottom}.x-tab-default-bottom-tc{background-position:0 0}.x-tab-default-bottom-bc{background-position:0 -4px}.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-mr{padding-right:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-ml{padding-left:4px}.x-tab-default-bottom-tc{height:4px}.x-tab-default-bottom-bc{height:4px}.x-tab-default-bottom-tl,.x-tab-default-bottom-bl,.x-tab-default-bottom-tr,.x-tab-default-bottom-br,.x-tab-default-bottom-tc,.x-tab-default-bottom-bc,.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-corners.gif)}.x-tab-default-bottom-ml,.x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-sides.gif)}.x-tab-default-bottom-mc{padding:0 6px 0 6px}.x-tab-default-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:3px 9px 3px 9px;border-width:1px 0 1px 1px;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-ms-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-left-mc{background-image:url(images/tab/tab-default-left-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nbr .x-tab-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-tab-default-left-frameInfo{font-family:th-4-4-4-4-1-0-1-1-3-9-3-9}.x-tab-default-left-tl{background-position:0 -8px}.x-tab-default-left-tr{background-position:right -12px}.x-tab-default-left-bl{background-position:0 -16px}.x-tab-default-left-br{background-position:right -20px}.x-tab-default-left-ml{background-position:0 top}.x-tab-default-left-mr{background-position:right top}.x-tab-default-left-tc{background-position:0 0}.x-tab-default-left-bc{background-position:0 -4px}.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-mr{padding-right:4px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-ml{padding-left:4px}.x-tab-default-left-tc{height:4px}.x-tab-default-left-bc{height:4px}.x-tab-default-left-tl,.x-tab-default-left-bl,.x-tab-default-left-tr,.x-tab-default-left-br,.x-tab-default-left-tc,.x-tab-default-left-bc,.x-tab-default-left-ml,.x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-corners.gif)}.x-tab-default-left-ml,.x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-sides.gif)}.x-tab-default-left-mc{padding:0 5px 0 6px}.x-tab-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 9px 3px 9px;border-width:1px 1px 1px 0;border-style:solid;background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dcdcdc),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-moz-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-o-linear-gradient(top,#dcdcdc,#eaeaea);background-image:-ms-linear-gradient(top,#dcdcdc,#eaeaea);background-image:linear-gradient(top,#dcdcdc,#eaeaea)}.x-tab-default-right-mc{background-image:url(images/tab/tab-default-right-fbg.gif);background-position:0 top;background-color:#eaeaea}.x-nbr .x-tab-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;background-image:none;box-shadow:none!important}.x-tab-default-right-frameInfo{font-family:th-4-4-4-4-1-1-1-0-3-9-3-9}.x-tab-default-right-tl{background-position:0 -8px}.x-tab-default-right-tr{background-position:right -12px}.x-tab-default-right-bl{background-position:0 -16px}.x-tab-default-right-br{background-position:right -20px}.x-tab-default-right-ml{background-position:0 top}.x-tab-default-right-mr{background-position:right top}.x-tab-default-right-tc{background-position:0 0}.x-tab-default-right-bc{background-position:0 -4px}.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-mr{padding-right:4px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-ml{padding-left:4px}.x-tab-default-right-tc{height:4px}.x-tab-default-right-bc{height:4px}.x-tab-default-right-tl,.x-tab-default-right-bl,.x-tab-default-right-tr,.x-tab-default-right-br,.x-tab-default-right-tc,.x-tab-default-right-bc,.x-tab-default-right-ml,.x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-corners.gif)}.x-tab-default-right-ml,.x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-sides.gif)}.x-tab-default-right-mc{padding:0 6px 0 5px}.x-tab-default{border-color:#b5b5b5;cursor:pointer;-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-top{margin:0 0 0 2px;-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-top.x-tab-rotate-left{margin:0 2px 0 0}.x-tab-default-top.x-tab-focus{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-top.x-tab-over{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-top.x-tab.x-tab-active{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-top.x-tab.x-tab-disabled{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-right{margin:2px 0 0 0;-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset}.x-tab-default-right.x-tab-rotate-right{margin:0 0 2px 0}.x-tab-default-right.x-tab-focus{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset}.x-tab-default-right.x-tab-over{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset}.x-tab-default-right.x-tab.x-tab-active{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset}.x-tab-default-right.x-tab.x-tab-disabled{-webkit-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white -1px 0 0 0 inset}.x-tab-default-bottom{margin:0 0 0 2px;-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-bottom.x-tab-rotate-left{margin:0 2px 0 0}.x-tab-default-bottom.x-tab-focus{-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-bottom.x-tab-over{-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-bottom.x-tab.x-tab-active{-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-bottom.x-tab.x-tab-disabled{-webkit-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 -1px 0 0 inset,white -1px 0 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-left{margin:2px 0 0 0;-webkit-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-left.x-tab-rotate-right{margin:0 0 2px 0}.x-tab-default-left.x-tab-focus{-webkit-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-left.x-tab-over{-webkit-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-left.x-tab.x-tab-active{-webkit-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset}.x-tab-default-left.x-tab.x-tab-disabled{-webkit-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;-moz-box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset;box-shadow:white 0 1px 0 0 inset,white 1px 0 0 0 inset}.x-tab-button-default{height:16px}.x-tab-inner-default{font:bold 11px/13px tahoma,arial,verdana,sans-serif;color:#6f6f6f;max-width:100%}.x-tab-icon-right>.x-tab-inner-default,.x-tab-icon-left>.x-tab-inner-default{max-width:calc(100% - 16px)}.x-tab-icon-el-default{height:16px;line-height:16px;background-position:center center}.x-tab-icon-left>.x-tab-icon-el-default,.x-tab-icon-right>.x-tab-icon-el-default{width:16px}.x-tab-icon-top>.x-tab-icon-el-default,.x-tab-icon-bottom>.x-tab-icon-el-default{min-width:16px}.x-tab-icon-el-default.x-tab-glyph{font-size:16px;line-height:16px;color:#6f6f6f;opacity:.5}.x-ie8 .x-tab-icon-el-default.x-tab-glyph{color:#acacac}.x-tab-text.x-tab-icon-left>.x-tab-icon-el-default{margin-right:4px}.x-tab-text.x-tab-icon-right>.x-tab-icon-el-default{margin-left:4px}.x-tab-text.x-tab-icon-top>.x-tab-icon-el-default{margin-bottom:4px}.x-tab-text.x-tab-icon-bottom>.x-tab-icon-el-default{margin-top:4px}.x-tab-focus.x-tab-default .x-tab-button:before{position:absolute;content:' ';top:0;right:0;bottom:0;left:0;outline:1px dotted #6f6f6f}.x-tab-focus.x-tab-default.x-tab-closable .x-tab-button:before{right:14px}.x-tab-over.x-tab-default{background-color:#f2eeee}.x-tab-over.x-tab-default-top,.x-tab-over.x-tab-default-left,.x-tab-over.x-tab-default-right{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(top,#fff,#f0f0f0);background-image:-moz-linear-gradient(top,#fff,#f0f0f0);background-image:-o-linear-gradient(top,#fff,#f0f0f0);background-image:-ms-linear-gradient(top,#fff,#f0f0f0);background-image:linear-gradient(top,#fff,#f0f0f0)}.x-tab-over.x-tab-default-bottom{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(100%,#f0f0f0));background-image:-webkit-linear-gradient(bottom,#fff,#f0f0f0);background-image:-moz-linear-gradient(bottom,#fff,#f0f0f0);background-image:-o-linear-gradient(bottom,#fff,#f0f0f0);background-image:-ms-linear-gradient(bottom,#fff,#f0f0f0);background-image:linear-gradient(bottom,#fff,#f0f0f0)}.x-tab.x-tab-active.x-tab-default{background-color:#eaeaea}.x-tab.x-tab-active.x-tab-default .x-tab-inner-default{color:#333}.x-tab.x-tab-active.x-tab-default .x-tab-glyph{color:#333}.x-ie8 .x-tab.x-tab-active.x-tab-default .x-tab-glyph{color:#8e8e8e}.x-tab.x-tab-active.x-tab-default-top,.x-tab.x-tab-active.x-tab-default-left,.x-tab.x-tab-active.x-tab-default-right{background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#fff),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(top,#fff,#eaeaea);background-image:-moz-linear-gradient(top,#fff,#eaeaea);background-image:-o-linear-gradient(top,#fff,#eaeaea);background-image:-ms-linear-gradient(top,#fff,#eaeaea);background-image:linear-gradient(top,#fff,#eaeaea)}.x-tab.x-tab-active.x-tab-default-bottom{background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#fff),color-stop(100%,#eaeaea));background-image:-webkit-linear-gradient(bottom,#fff,#eaeaea);background-image:-moz-linear-gradient(bottom,#fff,#eaeaea);background-image:-o-linear-gradient(bottom,#fff,#eaeaea);background-image:-ms-linear-gradient(bottom,#fff,#eaeaea);background-image:linear-gradient(bottom,#fff,#eaeaea)}.x-tab.x-tab-disabled.x-tab-default{border-color:#dadada;background-color:#eee;cursor:default}.x-tab.x-tab-disabled.x-tab-default .x-tab-inner-default{color:#b7b7b7}.x-tab.x-tab-disabled.x-tab-default .x-tab-icon-el-default{filter:alpha(opacity=50);opacity:.5}.x-tab.x-tab-disabled.x-tab-default .x-tab-glyph{color:#b7b7b7;opacity:.3;filter:none}.x-ie8 .x-tab.x-tab-disabled.x-tab-default .x-tab-glyph{color:#ddd}.x-tab.x-tab-disabled.x-tab-default-top,.x-tab.x-tab-disabled.x-tab-default-left,.x-tab.x-tab-disabled.x-tab-default-right{background-image:none;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#eee),color-stop(100%,#f4f4f4));background-image:-webkit-linear-gradient(top,#eee,#f4f4f4);background-image:-moz-linear-gradient(top,#eee,#f4f4f4);background-image:-o-linear-gradient(top,#eee,#f4f4f4);background-image:-ms-linear-gradient(top,#eee,#f4f4f4);background-image:linear-gradient(top,#eee,#f4f4f4)}.x-tab.x-tab-disabled.x-tab-default-bottom{background-image:none;background-color:#eee;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#eee),color-stop(100%,#f4f4f4));background-image:-webkit-linear-gradient(bottom,#eee,#f4f4f4);background-image:-moz-linear-gradient(bottom,#eee,#f4f4f4);background-image:-o-linear-gradient(bottom,#eee,#f4f4f4);background-image:-ms-linear-gradient(bottom,#eee,#f4f4f4);background-image:linear-gradient(bottom,#eee,#f4f4f4)}.x-nbr .x-tab-default{background-image:none}.x-tab-over .x-tab-default-top-tl,.x-tab-over .x-tab-default-top-bl,.x-tab-over .x-tab-default-top-tr,.x-tab-over .x-tab-default-top-br,.x-tab-over .x-tab-default-top-tc,.x-tab-over .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-over-corners.gif)}.x-tab-over .x-tab-default-top-ml,.x-tab-over .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-over-sides.gif)}.x-tab-over .x-tab-default-top-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-over-fbg.gif)}.x-tab-focus .x-tab-default-top-tl,.x-tab-focus .x-tab-default-top-bl,.x-tab-focus .x-tab-default-top-tr,.x-tab-focus .x-tab-default-top-br,.x-tab-focus .x-tab-default-top-tc,.x-tab-focus .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-focus-corners.gif)}.x-tab-focus .x-tab-default-top-ml,.x-tab-focus .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-focus-sides.gif)}.x-tab-focus .x-tab-default-top-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-top-tl,.x-tab-focus.x-tab-over .x-tab-default-top-bl,.x-tab-focus.x-tab-over .x-tab-default-top-tr,.x-tab-focus.x-tab-over .x-tab-default-top-br,.x-tab-focus.x-tab-over .x-tab-default-top-tc,.x-tab-focus.x-tab-over .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-top-ml,.x-tab-focus.x-tab-over .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-top-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-top-tl,.x-tab.x-tab-active .x-tab-default-top-bl,.x-tab.x-tab-active .x-tab-default-top-tr,.x-tab.x-tab-active .x-tab-default-top-br,.x-tab.x-tab-active .x-tab-default-top-tc,.x-tab.x-tab-active .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-top-ml,.x-tab.x-tab-active .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-top-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-top-tl,.x-tab-focus.x-tab-active .x-tab-default-top-bl,.x-tab-focus.x-tab-active .x-tab-default-top-tr,.x-tab-focus.x-tab-active .x-tab-default-top-br,.x-tab-focus.x-tab-active .x-tab-default-top-tc,.x-tab-focus.x-tab-active .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-top-ml,.x-tab-focus.x-tab-active .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-top-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-top-tl,.x-tab.x-tab-disabled .x-tab-default-top-bl,.x-tab.x-tab-disabled .x-tab-default-top-tr,.x-tab.x-tab-disabled .x-tab-default-top-br,.x-tab.x-tab-disabled .x-tab-default-top-tc,.x-tab.x-tab-disabled .x-tab-default-top-bc{background-image:url(images/tab/tab-default-top-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-top-ml,.x-tab.x-tab-disabled .x-tab-default-top-mr{background-image:url(images/tab/tab-default-top-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-top-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-top-disabled-fbg.gif)}.x-tab-over .x-tab-default-right-tl,.x-tab-over .x-tab-default-right-bl,.x-tab-over .x-tab-default-right-tr,.x-tab-over .x-tab-default-right-br,.x-tab-over .x-tab-default-right-tc,.x-tab-over .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-over-corners.gif)}.x-tab-over .x-tab-default-right-ml,.x-tab-over .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-over-sides.gif)}.x-tab-over .x-tab-default-right-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-over-fbg.gif)}.x-tab-focus .x-tab-default-right-tl,.x-tab-focus .x-tab-default-right-bl,.x-tab-focus .x-tab-default-right-tr,.x-tab-focus .x-tab-default-right-br,.x-tab-focus .x-tab-default-right-tc,.x-tab-focus .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-focus-corners.gif)}.x-tab-focus .x-tab-default-right-ml,.x-tab-focus .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-focus-sides.gif)}.x-tab-focus .x-tab-default-right-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-right-tl,.x-tab-focus.x-tab-over .x-tab-default-right-bl,.x-tab-focus.x-tab-over .x-tab-default-right-tr,.x-tab-focus.x-tab-over .x-tab-default-right-br,.x-tab-focus.x-tab-over .x-tab-default-right-tc,.x-tab-focus.x-tab-over .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-right-ml,.x-tab-focus.x-tab-over .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-right-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-right-tl,.x-tab.x-tab-active .x-tab-default-right-bl,.x-tab.x-tab-active .x-tab-default-right-tr,.x-tab.x-tab-active .x-tab-default-right-br,.x-tab.x-tab-active .x-tab-default-right-tc,.x-tab.x-tab-active .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-right-ml,.x-tab.x-tab-active .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-right-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-right-tl,.x-tab-focus.x-tab-active .x-tab-default-right-bl,.x-tab-focus.x-tab-active .x-tab-default-right-tr,.x-tab-focus.x-tab-active .x-tab-default-right-br,.x-tab-focus.x-tab-active .x-tab-default-right-tc,.x-tab-focus.x-tab-active .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-right-ml,.x-tab-focus.x-tab-active .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-right-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-right-tl,.x-tab.x-tab-disabled .x-tab-default-right-bl,.x-tab.x-tab-disabled .x-tab-default-right-tr,.x-tab.x-tab-disabled .x-tab-default-right-br,.x-tab.x-tab-disabled .x-tab-default-right-tc,.x-tab.x-tab-disabled .x-tab-default-right-bc{background-image:url(images/tab/tab-default-right-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-right-ml,.x-tab.x-tab-disabled .x-tab-default-right-mr{background-image:url(images/tab/tab-default-right-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-right-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-right-disabled-fbg.gif)}.x-tab-over .x-tab-default-bottom-tl,.x-tab-over .x-tab-default-bottom-bl,.x-tab-over .x-tab-default-bottom-tr,.x-tab-over .x-tab-default-bottom-br,.x-tab-over .x-tab-default-bottom-tc,.x-tab-over .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-over-corners.gif)}.x-tab-over .x-tab-default-bottom-ml,.x-tab-over .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-over-sides.gif)}.x-tab-over .x-tab-default-bottom-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-over-fbg.gif)}.x-tab-focus .x-tab-default-bottom-tl,.x-tab-focus .x-tab-default-bottom-bl,.x-tab-focus .x-tab-default-bottom-tr,.x-tab-focus .x-tab-default-bottom-br,.x-tab-focus .x-tab-default-bottom-tc,.x-tab-focus .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-focus-corners.gif)}.x-tab-focus .x-tab-default-bottom-ml,.x-tab-focus .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-focus-sides.gif)}.x-tab-focus .x-tab-default-bottom-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-bottom-tl,.x-tab-focus.x-tab-over .x-tab-default-bottom-bl,.x-tab-focus.x-tab-over .x-tab-default-bottom-tr,.x-tab-focus.x-tab-over .x-tab-default-bottom-br,.x-tab-focus.x-tab-over .x-tab-default-bottom-tc,.x-tab-focus.x-tab-over .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-bottom-ml,.x-tab-focus.x-tab-over .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-bottom-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-bottom-tl,.x-tab.x-tab-active .x-tab-default-bottom-bl,.x-tab.x-tab-active .x-tab-default-bottom-tr,.x-tab.x-tab-active .x-tab-default-bottom-br,.x-tab.x-tab-active .x-tab-default-bottom-tc,.x-tab.x-tab-active .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-bottom-ml,.x-tab.x-tab-active .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-bottom-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-bottom-tl,.x-tab-focus.x-tab-active .x-tab-default-bottom-bl,.x-tab-focus.x-tab-active .x-tab-default-bottom-tr,.x-tab-focus.x-tab-active .x-tab-default-bottom-br,.x-tab-focus.x-tab-active .x-tab-default-bottom-tc,.x-tab-focus.x-tab-active .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-bottom-ml,.x-tab-focus.x-tab-active .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-bottom-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-bottom-tl,.x-tab.x-tab-disabled .x-tab-default-bottom-bl,.x-tab.x-tab-disabled .x-tab-default-bottom-tr,.x-tab.x-tab-disabled .x-tab-default-bottom-br,.x-tab.x-tab-disabled .x-tab-default-bottom-tc,.x-tab.x-tab-disabled .x-tab-default-bottom-bc{background-image:url(images/tab/tab-default-bottom-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-bottom-ml,.x-tab.x-tab-disabled .x-tab-default-bottom-mr{background-image:url(images/tab/tab-default-bottom-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-bottom-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-bottom-disabled-fbg.gif)}.x-tab-over .x-tab-default-left-tl,.x-tab-over .x-tab-default-left-bl,.x-tab-over .x-tab-default-left-tr,.x-tab-over .x-tab-default-left-br,.x-tab-over .x-tab-default-left-tc,.x-tab-over .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-over-corners.gif)}.x-tab-over .x-tab-default-left-ml,.x-tab-over .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-over-sides.gif)}.x-tab-over .x-tab-default-left-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-over-fbg.gif)}.x-tab-focus .x-tab-default-left-tl,.x-tab-focus .x-tab-default-left-bl,.x-tab-focus .x-tab-default-left-tr,.x-tab-focus .x-tab-default-left-br,.x-tab-focus .x-tab-default-left-tc,.x-tab-focus .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-focus-corners.gif)}.x-tab-focus .x-tab-default-left-ml,.x-tab-focus .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-focus-sides.gif)}.x-tab-focus .x-tab-default-left-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-focus-fbg.gif)}.x-tab-focus.x-tab-over .x-tab-default-left-tl,.x-tab-focus.x-tab-over .x-tab-default-left-bl,.x-tab-focus.x-tab-over .x-tab-default-left-tr,.x-tab-focus.x-tab-over .x-tab-default-left-br,.x-tab-focus.x-tab-over .x-tab-default-left-tc,.x-tab-focus.x-tab-over .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-focus-over-corners.gif)}.x-tab-focus.x-tab-over .x-tab-default-left-ml,.x-tab-focus.x-tab-over .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-focus-over-sides.gif)}.x-tab-focus.x-tab-over .x-tab-default-left-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-focus-over-fbg.gif)}.x-tab.x-tab-active .x-tab-default-left-tl,.x-tab.x-tab-active .x-tab-default-left-bl,.x-tab.x-tab-active .x-tab-default-left-tr,.x-tab.x-tab-active .x-tab-default-left-br,.x-tab.x-tab-active .x-tab-default-left-tc,.x-tab.x-tab-active .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-active-corners.gif)}.x-tab.x-tab-active .x-tab-default-left-ml,.x-tab.x-tab-active .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-active-sides.gif)}.x-tab.x-tab-active .x-tab-default-left-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-active-fbg.gif)}.x-tab-focus.x-tab-active .x-tab-default-left-tl,.x-tab-focus.x-tab-active .x-tab-default-left-bl,.x-tab-focus.x-tab-active .x-tab-default-left-tr,.x-tab-focus.x-tab-active .x-tab-default-left-br,.x-tab-focus.x-tab-active .x-tab-default-left-tc,.x-tab-focus.x-tab-active .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-focus-active-corners.gif)}.x-tab-focus.x-tab-active .x-tab-default-left-ml,.x-tab-focus.x-tab-active .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-focus-active-sides.gif)}.x-tab-focus.x-tab-active .x-tab-default-left-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-focus-active-fbg.gif)}.x-tab.x-tab-disabled .x-tab-default-left-tl,.x-tab.x-tab-disabled .x-tab-default-left-bl,.x-tab.x-tab-disabled .x-tab-default-left-tr,.x-tab.x-tab-disabled .x-tab-default-left-br,.x-tab.x-tab-disabled .x-tab-default-left-tc,.x-tab.x-tab-disabled .x-tab-default-left-bc{background-image:url(images/tab/tab-default-left-disabled-corners.gif)}.x-tab.x-tab-disabled .x-tab-default-left-ml,.x-tab.x-tab-disabled .x-tab-default-left-mr{background-image:url(images/tab/tab-default-left-disabled-sides.gif)}.x-tab.x-tab-disabled .x-tab-default-left-mc{background-color:#eee;background-repeat:repeat-x;background-image:url(images/tab/tab-default-left-disabled-fbg.gif)}.x-tab-default-tl,.x-tab-default-bl,.x-tab-default-tr,.x-tab-default-br{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00FFFFFF,endColorstr=#00FFFFFF)}.x-tab-default .x-tab-close-btn{top:2px;right:2px;width:11px;height:11px;background:url(images/tab/tab-default-close.gif) 0 0;filter:alpha(opacity=60);opacity:.6}.x-tab-default .x-tab-close-btn-over{filter:alpha(opacity=100);opacity:1}.x-tab-default.x-tab-active .x-tab-close-btn{background-position:0 -11px}.x-tab-default.x-tab-disabled .x-tab-close-btn{filter:alpha(opacity=30);opacity:.3}.x-tab-closable.x-tab-default .x-tab-button{padding-right:14px}.x-tab-bar-default{background-color:#d2d2d2;border-style:solid;border-color:#d0d0d0}.x-tab-bar-default-top{border-width:1px 1px 0 1px}.x-tab-bar-default-bottom{border-width:0 1px 1px 1px}.x-tab-bar-default-left{border-width:1px 0 1px 1px}.x-tab-bar-default-right{border-width:1px 1px 1px 0}.x-tab-bar-default-top>.x-tab-bar-body-default{padding:1px 0 0}.x-tab-bar-default-bottom>.x-tab-bar-body-default{padding:0 0 1px 0}.x-tab-bar-default-left>.x-tab-bar-body-default{padding:0 0 0 1px}.x-tab-bar-default-right>.x-tab-bar-body-default{padding:0 1px 0 0}.x-tab-bar-plain.x-tab-bar-default-horizontal{border-top-color:transparent;border-bottom-color:transparent;border-left-width:0;border-right-width:0}.x-tab-bar-plain.x-tab-bar-default-vertical{border-right-color:transparent;border-left-color:transparent;border-top-width:0;border-bottom-width:0}.x-tab-bar-top>.x-tab-bar-body-default{padding-bottom:2px}.x-tab-bar-bottom>.x-tab-bar-body-default{padding-top:2px}.x-tab-bar-left>.x-tab-bar-body-default{padding-right:2px}.x-tab-bar-right>.x-tab-bar-body-default{padding-left:2px}.x-tab-bar-strip-default{border-style:solid;border-color:#d0d0d0;background-color:#eaeaea}.x-tab-bar-top>.x-tab-bar-strip-default{border-width:1px 0 0 0;height:3px}.x-tab-bar-top.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:1px 1px 0 1px}.x-tab-bar-bottom>.x-tab-bar-strip-default{border-width:0 0 1px 0;height:3px}.x-tab-bar-bottom.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:0 1px 1px 1px}.x-tab-bar-left>.x-tab-bar-strip-default{border-width:0 0 0 1px;width:3px}.x-tab-bar-left.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:1px 0 1px 1px}.x-tab-bar-right>.x-tab-bar-strip-default{border-width:0 1px 0 0;width:3px}.x-tab-bar-right.x-tab-bar-plain>.x-tab-bar-strip-default{border-width:1px 1px 1px 0}.x-tab-bar-horizontal>.x-tab-bar-body-default{min-height:26px}.x-ie9m .x-tab-bar-horizontal>.x-tab-bar-body-default{min-height:23px}.x-tab-bar-vertical>.x-tab-bar-body-default{min-width:26px}.x-ie9m .x-tab-bar-vertical>.x-tab-bar-body-default{min-width:23px}.x-tab-bar-default-top{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(top,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(top,#dfdede,#d2d2d2);background-image:-o-linear-gradient(top,#dfdede,#d2d2d2);background-image:-ms-linear-gradient(top,#dfdede,#d2d2d2);background-image:linear-gradient(top,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-top{background:url(images/tab-bar/tab-bar-default-top-bg.gif)}.x-tab-bar-default-bottom{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,50% 100%,50% 0,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-o-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:-ms-linear-gradient(bottom,#dfdede,#d2d2d2);background-image:linear-gradient(bottom,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-bottom{background:url(images/tab-bar/tab-bar-default-bottom-bg.gif) bottom 0}.x-tab-bar-default-left{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,0% 50%,100% 50%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(left,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(left,#dfdede,#d2d2d2);background-image:-o-linear-gradient(left,#dfdede,#d2d2d2);background-image:-ms-linear-gradient(left,#dfdede,#d2d2d2);background-image:linear-gradient(left,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-left{background:url(images/tab-bar/tab-bar-default-left-bg.gif)}.x-tab-bar-default-right{background-image:none;background-color:#d2d2d2;background-image:-webkit-gradient(linear,100% 50%,0% 50%,color-stop(0%,#dfdede),color-stop(100%,#d2d2d2));background-image:-webkit-linear-gradient(right,#dfdede,#d2d2d2);background-image:-moz-linear-gradient(right,#dfdede,#d2d2d2);background-image:-o-linear-gradient(right,#dfdede,#d2d2d2);background-image:-ms-linear-gradient(right,#dfdede,#d2d2d2);background-image:linear-gradient(right,#dfdede,#d2d2d2)}.x-nlg .x-tab-bar-default-right{background:url(images/tab-bar/tab-bar-default-right-bg.gif) 0 right}.x-tab-bar-default-scroller .x-box-scroller-body-horizontal{margin-left:18px}.x-tab-bar-default-vertical-scroller .x-box-scroller-body-vertical{margin-top:17px}.x-box-scroller-tab-bar-default{cursor:pointer}.x-box-scroller-tab-bar-default.x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-box-scroller-tab-bar-default.x-box-scroller-left,.x-box-scroller-tab-bar-default.x-box-scroller-right{width:18px;top:0;bottom:0}.x-box-scroller-tab-bar-default.x-box-scroller-left{margin:0;background-position:-18px 0}.x-box-scroller-tab-bar-default.x-box-scroller-left.x-box-scroller-hover{background-position:0 0}.x-box-scroller-tab-bar-default.x-box-scroller-right{margin:0;background-position:0 0}.x-box-scroller-tab-bar-default.x-box-scroller-right.x-box-scroller-hover{background-position:-18px 0}.x-box-scroller-tab-bar-default.x-box-scroller-top,.x-box-scroller-tab-bar-default.x-box-scroller-bottom{height:18px;left:0;right:0}.x-box-scroller-tab-bar-default.x-box-scroller-top{margin:0;background-position:0 -18px}.x-box-scroller-tab-bar-default.x-box-scroller-top.x-box-scroller-hover{background-position:0 0}.x-box-scroller-tab-bar-default.x-box-scroller-bottom{margin:0;background-position:0 0}.x-box-scroller-tab-bar-default.x-box-scroller-bottom.x-box-scroller-hover{background-position:0 -18px}.x-tab-bar-default-right .x-box-scroller-top{background-position:right -18px}.x-tab-bar-default-right .x-box-scroller-top.x-box-scroller-hover{background-position:right 0}.x-tab-bar-default-right .x-box-scroller-bottom{background-position:right 0}.x-tab-bar-default-right .x-box-scroller-bottom.x-box-scroller-hover{background-position:right -18px}.x-tab-bar-default-bottom .x-box-scroller-left{background-position:-18px bottom}.x-tab-bar-default-bottom .x-box-scroller-left.x-box-scroller-hover{background-position:0 bottom}.x-tab-bar-default-bottom .x-box-scroller-right{background-position:0 bottom}.x-tab-bar-default-bottom .x-box-scroller-right.x-box-scroller-hover{background-position:-18px bottom}.x-tab-bar-default-top .x-box-scroller-left{background-image:url(images/tab-bar/default-scroll-left-top.gif)}.x-tab-bar-default-top .x-box-scroller-right{background-image:url(images/tab-bar/default-scroll-right-top.gif)}.x-tab-bar-default-bottom .x-box-scroller-left{background-image:url(images/tab-bar/default-scroll-left-bottom.gif)}.x-tab-bar-default-bottom .x-box-scroller-right{background-image:url(images/tab-bar/default-scroll-right-bottom.gif)}.x-tab-bar-default-left .x-box-scroller-top{background-image:url(images/tab-bar/default-scroll-top-left.gif)}.x-tab-bar-default-left .x-box-scroller-bottom{background-image:url(images/tab-bar/default-scroll-bottom-left.gif)}.x-tab-bar-default-right .x-box-scroller-top{background-image:url(images/tab-bar/default-scroll-top-right.gif)}.x-tab-bar-default-right .x-box-scroller-bottom{background-image:url(images/tab-bar/default-scroll-bottom-right.gif)}.x-window-ghost{filter:alpha(opacity=65);opacity:.65}.x-window-default{border-color:#a9a9a9;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-default{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-default-mc{background-color:#e8e8e8}.x-nbr .x-window-default{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-default-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-4-4-4-4}.x-window-default-tl{background-position:0 -10px}.x-window-default-tr{background-position:right -15px}.x-window-default-bl{background-position:0 -20px}.x-window-default-br{background-position:right -25px}.x-window-default-ml{background-position:0 top}.x-window-default-mr{background-position:right top}.x-window-default-tc{background-position:0 0}.x-window-default-bc{background-position:0 -5px}.x-window-default-tr,.x-window-default-br,.x-window-default-mr{padding-right:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-ml{padding-left:5px}.x-window-default-tc{height:5px}.x-window-default-bc{height:5px}.x-window-default-tl,.x-window-default-bl,.x-window-default-tr,.x-window-default-br,.x-window-default-tc,.x-window-default-bc,.x-window-default-ml,.x-window-default-mr{background-image:url(images/window/window-default-corners.gif)}.x-window-default-ml,.x-window-default-mr{background-image:url(images/window/window-default-sides.gif);background-repeat:repeat-y}.x-window-default-mc{padding:0}.x-window-body-default{border-color:#bcb1b0;border-width:1px;border-style:solid;background:#e0e0e0;color:black;font-size:12px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif}.x-window-header-default{font-size:11px;border-color:#a9a9a9;background-color:#e8e8e8}.x-window-header-default .x-tool-img{background-color:#e8e8e8}.x-window-header-default-horizontal .x-window-header-default-tab-bar{margin-top:-5px;margin-bottom:-5px}.x-window-header-default-vertical .x-window-header-default-tab-bar{margin-right:-5px;margin-left:-5px}.x-window-header-title-default{color:#333;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif;line-height:15px}.x-window-header-title-default>.x-title-text-default{padding:0 2px 1px;text-transform:none}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-top{height:18px;padding-bottom:2px}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-right{width:18px;padding-left:2px}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-bottom{height:18px;padding-top:2px}.x-window-header-title-default>.x-title-icon-wrap-default.x-title-icon-left{width:18px;padding-right:2px}.x-window-header-title-default>.x-title-icon-wrap-default>.x-title-icon-default{width:16px;height:16px;background-position:center center}.x-window-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-window-header-title-default>.x-title-icon-wrap-default>.x-title-glyph{color:#8d8d8d}.x-window-header-default-top{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 1px 5px;border-width:1px 1px 0 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-top-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-top-frameInfo{font-family:dh-5-5-0-5-1-1-0-1-5-5-1-5}.x-window-header-default-top-tl{background-position:0 -10px}.x-window-header-default-top-tr{background-position:right -15px}.x-window-header-default-top-bl{background-position:0 -20px}.x-window-header-default-top-br{background-position:right -25px}.x-window-header-default-top-ml{background-position:0 top}.x-window-header-default-top-mr{background-position:right top}.x-window-header-default-top-tc{background-position:0 0}.x-window-header-default-top-bc{background-position:0 -5px}.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-mr{padding-right:5px}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-ml{padding-left:5px}.x-window-header-default-top-tc{height:5px}.x-window-header-default-top-bc{height:0}.x-window-header-default-top-tl,.x-window-header-default-top-bl,.x-window-header-default-top-tr,.x-window-header-default-top-br,.x-window-header-default-top-tc,.x-window-header-default-top-bc,.x-window-header-default-top-ml,.x-window-header-default-top-mr{background-image:url(images/window-header/window-header-default-top-corners.gif)}.x-window-header-default-top-ml,.x-window-header-default-top-mr{background-image:url(images/window-header/window-header-default-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-top-mc{padding:1px 1px 1px 1px}.x-window-header-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 1px;border-width:1px 1px 1px 0;border-style:solid;background-color:#e8e8e8}.x-window-header-default-right-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-right-frameInfo{font-family:dh-5-5-5-0-1-1-1-0-5-5-5-1}.x-window-header-default-right-tl{background-position:0 -10px}.x-window-header-default-right-tr{background-position:right -15px}.x-window-header-default-right-bl{background-position:0 -20px}.x-window-header-default-right-br{background-position:right -25px}.x-window-header-default-right-ml{background-position:0 top}.x-window-header-default-right-mr{background-position:right top}.x-window-header-default-right-tc{background-position:0 0}.x-window-header-default-right-bc{background-position:0 -5px}.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-mr{padding-right:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-ml{padding-left:0}.x-window-header-default-right-tc{height:5px}.x-window-header-default-right-bc{height:5px}.x-window-header-default-right-tl,.x-window-header-default-right-bl,.x-window-header-default-right-tr,.x-window-header-default-right-br,.x-window-header-default-right-tc,.x-window-header-default-right-bc,.x-window-header-default-right-ml,.x-window-header-default-right-mr{background-image:url(images/window-header/window-header-default-right-corners.gif)}.x-window-header-default-right-ml,.x-window-header-default-right-mr{background-image:url(images/window-header/window-header-default-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-right-mc{padding:1px 1px 1px 1px}.x-window-header-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:1px 5px 5px 5px;border-width:0 1px 1px 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-bottom-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-bottom-frameInfo{font-family:dh-0-5-5-5-0-1-1-1-1-5-5-5}.x-window-header-default-bottom-tl{background-position:0 -10px}.x-window-header-default-bottom-tr{background-position:right -15px}.x-window-header-default-bottom-bl{background-position:0 -20px}.x-window-header-default-bottom-br{background-position:right -25px}.x-window-header-default-bottom-ml{background-position:0 top}.x-window-header-default-bottom-mr{background-position:right top}.x-window-header-default-bottom-tc{background-position:0 0}.x-window-header-default-bottom-bc{background-position:0 -5px}.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-mr{padding-right:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-ml{padding-left:5px}.x-window-header-default-bottom-tc{height:0}.x-window-header-default-bottom-bc{height:5px}.x-window-header-default-bottom-tl,.x-window-header-default-bottom-bl,.x-window-header-default-bottom-tr,.x-window-header-default-bottom-br,.x-window-header-default-bottom-tc,.x-window-header-default-bottom-bc,.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{background-image:url(images/window-header/window-header-default-bottom-corners.gif)}.x-window-header-default-bottom-ml,.x-window-header-default-bottom-mr{background-image:url(images/window-header/window-header-default-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-bottom-mc{padding:1px 1px 1px 1px}.x-window-header-default-left{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:5px 1px 5px 5px;border-width:1px 0 1px 1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-left-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-left-frameInfo{font-family:dh-5-0-5-5-1-0-1-1-5-1-5-5}.x-window-header-default-left-tl{background-position:0 -10px}.x-window-header-default-left-tr{background-position:right -15px}.x-window-header-default-left-bl{background-position:0 -20px}.x-window-header-default-left-br{background-position:right -25px}.x-window-header-default-left-ml{background-position:0 top}.x-window-header-default-left-mr{background-position:right top}.x-window-header-default-left-tc{background-position:0 0}.x-window-header-default-left-bc{background-position:0 -5px}.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-mr{padding-right:0}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-ml{padding-left:5px}.x-window-header-default-left-tc{height:5px}.x-window-header-default-left-bc{height:5px}.x-window-header-default-left-tl,.x-window-header-default-left-bl,.x-window-header-default-left-tr,.x-window-header-default-left-br,.x-window-header-default-left-tc,.x-window-header-default-left-bc,.x-window-header-default-left-ml,.x-window-header-default-left-mr{background-image:url(images/window-header/window-header-default-left-corners.gif)}.x-window-header-default-left-ml,.x-window-header-default-left-mr{background-image:url(images/window-header/window-header-default-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-left-mc{padding:1px 1px 1px 1px}.x-window-header-default-collapsed-top{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-top-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-top{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-top-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-5-5-5-5}.x-window-header-default-collapsed-top-tl{background-position:0 -10px}.x-window-header-default-collapsed-top-tr{background-position:right -15px}.x-window-header-default-collapsed-top-bl{background-position:0 -20px}.x-window-header-default-collapsed-top-br{background-position:right -25px}.x-window-header-default-collapsed-top-ml{background-position:0 top}.x-window-header-default-collapsed-top-mr{background-position:right top}.x-window-header-default-collapsed-top-tc{background-position:0 0}.x-window-header-default-collapsed-top-bc{background-position:0 -5px}.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-mr{padding-right:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-ml{padding-left:5px}.x-window-header-default-collapsed-top-tc{height:5px}.x-window-header-default-collapsed-top-bc{height:5px}.x-window-header-default-collapsed-top-tl,.x-window-header-default-collapsed-top-bl,.x-window-header-default-collapsed-top-tr,.x-window-header-default-collapsed-top-br,.x-window-header-default-collapsed-top-tc,.x-window-header-default-collapsed-top-bc,.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{background-image:url(images/window-header/window-header-default-collapsed-top-corners.gif)}.x-window-header-default-collapsed-top-ml,.x-window-header-default-collapsed-top-mr{background-image:url(images/window-header/window-header-default-collapsed-top-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-top-mc{padding:1px 1px 1px 1px}.x-window-header-default-collapsed-right{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-right-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-right{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-right-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-5-5-5-5}.x-window-header-default-collapsed-right-tl{background-position:0 -10px}.x-window-header-default-collapsed-right-tr{background-position:right -15px}.x-window-header-default-collapsed-right-bl{background-position:0 -20px}.x-window-header-default-collapsed-right-br{background-position:right -25px}.x-window-header-default-collapsed-right-ml{background-position:0 top}.x-window-header-default-collapsed-right-mr{background-position:right top}.x-window-header-default-collapsed-right-tc{background-position:0 0}.x-window-header-default-collapsed-right-bc{background-position:0 -5px}.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-mr{padding-right:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-ml{padding-left:5px}.x-window-header-default-collapsed-right-tc{height:5px}.x-window-header-default-collapsed-right-bc{height:5px}.x-window-header-default-collapsed-right-tl,.x-window-header-default-collapsed-right-bl,.x-window-header-default-collapsed-right-tr,.x-window-header-default-collapsed-right-br,.x-window-header-default-collapsed-right-tc,.x-window-header-default-collapsed-right-bc,.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{background-image:url(images/window-header/window-header-default-collapsed-right-corners.gif)}.x-window-header-default-collapsed-right-ml,.x-window-header-default-collapsed-right-mr{background-image:url(images/window-header/window-header-default-collapsed-right-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-right-mc{padding:1px 1px 1px 1px}.x-window-header-default-collapsed-bottom{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-bottom-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-bottom{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-bottom-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-5-5-5-5}.x-window-header-default-collapsed-bottom-tl{background-position:0 -10px}.x-window-header-default-collapsed-bottom-tr{background-position:right -15px}.x-window-header-default-collapsed-bottom-bl{background-position:0 -20px}.x-window-header-default-collapsed-bottom-br{background-position:right -25px}.x-window-header-default-collapsed-bottom-ml{background-position:0 top}.x-window-header-default-collapsed-bottom-mr{background-position:right top}.x-window-header-default-collapsed-bottom-tc{background-position:0 0}.x-window-header-default-collapsed-bottom-bc{background-position:0 -5px}.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-mr{padding-right:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-ml{padding-left:5px}.x-window-header-default-collapsed-bottom-tc{height:5px}.x-window-header-default-collapsed-bottom-bc{height:5px}.x-window-header-default-collapsed-bottom-tl,.x-window-header-default-collapsed-bottom-bl,.x-window-header-default-collapsed-bottom-tr,.x-window-header-default-collapsed-bottom-br,.x-window-header-default-collapsed-bottom-tc,.x-window-header-default-collapsed-bottom-bc,.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{background-image:url(images/window-header/window-header-default-collapsed-bottom-corners.gif)}.x-window-header-default-collapsed-bottom-ml,.x-window-header-default-collapsed-bottom-mr{background-image:url(images/window-header/window-header-default-collapsed-bottom-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-bottom-mc{padding:1px 1px 1px 1px}.x-window-header-default-collapsed-left{-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px;padding:5px 5px 5px 5px;border-width:1px;border-style:solid;background-color:#e8e8e8}.x-window-header-default-collapsed-left-mc{background-color:#e8e8e8}.x-nbr .x-window-header-default-collapsed-left{padding:0!important;border-width:0!important;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0;background-color:transparent!important;box-shadow:none!important}.x-window-header-default-collapsed-left-frameInfo{font-family:dh-5-5-5-5-1-1-1-1-5-5-5-5}.x-window-header-default-collapsed-left-tl{background-position:0 -10px}.x-window-header-default-collapsed-left-tr{background-position:right -15px}.x-window-header-default-collapsed-left-bl{background-position:0 -20px}.x-window-header-default-collapsed-left-br{background-position:right -25px}.x-window-header-default-collapsed-left-ml{background-position:0 top}.x-window-header-default-collapsed-left-mr{background-position:right top}.x-window-header-default-collapsed-left-tc{background-position:0 0}.x-window-header-default-collapsed-left-bc{background-position:0 -5px}.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-mr{padding-right:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-ml{padding-left:5px}.x-window-header-default-collapsed-left-tc{height:5px}.x-window-header-default-collapsed-left-bc{height:5px}.x-window-header-default-collapsed-left-tl,.x-window-header-default-collapsed-left-bl,.x-window-header-default-collapsed-left-tr,.x-window-header-default-collapsed-left-br,.x-window-header-default-collapsed-left-tc,.x-window-header-default-collapsed-left-bc,.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{background-image:url(images/window-header/window-header-default-collapsed-left-corners.gif)}.x-window-header-default-collapsed-left-ml,.x-window-header-default-collapsed-left-mr{background-image:url(images/window-header/window-header-default-collapsed-left-sides.gif);background-repeat:repeat-y}.x-window-header-default-collapsed-left-mc{padding:1px 1px 1px 1px}.x-window-header-default-top{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default-right{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset}.x-window-header-default-bottom{-webkit-box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 -1px 0 0 inset,#ebe7e7 -1px 0 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default-left{-webkit-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset;-moz-box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset;box-shadow:#ebe7e7 0 1px 0 0 inset,#ebe7e7 0 -1px 0 0 inset,#ebe7e7 1px 0 0 0 inset}.x-window-header-default .x-window-header-icon{width:16px;height:16px;color:#333;font-size:16px;line-height:16px;background-position:center center}.x-window-header-default .x-window-header-glyph{color:#333;font-size:16px;line-height:16px;opacity:.5}.x-ie8 .x-window-header-default .x-window-header-glyph{color:#8d8d8d}.x-window-header-default-horizontal .x-tool-after-title{margin:0 0 0 2px}.x-window-header-default-horizontal .x-tool-before-title{margin:0 2px 0 0}.x-window-header-default-vertical .x-tool-after-title{margin:2px 0 0 0}.x-window-header-default-vertical .x-tool-before-title{margin:0 0 2px 0}.x-window-default-collapsed .x-window-header{border-width:1px!important}.x-nbr .x-window-default-collapsed .x-window-header{border-width:0!important}.x-window-body-plain{background-color:transparent}.x-message-box .x-window-body{background-color:#e8e8e8;border-width:0}.x-message-box-info,.x-message-box-warning,.x-message-box-question,.x-message-box-error{background-position:left top;background-repeat:no-repeat}.x-message-box-icon{height:32px;width:32px;margin-right:10px}.x-message-box-info{background-image:url(images/shared/icon-info.gif)}.x-message-box-warning{background-image:url(images/shared/icon-warning.gif)}.x-message-box-question{background-image:url(images/shared/icon-question.gif)}.x-message-box-error{background-image:url(images/shared/icon-error.gif)}.x-form-trigger-spinner-default{width:17px;border:0}.x-form-spinner-default{background-image:url(images/form/spinner.gif);background-color:white;width:17px;height:11px}.x-form-spinner-up-default{background-position:0 0}.x-form-spinner-up-default.x-form-spinner-over{background-position:-17px 0}.x-form-spinner-up-default.x-form-spinner-over.x-form-spinner-focus{background-position:-68px 0}.x-form-spinner-up-default.x-form-spinner-focus{background-position:-51px 0}.x-form-spinner-up-default.x-form-spinner.x-form-spinner-click{background-position:-34px 0}.x-form-spinner-down-default{background-position:0 -11px}.x-form-spinner-down-default.x-form-spinner-over{background-position:-17px -11px}.x-form-spinner-down-default.x-form-spinner-over.x-form-spinner-focus{background-position:-68px -11px}.x-form-spinner-down-default.x-form-spinner-focus{background-position:-51px -11px}.x-form-spinner-down-default.x-form-spinner.x-form-spinner-click{background-position:-34px -11px}.x-form-trigger-spinner-toolbar{width:17px;border:0}.x-form-spinner-toolbar{background-image:url(images/form/spinner-small.gif);background-color:white;width:17px;height:10px}.x-form-spinner-up-toolbar{background-position:0 0}.x-form-spinner-up-toolbar.x-form-spinner-over{background-position:-17px 0}.x-form-spinner-up-toolbar.x-form-spinner-over.x-form-spinner-focus{background-position:-68px 0}.x-form-spinner-up-toolbar.x-form-spinner-focus{background-position:-51px 0}.x-form-spinner-up-toolbar.x-form-spinner.x-form-spinner-click{background-position:-34px 0}.x-form-spinner-down-toolbar{background-position:0 -10px}.x-form-spinner-down-toolbar.x-form-spinner-over{background-position:-17px -10px}.x-form-spinner-down-toolbar.x-form-spinner-over.x-form-spinner-focus{background-position:-68px -10px}.x-form-spinner-down-toolbar.x-form-spinner-focus{background-position:-51px -10px}.x-form-spinner-down-toolbar.x-form-spinner.x-form-spinner-click{background-position:-34px -10px}.x-tbar-page-number{width:30px}.x-tbar-page-first{background-image:url(images/grid/page-first.gif)}.x-tbar-page-prev{background-image:url(images/grid/page-prev.gif)}.x-tbar-page-next{background-image:url(images/grid/page-next.gif)}.x-tbar-page-last{background-image:url(images/grid/page-last.gif)}.x-tbar-loading{background-image:url(images/grid/refresh.gif)}.x-item-disabled .x-tbar-page-first{background-image:url(images/grid/page-first-disabled.gif)}.x-item-disabled .x-tbar-page-prev{background-image:url(images/grid/page-prev-disabled.gif)}.x-item-disabled .x-tbar-page-next{background-image:url(images/grid/page-next-disabled.gif)}.x-item-disabled .x-tbar-page-last{background-image:url(images/grid/page-last-disabled.gif)}.x-item-disabled .x-tbar-loading{background-image:url(images/grid/refresh-disabled.gif)}.x-menu-default{border-style:solid;border-width:1px;border-color:#d0d0d0}.x-menu-body-default{background:#f0f0f0;padding:2px}.x-menu-icon-separator-default{left:24px;border-left:solid 1px #e0e0e0;background-color:white;width:2px}.x-menu-item-default{border-width:1px;cursor:pointer}.x-menu-item-default.x-menu-item-active{background-image:none;background-color:#e6e6e6;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(0%,#eee),color-stop(100%,#dcdcdc));background-image:-webkit-linear-gradient(top,#eee,#dcdcdc);background-image:-moz-linear-gradient(top,#eee,#dcdcdc);background-image:-o-linear-gradient(top,#eee,#dcdcdc);background-image:-ms-linear-gradient(top,#eee,#dcdcdc);background-image:linear-gradient(top,#eee,#dcdcdc);-webkit-border-radius:3px;-moz-border-radius:3px;-ms-border-radius:3px;-o-border-radius:3px;border-radius:3px;border-color:#9d9d9d}.x-nlg .x-menu-item-default.x-menu-item-active{background:#e6e6e6 repeat-x left top;background-image:url(images/menu/menu-item-default-active-bg.gif)}.x-menu-item-default.x-menu-item-separator{height:2px;border-top:solid 1px #e0e0e0;background-color:white;margin:2px 0;padding:0}.x-menu-item-default.x-menu-item-disabled{filter:alpha(opacity=50);opacity:.5}.x-ie9m .x-menu-item-default.x-menu-item-disabled .x-menu-item-icon-ui{filter:alpha(opacity=50);opacity:.5}.x-ie9m .x-menu-item-default.x-menu-item-disabled .x-menu-item-text-default{background-color:transparent}.x-menu-item-default .x-form-item-label{font-size:11px;color:#222}.x-menu-item-text-default,.x-menu-item-cmp-default{margin:0 4px 0 4px}.x-menu-item-text-default{font:normal 11px tahoma,arial,verdana,sans-serif;line-height:21px;padding-top:1px;color:#222;cursor:pointer}.x-menu-item-text-default.x-menu-item-indent{margin-left:30px}.x-menu-item-text-default.x-menu-item-indent-no-separator{margin-left:24px}.x-menu-item-text-default.x-menu-item-indent-right-icon{margin-right:28px}.x-menu-item-text-default.x-menu-item-indent-right-arrow{margin-right:21px}.x-menu-item-indent-default{margin-left:30px}.x-menu-item-icon-default{width:16px;height:16px;top:4px;left:3px;background-position:center center}.x-menu-item-icon-default.x-menu-item-glyph{font-size:16px;line-height:16px;color:#222;opacity:.5}.x-ie8 .x-menu-item-icon-default.x-menu-item-glyph{color:#898989}.x-menu-item-icon-default.x-menu-item-icon-right{width:16px;height:16px;top:4px;right:5px;left:auto;background-position:center center}.x-menu-item-checked .x-menu-item-icon-default.x-menu-item-checkbox{background-image:url(images/menu/default-checked.gif)}.x-menu-item-unchecked .x-menu-item-icon-default.x-menu-item-checkbox{background-image:url(images/menu/default-unchecked.gif)}.x-menu-item-checked .x-menu-item-icon-default.x-menu-group-icon{background-image:url(images/menu/default-group-checked.gif)}.x-menu-item-unchecked .x-menu-item-icon-default.x-menu-group-icon{background-image:none}.x-menu-item-arrow-default{width:12px;height:9px;top:7px;right:0;background-image:url(images/menu/default-menu-parent.gif)}.x-menu-item-active .x-menu-item-arrow-default{top:6px;right:-1px}.x-menu-default-scroller .x-box-scroller-body-horizontal{margin-left:14px}.x-menu-default-vertical-scroller .x-box-scroller-body-vertical{margin-top:11px}.x-box-scroller-menu-default{cursor:pointer}.x-box-scroller-menu-default.x-box-scroller-disabled{filter:alpha(opacity=50);opacity:.5;cursor:default}.x-box-scroller-menu-default.x-box-scroller-top,.x-box-scroller-menu-default.x-box-scroller-bottom{height:5px;width:35px;left:50%;margin-left:-17px}.x-box-scroller-menu-default.x-box-scroller-top{margin-top:4px;margin-right:0;margin-bottom:4px;background-image:url(images/menu/default-scroll-top.gif);background-position:0 -5px}.x-box-scroller-menu-default.x-box-scroller-top.x-box-scroller-hover{background-position:0 0}.x-box-scroller-menu-default.x-box-scroller-bottom{margin-top:4px;margin-right:0;margin-bottom:4px;background-image:url(images/menu/default-scroll-bottom.gif);background-position:0 0}.x-box-scroller-menu-default.x-box-scroller-bottom.x-box-scroller-hover{background-position:0 -5px}.x-ie8 .x-box-scroller-menu-default{background-color:#f0f0f0}.x-grid-locked .x-grid-inner-locked{border-width:0 1px 0 0;border-style:solid}.x-grid-locked-split .x-grid-inner-normal{border-width:0 0 0 1px;border-style:solid}.x-grid-inner-locked{border-right-color:#d0d0d0}.x-grid-inner-locked .x-column-header-last,.x-grid-inner-locked .x-grid-cell-last{border-right-width:0!important}.x-hmenu-lock{background-image:url(images/grid/hmenu-lock.gif)}.x-hmenu-unlock{background-image:url(images/grid/hmenu-unlock.gif)}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;filter:alpha(opacity=0);opacity:0;background-color:#fff}.x-collapsed .x-resizable-handle{display:none}.x-resizable-handle-north{cursor:n-resize}.x-resizable-handle-south{cursor:s-resize}.x-resizable-handle-east{cursor:e-resize}.x-resizable-handle-west{cursor:w-resize}.x-resizable-handle-southeast{cursor:se-resize}.x-resizable-handle-northwest{cursor:nw-resize}.x-resizable-handle-northeast{cursor:ne-resize}.x-resizable-handle-southwest{cursor:sw-resize}.x-resizable-handle-east{width:6px;height:100%;right:0;top:0}.x-resizable-handle-south{width:100%;height:6px;left:0;bottom:0}.x-resizable-handle-west{width:6px;height:100%;left:0;top:0}.x-resizable-handle-north{width:100%;height:6px;left:0;top:0}.x-resizable-handle-southeast{width:6px;height:6px;right:0;bottom:0;z-index:101}.x-resizable-handle-northwest{width:6px;height:6px;left:0;top:0;z-index:101}.x-resizable-handle-northeast{width:6px;height:6px;right:0;top:0;z-index:101}.x-resizable-handle-southwest{width:6px;height:6px;left:0;bottom:0;z-index:101}.x-window .x-window-handle{filter:alpha(opacity=0);opacity:0}.x-window-collapsed .x-window-handle{display:none}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;overflow:hidden;z-index:50000}.x-resizable-handle-over,.x-resizable-pinned .x-resizable-handle{filter:alpha(opacity=100);opacity:1}.x-resizable-handle-east-over,.x-resizable-handle-west-over{background-image:url(images/sizer/e-handle.gif)}.x-resizable-handle-south-over,.x-resizable-handle-north-over{background-image:url(images/sizer/s-handle.gif)}.x-resizable-handle-southeast-over{background-position:top left;background-image:url(images/sizer/se-handle.gif)}.x-resizable-handle-northwest-over{background-position:bottom right;background-image:url(images/sizer/nw-handle.gif)}.x-resizable-handle-northeast-over{background-position:bottom left;background-image:url(images/sizer/ne-handle.gif)}.x-resizable-handle-southwest-over{background-position:top right;background-image:url(images/sizer/sw-handle.gif)}.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-image:url(images/sizer/e-handle.gif)}.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-image:url(images/sizer/s-handle.gif)}.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;background-image:url(images/sizer/se-handle.gif)}.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;background-image:url(images/sizer/nw-handle.gif)}.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;background-image:url(images/sizer/ne-handle.gif)}.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;background-image:url(images/sizer/sw-handle.gif)}.x-scroll-indicator{position:absolute;background-color:black;opacity:.5;border-radius:3px;margin:2px}.x-scroll-indicator-x{bottom:0;height:6px}.x-scroll-indicator-y{right:0;width:6px}.x-column-header-checkbox{border-color:#c5c5c5}.x-grid-row-checker,.x-column-header-checkbox .x-column-header-text{height:13px;width:13px;background-image:url(images/form/checkbox.gif);line-height:13px}.x-column-header-checkbox .x-column-header-inner{padding:5px 5px 4px 5px}.x-grid-cell-row-checker .x-grid-cell-inner{padding:4px 5px 3px 5px}.x-grid-no-row-lines .x-grid-row-focused .x-grid-cell-row-checker .x-grid-cell-inner{padding-top:3px;padding-bottom:2px}.x-grid-hd-checker-on .x-column-header-text,.x-grid-item-selected .x-grid-row-checker,.x-grid-item-selected .x-grid-row-checker{background-position:0 -13px}.x-box-tl{background:transparent no-repeat 0 0}.x-box-tc{height:8px;background:transparent repeat-x 0 0;overflow:hidden}.x-box-tr{background:transparent no-repeat right -8px}.x-box-ml{background:transparent repeat-y 0;padding-left:4px;overflow:hidden}.x-box-mc{background:repeat-x 0 -16px;padding:4px 10px}.x-box-mc h3{margin:0 0 4px 0}.x-box-mr{background:transparent repeat-y right;padding-right:4px;overflow:hidden}.x-box-bl{background:transparent no-repeat 0 -16px}.x-box-bc{background:transparent repeat-x 0 -8px;height:8px;overflow:hidden}.x-box-br{background:transparent 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-tl{background-image:url(images/box/corners.gif)}.x-box-tc{background-image:url(images/box/tb.gif)}.x-box-tr{background-image:url(images/box/corners.gif)}.x-box-ml{background-image:url(images/box/l.gif)}.x-box-mc{background-color:#eee;background-image:url(images/box/tb.gif);font-family:"Myriad Pro","Myriad Web","Tahoma","Helvetica","Arial",sans-serif;color:#393939;font-size:15px}.x-box-mc h3{font-size:18px;font-weight:bold}.x-box-mr{background-image:url(images/box/r.gif)}.x-box-bl{background-image:url(images/box/corners.gif)}.x-box-bc{background-image:url(images/box/tb.gif)}.x-box-br{background-image:url(images/box/corners.gif)}.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/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/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/box/l-blue.gif)}.x-box-blue .x-box-mr{background-image:url(images/box/r-blue.gif)}.x-column-header-trigger{background-color:#c5c5c5;background-image:url(images/grid/grid3-hd-btn.gif)}.x-message-box .x-msg-box-wait{background-image:url(images/shared/blue-loading.gif)}.x-resizable-handle-east-over,.x-resizable-handle-west-over{background-position:left}.x-resizable-handle-south-over,.x-resizable-handle-north-over{background-position:top}.x-resizable-handle-southeast-over{background-position:top left}.x-resizable-handle-northwest-over{background-position:bottom right}.x-resizable-handle-northeast-over{background-position:bottom left}.x-resizable-handle-southwest-over{background-position:top right}.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-position:left}.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-position:top}.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left}.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right}.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left}.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right} \ No newline at end of file diff --git a/app/spark.info b/app/spark.info new file mode 100644 index 00000000..e4d205da --- /dev/null +++ b/app/spark.info @@ -0,0 +1,13 @@ +# This is the spark-sdk specification. It's in a magical format without a name. +# Use this format while developing your own sparks! + +# This is the spark name. This should be the registered name of the spark. +name: Appunto-Auth + +# This is the current version of this spark. All sparks should be in +# x.x.x format. Validation will fail otherwise. +version: 0.1.2 + +# This is the version of CodeIgniter this spark is compatible up to. It should +# be in x.x.x format +compatibility: 2.2.0 diff --git a/app/src/Application.js b/app/src/Application.js new file mode 100644 index 00000000..c4b846c1 --- /dev/null +++ b/app/src/Application.js @@ -0,0 +1,32 @@ +/** + * The main application class. An instance of this class is created by app.js when it calls + * Ext.application(). This is the ideal place to handle application launch and initialization + * details. + */ +Ext.define('AppuntoAuth.Application', +{ + extend: 'Ext.app.Application', + + requires: [ + 'AppuntoAuth.lib.util.FakeConsole', + 'AppuntoAuth.lib.util.CustomVTypes', + 'AppuntoAuth.lib.util.SearchField', + 'AppuntoAuth.lib.util.KeepAlive', + 'AppuntoAuth.lib.lang.Default' + ], + + name: 'AppuntoAuth', + + enableQuickTips : true, + + controllers: [ + 'Navigation', + 'Status', + 'Users', + 'Roles', + 'Permissions', + 'Paths', + 'Sessions' + ] + +}); diff --git a/app/src/controller/Navigation.js b/app/src/controller/Navigation.js new file mode 100644 index 00000000..4d3e961b --- /dev/null +++ b/app/src/controller/Navigation.js @@ -0,0 +1,99 @@ +/** + * The Navigation controller used to handle things like routes. + */ +Ext.define('AppuntoAuth.controller.Navigation', { + extend: 'Ext.app.Controller', + + views: [ + 'main.Main', + 'main.Frame' + ], + + refs: + [{ + ref: 'tabs', + selector: 'appa-main-frame' + }], + + + config : { + routes : { + 'status' : 'redirStatus', + 'users' : 'redirUsers', + 'roles' : 'redirRoles', + 'permissions' : 'redirPermissions', + 'paths' : 'redirPaths', + 'sessions' : 'redirSessions' + } + }, + + init: function() + { + this.control( + { + 'appa-main-frame': { + beforetabchange : this.redirTabClick + }, + 'appa-main button[action="logout"]': { + click : this.logout + } + }); + }, + + logout: function() + { + location.href = ci_site_url + ci_logout_url; + }, + + redirTabClick: function(panel,newCard) + { + //this.getTabs().on('beforetabchange',function(){console.log('func');}); + this.getTabs().clearListeners(); + this.redirectTo(newCard.itemId.substr(4)); + this.getTabs().on('beforetabchange',this.redirTabClick,this); + }, + + changeCardSuppressEvent: function(tab) + { + //this.getTabs().on('beforetabchange',function(){}); + this.getTabs().setActiveTab(tab); + //this.getTabs().on('beforetabchange',this.redirTabClick,this); + }, + + redirStatus: function() + { + this.getTabs().setActiveTab('tab-status'); + //this.changeCardSuppressEvent('tab-status'); + }, + + redirUsers: function() + { + this.getTabs().setActiveTab('tab-users'); + //this.changeCardSuppressEvent('tab-users'); + }, + + redirRoles: function() + { + this.getTabs().setActiveTab('tab-roles'); + //this.changeCardSuppressEvent('tab-roles'); + }, + + redirPermissions: function() + { + this.getTabs().setActiveTab('tab-permissions'); + //this.changeCardSuppressEvent('tab-permissions'); + }, + + redirPaths: function() + { + this.getTabs().setActiveTab('tab-paths'); + //this.changeCardSuppressEvent('tab-paths'); + }, + + redirSessions: function() + { + this.getTabs().setActiveTab('tab-sessions'); + //this.changeCardSuppressEvent('tab-sessions'); + } + +}); diff --git a/app/src/controller/Paths.js b/app/src/controller/Paths.js new file mode 100644 index 00000000..9d2744ab --- /dev/null +++ b/app/src/controller/Paths.js @@ -0,0 +1,490 @@ +Ext.define('AppuntoAuth.controller.Paths', { + extend: 'Ext.app.Controller', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + models: [ + 'Path', + 'Permission' + ], + + stores: [ + 'Paths', + 'Controllers', + 'PathItems', + 'PermissionsSelection' + ], + + views: [ + 'path.Frame', + 'path.ControllerView', + 'path.PathView', + 'path.ContextMenu' + ], + + refs : [{ + ref : 'list', + selector: 'appa_path_list' + },{ + ref : 'delete_unfound_button', + selector: 'appa_path_list button[action="delete_not_found"]' + },{ + ref : 'frame', + selector: 'appa_path_frame' + },{ + ref : 'controllers', + selector: 'appa_path_controller_view' + }], + + init: function() + { + this.lastSelected = null; + + this.control( + { + 'appa_path_frame': { + activate : this.pathsActivate + }, + 'appa_path_path_view' : { + itemcontextmenu : this.showContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_path_contextmenu menuitem[action="set_public"]': { + click: this.setPublic + }, + 'appa_path_contextmenu menuitem[action="set_private"]': { + click: this.setPrivate + }, + 'appa_path_contextmenu menuitem[group="permission"]': { + click: this.setPermission + }, + 'appa_path_contextmenu menuitem[action="remove_permission"]': { + click: this.removePermission + }, + 'appa_path_contextmenu menuitem[action="delete"]': { + click: this.deletePath + }, + 'appa_path_frame button[action="verify-paths"]': { + click: this.verifyPaths + }, + 'appa_path_controller_view': { + select: this.controllerSelected + } + }); + + }, + + pathsActivate: function() + { + // Load permissions selection store for context menu + Ext.getStore('PermissionsSelection').load(); + + this.verifyPaths(); + }, + + verifyPaths: function() + { + var el = this.getFrame().up('container').getEl(), + store = Ext.getStore('Paths'), + me = this, + cb; + + cb = function(records, operation, success) + { + el.unmask(); + if (success && operation.getResultSet().total > 0) + { + Ext.Msg.alert(Lang.localize('result'),operation.getResultSet().message,me.refreshView,me); + } + else + { + me.refreshView(); + } + } + + el.mask(Lang.localize('path_verify')); + + store.load({ + ci_method : 'verify_paths', + callback : cb + }) + + }, + + refreshView: function(reselect,refreshPathWindow) + { + var me = this, + el = this.getFrame().up('container').getEl(), + cb; + + cb = function(records, operation, success) + { + if (success) + { + me.loadControllers(); + el.unmask(); + } + else + { + Ext.getStore('Paths').removeAll(); + } + } + + this.setLastSelected(); + el.mask(Lang.localize('path_refreshing')); + Ext.getStore('Paths').load({callback: cb}); + }, + + setLastSelected: function() + { + this.lastSelected = this.getControllers().getSelectionModel().getLastSelected(); + }, + + restoreSelection: function() + { + var store = Ext.getStore('Controllers'), + view = this.getControllers(); + + if (this.lastSelected != null && this.lastSelected != undefined) { + idx = store.findExact('ci_controller',this.lastSelected.get('ci_controller')); + view.getSelectionModel().select(idx); + } + }, + + loadControllers: function() + { + var store = Ext.getStore('Paths'), + view = this.getControllers(), + view_store = Ext.getStore('Controllers'), + records = store.getRange(), + controllers = [], + view_data = [], + meta = {}, + controller; + + Ext.Array.each(records, function(rec) { + controller = rec.get('ci_controller'); + if (Ext.Array.indexOf(controllers,controller) == -1) Ext.Array.push(controllers,controller); + }); + + Ext.Array.each(controllers, function(ci_class) { + meta[ci_class] = + { + ci_controller : ci_class, + dir : '', + full_path : '', + methods : 0, + public_methods : 0, + private_methods : 0 + }; + }); + + Ext.Array.each(records, function(rec) { + ci_class = rec.get('ci_controller'); + + meta[ci_class].dir = rec.get('dir'); + meta[ci_class].full_path = rec.get('full_path'); + + meta[ci_class].methods += 1; + + if (rec.get('public_flag')==1) + { + meta[ci_class].public_methods += 1; + } + else + { + meta[ci_class].private_methods += 1; + } + }); + + Ext.Array.each(controllers, function(ci_class) { + Ext.Array.push(view_data,meta[ci_class]); + }); + + view_store.loadData(view_data); + this.restoreSelection(); + + }, + + controllerSelected: function(view,rec) + { + this.loadPaths(rec.get('ci_controller')); + this.lastSelected = rec; + }, + + loadPaths: function(controller) + { + var store = Ext.getStore('Paths'), + item_store = Ext.getStore('PathItems'), + records = store.getRange() + filtered = []; + + Ext.Array.each(records, function(record) { + if (record.get('ci_controller') == controller) + { + Ext.Array.push(filtered,record); + } + }); + + item_store.loadData(filtered); + }, + + expandAllGroups: function() + { + this.getList().getView().getFeature('grouping').expandAll(); + }, + + collapseAllGroups: function() + { + this.getList().getView().getFeature('grouping').collapseAll(); + }, + + groupingChanged: function(store, grouper) + { + var list = this.getList(), + col = grouper.items[0].property; + + list.features[0].groupHeaderTpl = list.getGroupHeader(col); + }, + + showContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_path_contextmenu'), + store = Ext.getStore('PermissionsSelection'), + perms = store.getRange(); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + Ext.Array.each(perms, function(perm) + { + perm_menu_item = + { + text : perm.get('name'), + value : perm.get('id'), + checked : rec.get('permission_id') == perm.get('id'), + group : 'permission' + }; + menu.down('menuitem[action="set_permission"]').menu.add(perm_menu_item); + }); + + + // Show/Hide menu items based on record state + menu.down('menuitem[action="set_private"]').setVisible(rec.data.public_flag != 0); + menu.down('menuitem[action="set_public"]').setVisible(rec.data.public_flag != 1); + + // Enable set permission if not public + menu.down('menuitem[action="set_permission"]').setDisabled(rec.data.public_flag == 1); + + // Enable remove permission if not public and has a permission + menu.down('menuitem[action="remove_permission"]').setDisabled(rec.data.public_flag == 1 || rec.get('permission_id')==0); + + // Enable delete if record not found + menu.down('menuitem[action="delete"]').setDisabled(rec.data.found != 0); + + menu.showAt(e.getXY()); + }, + + findPaths: function() + { + var me = this, + list = this.getList(), + store = list.getStore(), + cb; + + cb = function(records, operation, success) + { + if (success) + { + if (operation.getResultSet().total > 0) + { + Ext.Msg.alert('Result',operation.getResultSet().message,me.refreshList,me); + } + else + { + me.refreshList(); + } + } + } + + store.load({ + ci_method : 'verify_paths', + callback : cb + }); + }, + + refreshList: function() + { + var me = this, + list = this.getList(), + store = list.getStore(), + cb, + unfound; + + cb = function(records, operation, success) + { + if (success) + { + unfound = store.findBy(function(rec){ + if (rec.get('found') == 0) return true; + }); + me.getDelete_unfound_button().setDisabled(unfound == -1); + } + } + + store.load({ + callback : cb + }); + }, + + setPublic: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + store = Ext.getStore('Paths'), + me = this, + cb; + + cb = function(records, operation) { operation.success ? me.loadControllers() : record.reject() }; + + rec = store.getRange(store.findExact('id',record.get('id')))[0]; + + rec.set({ public_flag: 1 }); + rec.save({ callback: cb }); + }, + + setPrivate: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + store = Ext.getStore('Paths'), + me = this, + cb; + + cb = function(records, operation) { operation.success ? me.loadControllers() : record.reject() }; + + rec = store.getRange(store.findExact('id',record.get('id')))[0]; + + rec.set({ public_flag: 0 }); + rec.save({ callback: cb }); + }, + + denyPermissionChangeForPublic: function(e) + { + // why? + //if (e.record.get('public_flag')==1) return false; + return true; + }, + + updatePath: function(editor, e) + { + var fail_cb = function(rec, operation) { + e.record.reject(); + }; + + if (e.field == 'permission_name') + { + e.record.set('permission_id',e.value); + } + + if (e.value != e.originalValue) + { + e.record.save({ + failure: fail_cb + }); + } + }, + + setPermission: function(menuitem) + { + var record = menuitem.up('menu').up('menu').getRecord(), + store = Ext.getStore('Paths'), + me = this, + cb; + + cb = function(records, operation) { operation.success ? me.loadControllers() : record.reject() }; + + rec = store.getRange(store.findExact('id',record.get('id')))[0]; + + rec.set({ permission_id: menuitem.value }); + rec.save({ callback: cb }); + + }, + + removePermission: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + fail_cb = function(rec, operation) { record.reject(); }; + + record.save({ + failure : fail_cb, + ci_method : 'remove_permission' + }); + }, + + deletePath: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + store = Ext.getStore('Paths'), + me = this, + rec,cb; + + cb = function(records, operation) + { + if (operation.success) + { + me.refreshView(true); + } + else { record.reject() }; + }; + + rec = store.getRange(store.findExact('id',record.get('id')))[0]; + + rec.erase({ callback: cb }); + }, + + deleteNotFound: function() + { + var me = this, + list = this.getList(), + store = list.getStore(), + cb; + + cb = function(records, operation, success) + { + if (success) + { + me.findPaths(); + } + } + + store.load({ + ci_method : 'delete_not_found', + callback : cb + }); + }, + + filterAuthPaths: function(button) + { + var list = this.getList(), + store = list.getStore(); + + if (button.pressed) + { + store.filter({filterFn: function(item) { return item.get("dir") != 'appunto-auth'; }}); + } + else + { + store.clearFilter(); + } + } +}); + + diff --git a/app/src/controller/Permissions.js b/app/src/controller/Permissions.js new file mode 100644 index 00000000..6139e690 --- /dev/null +++ b/app/src/controller/Permissions.js @@ -0,0 +1,200 @@ +Ext.define('AppuntoAuth.controller.Permissions', { + extend: 'Ext.app.Controller', + + models: [ + 'Permission' + ], + + stores : [ + 'Permissions' + ], + + views: [ + 'permission.List', + 'permission.ContextMenu', + 'permission.Add', + 'permission.Edit' + ], + + refs : [{ + ref : 'list', + selector: 'appa_permission_list' + }], + + init: function() + { + this.control( + { + 'appa_permission_list' : { + activate : this.refreshList, + itemdblclick : this.editPermission, + itemcontextmenu : this.showContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_permission_list button[action="add"]': { + click: this.addPermission + }, + 'appa_permission_list button[action="refresh"]': { + click: this.refreshList + }, + 'appa_permission_contextmenu menuitem[action="add"]': { + click: this.addPermission + }, + 'appa_permission_add button[action=save]' : { + click: this.createPermission + }, + 'appa_permission_contextmenu menuitem[action="edit"]': { + click: this.editPermission + }, + 'appa_permission_edit button[action=save]': { + click: this.updatePermission + }, + 'appa_permission_contextmenu menuitem[action="delete"]': { + click: this.confirmPermissionDeletion + } + }); + }, + + showContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_permission_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + // Show/Hide menu items based on record state + if (rec.data.active == 1) + { + menu.down('menuitem[action="activate"]').hide(); + } + if (rec.data.active == 0) + { + menu.down('menuitem[action="deactivate"]').hide(); + } + menu.showAt(e.getXY()); + }, + + refreshList: function(button) + { + var cb = function(records, operation, success) + { + if (!success) + { + this.getList().getStore().removeAll(); + } + } + + this.getList().getStore().load(); + }, + + addPermission: function(source,e) + { + var win = Ext.widget('appa_permission_add'), + form = win.down('form'); + + form.getForm().findField('name').focus(false,100); + win.showAt(e.getXY()); + }, + + createPermission: function(button) + { + var win = button.up('window'), + form = win.down('form'), + values = form.getValues(), + record = Ext.create('AppuntoAuth.model.Permission'), + store = this.getList().getStore(), + win_cb; + + win_cb = function(rec, operation) { + store.insert(0,rec); + win.close(); + } + + if (form.getForm().isValid()) + { + record.set(values); + record.save({ + success: win_cb + }); + } + }, + + editPermission: function(menuitem,e) + { + var rec = menuitem.up('menu').getRecord(), + win = Ext.widget('appa_permission_edit'), + form = win.down('form'); + + form.loadRecord(rec); + form.getForm().findField('name').focus(false,100); + win.showAt(e.getXY()); + }, + + updatePermission: function(button) + { + var win = button.up('window'), + form = win.down('form').form, + record = form.getRecord(), + values = form.getValues(), + cb; + + cb = function(rec, operation) { + if (operation.success == true) { win.close(); } else { record.reject() }; + } + + if (form.isDirty()) + { + if (form.isValid()) + { + record.set(values); + record.save({ callback : cb }); + } + } + else + { + win.close(); + } + + }, + + + confirmPermissionDeletion: function(menuitem) + { + var rec = menuitem.up('menu').getRecord(), + store = this.getList().getStore(), + title = Lang.localize('role_delete')+': '+rec.data.name; + + Ext.MessageBox.confirm(title, Lang.localize('perm_delete_confirm'), Ext.bind(this.deletePermission,this,[rec,store],true)); + }, + + deletePermission: function(button, dummy, msgbox, record, store) + { + var view = this.getList(), + cb; + + cb = function(rec, operation) + { + if (operation.success == true) + { + store.remove(record); + } + else + { + store.load( { callback : function() { view.getSelectionModel().select(record); } } ); + } + } + + if (button == "yes") + { + record.erase( { callback : cb }); + } + } + +}); diff --git a/app/src/controller/Roles.js b/app/src/controller/Roles.js new file mode 100644 index 00000000..0ab97f86 --- /dev/null +++ b/app/src/controller/Roles.js @@ -0,0 +1,347 @@ +Ext.define('AppuntoAuth.controller.Roles', { + extend: 'Ext.app.Controller', + + models: [ + 'Role', + 'RolePermission' + ], + + stores: [ + 'Roles', + 'RolePermissions' + ], + + views: [ + 'role.Frame', + 'role.List', + 'role.ContextMenu', + 'role.Add', + 'role.Edit', + 'role.PermissionList', + 'role.PermissionContextMenu' + ], + + refs : [{ + ref : 'list', + selector: 'appa_role_list' + },{ + ref : 'permissionsList', + selector: 'appa_role_permission_list' + }], + + init: function() + { + this.control( + { + 'appa_role_frame' : { + activate : this.refreshList + }, + 'appa_role_list' : { + render : this.defineStoreEventHandlers, + select : this.roleSelected, + itemdblclick : this.editRole, + itemcontextmenu : this.showContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_role_permission_list' : { + itemcontextmenu : this.showPermissionContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_role_list button[action="add"]': { + click: this.addRole + }, + 'appa_role_frame button[action="refresh"]': { + click: this.refreshList + }, + 'appa_role_contextmenu menuitem[action="add"]': { + click: this.addRole + }, + 'appa_role_add button[action=save]' : { + click: this.createRole + }, + 'appa_role_contextmenu menuitem[action="edit"]': { + click: this.editRole + }, + 'appa_role_edit button[action=save]': { + click: this.updateRole + }, + 'appa_role_contextmenu menuitem[action="delete"]': { + click: this.confirmRoleDeletion + }, + 'appa_role_permission_list menuitem[group="permission-view"]': { + click: this.togglePermissionView + }, + 'appa_role_permission_contextmenu menuitem[action="add"]': { + click: this.addPermission + }, + 'appa_role_permission_contextmenu menuitem[action="remove"]': { + click: this.removePermission + } + }); + + }, + + refreshList: function(button) + { + var view = this.getList(), + sm = view.getSelectionModel(), + cb; + + cb = function() + { + // reselct record, forcing reload of permissions grid + if (sm.hasSelection()) + { + rec = sm.getSelection()[0]; + sm.deselectAll() + sm.select(rec); + } + } + + view.getStore().load( {callback: cb }); + + }, + + defineStoreEventHandlers: function(button) + { + this.getList().getStore().on({ + scope : this, + load : this.storeLoad + }); + }, + + /** + * Called on the RolesStore load event. Clears the RolePermissions store so the + * permission pane does not contain leftover information. + * @return void + */ + storeLoad: function() + { + var permission_list = this.getPermissionsList(), + permission_store = permission_list.getStore(); + + permission_list.setTitle(Lang.localize('tab_permissions')); + permission_store.removeAll(); + }, + + showContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_role_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + menu.showAt(e.getXY()); + }, + + roleSelected: function(view, record) + { + var permission_list = this.getPermissionsList(), + permission_store = permission_list.getStore(); + + permission_list.setTitle(Lang.localize('role_perm_for')+' '+record.get('name')); + + permission_store.load({ + id : record.get('id'), + ci_method : 'permissions' + }); + }, + + addRole: function(source,e) + { + var win = Ext.widget('appa_role_add'), + form = win.down('form'); + + form.getForm().findField('name').focus(false,100); + win.showAt(e.getXY()); + }, + + createRole: function(button) + { + var win = button.up('window'), + form = win.down('form'), + values = form.getValues(), + record = Ext.create('AppuntoAuth.model.Role'), + view = this.getList(), + store = view.getStore(), + win_cb; + + win_cb = function(rec, operation) { + store.insert(0,rec); + view.getSelectionModel().select(rec); + win.close(); + } + + if (form.getForm().isValid()) + { + record.set(values); + record.save({ + success: win_cb + }); + } + }, + + editRole: function(menuitem,e) + { + var rec = menuitem.up('menu').getRecord(), + win = Ext.widget('appa_role_edit'), + form = win.down('form'); + + form.loadRecord(rec); + form.getForm().findField('name').focus(false,100); + win.showAt(e.getXY()); + }, + + updateRole: function(button) + { + var win = button.up('window'), + form = win.down('form').form, + record = form.getRecord(), + values = form.getValues(), + cb; + + cb = function(rec, operation) { + if (operation.success == true) { win.close(); } else { record.reject() }; + } + + if (form.isDirty()) + { + if (form.isValid()) + { + record.set(values); + record.save({ callback : cb }); + } + } + else + { + win.close(); + } + + }, + + + confirmRoleDeletion: function(menuitem) + { + var rec = menuitem.up('menu').getRecord(), + store = this.getList().getStore(), + title = Lang.localize('role_delete')+': '+rec.data.name; + + Ext.MessageBox.confirm(title, Lang.localize('role_delete_confirm'), Ext.bind(this.deleteRole,this,[rec,store],true)); + }, + + deleteRole: function(button, dummy, msgbox, record, store) + { + var view = this.getList(), + cb; + + cb = function(rec, operation) + { + if (operation.success == true) + { + store.remove(record); + } + else + { + store.load( { callback : function() { view.getSelectionModel().select(record); } } ); + } + } + + if (button == "yes") + { + record.erase( { callback : cb }); + } + }, + + togglePermissionView: function(menuitem) + { + this.showAllPermissions(menuitem.value == 1); + }, + + showAllPermissions: function(showall) + { + var permissions = this.getPermissionsList(), + store = permissions.getStore(), + button = permissions.down('#permission-view-toggle'); + + if (showall == true) + { + store.clearFilter(); + button.setText(Lang.localize('role_perm_view_all')); + } + else + { + store.filter('inRole',1); + button.setText(Lang.localize('role_perm_view_selected')); + } + }, + + showPermissionContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_role_permission_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + // Show/Hide menu items based on record state + if (rec.get('inRole') == 1) + { + menu.down('menuitem[action="add"]').hide(); + } + if (rec.data.inRole == 0) + { + menu.down('menuitem[action="remove"]').hide(); + } + menu.showAt(e.getXY()); + }, + + addPermission: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + roles = this.getList(), + role = roles.getSelectionModel().getSelection()[0], + fail_cb; + + fail_cb = function() { record.reject(); } + + record.set({ hasPermission: 1 }); + record.save({ + ci_method : 'add_permission', + params : { role_id : role.get('id')}, + failure : fail_cb + }); + }, + + removePermission: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + roles = this.getList(), + role = roles.getSelectionModel().getSelection()[0], + fail_cb; + + fail_cb = function() { record.reject(); } + + record.set({ hasPermission: 0 }); + record.save({ + ci_method : 'remove_permission', + params : { role_id : role.get('id')}, + failure : fail_cb + }); + } + + +}); + diff --git a/app/src/controller/Sessions.js b/app/src/controller/Sessions.js new file mode 100644 index 00000000..d6941ad2 --- /dev/null +++ b/app/src/controller/Sessions.js @@ -0,0 +1,17 @@ +Ext.define('AppuntoAuth.controller.Sessions', { + extend: 'Ext.app.Controller', + + models: [ + 'Session' + ], + + stores : [ + 'Sessions' + ], + + views: [ + 'session.List', + 'session.ContextMenu' + ] + +}); diff --git a/app/src/controller/Status.js b/app/src/controller/Status.js new file mode 100644 index 00000000..87e828f0 --- /dev/null +++ b/app/src/controller/Status.js @@ -0,0 +1,39 @@ +Ext.define('AppuntoAuth.controller.Status', { + extend: 'Ext.app.Controller', + + models: [ + 'StatusInfo' + ], + + stores : [ + 'StatusInfos' + ], + + views: [ + 'status.View' + ], + + refs : [{ + ref : 'statusInfo', + selector: 'appa_status_view dataview' + }], + + init: function() + { + this.control( + { + 'appa_status_view' : { + activate : this.refreshView + }, + 'appa_status_view button[action="refresh"]': { + click : this.refreshView + } + }); + }, + + refreshView: function(button) + { + this.getStatusInfo().getStore().load(); + } + +}); diff --git a/app/src/controller/Users.js b/app/src/controller/Users.js new file mode 100644 index 00000000..ccf3f417 --- /dev/null +++ b/app/src/controller/Users.js @@ -0,0 +1,696 @@ +Ext.define('AppuntoAuth.controller.Users', { + extend: 'Ext.app.Controller', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + models: [ + 'User', + 'UserRole', + 'UserPermission', + 'Login' + ], + + stores : [ + 'Users', + 'UserRoles', + 'UserPermissions', + 'Logins' + ], + + views: [ + 'user.Frame', + 'user.List', + 'user.ContextMenu', + 'user.Add', + 'user.Edit', + 'user.ChangePassword', + 'user.RoleList', + 'user.RoleContextMenu', + 'user.PermissionList', + 'user.PermissionContextMenu', + 'user.LoginsWidget' + ], + + refs : [{ + ref : 'list', + selector: 'appa_user_list' + },{ + ref : 'rolePermissionFrame', + selector: '#role-permission-frame' + },{ + ref : 'roleList', + selector: 'appa_user_role_list' + },{ + ref : 'permissionList', + selector: 'appa_user_permission_list' + },{ + ref : 'loginsWidget', + selector: 'appa_user_logins_widget' + }], + + /* */ + init: function() + { + this.control( + { + 'appa_user_frame' : { + activate: this.loadStore + }, + 'appa_user_list' : { + render : this.defineStoreEventHandlers, + select : this.userSelected, + deselect : this.userDeselected, + itemdblclick : this.editUser, + itemcontextmenu : this.showContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_user_list tool' : { + click : this.resizeUserList + }, + 'appa_user_role_list' : { + itemcontextmenu : this.showRoleContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_user_permission_list' : { + itemcontextmenu : this.showPermissionContextMenu, + // Stop the browser getting the event + containercontextmenu: function(view, e) { e.preventDefault(); }, + contextmenu : function(e) { e.preventDefault(); } + }, + 'appa_user_list button[action="add"]': { + click: this.addUser + }, + 'appa_user_contextmenu menuitem[action="add"]': { + click: this.addUser + }, + 'appa_user_add button[action=save]' : { + click: this.createUser + }, + 'appa_user_contextmenu menuitem[action="edit"]': { + click: this.editUser + }, + 'appa_user_edit button[action=save]': { + click: this.updateUser + }, + 'appa_user_contextmenu menuitem[action="delete"]': { + click: this.confirmUserDeletion + }, + 'appa_user_contextmenu menuitem[action="change_password"]': { + click: this.changePassword + }, + 'appa_user_changepassword button[action=save]': { + click: this.updatePassword + }, + 'appa_user_contextmenu menuitem[action="activate"]': { + click: this.activateUser + }, + 'appa_user_contextmenu menuitem[action="deactivate"]': { + click: this.deactivateUser + }, + 'appa_user_role_list menuitem[group="role-view"]': { + click: this.toggleRoleView + }, + 'appa_user_role_contextmenu menuitem[action="add"]': { + click: this.addRole + }, + 'appa_user_role_contextmenu menuitem[action="remove"]': { + click: this.removeRole + }, + 'appa_user_permission_list menuitem[group="permission-view"]': { + click: this.togglePermissionView + }, + 'appa_user_permission_contextmenu menuitem[action="add"]': { + click: this.addPermission + }, + 'appa_user_permission_contextmenu menuitem[action="remove"]': { + click: this.removePermission + } + }); + + }, + + + /** + * Loads the Users store. + * @return void + */ + loadStore: function() + { + //this.getList().getStore().load(); + var view = this.getList(), + sm = view.getSelectionModel(), + cb; + + cb = function() + { + // reselct record, forcing reload of roles/permissions grids + if (sm.hasSelection()) + { + rec = sm.getSelection()[0]; + sm.deselectAll() + sm.select(rec); + } + } + + view.getStore().load( {callback: cb }); + }, + + defineStoreEventHandlers: function(button) + { + this.getList().getStore().on({ + scope : this, + load : this.storeLoad + }); + }, + + resizeUserList: function(tool) + { + var list = this.getList(), + frame = this.getRolePermissionFrame(); + + if (frame.collapsed) + { + frame.expand(); + frame.setIconCls('shield'); + this.setRoleTitle(); + tool.setType('next'); + list.columns[5].hide(); + list.columns[6].hide(); + list.columns[7].hide(); + list.columns[8].hide(); + } + else + { + frame.collapse(); + frame.setIconCls(''); + this.setRoleTitle(); + tool.setType('prev'); + list.columns[5].show(); + list.columns[6].show(); + list.columns[7].show(); + list.columns[8].show(); + } + }, + + /** + * Called on the UsersStore load event. Clears the UsersRoles and UserPermissions stores so those panes + * do not contain leftover information. + * @return void + */ + storeLoad: function() + { + var role_list = this.getRoleList(), + permission_list = this.getPermissionList(); + + this.getRoleList().getStore().removeAll(); + this.setEmptyMessageRole(); + this.setRoleTitle(); + + this.getPermissionList().getStore().removeAll(); + this.setEmptyMessagePerm(); + this.setPermissionTitle(); + }, + + setEmptyMessageRole: function() + { + var selection = this.getList().getSelectionModel().hasSelection(), + list = this.getRoleList(); + + if (selection) + { + list.getView().emptyText = '

'+Lang.localize('user_no_roles')+'

'; + } + else + { + list.getView().emptyText = '

'+Lang.localize('user_select')+'

'; + } + list.getView().refresh(); + }, + + setEmptyMessagePerm: function() + { + var selection = this.getList().getSelectionModel().hasSelection(), + list = this.getPermissionList(); + + if (selection) + { + list.getView().emptyText = '

'+Lang.localize('user_no_perm')+'

'; + } + else + { + list.getView().emptyText = '

'+Lang.localize('user_select')+'

'; + } + list.getView().refresh(); + }, + + setRoleTitle: function(username) + { + var frame = this.getRolePermissionFrame(); + + if (frame.collapsed) + { + frame.setTitle(Lang.localize('user_role_list')+ ' / ' +Lang.localize('user_perm_list')); + } + else if (username != undefined) + { + frame.setTitle(Lang.localize('user_role_list_for')+ ' ' +username); + } + else + { + frame.setTitle(Lang.localize('user_role_list')); + } + + }, + + setPermissionTitle: function(username) + { + var permission_list = this.getPermissionList(); + + if (username != undefined) + { + permission_list.setTitle(Lang.localize('user_perm_list_for')+ ' ' +username); + } + else + { + permission_list.setTitle(Lang.localize('user_perm_list')); + } + + }, + + userSelected: function(view, record) + { + var role_list = this.getRoleList(), + permission_list = this.getPermissionList(), + role_store = role_list.getStore(), + permission_store = permission_list.getStore(); + + this.setEmptyMessageRole(); + this.setEmptyMessagePerm(); + + this.setRoleTitle(record.get('username')); + this.setPermissionTitle(record.get('username')); + + role_store.load({ + id : record.get('id'), + ci_method : 'roles' + }); + + permission_store.load({ + id : record.get('id'), + ci_method : 'permissions' + }); + + }, + + userDeselected: function(view, record) + { + var role_list = this.getRoleList(), + permission_list = this.getPermissionList(), + role_store = role_list.getStore(), + permission_store = permission_list.getStore(); + + this.setEmptyMessageRole(); + this.setEmptyMessagePerm(); + + if (!this.getList().getSelectionModel().hasSelection()) + { + this.setRoleTitle(undefined); + this.setPermissionTitle(undefined); + + role_store.removeAll(); + permission_store.removeAll(); + } + + }, + + showContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_user_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + // Show/Hide menu items based on record state + if (rec.data.active == 1) + { + menu.down('menuitem[action="activate"]').hide(); + } + if (rec.data.active == 0) + { + menu.down('menuitem[action="deactivate"]').hide(); + } + menu.showAt(e.getXY()); + }, + + addUser: function(source,e) + { + var win = Ext.widget('appa_user_add'), + form = win.down('form'); + + form.getForm().findField('username').focus(false,100); + win.show(); + }, + + createUser: function(button) + { + var win = button.up('window'), + form = win.down('form'), + values = form.getValues(), + record = Ext.create('AppuntoAuth.model.User'), + store = this.getList().getStore(), + cb; + + cb = function(rec, operation) + { + if (operation.success == true) + { + store.insert(0,rec); + win.close(); + } + else + { + store.remove(record); + } + } + + if (form.getForm().isValid()) + { + record.set(values); + record.save({ + callback : cb + }); + } + }, + + editUser: function(menuitem,e) + { + var rec = menuitem.up('menu').getRecord(), + win = Ext.widget('appa_user_edit'), + form = win.down('form'); + + form.loadRecord(rec); + form.getForm().findField('username').focus(false,100); + win.show(); + }, + + updateUser: function(button) + { + var win = button.up('window'), + form = win.down('form').form, + record = form.getRecord(), + values = form.getValues(), + cb; + + cb = function(rec, operation) { + if (operation.success == true) { rec.commit(); win.close(); } else { record.reject() }; + } + + if (form.isDirty()) + { + if (form.isValid()) + { + record.set(values); + record.save({ callback : cb }); + } + } + else + { + win.close(); + } + + }, + + + confirmUserDeletion: function(menuitem) + { + var rec = menuitem.up('menu').getRecord(), + store = this.getList().getStore(), + title = Lang.localize('user_delete')+ ' '+rec.data.username+' ('+rec.data.email+')'; + + Ext.MessageBox.confirm(title, Lang.localize('user_delete_confirm'), Ext.bind(this.deleteUser,this,[rec,store],true)); + }, + + deleteUser: function(button, dummy, msgbox, record, store) + { + if (button == "yes") + { + record.erase( + { + success: function() { store.remove(record); } + } + ); + } + }, + + changePassword: function(menuitem) + { + var rec = menuitem.up('menu').getRecord(), + view = Ext.widget('appa_user_changepassword'), + form = view.down('form'); + + form.loadRecord(rec); + form.getForm().findField('password').focus(false,100); + view.show(); + }, + + + updatePassword: function(button) + { + var win = button.up('window'), + form = win.down('form').form, + record = form.getRecord(), + values = form.getValues(), + win_cb; + + win_cb = function(rec, operation) { + win.close(); + } + + if (form.isValid()) + { + record.set(values); + record.save({ + ci_method : 'update_pass', + success : win_cb + }); + // remove passwords from record + record.data.password = ''; + record.data.password2 = ''; + } + }, + + activateUser: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + fail_cb; + + fail_cb = function() { record.reject(); } + + record.set({ active: 1 }); + record.save({ failure: fail_cb }); + }, + + deactivateUser: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + fail_cb; + + fail_cb = function() { record.reject(); } + + record.set({ active: 0 }); + record.save({ failure: fail_cb }); + }, + + toggleRoleView: function(menuitem) + { + this.showAllRoles(menuitem.value == 1); + }, + + showAllRoles: function(showall) + { + var roles = this.getRoleList(), + store = roles.getStore(), + button = roles.down('#role-view-toggle'); + + if (showall == true) + { + store.clearFilter(); + button.setText(Lang.localize('user_role_view_all')); + } + else + { + store.filter('hasRole',1); + button.setText(Lang.localize('user_role_view_selected')); + } + }, + + showRoleContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_user_role_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + // Show/Hide menu items based on record state + if (rec.data.hasRole == 1) + { + menu.down('menuitem[action="add"]').hide(); + } + else if (rec.data.hasRole == 0) + { + menu.down('menuitem[action="remove"]').hide(); + } + menu.showAt(e.getXY()); + }, + + addRole: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + users = this.getList(), + user = users.getSelectionModel().getSelection()[0], + permission_store = this.getPermissionList().getStore(), + cb; + + cb = function(rec, operation) { + if (operation.success == true) + { + permission_store.load({ + id : user.get('id'), + ci_method : 'permissions' + }); + } + else { record.reject() }; + } + + record.set({ hasRole: 1 }); + record.save({ + ci_method : 'add_role', + params : { user_id : user.get('id')}, + callback : cb + }); + }, + + removeRole: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + users = this.getList(), + user = users.getSelectionModel().getSelection()[0], + permission_store = this.getPermissionList().getStore(), + cb; + + cb = function(rec, operation) { + if (operation.success == true) + { + permission_store.load({ + id : user.get('id'), + ci_method : 'permissions' + }); + } + else { record.reject() }; + } + + record.set({ hasRole: 0 }); + record.save({ + ci_method : 'remove_role', + params : { user_id : user.get('id')}, + callback : cb + }); + }, + + togglePermissionView: function(menuitem) + { + this.showAllPermissions(menuitem.value == 1); + }, + + showAllPermissions: function(showall) + { + var permissions = this.getPermissionList(), + store = permissions.getStore(), + button = permissions.down('#permission-view-toggle'); + + if (showall == true) + { + store.clearFilter(); + button.setText(Lang.localize('user_perm_view_all')); + } + else + { + store.filter('hasPermission',1); + button.setText(Lang.localize('user_perm_view_selected')); + } + }, + + showPermissionContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_user_permission_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + // Show/Hide menu items based on record state + if (rec.data.userHasPermission == 1) + { + menu.down('menuitem[action="add"]').hide(); + } + else if (rec.data.userHasPermission == 0) + { + menu.down('menuitem[action="remove"]').hide(); + } + menu.showAt(e.getXY()); + }, + + addPermission: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + users = this.getList(), + user = users.getSelectionModel().getSelection()[0], + fail_cb; + + fail_cb = function() { record.reject(); } + + record.set({ userHasPermission: 1 }); + record.save({ + ci_method : 'add_permission', + params : { user_id : user.get('id')}, + failure : fail_cb + }); + }, + + removePermission: function(menuitem) + { + var record = menuitem.up('menu').getRecord(), + users = this.getList(), + user = users.getSelectionModel().getSelection()[0], + fail_cb; + + fail_cb = function() { record.reject(); } + + record.set({ userHasPermission: 0 }); + record.save({ + ci_method : 'remove_permission', + params : { user_id : user.get('id')}, + failure : fail_cb + }); + } +}); diff --git a/app/src/lib/lang/Default.js b/app/src/lib/lang/Default.js new file mode 100644 index 00000000..4284f83c --- /dev/null +++ b/app/src/lib/lang/Default.js @@ -0,0 +1,177 @@ +Ext.define('AppuntoAuth.lib.lang.Default', { + + alternateClassName: 'Lang', + + singleton: true, + + requires: [ + 'Ext.window.MessageBox' + ], + + constructor: function() + { + if (Ext.window.MessageBox) + { + Ext.window.MessageBox.prototype.buttonText = { + ok : this.localize('ok'), + cancel : this.localize('cancel'), + yes : this.localize('yes'), + no : this.localize('no') + }; + } + }, + + localize: function(label) + { + if (typeof Language !== 'undefined' && typeof Language.override !== 'undefined' && typeof Language.override[label] !== 'undefined') + { + return Language.override[label]; + } + else if ( typeof Lang[label] !== 'undefined' ) + { + return Lang[label]; + } + else + { + return undefined; + } + }, + + // Global + name : 'Name', //used in headers for various entities + description : 'Description', //used in headers for various entities + refresh : 'Refresh', // reload the data + result : 'Result', + save : 'Save', + cancel : 'Cancel', + yes : 'Yes', + no : 'No', + ok : 'Ok', + login : 'login', + loading : 'Loading...', + field_required : 'This field is required', + paging_message : 'Displaying {0} - {1} of {2}', + + // Proxy errors + server_error_title : 'Server error', + server_error_unknown : 'Unknown error: The server did not send any information about the error.', + server_error_no_response: 'Unknown error: Server did not send a response.', + server_error_decode : 'Error decoding the response sent by the server.', + server_error_undefined : 'Undefined Server Error', + + // Application tabs + tab_status : 'Status', + tab_users : 'Users', + tab_user_roles : 'User Roles', + tab_permissions : 'Permissions', + tab_paths : 'Paths', + tab_sessions : 'Sessions', + + // User list + username : 'Username', + name : 'Name', + surname : 'Last name', + email : 'Email', + email_format : 'This field should be an e-mail address in the format "user@example.com"', + password : 'Password', + password_confirm : 'Confirm password', + password_change : 'Change password', + password_match : 'Passwords do not match', + password_format : 'Password must be at least 6 characters, no more than 16 characters, and must include at least one upper case letter, one lower case letter, and one numeric digit.', + user_set_active : 'Set user as active', + active : 'Active', // Whether or not this user has been activated or deactivated + user_add : 'Add user', + user_edit : 'Edit user', + user_delete : 'Delete user', + user_delete_confirm : 'Are you sure you want to delete this user?', + user_activate : 'Activate user', + user_deactivate : 'Deactivate user', + last_ip : 'Last IP', + last_login : 'Last Login', + created : 'Created', + modified : 'Modified', + never : 'Never', + user_select : 'Select a user', + user_select_or : 'Select a User or select Show All above.', + user_no_roles : 'No roles are assigned to this user. Select Show All for a list of available roles', + user_no_perm : 'No permissions are assigned to this user. Select Show All for a list of available permissions', + user_role_list : 'User roles', + user_role_list_for : 'User roles for', //will be followed by username + user_role_add : 'Add user to role', + user_role_remove : 'Remove user from role', + user_perm_list : 'Application permissions', + user_perm_list_for : 'Application permissions for', //wilbe followed by username + user_perm_add : 'Grant user permission', + user_perm_remove : 'Revoke user permission', + user_role_view_all : 'Show all roles', + user_role_view_selected : 'Show only roles for the selected user', + user_perm_view_all : 'Show all permissions', + user_perm_view_selected : 'Show only permissions for the selected user', + granted_to : 'Granted to', // permission is granted to user or to the user's role + grant_role : 'Role', + grant_user : 'User', + user_perm_granted_role : 'permission granted through role', + user_perm_granted_user : 'permission granted to user', + + + // Role list + role_add : 'Add role', + role_edit : 'Edit role', + role_delete : 'Delete role', + role_delete_confirm : 'Are you sure you want to delete this role?', + role_perm_view_all : 'Show all permissions', + role_perm_view_selected : 'Show only permissions for the selected role', + role_perm_for : 'Permissions for', + role_select : 'Select a Role or select Show All above.', + role_perm_add : 'Add permission to role', + role_perm_remove : 'Remove permission from role', + + // Permission list + perm_internal_name : 'Internal Name', + perm_add : 'Add permission', + perm_edit : 'Edit permission', + perm_delete : 'Delete permission', + perm_delete_confirm : 'Are you sure you want to delete this permission?', + + + // Path list + path_tab_controllers : 'Controllers', + path_tab_paths : 'Paths', + controller_methods : 'methods', + controller_public : 'public', + controller_private : 'private', + path_verify : 'Verifing application paths', + path_refreshing : 'Refreshing paths', + path_public : 'Public', + path_private : 'Private', + path_method : 'Method', // A Codeigniter function inside a controller + path_path : 'Path', + path_access : 'Access', // Header for public/private column + path_permission : 'Permission', + path_permissions : 'Permissions', + path_set_public : 'Make path public', + path_set_private : 'Make path private', + path_set_permission : 'Set Permission', + path_remove_permission : 'Remove Permission', + path_delete : 'Delete Path', + path_not_found_1 : 'This method was not found in the Controller but a record of it exists in the database.', + path_not_found_2 : 'You may delete the record of this path.', + + // Session List + session_username : 'Username', + session_last_activity : 'Last Activity', + session_last_page : 'Last Page', + session_ip_address : 'IP Address', + session_last_page : 'Last Page', + session_user_agent : 'User Agent', // User-Agent string returned by user's browser + session_view_all : 'Show all sessions', + session_view_logged_in : 'Show only logged in sessions', + session_delete : 'Delete Session', + session_delete_confirm : 'Are you sure you want to delete this session?', + session_delete_user : 'user', // used in delete confirmation window title eg: "user: Bob Jones" + + + // dummy val so I don't forget to remove trailing comma + dummy : '' + +}); diff --git a/app/src/lib/proxy/CiReader.js b/app/src/lib/proxy/CiReader.js new file mode 100644 index 00000000..be9bd15b --- /dev/null +++ b/app/src/lib/proxy/CiReader.js @@ -0,0 +1,34 @@ +/** + * An override of Ext.data.reader.Json to be used by AppuntoAuth.lib.proxy.Codeigniter + * + * This override prevents an exception from being thrown by the Ext.decode statement in the + * event of invalid json. It also removes the warning. + * + * If the response is not valid JSON, we will still call the createReadError method which + * causes an exception to be thrown in the proxy and we will deal with the error there + * + * original method: + * + * getResponseData: function(response) { + * try { + * return Ext.decode(response.responseText); + * } catch (ex) { + * Ext.Logger.warn('Unable to parse the JSON returned by the server'); + * return this.createReadError(ex.message); + * } + * } + */ +Ext.define('AppuntoAuth.lib.proxy.CiReader', { + extend: 'Ext.data.reader.Json', + alias: 'reader.ci', + + getResponseData: function(response) + { + var res = Ext.decode(response.responseText,true); + + if (res != null) return res; + + return this.createReadError("You're trying to decode an invalid JSON String: "+response.responseText); + } + +}); diff --git a/app/src/lib/proxy/CiWriter.js b/app/src/lib/proxy/CiWriter.js new file mode 100644 index 00000000..30137cac --- /dev/null +++ b/app/src/lib/proxy/CiWriter.js @@ -0,0 +1,26 @@ +/** + * An override of Ext.data.writer.Json to be used by AppuntoAuth.lib.proxy.Codeigniter + * + * This override sends data as POST parameters rather than as a JSON payload so you can use + * CodeIgniter's form validation library + */ +Ext.define('AppuntoAuth.lib.proxy.CiWriter', { + extend: 'Ext.data.writer.Json', + alias: 'writer.ci', + + writeRecords: function(request) + { + var record = request.getRecords()[0], + changes = record.getChanges(), + field; + + request.setParam('id', record.get('id')); + + for (field in changes) + { + request.setParam(field, changes[field]); + } + return request; + } + +}); diff --git a/app/src/lib/proxy/Codeigniter.js b/app/src/lib/proxy/Codeigniter.js new file mode 100644 index 00000000..75ef1d64 --- /dev/null +++ b/app/src/lib/proxy/Codeigniter.js @@ -0,0 +1,279 @@ +/** + * CodeigniterProxy: a data proxy + * + * An extension of {@link Ext.data.proxy.Ajax} with some useful modifications for use + * with the CodeIgniter PHP web application framework. + * + * @cfg {String} [siteurl='/auth/'] Application siteurl. Use a trailing slash. + * @cfg {boolean} [index_php=true] true to include the index.php in codeigniter URLs + */ +Ext.define('AppuntoAuth.lib.proxy.Codeigniter', { + extend: 'Ext.data.proxy.Ajax', + alias: 'proxy.ci', + + requires : [ + 'AppuntoAuth.lib.proxy.CiReader', + 'AppuntoAuth.lib.proxy.CiWriter', + 'AppuntoAuth.lib.lang.Default', + 'Ext.util.Cookies' + ], + + + /* + * These two values should reflect your deployment. + * + * ci_site_url should be set like this in your view: + * + * + * + * + * stripping the trailing slash, then adding a trailing slash on site_url + * ensures that we don't get a double slash or a missing trailing slash when + * removing or using index.php + * + */ + siteurl : ci_site_url, // has a trailing slash + + loginurl : ci_site_url+ci_login_url, + + /** + * If CSRF protection is turned on by setting $config['csrf_protection'] = TRUE the CodeIgniter config.php, + * you must set the values of these two variables to the match the variables set in the config.php + * + * csrf_token_name must match $config['csrf_token_name'] + * csrf_cookie_name must match $config['csrf_cookie_name'] + */ + csrf_token_name : ci_token, + csrf_cookie_name : ci_cookie, + + + config: { + ci_class : '', // leave this blank, for initialization only. + ci_method : '' // leave this blank, for initialization only. + }, + + timeout : 30 * 1000, + //noCache : false, + + actionMethods: { + create : 'POST', + read : 'POST', + update : 'POST', + destroy: 'POST' + }, + + reader: { + type : 'ci', //Alias defined in AppuntoAuth.lib.proxy.CiReader + rootProperty : 'rows', + messageProperty : 'msg' + }, + + writer: 'ci', //Alias defined in AppuntoAuth.lib.proxy.CiWriter + + errors: { + server_error_title : 'Server error', + server_error_unknown : 'Unknown error: The server did not send any information about the error.', + server_error_no_response: 'Unknown error: Server did not send a response.', + server_error_decode : 'Error decoding the response sent by the server.', + server_error_undefined : 'Undefined Server Error' + }, + + // Common http status codes to provide more information when codeigniter does not send an error + httpError: { + 400 : 'Bad Request', + 401 : 'Unauthorized', + 403 : 'Forbidden', + 404 : 'Not Found', + 405 : 'Method Not Allowed', + 408 : 'Request Timeout', + 414 : 'Request-URI Too Long', + 500 : 'Internal Server Error', + 501 : 'Not Implemented', + 502 : 'Bad Gateway', + 503 : 'Service Unavailable', + 504 : 'Gateway Timeout', + 505 : 'HTTP Version Not Supported', + 509 : 'Bandwidth Limit Exceeded', + 511 : 'Network Authentication Required' + }, + + /** + * Set the 'ci_method' for this url which corresponds to a codeigniter controller function taking into account the order of priority, + * - The request + * - The api + * + * @private + * @param {Ext.data.Request} request The request + * @return void + */ + setCi_methodString: function(request) + { + this.setCi_method( request.getOperation().config.ci_method || request.config.action ); + }, + + /** + * Build the URLs for this request in this format: siteurl/ci_class/op. + * - ci_class: Represents the codeigniter controller class that should be invoked. + * - op: Represents the codeigniter controller class function, or ci_method, that should be called. + * + * + * Overrides function in Ext.data.proxy.Ajax + * + * @private + * @param {Ext.data.Request} request The request + * @return void + */ + buildUrl : function(request) + { + this.setCi_methodString(request); + + return this.getSiteurl()+this.getCi_class()+'/'+this.getCi_method(); + }, + + /** + * Override the doRequest function in Ext.data.proxy.Ajax to add the CSRF parameter + */ + doRequest: function(operation) + { + this.setCSRFParam(); + this.callParent(arguments); + }, + + /** + * Add the CSRF parameter if retrieved by cookie + */ + setCSRFParam: function() + { + var csrf_token = this.csrf_token_name, + csrf_cookie = this.csrf_cookie_name, + csrf_value = Ext.util.Cookies.get(csrf_cookie); + + if (csrf_value != null) + { + this.setExtraParam(csrf_token,csrf_value); + } + }, + + // operation exception + listeners: + { + exception: function (proxy, request, operation) + { + var errors, error, login_redir = false; + + if (request.responseText != undefined) + { + // responseText was returned, decode it + responseObj = Ext.decode(request.responseText,true); // true to return null instead of throwing an exception if the JSON is invalid. + if (responseObj != null && responseObj.msg != undefined) + { + // message was returned + errors = (responseObj.errors != undefined) ? '
    '+responseObj.errors+'
' : ''; + error = '

' + responseObj.msg + '

' + errors; + login_redir = (responseObj.err != undefined) && (responseObj.err=='LOGIN') ? true : false ; + + this.alertError(this.getErrorMsg('server_error_title'),error,login_redir); + } + else + { + // response could not be decoded, check if it is a CodeIgniter message + error = this.getCodeigniterError(request); + + // response could not be decoded, check if it there is a defined http error code + if ((error == null) && (request.status != undefined && this.httpError[request.status] != undefined)) + { + error = '

'+request.status+'

'+this.httpError[request.status]+'

'; + this.alertError(this.getErrorMsg('server_error_title'),error); + } + + // If not a CodeIgniter error and no status code, then report json decoding error + if (error == null) error = this.getErrorMsg('server_error_decode') + + this.alertError(this.getErrorMsg('server_error_title'),error); + } + } + else + { + // no responseText sent + this.alertError(this.getErrorMsg('server_error_title'),this.getErrorMsg('server_error_no_response')); + } + } + }, + + getCodeigniterError: function (request) + { + var ci_error_el, + ci_error_div; + + if (request != undefined && request.responseText != undefined) + { + + ci_error_el = document.createElement('div'); + + ci_error_el.innerHTML = request.responseText; + ci_error_div = ci_error_el.getElementsByTagName('div')[0]; + + // send error found in div on codeigniter error page + if (ci_error_div != undefined) return ci_error_div.innerHTML; + } + return null; + }, + + alertError: function(title, msg, login_redir) + { + var login_url = this.loginurl, + handler = function(button) { button.up('window').close(); } + + if (login_redir == true) + { + handler = function(button) + { + button.up('window').close(); + location.href = login_url; + } + } + + Ext.create('Ext.window.Window', { + title : title, + iconCls : 'exclamation', + layout : 'fit', + modal : true, + items: { + xtype : 'container', + style : 'padding: 8px', + autoScroll : true, + html : msg, + border : 0 + }, + buttons : [ + { + text : 'Ok', + handler : handler + } + ] + }).show(); + }, + + getErrorMsg: function(type) + { + if ( + (typeof Lang !== 'undefined') && + (typeof Lang.localize == 'function') && + (Lang.localize(type) != undefined) + ) + { + return Lang.localize(type); + } + else + { + return this.errors[type]; + } + }, + + getSiteurl: function() { + return this.siteurl; + } + +}); diff --git a/app/src/lib/util/CustomVTypes.js b/app/src/lib/util/CustomVTypes.js new file mode 100644 index 00000000..a1d29905 --- /dev/null +++ b/app/src/lib/util/CustomVTypes.js @@ -0,0 +1,34 @@ +Ext.define('AppuntoAuth.lib.util.CustomVTypes', { + + singleton : true, + + requires : [ + 'AppuntoAuth.lib.lang.Default', + 'Ext.form.field.VTypes' + ], + + constructor: function () + { + Ext.apply(Ext.form.field.VTypes, { + passformat: function(val ) + { + var format = new RegExp(pw_regex); + + return format.test(val); + }, + passformatText: Lang.localize('password_format'), + + passconfirm: function(val, field) + { + if (field.passField) { + var pwd = field.up('form').down('#' + field.passField); + return (val == pwd.getValue()); + } + return false; + return true; + }, + passconfirmText: Lang.localize('password_match') + }); + } + +}); diff --git a/app/src/lib/util/FakeConsole.js b/app/src/lib/util/FakeConsole.js new file mode 100644 index 00000000..29177c86 --- /dev/null +++ b/app/src/lib/util/FakeConsole.js @@ -0,0 +1,21 @@ +Ext.define('AppuntoAuth.lib.util.FakeConsole', +{ + singleton : true, + + constructor: function() + { + if (typeof console === "undefined") + { + console = + { + log : function () { }, + info : function () { }, + warn : function () { }, + error : function () { }, + time : function () { }, + timeEnd : function () { } + } + + } + } +}); diff --git a/app/src/lib/util/KeepAlive.js b/app/src/lib/util/KeepAlive.js new file mode 100644 index 00000000..bc4f716e --- /dev/null +++ b/app/src/lib/util/KeepAlive.js @@ -0,0 +1,27 @@ +Ext.define('AppuntoAuth.lib.util.KeepAlive', +{ + singleton : true, + + interval : 4*60*1000, + + constructor : function() + { + if (typeof(admin_keepalive) != 'undefined' && Ext.isNumber(admin_keepalive) && admin_keepalive> 0) + { + this.interval = admin_keepalive*1000; + } + setTimeout(Ext.bind(this.touch), this.interval); + }, + + touch: function() + { + var me = AppuntoAuth.lib.util.KeepAlive; + + Ext.Ajax.request({ + url: ci_site_url+'appunto-auth/ui/keep-alive' + }); + + setTimeout(Ext.bind(me.touch), me.interval); + } + +}); diff --git a/app/src/lib/util/SearchField.js b/app/src/lib/util/SearchField.js new file mode 100644 index 00000000..fe64a72d --- /dev/null +++ b/app/src/lib/util/SearchField.js @@ -0,0 +1,84 @@ +/* + *this is copied from http://dev.sencha.com/ext/5.0.1/examples/ux/form/SearchField.js + */ +Ext.define('AppuntoAuth.lib.util.SearchField', { + extend: 'Ext.form.field.Text', + + xtype: 'appunto-searchfield', + + triggers: { + clear: { + weight: 0, + cls: Ext.baseCSSPrefix + 'form-clear-trigger', + hidden: true, + handler: 'onClearClick', + scope: 'this' + }, + search: { + weight: 1, + cls: Ext.baseCSSPrefix + 'form-search-trigger', + handler: 'onSearchClick', + scope: 'this' + } + }, + + hasSearch : false, + paramName : 'search', + + initComponent: function() { + var me = this, + store = me.store, + proxy; + + me.callParent(arguments); + me.on('specialkey', function(f, e){ + if (e.getKey() == e.ENTER) { + me.onSearchClick(); + } + }); + + if (!store || !store.isStore) { + store = me.store = Ext.data.StoreManager.lookup(store); + } + + // We're going to use filtering + store.setRemoteFilter(true); + + // Set up the proxy to encode the filter in the simplest way as a name/value pair + proxy = me.store.getProxy(); + proxy.setFilterParam(me.paramName); + proxy.encodeFilters = function(filters) { + return filters[0].getValue(); + } + }, + + onClearClick : function(){ + var me = this, + activeFilter = me.activeFilter; + + if (activeFilter) { + me.setValue(''); + me.store.getFilters().remove(activeFilter); + me.activeFilter = null; + me.getTrigger('clear').hide(); + me.updateLayout(); + } + }, + + onSearchClick : function(){ + var me = this, + value = me.getValue(); + + if (value.length > 0) { + // Param name is ignored here since we use custom encoding in the proxy. + // id is used by the Store to replace any previous filter + me.activeFilter = new Ext.util.Filter({ + property: me.paramName, + value: value + }); + me.store.getFilters().add(me.activeFilter); + me.getTrigger('clear').show(); + me.updateLayout(); + } + } +}); diff --git a/app/src/model/Login.js b/app/src/model/Login.js new file mode 100644 index 00000000..31c9613e --- /dev/null +++ b/app/src/model/Login.js @@ -0,0 +1,30 @@ +/** + * Login Model + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.Login', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'attempt_time', type: 'date', format: 'Y-m-d H:i:s'}, + {name: 'username', type: 'string'}, + {name: 'ip_address', type: 'string'}, + {name: 'user_agent', type: 'string'}, + {name: 'success', type: 'int'}, + {name: 'note', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/user/login_attempts' + } +}); diff --git a/app/src/model/Path.js b/app/src/model/Path.js new file mode 100644 index 00000000..56b96e55 --- /dev/null +++ b/app/src/model/Path.js @@ -0,0 +1,35 @@ +/** + * Path Model + * + * A data model that defines paths which are CodeIgniter URIs defined by controller/function + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.Path', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'found', type: 'int'}, + {name: 'dir', type: 'string'}, + {name: 'full_path', type: 'string'}, + {name: 'ci_controller', type: 'string'}, + {name: 'ci_method', type: 'string'}, + {name: 'public_flag', type: 'int'}, + {name: 'permission_id', type: 'int'}, + {name: 'permission_name', type: 'string'}, + {name: 'note', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/path' + } +}); diff --git a/app/src/model/Permission.js b/app/src/model/Permission.js new file mode 100644 index 00000000..3d01b3b7 --- /dev/null +++ b/app/src/model/Permission.js @@ -0,0 +1,22 @@ +Ext.define('AppuntoAuth.model.Permission', +{ + extend : 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'hasPermission', type: 'int'}, + {name: 'name', type: 'string'}, + {name: 'internal_name', type: 'string'}, + {name: 'description', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/permission' + } +}); diff --git a/app/src/model/Readme.md b/app/src/model/Readme.md new file mode 100644 index 00000000..c0fe7623 --- /dev/null +++ b/app/src/model/Readme.md @@ -0,0 +1 @@ +This folder contains the Models for this application. diff --git a/app/src/model/Role.js b/app/src/model/Role.js new file mode 100644 index 00000000..92729b38 --- /dev/null +++ b/app/src/model/Role.js @@ -0,0 +1,31 @@ +/** + * Role Model + * + * A data model that represents application roles. + * + * rolemodel lol :) + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.Role', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'name', type: 'string'}, + {name: 'internal_name', type: 'string'}, + {name: 'description', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/role' + } +}); diff --git a/app/src/model/RolePermission.js b/app/src/model/RolePermission.js new file mode 100644 index 00000000..92958c9a --- /dev/null +++ b/app/src/model/RolePermission.js @@ -0,0 +1,29 @@ +/** + * RolePermission + * + * A data model that represents permissions belonging to a specified Role. + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.RolePermission', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'name', type: 'string'}, + {name: 'inRole', type: 'int'}, + {name: 'description', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/role' + } +}); diff --git a/app/src/model/Session.js b/app/src/model/Session.js new file mode 100644 index 00000000..ed1780f5 --- /dev/null +++ b/app/src/model/Session.js @@ -0,0 +1,31 @@ +/** + * Session model + * + * A data model that represents entries in the CodeIgniter ci_sessions table. + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.Session', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'string'}, + {name: 'username', type: 'string'}, + {name: 'last_activity', type:'date', dateFormat: 'Y-m-d H:i:s'}, + {name: 'last_page', type: 'string'}, + {name: 'ip_address', type: 'string'}, + {name: 'user_agent', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/session' + } +}); diff --git a/app/src/model/StatusInfo.js b/app/src/model/StatusInfo.js new file mode 100644 index 00000000..6ff2a5b3 --- /dev/null +++ b/app/src/model/StatusInfo.js @@ -0,0 +1,28 @@ +/** + * StatusInfo model + * + * A data model that represents name/value pair items of application information + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.StatusInfo', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'info_item', type: 'string'}, + {name: 'info_val', type: 'string'}, + {name: 'info_note', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/statusinfo' + } +}); diff --git a/app/src/model/User.js b/app/src/model/User.js new file mode 100644 index 00000000..3a6d0d82 --- /dev/null +++ b/app/src/model/User.js @@ -0,0 +1,26 @@ +Ext.define('AppuntoAuth.model.User', + { + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'username', type: 'string'}, + {name: 'name', type: 'string'}, + {name: 'surname', type: 'string'}, + {name: 'email', type: 'string'}, + {name: 'active', type: 'int'}, + {name: 'last_login', type: 'string'}, + {name: 'created', type: 'string'}, + {name: 'modified', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class: 'appunto-auth/ui/user' + } +}); diff --git a/app/src/model/UserPermission.js b/app/src/model/UserPermission.js new file mode 100644 index 00000000..6c564d25 --- /dev/null +++ b/app/src/model/UserPermission.js @@ -0,0 +1,32 @@ +/** + * UserPermission model + * + * + * A data model that represents permissions granted to the user personally or through the user's role. + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.UserPermission', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'hasPermission', type: 'int'}, + {name: 'userRoleHasPermission', type: 'int'}, + {name: 'userHasPermission', type: 'int'}, + {name: 'name', type: 'string'}, + {name: 'description', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class : 'appunto-auth/ui/user' + } +}); diff --git a/app/src/model/UserRole.js b/app/src/model/UserRole.js new file mode 100644 index 00000000..ffb5cbe3 --- /dev/null +++ b/app/src/model/UserRole.js @@ -0,0 +1,30 @@ +/** + * UserRole model + * + * + * A data model that represents roles belonging to a user. + * + * @cfg {Array} fields An Array of {@link Ext.data.Field} defintions. + * @cfg {String/Object/Ext.data.proxy.Proxy} [proxy=ci] Uses {@link APPUNTO.lib.proxy.Codeigniter} defined by "ci" alias. + */ +Ext.define('AppuntoAuth.model.UserRole', +{ + extend: 'Ext.data.Model', + + requires: [ + 'AppuntoAuth.lib.proxy.Codeigniter' + ], + + fields: [ + {name: 'id', type: 'int'}, + {name: 'hasRole', type: 'int'}, + {name: 'name', type: 'string'}, + {name: 'description', type: 'string'} + ], + + proxy: + { + type : 'ci', + ci_class : 'appunto-auth/ui/user' + } +}); diff --git a/app/src/store/Controllers.js b/app/src/store/Controllers.js new file mode 100644 index 00000000..25bc90c3 --- /dev/null +++ b/app/src/store/Controllers.js @@ -0,0 +1,15 @@ +/** + * Controllers Store + */ +Ext.define('AppuntoAuth.store.Controllers', { + extend: 'Ext.data.Store', + + fields : [ + {name: 'ci_controller', type: 'string'}, + {name: 'dir', type: 'string'}, + {name: 'full_path', type: 'string'}, + {name: 'methods', type: 'int'}, + {name: 'public_methods', type: 'int'}, + {name: 'private_methods', type: 'int'} + ] +}); diff --git a/app/src/store/Logins.js b/app/src/store/Logins.js new file mode 100644 index 00000000..be6bd106 --- /dev/null +++ b/app/src/store/Logins.js @@ -0,0 +1,19 @@ +/** + * Role Store + * + * + * A store that uses the {@link AppuntoAuth.model.Role} model and contains application roles. + * + * @cfg {int} [pageSize=9999] Setting pageSize high since this store does not page. + * @cfg {boolean} [remoteSort=true] This store uses remote sorting. + * @cfg {boolean} [remoteFilter=true] This store uses remote filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.define('AppuntoAuth.store.Logins', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.Login', + pageSize : 9999, + remoteSort: true, + remoteFilter: true, + autoLoad: false +}); diff --git a/app/src/store/PathItems.js b/app/src/store/PathItems.js new file mode 100644 index 00000000..339e2424 --- /dev/null +++ b/app/src/store/PathItems.js @@ -0,0 +1,19 @@ +/** + * PathItems Store + */ +Ext.define('AppuntoAuth.store.PathItems', { + extend: 'Ext.data.Store', + + fields : [ + {name: 'id', type: 'int'}, + {name: 'found', type: 'int'}, + {name: 'dir', type: 'string'}, + {name: 'full_path', type: 'string'}, + {name: 'ci_controller', type: 'string'}, + {name: 'ci_method', type: 'string'}, + {name: 'public_flag', type: 'int'}, + {name: 'permission_id', type: 'int'}, + {name: 'permission_name', type: 'string'}, + {name: 'note', type: 'string'} + ] +}); diff --git a/app/src/store/Paths.js b/app/src/store/Paths.js new file mode 100644 index 00000000..33ad5764 --- /dev/null +++ b/app/src/store/Paths.js @@ -0,0 +1,25 @@ +/** + * Paths Store + * + * + * A grouping store that uses the {@link AppuntoAuth.model.Path} model and contains + * valid CodeIgniter paths defined by controller/function. + * + * @cfg {int} [pageSize=9999] Setting pageSize high since this store does not page. + * @cfg {boolean} [remoteSort=false] This store uses local sorting. + * @cfg {boolean} [remoteFilter=false] This store uses local filtering. + * @cfg {String} [groupField="ci_controller"] Sort by the "controller" field by default. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.Path'); + +Ext.define('AppuntoAuth.store.Paths', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.Path', + pageSize : 9999, + remoteSort: false, + remoteFilter: false, + groupField: 'ci_controller', + autoLoad: false +}); diff --git a/app/src/store/Permissions.js b/app/src/store/Permissions.js new file mode 100644 index 00000000..4bf414e5 --- /dev/null +++ b/app/src/store/Permissions.js @@ -0,0 +1,11 @@ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.Permission'); + +Ext.define('AppuntoAuth.store.Permissions', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.Permission', + pageSize : 0, + remoteSort: true, + remoteFilter: true, + autoLoad: false +}); diff --git a/app/src/store/PermissionsSelection.js b/app/src/store/PermissionsSelection.js new file mode 100644 index 00000000..64b705ef --- /dev/null +++ b/app/src/store/PermissionsSelection.js @@ -0,0 +1,20 @@ +/** + * Permissions Store + * + * + * A store that uses the {@link AppuntoAuth.model.Permission} model and contains + * application permissions. + * + * @cfg {int} [pageSize=9999] Setting pageSize high since this store does not page. + * @cfg {boolean} [remoteSort=true] This store uses remote sorting. + * @cfg {boolean} [remoteFilter=true] This store uses remote filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.define('AppuntoAuth.store.PermissionsSelection', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.Permission', + pageSize : 9999, + remoteSort: true, + remoteFilter: true, + autoLoad: false +}); diff --git a/app/src/store/Readme.md b/app/src/store/Readme.md new file mode 100644 index 00000000..d18a54aa --- /dev/null +++ b/app/src/store/Readme.md @@ -0,0 +1,2 @@ +This folder contains store instances (identified by storeId) and store types +(with "store.foo" aliases). diff --git a/app/src/store/RolePermissions.js b/app/src/store/RolePermissions.js new file mode 100644 index 00000000..1790ee5e --- /dev/null +++ b/app/src/store/RolePermissions.js @@ -0,0 +1,23 @@ +/** + * RolePermissions Store + * + * + * A store that uses the {@link AppuntoAuth.model.RolePermission} model and contains + * permissions belonging to a role. + * + * @cfg {int} [pageSize=0] This store does not page. + * @cfg {boolean} [remoteSort=false] This store uses local sorting. + * @cfg {boolean} [remoteFilter=false] This store uses local filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.RolePermission'); + +Ext.define('AppuntoAuth.store.RolePermissions', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.RolePermission', + pageSize : 0, + remoteSort: false, + remoteFilter: false, + autoLoad: false +}); diff --git a/app/src/store/Roles.js b/app/src/store/Roles.js new file mode 100644 index 00000000..d639dc78 --- /dev/null +++ b/app/src/store/Roles.js @@ -0,0 +1,22 @@ +/** + * Role Store + * + * + * A store that uses the {@link AppuntoAuth.model.Role} model and contains application roles. + * + * @cfg {int} [pageSize=0] This store does not page. + * @cfg {boolean} [remoteSort=true] This store uses remote sorting. + * @cfg {boolean} [remoteFilter=true] This store uses remote filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.Role'); + +Ext.define('AppuntoAuth.store.Roles', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.Role', + pageSize : 0, + remoteSort: true, + remoteFilter: true, + autoLoad: false +}); diff --git a/app/src/store/Sessions.js b/app/src/store/Sessions.js new file mode 100644 index 00000000..db8b7e82 --- /dev/null +++ b/app/src/store/Sessions.js @@ -0,0 +1,23 @@ +/** + * Sessions Store + * + * + * A store that uses the {@link AppuntoAuth.model.Session} model and contains information from the + * CodeIgniter ci_sessions table. + * + * @cfg {int} [pageSize=20] This store pages. + * @cfg {boolean} [remoteSort=true] This store uses remote sorting. + * @cfg {boolean} [remoteFilter=true] This store uses remote filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.Session'); + +Ext.define('AppuntoAuth.store.Sessions', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.Session', + pageSize : 0, + remoteSort: false, + remoteFilter: true, + autoLoad: false +}); diff --git a/app/src/store/StatusInfos.js b/app/src/store/StatusInfos.js new file mode 100644 index 00000000..7fe359bb --- /dev/null +++ b/app/src/store/StatusInfos.js @@ -0,0 +1,19 @@ +/** + * StatusInfos Store + * + * + * A store that uses the {@link AppuntoAuth.model.StatusInfo} model and contains information + * about the application + * + * @cfg {int} [pageSize=20] This store pages. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.StatusInfo'); + +Ext.define('AppuntoAuth.store.StatusInfos', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.StatusInfo', + pageSize : 0, + autoLoad: false +}); diff --git a/app/src/store/UserPermissions.js b/app/src/store/UserPermissions.js new file mode 100644 index 00000000..f701cf5c --- /dev/null +++ b/app/src/store/UserPermissions.js @@ -0,0 +1,19 @@ +/** + * UserPermissions Store + * + * + * A store that uses the {@link AppuntoAuth.model.UserPermission} model and contains permissions for a user + * + * @cfg {int} [pageSize=9999] Setting pageSize high since this store does not page. + * @cfg {boolean} [remoteSort=false] This store uses local sorting. + * @cfg {boolean} [remoteFilter=false] This store uses local filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.define('AppuntoAuth.store.UserPermissions', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.UserPermission', + pageSize : 9999, + remoteSort: false, + remoteFilter: false, + autoLoad: false +}); diff --git a/app/src/store/UserRoles.js b/app/src/store/UserRoles.js new file mode 100644 index 00000000..de220fd9 --- /dev/null +++ b/app/src/store/UserRoles.js @@ -0,0 +1,19 @@ +/** + * UserRoles Store + * + * + * A store that uses the {@link AppuntoAuth.model.UserRole} model and contains roles for a user + * + * @cfg {int} [pageSize=9999] Setting pageSize high since this store does not page. + * @cfg {boolean} [remoteSort=false] This store uses local sorting. + * @cfg {boolean} [remoteFilter=false] This store uses local filtering. + * @cfg {boolean} [autoLoad=false] Do not automatically load this store. + */ +Ext.define('AppuntoAuth.store.UserRoles', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.UserRole', + pageSize : 9999, + remoteSort: false, + remoteFilter: false, + autoLoad: false +}); diff --git a/app/src/store/Users.js b/app/src/store/Users.js new file mode 100644 index 00000000..b83310df --- /dev/null +++ b/app/src/store/Users.js @@ -0,0 +1,11 @@ +Ext.require('Ext.data.Store'); +Ext.require('AppuntoAuth.model.User'); + +Ext.define('AppuntoAuth.store.Users', { + extend: 'Ext.data.Store', + model : 'AppuntoAuth.model.User', + pageSize : 20, + remoteSort: true, + remoteFilter: true, + autoLoad: false +}); diff --git a/app/src/view/main/Frame.js b/app/src/view/main/Frame.js new file mode 100644 index 00000000..365d00b7 --- /dev/null +++ b/app/src/view/main/Frame.js @@ -0,0 +1,60 @@ +Ext.define('AppuntoAuth.view.main.Frame' ,{ + extend : 'Ext.tab.Panel', + alias : 'widget.appa-main-frame', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + + /** + * Define the panel's items. + * @return void + */ + initComponent: function() + { + this.items = + [ + { + title : Lang.localize('tab_status'), + iconCls : 'transmit', + itemId : 'tab-status', + xtype : 'appa_status_view' + // xtype : 'container' + }, + { + title : Lang.localize('tab_users'), + iconCls : 'user', + itemId : 'tab-users', + xtype : 'appa_user_frame' + }, + { + title : Lang.localize('tab_user_roles'), + iconCls : 'shield', + itemId : 'tab-roles', + xtype : 'appa_role_frame' + }, + { + title : Lang.localize('tab_permissions'), + iconCls : 'lock', + itemId : 'tab-permissions', + xtype : 'appa_permission_list' + }, + { + title : Lang.localize('tab_paths'), + iconCls : 'map', + itemId : 'tab-paths', + xtype : 'appa_path_frame' + }, + { + title : Lang.localize('tab_sessions'), + iconCls : 'monitor', + itemId : 'tab-sessions', + xtype : 'appa_session_list' + } + ]; + + this.callParent(arguments); + } + +}); diff --git a/app/src/view/main/Login.js b/app/src/view/main/Login.js new file mode 100644 index 00000000..12b074ad --- /dev/null +++ b/app/src/view/main/Login.js @@ -0,0 +1,62 @@ +Ext.define('AppuntoAuth.view.main.Login', +{ + extend : 'Ext.container.Container', + alias : 'widget.appa-main-login', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + autoScroll : true, + title : Lang.localize('perm_add'), + iconCls : 'lock-add', + layout : 'fit', + autoShow : true, + modal : true, + + items : [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + layout: { + type: 'hbox', + align: 'stretch' + }, + bodyStyle: { + padding : '10px' + }, +/* + defaults: { + width : 180, + labelWidth : 60 + }, +*/ + items: [ + { + name : 'username', + fieldLabel : Lang.localize('username'), + labelCls : 'admin-login-label', + labelAlign : 'right', + xtype : 'textfield', + value : '' // initialzing field so changes will show it as dirty + }, + { + name : 'password', + fieldLabel : Lang.localize('password'), + labelCls : 'admin-login-label', + labelAlign : 'right', + xtype : 'textfield', + value : '' // initialzing field so changes will show it as dirty + }, + { + xtype : 'button', + text : Lang.localize('login'), + cls : 'admin-login-button', + action : 'login' + } + ] + } + ] + +}); diff --git a/app/src/view/main/Main.js b/app/src/view/main/Main.js new file mode 100644 index 00000000..d3a9d5aa --- /dev/null +++ b/app/src/view/main/Main.js @@ -0,0 +1,55 @@ +/** + * This class is the main view for the application. It is specified in app.js as the + * "autoCreateViewport" property. That setting automatically applies the "viewport" + * plugin to promote that instance of this class to the body element. + * + * TODO - Replace this content of this view to suite the needs of your application. + */ +Ext.define('AppuntoAuth.view.main.Main', { + extend: 'Ext.container.Container', + + xtype: 'appa-main', + + controller: 'main', + viewModel: { + type: 'main' + }, + + layout: { + type: 'border' + }, + + items: [ + { + // header area + xtype : 'container', + cls : 'app-header', + region : 'north', + height : 64, + border : 0, + layout : { + type : 'hbox', + pack : 'end' + }, + items : { + xtype : 'button', + text : 'logout', + action : 'logout', + cls : 'admin-logout-button' + } + }, + { + xtype : 'panel', + cls : 'app-main', + region : 'center', + layout : 'fit', + flex : 5, + border : 0, + items : [ + { + // xtype : 'container' + xtype : 'appa-main-frame' + } + ] + }] +}); diff --git a/app/src/view/main/MainController.js b/app/src/view/main/MainController.js new file mode 100644 index 00000000..67e9fcb1 --- /dev/null +++ b/app/src/view/main/MainController.js @@ -0,0 +1,26 @@ +/** + * This class is the main view for the application. It is specified in app.js as the + * "autoCreateViewport" property. That setting automatically applies the "viewport" + * plugin to promote that instance of this class to the body element. + * + * TODO - Replace this content of this view to suite the needs of your application. + */ +Ext.define('AppuntoAuth.view.main.MainController', { + extend: 'Ext.app.ViewController', + + requires: [ + 'Ext.MessageBox' + ], + + alias: 'controller.main', + + onClickButton: function () { + Ext.Msg.confirm('Confirm', 'Are you sure?', 'onConfirm', this); + }, + + onConfirm: function (choice) { + if (choice === 'yes') { + // + } + } +}); diff --git a/app/src/view/main/MainModel.js b/app/src/view/main/MainModel.js new file mode 100644 index 00000000..9a8044d0 --- /dev/null +++ b/app/src/view/main/MainModel.js @@ -0,0 +1,14 @@ +/** + * This class is the view model for the Main view of the application. + */ +Ext.define('AppuntoAuth.view.main.MainModel', { + extend: 'Ext.app.ViewModel', + + alias: 'viewmodel.main', + + data: { + name: 'AppuntoAuth' + } + + //TODO - add data, formulas and/or methods to support your view +}); \ No newline at end of file diff --git a/app/src/view/path/ContextMenu.js b/app/src/view/path/ContextMenu.js new file mode 100644 index 00000000..22b4148f --- /dev/null +++ b/app/src/view/path/ContextMenu.js @@ -0,0 +1,44 @@ +Ext.define('AppuntoAuth.view.path.ContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_path_contextmenu', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('path_set_private'), + action : 'set_private', + iconCls : 'page-delete' + }, + { + text : Lang.localize('path_set_public'), + action : 'set_public', + iconCls : 'world-link' + }, + { + text : Lang.localize('path_set_permission'), + action : 'set_permission', + itemId : 'permission-options', + iconCls : 'lock', + menu : [ + ''+Lang.localize('path_permissions')+'' + ] + }, + { + text : Lang.localize('path_remove_permission'), + action : 'remove_permission', + iconCls : 'lock-delete' + }, + { + text : Lang.localize('path_delete'), + action : 'delete', + iconCls : 'delete' + } + ] +}) diff --git a/app/src/view/path/ControllerView.js b/app/src/view/path/ControllerView.js new file mode 100644 index 00000000..4a20ba15 --- /dev/null +++ b/app/src/view/path/ControllerView.js @@ -0,0 +1,40 @@ +Ext.define('AppuntoAuth.view.path.ControllerView' ,{ + extend : 'Ext.view.View', + alias : 'widget.appa_path_controller_view', + + store : 'Controllers', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + cls : 'controller-view', + itemSelector : 'div.ci-controller', + selectedItemCls : 'controller-selected', + overItemCls : 'controller-rollover', + + initComponent: function() + { + this.tpl = new Ext.XTemplate( + '', + '
', + '
', + '
', + '
', + '', + '', + '', + '', + '
'+Lang.localize('controller_methods')+' : {methods}
'+Lang.localize('controller_public')+' : {public_methods}
'+Lang.localize('controller_private')+' : {private_methods}
', + '
', + '
', + '{ci_controller}', + '{full_path}', + '
', + '
', + '
' + ); + + this.callParent(arguments); + } +}); diff --git a/app/src/view/path/Frame.js b/app/src/view/path/Frame.js new file mode 100644 index 00000000..cc61ebe5 --- /dev/null +++ b/app/src/view/path/Frame.js @@ -0,0 +1,58 @@ +Ext.define('AppuntoAuth.view.path.Frame' , +{ + extend : 'Ext.panel.Panel', + alias : 'widget.appa_path_frame', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + layout : { + type : 'hbox', + align : 'stretch' + }, + + defaults: { + collapsible: false + }, + + border : 0, + + createMenuItem: true, + + items : + [ + { + xtype : 'panel', + title : Lang.localize('path_tab_controllers'), + cls : 'controller-frame', + autoScroll : true, + items : [{xtype:'appa_path_controller_view'}], + border : 0, + flex : 6 + }, + { + xtype : 'panel', + title : Lang.localize('path_tab_paths'), + layout : 'fit', + items : [{xtype:'appa_path_path_view'}], + border : 0, + flex : 10 + } + ], + + bbar : [ + { + type : 'button', + text : Lang.localize('refresh'), + action : 'verify-paths', + iconCls : 'x-tbar-loading' + } + ], + + + initComponent: function() + { + this.callParent(arguments); + } +}); diff --git a/app/src/view/path/PathView.js b/app/src/view/path/PathView.js new file mode 100644 index 00000000..cc433a7b --- /dev/null +++ b/app/src/view/path/PathView.js @@ -0,0 +1,85 @@ +/** + * + */ +Ext.define('AppuntoAuth.view.path.PathView' ,{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_path_path_view', + store : 'PathItems', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + autoScroll : true, + border : 0, + + columns : [ + { + header : '', + dataIndex : 'found', + width : 24, + sortable : false, + menuDisabled : true, + align : 'center', + renderer : function(val,meta,rec) + { + var not_found_message; + + if (val == 0) + { + not_found_message = '

'+Lang.localize('path_not_found_1')+'

'; + not_found_message += '

'+Lang.localize('path_not_found_2')+'

'; + + meta.tdCls = 'path-not-found'; + meta.tdAttr = 'data-qtip="'+not_found_message+'"'; + } + //else if (rec.get('public') == 0 && rec.get('permission_id') == 0) + //{ + // meta.tdCls = 'path-not-found'; + // meta.tdAttr = 'data-qtip="private path with no permission is inaccessible"'; + //} + return ''; + } + }, + {header: 'Method', dataIndex: 'ci_method', flex: 1}, + { + header : Lang.localize('path_path'), + dataIndex : 'ci_method', + sortable : true, + menuDisabled : true, + flex : 2, + renderer : function(val,meta,rec) + { + var dir = rec.get('dir') + path = Ext.util.Format.lowercase(rec.get('ci_controller')+'/'+rec.get('ci_method')); + + if (dir != '.') path = dir+'/'+path; + + return path; + } + }, + { + header : Lang.localize('path_access'), + dataIndex : 'public_flag', + width : 90, + renderer : function(val,meta,rec) { + if (val == 0) { + meta.tdCls = 'path-private'; + return Lang.localize('path_private'); + } + else if (val == 1) + { + meta.tdCls = 'path-public'; + return Lang.localize('path_public'); + } + return 'unknown'; + } + }, + { + header : Lang.localize('path_permission'), + dataIndex : 'permission_name', + flex : 2 + } + ] + +}); diff --git a/app/src/view/permission/Add.js b/app/src/view/permission/Add.js new file mode 100644 index 00000000..2464d504 --- /dev/null +++ b/app/src/view/permission/Add.js @@ -0,0 +1,65 @@ +Ext.define('AppuntoAuth.view.permission.Add', +{ + extend : 'Ext.window.Window', + alias : 'widget.appa_permission_add', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + autoScroll : true, + title : Lang.localize('perm_add'), + iconCls : 'lock-add', + layout : 'fit', + autoShow : true, + modal : true, + + items : [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 320, + labelWidth : 90, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'name', + fieldLabel : Lang.localize('name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + minLength : 3, + maxLength : 32, + allowBlank : false + }, + { + name : 'description', + fieldLabel : Lang.localize('description'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + maxLength : 64, + allowBlank : true + } + ] + } + ], + + buttons : [ + { + text: Lang.localize('save'), + action: 'save' + }, + { + text: Lang.localize('cancel'), + handler : function () { this.up('.window').close(); } + } + ] + + +}); diff --git a/app/src/view/permission/ContextMenu.js b/app/src/view/permission/ContextMenu.js new file mode 100644 index 00000000..7e0ada22 --- /dev/null +++ b/app/src/view/permission/ContextMenu.js @@ -0,0 +1,30 @@ +Ext.define('AppuntoAuth.view.permission.ContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_permission_contextmenu', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('perm_add'), + action : 'add', + iconCls : 'lock-add' + }, + { + text : Lang.localize('perm_edit'), + action : 'edit', + iconCls : 'lock-edit' + }, + { + text : Lang.localize('perm_delete'), + action : 'delete', + iconCls : 'lock-delete' + } + ] +}) diff --git a/app/src/view/permission/Edit.js b/app/src/view/permission/Edit.js new file mode 100644 index 00000000..6540b392 --- /dev/null +++ b/app/src/view/permission/Edit.js @@ -0,0 +1,73 @@ +Ext.define('AppuntoAuth.view.permission.Edit', { + extend : 'Ext.window.Window', + alias : 'widget.appa_permission_edit', + + title : Lang.localize('perm_edit'), + iconCls : 'lock-edit', + layout : 'fit', + autoShow: false, + modal : true, + + items : [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 320, + labelWidth : 90, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'id', + width : 0, + type : 'hidden' + }, + { + name : 'name', + fieldLabel : Lang.localize('name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : false + }, + { + name : 'internal_name', + fieldLabel : Lang.localize('perm_internal_name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : false + }, + { + name : 'description', + fieldLabel : Lang.localize('description'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : true + } + ] + } + ], + + buttons : [ + { + text: 'Save', + action: 'save' + }, + { + text: 'Cancel', + handler : function () { this.up('.window').close(); } + } + ], + + initComponent: function() + { + + this.callParent(arguments); + this.down('form').getForm().trackResetOnLoad = true; + } +}); diff --git a/app/src/view/permission/List.js b/app/src/view/permission/List.js new file mode 100644 index 00000000..997d5e75 --- /dev/null +++ b/app/src/view/permission/List.js @@ -0,0 +1,41 @@ +Ext.define('AppuntoAuth.view.permission.List' , +{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_permission_list', + store : 'Permissions', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + autoScroll : true, + + viewConfig: { + loadMask : { msg : Lang.localize('loading') } + }, + + columns : + [ + {header: Lang.localize('name'), dataIndex: 'name', flex: 1}, + {header: Lang.localize('perm_internal_name'), dataIndex: 'internal_name', flex: 1}, + {header: Lang.localize('name'), dataIndex: 'description', flex: 2} + ], + + tbar : + [{ + xtype : 'button', + text : Lang.localize('perm_add'), + action : 'add', + cls : 'view-selection-button', + iconCls : 'lock-add' + }], + + bbar : + [{ + type : 'button', + text : Lang.localize('refresh'), + action : 'refresh', + iconCls : 'x-tbar-loading' + }] + +}); diff --git a/app/src/view/role/Add.js b/app/src/view/role/Add.js new file mode 100644 index 00000000..d549eaf4 --- /dev/null +++ b/app/src/view/role/Add.js @@ -0,0 +1,68 @@ +Ext.define('AppuntoAuth.view.role.Add', { + extend : 'Ext.window.Window', + alias : 'widget.appa_role_add', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + title : Lang.localize('role_add'), + iconCls : 'shield-add', + layout : 'fit', + autoShow: true, + modal : true, + + initComponent: function() + { + this.items = [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 460, + labelWidth : 120, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'name', + fieldLabel : Lang.localize('name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + minLength : 3, + maxLength : 32, + allowBlank : false + }, + { + name : 'description', + fieldLabel : Lang.localize('description'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + maxLength : 64, + allowBlank : true + } + ] + } + ]; + + this.buttons = [ + { + text: Lang.localize('save'), + action: 'save' + }, + { + text: Lang.localize('cancel'), + scope: this, + handler: this.close + } + ]; + + + this.callParent(arguments); + } +}); diff --git a/app/src/view/role/ContextMenu.js b/app/src/view/role/ContextMenu.js new file mode 100644 index 00000000..5d9b7f82 --- /dev/null +++ b/app/src/view/role/ContextMenu.js @@ -0,0 +1,30 @@ +Ext.define('AppuntoAuth.view.role.ContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_role_contextmenu', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('role_add'), + action : 'add', + iconCls : 'shield-add' + }, + { + text : Lang.localize('role_edit'), + action : 'edit', + iconCls : 'shield-go' + }, + { + text : Lang.localize('role_delete'), + action : 'delete', + iconCls : 'shield-delete' + } + ] +}) diff --git a/app/src/view/role/Edit.js b/app/src/view/role/Edit.js new file mode 100644 index 00000000..bde4fecc --- /dev/null +++ b/app/src/view/role/Edit.js @@ -0,0 +1,70 @@ +Ext.define('AppuntoAuth.view.role.Edit', { + extend : 'Ext.window.Window', + alias : 'widget.appa_role_edit', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + title : Lang.localize('role_edit'), + iconCls : 'shield-edit', + layout : 'fit', + autoShow: false, + modal : true, + + initComponent: function() + { + this.items = [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 320, + labelWidth : 90, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'id', + width : 0, + type : 'hidden' + }, + { + name : 'name', + fieldLabel : Lang.localize('name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : false + }, + { + name : 'description', + fieldLabel : Lang.localize('description'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : true + } + ] + } + ]; + + this.buttons = [ + { + text: Lang.localize('save'), + action: 'save' + }, + { + text: Lang.localize('cancel'), + scope: this, + handler: this.close + } + ]; + + this.callParent(arguments); + this.down('form').getForm().trackResetOnLoad = true; + } +}); diff --git a/app/src/view/role/Frame.js b/app/src/view/role/Frame.js new file mode 100644 index 00000000..e2232fed --- /dev/null +++ b/app/src/view/role/Frame.js @@ -0,0 +1,33 @@ +Ext.define('AppuntoAuth.view.role.Frame' ,{ + extend : 'Ext.container.Container', + alias : 'widget.appa_role_frame', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + layout : { + type : 'hbox', + align : 'stretch' + }, + + defaults: { + collapsible: false + }, + + border : 0, + + items : [ + { + xtype : 'appa_role_list', + flex : 1, + border : "0 1px 0 0", + minWidth : 120 + },{ + xtype : 'appa_role_permission_list', + border : "1px 0 0 1px", + flex : 1 + } + ] + +}); diff --git a/app/src/view/role/List.js b/app/src/view/role/List.js new file mode 100644 index 00000000..7830a661 --- /dev/null +++ b/app/src/view/role/List.js @@ -0,0 +1,40 @@ +Ext.define('AppuntoAuth.view.role.List' , +{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_role_list', + store : 'Roles', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + title : Lang.localize('tab_user_roles'), + iconCls : 'shield', + + viewConfig: { + loadMask : { msg : Lang.localize('loading') } + }, + + autoScroll : true, + + columns : [ + {header: Lang.localize('name'), dataIndex: 'name', hideable : false, flex: 2}, + {header: Lang.localize('description'), dataIndex: 'description', hideable : false, flex: 3} + ], + + tbar : [{ + xtype : 'button', + text : Lang.localize('role_add'), + action : 'add', + cls : 'view-selection-button', + iconCls : 'shield-add' + }], + + bbar : [{ + xtype : 'button', + text : Lang.localize('refresh'), + action : 'refresh', + iconCls : 'x-tbar-loading' + }] + +}); diff --git a/app/src/view/role/PermissionContextMenu.js b/app/src/view/role/PermissionContextMenu.js new file mode 100644 index 00000000..213d492a --- /dev/null +++ b/app/src/view/role/PermissionContextMenu.js @@ -0,0 +1,25 @@ +Ext.define('AppuntoAuth.view.role.PermissionContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_role_permission_contextmenu', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('role_perm_add'), + action : 'add', + iconCls : 'lock-add' + }, + { + text : Lang.localize('role_perm_remove'), + action : 'remove', + iconCls : 'lock-delete' + } + ] +}) diff --git a/app/src/view/role/PermissionList.js b/app/src/view/role/PermissionList.js new file mode 100644 index 00000000..a71fe015 --- /dev/null +++ b/app/src/view/role/PermissionList.js @@ -0,0 +1,61 @@ +Ext.define('AppuntoAuth.view.role.PermissionList' , +{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_role_permission_list', + store : 'RolePermissions', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + title : Lang.localize('tab_permissions'), + iconCls : 'lock', + cls : 'appunto-list', + + autoScroll : true, + + viewConfig: { + emptyText : '

'+Lang.localize('role_select')+'

', + deferEmptyText : false, + loadMask : { msg : Lang.localize('loading') } + }, + + + columns : [ + { + header : '', + dataIndex: 'hasRolePermission', + hideable : false, + width : 24, + sortable : true, + align : 'center', + renderer : function(val,meta,rec) { + if (rec.get('inRole') == 1) meta.tdCls = 'permission-in-role'; + return ''; + } + }, + {header: Lang.localize('name'), dataIndex: 'name', hideable : false, flex: 1}, + {header: Lang.localize('description'), dataIndex: 'description', hideable : false, flex: 2} + ], + + tbar : [{ + xtype : 'button', + itemId : 'permission-view-toggle', + text : Lang.localize('role_perm_view_all'), + cls : 'view-selection-button', + menu : [ + { + text : Lang.localize('role_perm_view_all'), + value : '1', + checked : true, + group : 'permission-view' + }, + { + text : Lang.localize('role_perm_view_selected'), + value : '0', + checked : false, + group : 'permission-view' + }] + }] + +}); diff --git a/app/src/view/session/ContextMenu.js b/app/src/view/session/ContextMenu.js new file mode 100644 index 00000000..05ebedac --- /dev/null +++ b/app/src/view/session/ContextMenu.js @@ -0,0 +1,19 @@ +Ext.define('AppuntoAuth.view.session.ContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_session_contextmenu', + + requires : 'AppuntoAuth.view.session.ListController', + controller : 'session-list', + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('session_delete'), + handler : 'confirmSessionDeletion', + iconCls : 'monitor-delete' + } + ] +}) diff --git a/app/src/view/session/List.js b/app/src/view/session/List.js new file mode 100644 index 00000000..170f17b3 --- /dev/null +++ b/app/src/view/session/List.js @@ -0,0 +1,97 @@ +Ext.define('AppuntoAuth.view.session.List' , +{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_session_list', + store : 'Sessions', + + requires : [ + 'AppuntoAuth.lib.lang.Default', + 'AppuntoAuth.view.session.ListController' + ], + + controller : 'session-list', + + autoScroll : true, + + viewConfig: { + loadMask : { msg : Lang.localize('loading') } + }, + + columns : [ + { + header : Lang.localize('session_username'), + flex : 3, + sortable : true, + dataIndex: 'username' + }, + { + header : Lang.localize('session_last_activity'), + flex : 3, + sortable : true, + renderer : function(val,metaData,record) { + // empty dates return an empty string for date.format('y') + return (Ext.util.Format.date(val,'y')) ? Ext.util.Format.date(val,'M d, Y h:i:s A') : 'unknown'; + }, + dataIndex: 'last_activity' + }, + { + header : Lang.localize('session_last_page'), + flex : 3, + sortable : true, + dataIndex: 'last_page' + }, + { + header : Lang.localize('session_ip_address'), + flex : 2, + sortable : true, + dataIndex: 'ip_address' + }, + { + header : Lang.localize('session_user_agent'), + flex : 8, + sortable : true, + dataIndex: 'user_agent' + } + ], + + tbar : [ + { + xtype : 'button', + itemId : 'session-view-toggle', + text : Lang.localize('session_view_all'), + cls : 'view-selection-button', + menu : [ + { + text : Lang.localize('session_view_all'), + value : '1', + checked : true, + handler : 'toggleView', + group : 'session-view' + }, + { + text : Lang.localize('session_view_logged_in'), + value : '0', + checked : false, + handler : 'toggleView', + group : 'session-view' + }] + }], + + bbar : [{ + xtype : 'button', + text : Lang.localize('refresh'), + iconCls : 'x-tbar-loading', + handler : 'refreshList' + }], + + initComponent: function() { + + this.callParent(arguments); + + this.addListener('activate', this.getController().refreshList); + this.addListener('itemcontextmenu', this.getController().showContextMenu); + this.addListener('containercontextmenu', function(view, e) { e.preventDefault(); } ); + this.addListener('contextmenu', function(view, e) { e.preventDefault(); } ); + } + +}); diff --git a/app/src/view/session/ListController.js b/app/src/view/session/ListController.js new file mode 100644 index 00000000..f5e9b936 --- /dev/null +++ b/app/src/view/session/ListController.js @@ -0,0 +1,71 @@ +Ext.define('AppuntoAuth.view.session.ListController' ,{ + extend : 'Ext.app.ViewController', + alias : 'controller.session-list', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + showContextMenu: function(view, rec, item, idx, e) + { + e.preventDefault(); + + var menu = Ext.widget('appa_session_contextmenu'); + + // pass the contextmenu the record so we don't have to worry about a selection change + menu.setRecord(rec); + + // select the record that was context-clicked + view.getSelectionModel().select(rec,false,true); // keepExisting=false, suppressEvent=true + + menu.showAt(e.getXY()); + }, + + refreshList: function(button) + { + Ext.getStore('Sessions').load(); + }, + + confirmSessionDeletion: function(menuitem) + { + var rec = menuitem.up('menu').getRecord(), + store = Ext.getStore('Sessions'), + title = 'Delete session'; + + if (rec.data.username != '') title = title + ' (' + Lang.localize('session_delete_user') + ': '+rec.data.username+')'; + + Ext.MessageBox.confirm(title, Lang.localize('session_delete_confirm'), Ext.bind(this.deleteSession,this,[rec,store],true)); + }, + + deleteSession: function(button, dummy, msgbox, record, store) + { + if (button == "yes") + { + record.erase( + { + success: function() { store.remove(record); } + } + ); + } + }, + + toggleView: function(menuitem) + { + var sessions = menuitem.up('appa_session_list'), + store = sessions.getStore(); + button = sessions.down('#session-view-toggle'); + + if (menuitem.value == 1) + { + store.clearFilter(); + button.setText(Lang.localize('session_view_all')); + } + else + { + store.filter('show_all',0); + button.setText(Lang.localize('session_view_logged_in')); + } + } + +}); + diff --git a/app/src/view/status/View.js b/app/src/view/status/View.js new file mode 100644 index 00000000..ae41856a --- /dev/null +++ b/app/src/view/status/View.js @@ -0,0 +1,46 @@ +Ext.define('AppuntoAuth.view.status.View' , +{ + extend : 'Ext.panel.Panel', + alias : 'widget.appa_status_view', + + requires : [ + 'AppuntoAuth.lib.lang.Default', + 'Ext.XTemplate' + ], + + items : [ + { + xtype : 'dataview', + store : 'StatusInfos', + viewConfig : { loadMask : { msg : Lang.localize('loading') } }, + tpl : new Ext.XTemplate( + '', + '', + '', + '', + '', + '', + '', + '', + '', + '', + '
{info_item}{info_val}{info_note}
', + { + noteExists: function(note) + { + return note != ''; + } + } + ), + itemSelector: 'div.info-item' + } + ], + + bbar : [{ + xtype : 'button', + text : Lang.localize('refresh'), + action : 'refresh', + iconCls : 'x-tbar-loading' + }] + +}); diff --git a/app/src/view/user/Add.js b/app/src/view/user/Add.js new file mode 100644 index 00000000..85b04407 --- /dev/null +++ b/app/src/view/user/Add.js @@ -0,0 +1,106 @@ +Ext.define('AppuntoAuth.view.user.Add', +{ + extend : 'Ext.window.Window', + alias : 'widget.appa_user_add', + + requires : [ + 'AppuntoAuth.lib.lang.Default', + 'Ext.form.field.Checkbox', + 'AppuntoAuth.lib.util.CustomVTypes' + ], + + title : Lang.localize('user_add'), + iconCls : 'user-add', + layout : 'fit', + autoShow : true, + modal : true, + + items : [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 460, + labelWidth : 180, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'username', + fieldLabel : Lang.localize('username'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : false + },{ + name : 'email', + fieldLabel : Lang.localize('email'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + vtype : 'email', + vtypeText : Lang.localize('email_format'), + allowBlank : false + },{ + name : 'name', + fieldLabel : Lang.localize('name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : true + },{ + name : 'surname', + fieldLabel : Lang.localize('surname'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : true + },{ + id : 'pass', + name : 'password', + fieldLabel : Lang.localize('password'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + inputType : 'password', + vtype : 'passformat', + style: { + marginTop: '18px' + }, + allowBlank : false + },{ + name : 'password2', + fieldLabel : Lang.localize('password_confirm'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + inputType : 'password', + vtype : 'passconfirm', + passField : 'pass', + allowBlank : false + },{ + name : 'active', + fieldLabel : Lang.localize('user_set_active'), + inputValue : '1', + uncheckedValue : '0', + style: { + marginTop: '18px' + }, + xtype : 'checkbox', + checked : true + } + ] + } + ], + + buttons : [ + { + text : Lang.localize('save'), + action : 'save' + }, + { + text : Lang.localize('cancel'), + handler : function () { this.up('.window').close(); } + } + ] + +}); diff --git a/app/src/view/user/ChangePassword.js b/app/src/view/user/ChangePassword.js new file mode 100644 index 00000000..5e594089 --- /dev/null +++ b/app/src/view/user/ChangePassword.js @@ -0,0 +1,74 @@ +Ext.define('AppuntoAuth.view.user.ChangePassword', { + extend : 'Ext.window.Window', + alias : 'widget.appa_user_changepassword', + + title : Lang.localize('password_change'), + iconCls : 'key', + layout : 'fit', + autoShow: true, + modal : true, + + initComponent: function() + { + this.items = [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 460, + labelWidth : 160, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'username', + fieldLabel : Lang.localize('username'), + xtype : 'displayfield' + },{ + name : 'email', + fieldLabel : Lang.localize('email'), + xtype : 'displayfield' + },{ + id : 'pass', + name : 'password', + fieldLabel : Lang.localize('password'), + xtype : 'textfield', + inputType : 'password', + vtype : 'passformat', + style: { + marginTop: '18px' + }, + allowBlank : false + },{ + name : 'password2', + fieldLabel : Lang.localize('password_confirm'), + xtype : 'textfield', + inputType : 'password', + vtype : 'passconfirm', + passField : 'pass', + allowBlank : false + } + ] + } + ]; + + this.buttons = [ + { + text : Lang.localize('save'), + action : 'save' + }, + { + text : Lang.localize('cancel'), + handler : function () { this.up('.window').close(); } + } + ]; + + this.callParent(arguments); + this.down('form').getForm().trackResetOnLoad = true; + } +}); diff --git a/app/src/view/user/ContextMenu.js b/app/src/view/user/ContextMenu.js new file mode 100644 index 00000000..059813a5 --- /dev/null +++ b/app/src/view/user/ContextMenu.js @@ -0,0 +1,41 @@ +Ext.define('AppuntoAuth.view.user.ContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_user_contextmenu', + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('user_add'), + action : 'add', + iconCls : 'user-add' + }, + { + text : Lang.localize('user_edit'), + action : 'edit', + iconCls : 'user-edit' + }, + { + text : Lang.localize('user_delete'), + action : 'delete', + iconCls : 'user-delete' + }, + { + text : Lang.localize('password_change'), + action : 'change_password', + iconCls : 'key' + }, + { + text : Lang.localize('user_activate'), + action : 'activate', + iconCls : 'accept' + }, + { + text : Lang.localize('user_deactivate'), + action : 'deactivate', + iconCls : 'delete' + } + ] +}) diff --git a/app/src/view/user/Edit.js b/app/src/view/user/Edit.js new file mode 100644 index 00000000..35bb47ea --- /dev/null +++ b/app/src/view/user/Edit.js @@ -0,0 +1,88 @@ +Ext.define('AppuntoAuth.view.user.Edit', { + extend : 'Ext.window.Window', + alias : 'widget.appa_user_edit', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + title : Lang.localize('user_edit'), + iconCls : 'user-edit', + layout : 'fit', + autoShow: false, + modal : true, + + initComponent: function() + { + this.items = [ + { + xtype: 'form', + baseCls: 'x-plain', + border: false, + bodyStyle: { + padding : '10px' + }, + defaults: { + width : 460, + labelWidth : 120, + blankText : Lang.localize('field_required'), + msgTarget : 'under' + }, + items: [ + { + name : 'username', + fieldLabel : Lang.localize('username'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : false + },{ + name : 'email', + fieldLabel : Lang.localize('email'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + vtype : 'email', + vtypeText : Lang.localize('email_format'), + allowBlank : false + },{ + name : 'name', + fieldLabel : Lang.localize('name'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : true + },{ + name : 'surname', + fieldLabel : Lang.localize('surname'), + xtype : 'textfield', + value : '', // initialzing field so changes will show it as dirty + allowBlank : true + },{ + name : 'active', + fieldLabel : Lang.localize('active'), + labelAlign : 'left', + inputValue : '1', + uncheckedValue : '0', + style: { + marginTop: '18px' + }, + xtype : 'checkbox', + checked : true + } + ] + } + ]; + + this.buttons = [ + { + text : Lang.localize('save'), + action : 'save' + }, + { + text : Lang.localize('cancel'), + handler : function () { this.up('.window').close(); } + } + ]; + + this.callParent(arguments); + this.down('form').getForm().trackResetOnLoad = true; + } +}); diff --git a/app/src/view/user/Frame.js b/app/src/view/user/Frame.js new file mode 100644 index 00000000..e445f949 --- /dev/null +++ b/app/src/view/user/Frame.js @@ -0,0 +1,62 @@ +Ext.define('AppuntoAuth.view.user.Frame', +{ + extend : 'Ext.container.Container', + alias : 'widget.appa_user_frame', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + +// autoScroll : false, + + + layout : { + type : 'border' +// align : 'stretch' + }, + + bodyBorder: false, + + defaults: { + collapsible : false +// split : true + }, + + border : 0, + + createMenuItem: true, + + items : + [ + { + xtype : 'appa_user_list', + region : 'center', + flex : 1 + },{ + xtype : 'panel', + title : Lang.localize('user_role_list'), + itemId : 'role-permission-frame', + hideCollapseTool : true, + iconCls : 'shield', + region : 'east', + collapsible : true, + flex : 1, + border : "1px 0 0 1px", + layout : { + type : 'vbox', + align : 'stretch' + }, + items : [ + { + xtype : 'appa_user_role_list', + flex : 1 + }, + { + title : 'Permission List', + xtype : 'appa_user_permission_list', + flex : 1 + } + ] + } + ] +}); diff --git a/app/src/view/user/List.js b/app/src/view/user/List.js new file mode 100644 index 00000000..80b4f572 --- /dev/null +++ b/app/src/view/user/List.js @@ -0,0 +1,98 @@ +Ext.define('AppuntoAuth.view.user.List' ,{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_user_list', + store : 'Users', + + requires : [ + 'AppuntoAuth.lib.lang.Default', + 'AppuntoAuth.lib.util.SearchField', + 'Ext.grid.column.Date', + 'Ext.toolbar.Paging' + ], + + autoScroll : true, + + border : 0, + + viewConfig: { + emptyText: 'No results found', + loadMask : { msg : Lang.localize('loading') } + }, + + columns : [ + {header: Lang.localize('username'), dataIndex: 'username', menuDisabled: true, flex: 4}, + {header: Lang.localize('name'), dataIndex: 'name', menuDisabled: true, flex: 3}, + {header: Lang.localize('surname'), dataIndex: 'surname', menuDisabled: true, flex: 3}, + {header: Lang.localize('email'), dataIndex: 'email', menuDisabled: true, flex: 6}, + { + header : Lang.localize('active'), + dataIndex: 'active', + width : 48, + sortable : true, + align : 'center', + menuDisabled: true, + renderer : function(val,meta,rec) { + meta.tdCls = (rec.get('active') == 0) ? 'user-inactive' : 'user-active'; + return ''; + } + }, + {header: Lang.localize('last_ip'), dataIndex: 'last_ip', hidden: true, flex: 3}, + { + header : Lang.localize('last_login'), + dataIndex : 'last_login', + menuDisabled: true, + hidden : true, + flex : 4, + renderer : function(val) { + if (val == '0000-00-00 00:00:00') return Lang.localize('never'); + return Ext.util.Format.date(val, datetime_format); + } + },{ + header : Lang.localize('created'), + dataIndex : 'created', + menuDisabled: true, + hidden : true, + flex : 4, + renderer : function(val) { + return Ext.util.Format.date(val, datetime_format); + } + },{ + header : Lang.localize('modified'), + dataIndex : 'modified', + menuDisabled: true, + hidden : true, + flex : 4, + renderer : function(val) { + return Ext.util.Format.date(val, datetime_format); + } + } + ], + + tbar : [{ + xtype : 'button', + text : Lang.localize('user_add'), + action : 'add', + cls : 'view-selection-button', + iconCls : 'user-add' + },{ + xtype : 'tbspacer', + width : 24 + },{ + xtype : 'appunto-searchfield', + store : 'Users' + },{ + xtype : 'tbfill' + },{ + xtype : 'tool', + type : 'next' + }], + + bbar : [{ + xtype : 'pagingtoolbar', + store : 'Users', + displayInfo : true, + displayMsg : Lang.localize('paging_message') + }] + + +}); diff --git a/app/src/view/user/LoginsWidget.js b/app/src/view/user/LoginsWidget.js new file mode 100644 index 00000000..905bd3a1 --- /dev/null +++ b/app/src/view/user/LoginsWidget.js @@ -0,0 +1,57 @@ +Ext.define('AppuntoAuth.view.user.LoginsWidget' ,{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_user_logins_widget', + store : 'AppuntoAuth.store.Logins', + + title : 'Recent Login Attempts', + iconCls : 'shield', + + autoScroll : true, + + viewConfig: { + emptyText : '

no recent login attempts found

', + deferEmptyText : false + }, + + initComponent: function() { + + this.columns = [ + { + header : '', + dataIndex : 'success', + width : 24, + sortable : true, + menuDisabled : true, + align : 'center', + renderer : function(val,meta,rec) { + if (rec.get('success') == 1) { + meta.tdCls = 'login-success'; + meta.tdAttr = 'data-qtip="'+rec.get('note')+'"'; + } + else if (rec.get('success') == 0) { + meta.tdCls = 'login-fail'; + meta.tdAttr = 'data-qtip="'+rec.get('note')+'"'; + } + else { + meta.tdCls = 'login-failure'; + meta.tdAttr = 'data-qtip="'+rec.get('note')+'"'; + } + return ''; + } + }, + {header: 'Date', dataIndex: 'attempt_time', width: 80, align:'right', xtype:'datecolumn', format:'m/d/Y'}, + {header: 'Time', dataIndex: 'attempt_time', width: 60, align:'right', xtype:'datecolumn', format:'H:i:s'}, + {header: 'Username', dataIndex: 'username', menuDisabled: true, flex: 1}, + {header: 'IP Address', dataIndex: 'ip_address', menuDisabled: true, flex: 1} + ]; + + this.tools = [ + { + type : 'refresh', + itemId : 'refresh' + } + ]; + + this.callParent(arguments); + } +}); diff --git a/app/src/view/user/PermissionContextMenu.js b/app/src/view/user/PermissionContextMenu.js new file mode 100644 index 00000000..c706ce79 --- /dev/null +++ b/app/src/view/user/PermissionContextMenu.js @@ -0,0 +1,21 @@ +Ext.define('AppuntoAuth.view.user.PermissionContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_user_permission_contextmenu', + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('user_perm_add'), + action : 'add', + iconCls : 'lock-add' + }, + { + text : Lang.localize('user_perm_remove'), + action : 'remove', + iconCls : 'lock-delete' + } + ] +}) diff --git a/app/src/view/user/PermissionList.js b/app/src/view/user/PermissionList.js new file mode 100644 index 00000000..486d6250 --- /dev/null +++ b/app/src/view/user/PermissionList.js @@ -0,0 +1,107 @@ +Ext.define('AppuntoAuth.view.user.PermissionList' ,{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_user_permission_list', + store : 'UserPermissions', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + title : Lang.localize('user_perm_list'), + iconCls : 'lock', + cls : 'appunto-list', + + autoScroll : true, + border : 0, + + viewConfig: { + emptyText : '

'+Lang.localize('user_select_or')+'

', + deferEmptyText : false, + loadMask : { msg : Lang.localize('loading') } + }, + + initComponent: function() { + + this.columns = [ + { + header : '', + dataIndex: 'hasPermission', + hideable : false, + width : 24, + sortable : true, + menuDisabled : true, + align : 'center', + renderer : function(val,meta,rec) { + if (val == 1) + { + meta.tdCls = 'has-permission'; + } + return ''; + } + }, + {header: Lang.localize('name'), dataIndex: 'name', menuDisabled: true, flex: 1}, + { + text : Lang.localize('granted_to'), + menuDisabled : true, + id : 'permission-granted-to-header', + columns: [ + { + header : Lang.localize('grant_role'), + dataIndex: 'userRoleHasPermission', + width : 60, + sortable : true, + menuDisabled : true, + align : 'center', + renderer : function(val,meta,rec) { + if (val == 1) + { + meta.tdCls = 'user-role-has-permission'; + meta.tdAttr = 'data-qtip="' + Lang.localize('user_perm_granted_role') + '"'; + } + return ''; + } + }, + { + header : Lang.localize('grant_user'), + dataIndex: 'userHasPermission', + width : 60, + sortable : true, + menuDisabled : true, + align : 'center', + renderer : function(val,meta,rec) { + if (val == 1) + { + meta.tdCls = 'user-has-permission'; + meta.tdAttr = 'data-qtip="' + Lang.localize('user_perm_granted_user') + '"'; + } + return ''; + } + }] + }, + {header: Lang.localize('description'), dataIndex: 'description', menuDisabled: true, flex: 2} + ]; + + this.tbar = [ + { + xtype : 'button', + itemId : 'permission-view-toggle', + text : Lang.localize('user_perm_view_all'), + cls : 'view-selection-button', + menu : [ + { + text : Lang.localize('user_perm_view_all'), + value : '1', + checked : true, + group : 'permission-view' + }, + { + text : Lang.localize('user_perm_view_selected'), + value : '0', + checked : false, + group : 'permission-view' + }] + }]; + + this.callParent(arguments); + } +}); diff --git a/app/src/view/user/RoleContextMenu.js b/app/src/view/user/RoleContextMenu.js new file mode 100644 index 00000000..90cea568 --- /dev/null +++ b/app/src/view/user/RoleContextMenu.js @@ -0,0 +1,21 @@ +Ext.define('AppuntoAuth.view.user.RoleContextMenu' ,{ + extend : 'Ext.menu.Menu', + alias : 'widget.appa_user_role_contextmenu', + + config : { + record : null + }, + + items : [ + { + text : Lang.localize('user_role_add'), + action : 'add', + iconCls : 'shield-add' + }, + { + text : Lang.localize('user_role_remove'), + action : 'remove', + iconCls : 'shield-delete' + } + ] +}) diff --git a/app/src/view/user/RoleList.js b/app/src/view/user/RoleList.js new file mode 100644 index 00000000..02f41042 --- /dev/null +++ b/app/src/view/user/RoleList.js @@ -0,0 +1,63 @@ +Ext.define('AppuntoAuth.view.user.RoleList' ,{ + extend : 'Ext.grid.Panel', + alias : 'widget.appa_user_role_list', + store : 'UserRoles', + + requires : [ + 'AppuntoAuth.lib.lang.Default' + ], + + cls : 'appunto-list', + + autoScroll : true, + border : 0, + + viewConfig: { + emptyText : '

'+Lang.localize('user_select_or')+'

', + deferEmptyText : false, + loadMask : { msg : Lang.localize('loading') } + }, + + initComponent: function() { + + this.columns = [ + { + header : '', + dataIndex : 'hasRole', + width : 24, + sortable : true, + menuDisabled : true, + align : 'center', + renderer : function(val,meta,rec) { + if (rec.get('hasRole') == 1) meta.tdCls = 'user-has-role'; + return ''; + } + }, + {header: Lang.localize('name'), dataIndex: 'name', menuDisabled: true, flex: 1}, + {header: Lang.localize('description'), dataIndex: 'description', menuDisabled: true, flex: 2} + ]; + + this.tbar = [ + { + xtype : 'button', + itemId : 'role-view-toggle', + text : Lang.localize('user_role_view_all'), + cls : 'view-selection-button', + menu : [ + { + text : Lang.localize('user_role_view_all'), + value : '1', + checked : true, + group : 'role-view' + }, + { + text : Lang.localize('user_role_view_selected'), + value : '0', + checked : false, + group : 'role-view' + }] + }]; + + this.callParent(arguments); + } +}); diff --git a/application/.htaccess b/application/.htaccess new file mode 100644 index 00000000..14249c50 --- /dev/null +++ b/application/.htaccess @@ -0,0 +1 @@ +Deny from all \ No newline at end of file diff --git a/application/cache/.htaccess b/application/cache/.htaccess new file mode 100644 index 00000000..14249c50 --- /dev/null +++ b/application/cache/.htaccess @@ -0,0 +1 @@ +Deny from all \ No newline at end of file diff --git a/application/cache/index.html b/application/cache/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/cache/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/config/autoload.php b/application/config/autoload.php new file mode 100644 index 00000000..e6c5a553 --- /dev/null +++ b/application/config/autoload.php @@ -0,0 +1,116 @@ + '', + 'xhtml1-strict' => '', + 'xhtml1-trans' => '', + 'xhtml1-frame' => '', + 'html5' => '', + 'html4-strict' => '', + 'html4-trans' => '', + 'html4-frame' => '' + ); + +/* End of file doctypes.php */ +/* Location: ./application/config/doctypes.php */ \ No newline at end of file diff --git a/application/config/foreign_chars.php b/application/config/foreign_chars.php new file mode 100644 index 00000000..14b0d737 --- /dev/null +++ b/application/config/foreign_chars.php @@ -0,0 +1,64 @@ + 'ae', + '/ö|œ/' => 'oe', + '/ü/' => 'ue', + '/Ä/' => 'Ae', + '/Ü/' => 'Ue', + '/Ö/' => 'Oe', + '/À|Á|Â|Ã|Ä|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A', + '/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a', + '/Ç|Ć|Ĉ|Ċ|Č/' => 'C', + '/ç|ć|ĉ|ċ|č/' => 'c', + '/Ð|Ď|Đ/' => 'D', + '/ð|ď|đ/' => 'd', + '/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E', + '/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e', + '/Ĝ|Ğ|Ġ|Ģ/' => 'G', + '/ĝ|ğ|ġ|ģ/' => 'g', + '/Ĥ|Ħ/' => 'H', + '/ĥ|ħ/' => 'h', + '/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I', + '/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i', + '/Ĵ/' => 'J', + '/ĵ/' => 'j', + '/Ķ/' => 'K', + '/ķ/' => 'k', + '/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L', + '/ĺ|ļ|ľ|ŀ|ł/' => 'l', + '/Ñ|Ń|Ņ|Ň/' => 'N', + '/ñ|ń|ņ|ň|ʼn/' => 'n', + '/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O', + '/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o', + '/Ŕ|Ŗ|Ř/' => 'R', + '/ŕ|ŗ|ř/' => 'r', + '/Ś|Ŝ|Ş|Š/' => 'S', + '/ś|ŝ|ş|š|ſ/' => 's', + '/Ţ|Ť|Ŧ/' => 'T', + '/ţ|ť|ŧ/' => 't', + '/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U', + '/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u', + '/Ý|Ÿ|Ŷ/' => 'Y', + '/ý|ÿ|ŷ/' => 'y', + '/Ŵ/' => 'W', + '/ŵ/' => 'w', + '/Ź|Ż|Ž/' => 'Z', + '/ź|ż|ž/' => 'z', + '/Æ|Ǽ/' => 'AE', + '/ß/'=> 'ss', + '/IJ/' => 'IJ', + '/ij/' => 'ij', + '/Œ/' => 'OE', + '/ƒ/' => 'f' +); + +/* End of file foreign_chars.php */ +/* Location: ./application/config/foreign_chars.php */ \ No newline at end of file diff --git a/application/config/grocery_crud.php b/application/config/grocery_crud.php new file mode 100644 index 00000000..9a09a4f7 --- /dev/null +++ b/application/config/grocery_crud.php @@ -0,0 +1,39 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/config/migration.php b/application/config/migration.php new file mode 100644 index 00000000..df42a3ca --- /dev/null +++ b/application/config/migration.php @@ -0,0 +1,41 @@ +migration->latest() this is the version that schema will +| be upgraded / downgraded to. +| +*/ +$config['migration_version'] = 0; + + +/* +|-------------------------------------------------------------------------- +| Migrations Path +|-------------------------------------------------------------------------- +| +| Path to your migrations folder. +| Typically, it will be within your application path. +| Also, writing permission is required within the migrations path. +| +*/ +$config['migration_path'] = APPPATH . 'migrations/'; + + +/* End of file migration.php */ +/* Location: ./application/config/migration.php */ \ No newline at end of file diff --git a/application/config/mimes.php b/application/config/mimes.php new file mode 100644 index 00000000..100f7d44 --- /dev/null +++ b/application/config/mimes.php @@ -0,0 +1,106 @@ + 'application/mac-binhex40', + 'cpt' => 'application/mac-compactpro', + 'csv' => array('text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel'), + 'bin' => 'application/macbinary', + 'dms' => 'application/octet-stream', + 'lha' => 'application/octet-stream', + 'lzh' => 'application/octet-stream', + 'exe' => array('application/octet-stream', 'application/x-msdownload'), + 'class' => 'application/octet-stream', + 'psd' => 'application/x-photoshop', + 'so' => 'application/octet-stream', + 'sea' => 'application/octet-stream', + 'dll' => 'application/octet-stream', + 'oda' => 'application/oda', + 'pdf' => array('application/pdf', 'application/x-download'), + 'ai' => 'application/postscript', + 'eps' => 'application/postscript', + 'ps' => 'application/postscript', + 'smi' => 'application/smil', + 'smil' => 'application/smil', + 'mif' => 'application/vnd.mif', + 'xls' => array('application/excel', 'application/vnd.ms-excel', 'application/msexcel'), + 'ppt' => array('application/powerpoint', 'application/vnd.ms-powerpoint'), + 'wbxml' => 'application/wbxml', + 'wmlc' => 'application/wmlc', + 'dcr' => 'application/x-director', + 'dir' => 'application/x-director', + 'dxr' => 'application/x-director', + 'dvi' => 'application/x-dvi', + 'gtar' => 'application/x-gtar', + 'gz' => 'application/x-gzip', + 'php' => 'application/x-httpd-php', + 'php4' => 'application/x-httpd-php', + 'php3' => 'application/x-httpd-php', + 'phtml' => 'application/x-httpd-php', + 'phps' => 'application/x-httpd-php-source', + 'js' => 'application/x-javascript', + 'swf' => 'application/x-shockwave-flash', + 'sit' => 'application/x-stuffit', + 'tar' => 'application/x-tar', + 'tgz' => array('application/x-tar', 'application/x-gzip-compressed'), + 'xhtml' => 'application/xhtml+xml', + 'xht' => 'application/xhtml+xml', + 'zip' => array('application/x-zip', 'application/zip', 'application/x-zip-compressed'), + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mpga' => 'audio/mpeg', + 'mp2' => 'audio/mpeg', + 'mp3' => array('audio/mpeg', 'audio/mpg', 'audio/mpeg3', 'audio/mp3'), + 'aif' => 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'aifc' => 'audio/x-aiff', + 'ram' => 'audio/x-pn-realaudio', + 'rm' => 'audio/x-pn-realaudio', + 'rpm' => 'audio/x-pn-realaudio-plugin', + 'ra' => 'audio/x-realaudio', + 'rv' => 'video/vnd.rn-realvideo', + 'wav' => array('audio/x-wav', 'audio/wave', 'audio/wav'), + 'bmp' => array('image/bmp', 'image/x-windows-bmp'), + 'gif' => 'image/gif', + 'jpeg' => array('image/jpeg', 'image/pjpeg'), + 'jpg' => array('image/jpeg', 'image/pjpeg'), + 'jpe' => array('image/jpeg', 'image/pjpeg'), + 'png' => array('image/png', 'image/x-png'), + 'tiff' => 'image/tiff', + 'tif' => 'image/tiff', + 'css' => 'text/css', + 'html' => 'text/html', + 'htm' => 'text/html', + 'shtml' => 'text/html', + 'txt' => 'text/plain', + 'text' => 'text/plain', + 'log' => array('text/plain', 'text/x-log'), + 'rtx' => 'text/richtext', + 'rtf' => 'text/rtf', + 'xml' => 'text/xml', + 'xsl' => 'text/xml', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpe' => 'video/mpeg', + 'qt' => 'video/quicktime', + 'mov' => 'video/quicktime', + 'avi' => 'video/x-msvideo', + 'movie' => 'video/x-sgi-movie', + 'doc' => 'application/msword', + 'docx' => array('application/vnd.openxmlformats-officedocument.wordprocessingml.document', 'application/zip'), + 'xlsx' => array('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip'), + 'word' => array('application/msword', 'application/octet-stream'), + 'xl' => 'application/excel', + 'eml' => 'message/rfc822', + 'json' => array('application/json', 'text/json') + ); + + +/* End of file mimes.php */ +/* Location: ./application/config/mimes.php */ diff --git a/application/config/profiler.php b/application/config/profiler.php new file mode 100644 index 00000000..f8a5b1a1 --- /dev/null +++ b/application/config/profiler.php @@ -0,0 +1,17 @@ + array('grin.gif', '19', '19', 'grin'), + ':lol:' => array('lol.gif', '19', '19', 'LOL'), + ':cheese:' => array('cheese.gif', '19', '19', 'cheese'), + ':)' => array('smile.gif', '19', '19', 'smile'), + ';-)' => array('wink.gif', '19', '19', 'wink'), + ';)' => array('wink.gif', '19', '19', 'wink'), + ':smirk:' => array('smirk.gif', '19', '19', 'smirk'), + ':roll:' => array('rolleyes.gif', '19', '19', 'rolleyes'), + ':-S' => array('confused.gif', '19', '19', 'confused'), + ':wow:' => array('surprise.gif', '19', '19', 'surprised'), + ':bug:' => array('bigsurprise.gif', '19', '19', 'big surprise'), + ':-P' => array('tongue_laugh.gif', '19', '19', 'tongue laugh'), + '%-P' => array('tongue_rolleye.gif', '19', '19', 'tongue rolleye'), + ';-P' => array('tongue_wink.gif', '19', '19', 'tongue wink'), + ':P' => array('raspberry.gif', '19', '19', 'raspberry'), + ':blank:' => array('blank.gif', '19', '19', 'blank stare'), + ':long:' => array('longface.gif', '19', '19', 'long face'), + ':ohh:' => array('ohh.gif', '19', '19', 'ohh'), + ':grrr:' => array('grrr.gif', '19', '19', 'grrr'), + ':gulp:' => array('gulp.gif', '19', '19', 'gulp'), + '8-/' => array('ohoh.gif', '19', '19', 'oh oh'), + ':down:' => array('downer.gif', '19', '19', 'downer'), + ':red:' => array('embarrassed.gif', '19', '19', 'red face'), + ':sick:' => array('sick.gif', '19', '19', 'sick'), + ':shut:' => array('shuteye.gif', '19', '19', 'shut eye'), + ':-/' => array('hmm.gif', '19', '19', 'hmmm'), + '>:(' => array('mad.gif', '19', '19', 'mad'), + ':mad:' => array('mad.gif', '19', '19', 'mad'), + '>:-(' => array('angry.gif', '19', '19', 'angry'), + ':angry:' => array('angry.gif', '19', '19', 'angry'), + ':zip:' => array('zip.gif', '19', '19', 'zipper'), + ':kiss:' => array('kiss.gif', '19', '19', 'kiss'), + ':ahhh:' => array('shock.gif', '19', '19', 'shock'), + ':coolsmile:' => array('shade_smile.gif', '19', '19', 'cool smile'), + ':coolsmirk:' => array('shade_smirk.gif', '19', '19', 'cool smirk'), + ':coolgrin:' => array('shade_grin.gif', '19', '19', 'cool grin'), + ':coolhmm:' => array('shade_hmm.gif', '19', '19', 'cool hmm'), + ':coolmad:' => array('shade_mad.gif', '19', '19', 'cool mad'), + ':coolcheese:' => array('shade_cheese.gif', '19', '19', 'cool cheese'), + ':vampire:' => array('vampire.gif', '19', '19', 'vampire'), + ':snake:' => array('snake.gif', '19', '19', 'snake'), + ':exclaim:' => array('exclaim.gif', '19', '19', 'excaim'), + ':question:' => array('question.gif', '19', '19', 'question') // no comma after last item + + ); + +/* End of file smileys.php */ +/* Location: ./application/config/smileys.php */ \ No newline at end of file diff --git a/application/config/user_agents.php b/application/config/user_agents.php new file mode 100644 index 00000000..e2d3c3af --- /dev/null +++ b/application/config/user_agents.php @@ -0,0 +1,178 @@ + 'Windows Longhorn', + 'windows nt 5.2' => 'Windows 2003', + 'windows nt 5.0' => 'Windows 2000', + 'windows nt 5.1' => 'Windows XP', + 'windows nt 4.0' => 'Windows NT 4.0', + 'winnt4.0' => 'Windows NT 4.0', + 'winnt 4.0' => 'Windows NT', + 'winnt' => 'Windows NT', + 'windows 98' => 'Windows 98', + 'win98' => 'Windows 98', + 'windows 95' => 'Windows 95', + 'win95' => 'Windows 95', + 'windows' => 'Unknown Windows OS', + 'os x' => 'Mac OS X', + 'ppc mac' => 'Power PC Mac', + 'freebsd' => 'FreeBSD', + 'ppc' => 'Macintosh', + 'linux' => 'Linux', + 'debian' => 'Debian', + 'sunos' => 'Sun Solaris', + 'beos' => 'BeOS', + 'apachebench' => 'ApacheBench', + 'aix' => 'AIX', + 'irix' => 'Irix', + 'osf' => 'DEC OSF', + 'hp-ux' => 'HP-UX', + 'netbsd' => 'NetBSD', + 'bsdi' => 'BSDi', + 'openbsd' => 'OpenBSD', + 'gnu' => 'GNU/Linux', + 'unix' => 'Unknown Unix OS' + ); + + +// The order of this array should NOT be changed. Many browsers return +// multiple browser types so we want to identify the sub-type first. +$browsers = array( + 'Flock' => 'Flock', + 'Chrome' => 'Chrome', + 'Opera' => 'Opera', + 'MSIE' => 'Internet Explorer', + 'Internet Explorer' => 'Internet Explorer', + 'Shiira' => 'Shiira', + 'Firefox' => 'Firefox', + 'Chimera' => 'Chimera', + 'Phoenix' => 'Phoenix', + 'Firebird' => 'Firebird', + 'Camino' => 'Camino', + 'Netscape' => 'Netscape', + 'OmniWeb' => 'OmniWeb', + 'Safari' => 'Safari', + 'Mozilla' => 'Mozilla', + 'Konqueror' => 'Konqueror', + 'icab' => 'iCab', + 'Lynx' => 'Lynx', + 'Links' => 'Links', + 'hotjava' => 'HotJava', + 'amaya' => 'Amaya', + 'IBrowse' => 'IBrowse' + ); + +$mobiles = array( + // legacy array, old values commented out + 'mobileexplorer' => 'Mobile Explorer', +// 'openwave' => 'Open Wave', +// 'opera mini' => 'Opera Mini', +// 'operamini' => 'Opera Mini', +// 'elaine' => 'Palm', + 'palmsource' => 'Palm', +// 'digital paths' => 'Palm', +// 'avantgo' => 'Avantgo', +// 'xiino' => 'Xiino', + 'palmscape' => 'Palmscape', +// 'nokia' => 'Nokia', +// 'ericsson' => 'Ericsson', +// 'blackberry' => 'BlackBerry', +// 'motorola' => 'Motorola' + + // Phones and Manufacturers + 'motorola' => "Motorola", + 'nokia' => "Nokia", + 'palm' => "Palm", + 'iphone' => "Apple iPhone", + 'ipad' => "iPad", + 'ipod' => "Apple iPod Touch", + 'sony' => "Sony Ericsson", + 'ericsson' => "Sony Ericsson", + 'blackberry' => "BlackBerry", + 'cocoon' => "O2 Cocoon", + 'blazer' => "Treo", + 'lg' => "LG", + 'amoi' => "Amoi", + 'xda' => "XDA", + 'mda' => "MDA", + 'vario' => "Vario", + 'htc' => "HTC", + 'samsung' => "Samsung", + 'sharp' => "Sharp", + 'sie-' => "Siemens", + 'alcatel' => "Alcatel", + 'benq' => "BenQ", + 'ipaq' => "HP iPaq", + 'mot-' => "Motorola", + 'playstation portable' => "PlayStation Portable", + 'hiptop' => "Danger Hiptop", + 'nec-' => "NEC", + 'panasonic' => "Panasonic", + 'philips' => "Philips", + 'sagem' => "Sagem", + 'sanyo' => "Sanyo", + 'spv' => "SPV", + 'zte' => "ZTE", + 'sendo' => "Sendo", + + // Operating Systems + 'symbian' => "Symbian", + 'SymbianOS' => "SymbianOS", + 'elaine' => "Palm", + 'palm' => "Palm", + 'series60' => "Symbian S60", + 'windows ce' => "Windows CE", + + // Browsers + 'obigo' => "Obigo", + 'netfront' => "Netfront Browser", + 'openwave' => "Openwave Browser", + 'mobilexplorer' => "Mobile Explorer", + 'operamini' => "Opera Mini", + 'opera mini' => "Opera Mini", + + // Other + 'digital paths' => "Digital Paths", + 'avantgo' => "AvantGo", + 'xiino' => "Xiino", + 'novarra' => "Novarra Transcoder", + 'vodafone' => "Vodafone", + 'docomo' => "NTT DoCoMo", + 'o2' => "O2", + + // Fallback + 'mobile' => "Generic Mobile", + 'wireless' => "Generic Mobile", + 'j2me' => "Generic Mobile", + 'midp' => "Generic Mobile", + 'cldc' => "Generic Mobile", + 'up.link' => "Generic Mobile", + 'up.browser' => "Generic Mobile", + 'smartphone' => "Generic Mobile", + 'cellphone' => "Generic Mobile" + ); + +// There are hundreds of bots but these are the most common. +$robots = array( + 'googlebot' => 'Googlebot', + 'msnbot' => 'MSNBot', + 'slurp' => 'Inktomi Slurp', + 'yahoo' => 'Yahoo', + 'askjeeves' => 'AskJeeves', + 'fastcrawler' => 'FastCrawler', + 'infoseek' => 'InfoSeek Robot 1.0', + 'lycos' => 'Lycos' + ); + +/* End of file user_agents.php */ +/* Location: ./application/config/user_agents.php */ \ No newline at end of file diff --git a/application/controllers/CostCenter.php b/application/controllers/CostCenter.php new file mode 100644 index 00000000..dfd77470 --- /dev/null +++ b/application/controllers/CostCenter.php @@ -0,0 +1,240 @@ +load->model('supplier_model'); + $this->isLoggedIn(); + } + /** + * This function used to load the first screen of the user + */ + public function index() + { + $this->global['pageTitle'] = 'Siddharth : Supplier'; + + $this->loadViews("supplierlisting", $this->global, NULL , NULL); + } + + /** + * This function is used to load the Supplier list + */ + function CostListing() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('costcenter_model'); + + $searchText = $this->input->post('searchText'); + $data['searchText'] = $searchText; + + $this->load->library('pagination'); + + $count = $this->costcenter_model->costListingCount($searchText); + + $returns = $this->paginationCompress ( "costListing/", $count, 5 ); + + $data['userRecords'] = $this->costcenter_model->costListing($searchText, $returns["page"], $returns["segment"]); + + $this->global['pageTitle'] = 'Siddharth : Cost Listing'; + + $this->loadViews("costListing", $this->global, $data, NULL); + } + } + /** + * This function is used to load the add new supplier */ + function addcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('supplier_model'); + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : AddNew Supplier'; + + $this->loadViews("addcost", $this->global, NULL); + } + } + + /** + * This function is used to add new user to the system + */ + function addNewcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $PO = $this->input->post('SupplierID'); + + //$this->form_validation->set_rules('CostCenterID','Supplier Name','trim'); + $this->form_validation->set_rules('CostName','Address','trim|required|'); + $this->form_validation->set_rules('Description','Contact Number','trim'); + + + + if($this->form_validation->run() == FALSE) + { + $this->addsupplier(); + } + else + { + $CostName = ucwords(strtolower($this->input->post('CostName'))); + $Description = $this->input->post('Description'); + + + + + $Cost = array('CostName'=>$CostName, 'Description'=>$Description,'createdDate'=>date('Y-m-d H:i:sa')); + + $this->load->model('costcenter_model'); + $result = $this->costcenter_model->addNewcost($Cost); + + if($result > 0) + { + $this->session->set_flashdata('success', 'New PO created successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO Not Create'); + } + + redirect('codeListing'); + } + } + } + /** + * This function is used load user edit information + * @param number $userId : Optional : This is user id + */ + function editOldcost($CostCenterID = NULL) + { + if($this->isAdmin() == TRUE || $CostCenterID == 1) + { + $this->loadThis(); + } + else + { + if($CostCenterID == null) + { + redirect('costListing'); + } + + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'Siddharth : Edit User'; + + $this->loadViews("editOldcost", $this->global, NULL); + } + } + + /** + * This function is used to edit the user information + */ + function editcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + //$PO = $this->input->post('PO'); + + $this->form_validation->set_rules('CostName','Cost Name','trim|required|'); + $this->form_validation->set_rules('Description','Description','trim|required|'); + + + if($this->form_validation->run() == FALSE) + { + $this->editPO(); + } + else + { + $CostName = ucwords(strtolower($this->input->post('CostName'))); + $Description = $this->input->post('Description'); + + $Cost = array('CostName'=>$CostName, 'Description'=>$Description,'createdDtm'=>date('Y-m-d H:i:sa')); + + + + $Cost = array(); + + $result = $this->costcenter_model->editcost($Cost, $CostCentreID); + + if($result == true) + { + $this->session->set_flashdata('success', 'PO updated successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO updation failed'); + } + + redirect('costListing'); + } + } + } + + /** + * This function is used to delete the user using userId + * @return boolean $result : TRUE / FALSE + */ + function deleteUser() + { + if($this->isAdmin() == TRUE) + { + echo(json_encode(array('status'=>'access'))); + } + else + { + $userId = $this->input->post('userId'); + $userInfo = array('isDeleted'=>1,'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->deleteUser($userId, $userInfo); + + if ($result > 0) { echo(json_encode(array('status'=>TRUE))); } + else { echo(json_encode(array('status'=>FALSE))); } + } + } + + + function pageNotFound() + { + $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found'; + + $this->loadViews("404", $this->global, NULL, NULL); + } +} + +?> \ No newline at end of file diff --git a/application/controllers/assetdetails.php b/application/controllers/assetdetails.php new file mode 100644 index 00000000..caa8d950 --- /dev/null +++ b/application/controllers/assetdetails.php @@ -0,0 +1,240 @@ +load->model('assetdetails_model'); + $this->isLoggedIn(); + } + /** + * This function used to load the first screen of the user + */ + public function index() + { + $this->global['pageTitle'] = 'Siddharth : Asset Details'; + + $this->loadViews("assetlisting", $this->global, NULL , NULL); + } + + /** + * This function is used to load the Supplier list + */ + function assetListing() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('costcenter_model'); + + $searchText = $this->input->post('searchText'); + $data['searchText'] = $searchText; + + $this->load->library('pagination'); + + $count = $this->costcenter_model->costListingCount($searchText); + + $returns = $this->paginationCompress ( "assetListing/", $count, 5 ); + + $data['userRecords'] = $this->assetdetails_model->assetListing($searchText, $returns["page"], $returns["segment"]); + + $this->global['pageTitle'] = 'Siddharth : Cost Listing'; + + $this->loadViews("costListing", $this->global, $data, NULL); + } + } + /** + * This function is used to load the add new supplier */ + function addcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('supplier_model'); + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : AddNew Supplier'; + + $this->loadViews("addcost", $this->global, NULL); + } + } + + /** + * This function is used to add new user to the system + */ + function addNewcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $PO = $this->input->post('SupplierID'); + + //$this->form_validation->set_rules('CostCenterID','Supplier Name','trim'); + $this->form_validation->set_rules('CostName','Address','trim|required|'); + $this->form_validation->set_rules('Description','Contact Number','trim'); + + + + if($this->form_validation->run() == FALSE) + { + $this->addsupplier(); + } + else + { + $CostName = ucwords(strtolower($this->input->post('CostName'))); + $Description = $this->input->post('Description'); + + + + + $Cost = array('CostName'=>$CostName, 'Description'=>$Description,'createdDate'=>date('Y-m-d H:i:sa')); + + $this->load->model('costcenter_model'); + $result = $this->costcenter_model->addNewcost($Cost); + + if($result > 0) + { + $this->session->set_flashdata('success', 'New PO created successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO Not Create'); + } + + redirect('codeListing'); + } + } + } + /** + * This function is used load user edit information + * @param number $userId : Optional : This is user id + */ + function editOldcost($CostCenterID = NULL) + { + if($this->isAdmin() == TRUE || $CostCenterID == 1) + { + $this->loadThis(); + } + else + { + if($CostCenterID == null) + { + redirect('costListing'); + } + + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'Siddharth : Edit User'; + + $this->loadViews("editOldcost", $this->global, NULL); + } + } + + /** + * This function is used to edit the user information + */ + function editcost() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + //$PO = $this->input->post('PO'); + + $this->form_validation->set_rules('CostName','Cost Name','trim|required|'); + $this->form_validation->set_rules('Description','Description','trim|required|'); + + + if($this->form_validation->run() == FALSE) + { + $this->editPO(); + } + else + { + $CostName = ucwords(strtolower($this->input->post('CostName'))); + $Description = $this->input->post('Description'); + + $Cost = array('CostName'=>$CostName, 'Description'=>$Description,'createdDtm'=>date('Y-m-d H:i:sa')); + + + + $Cost = array(); + + $result = $this->costcenter_model->editcost($Cost, $CostCentreID); + + if($result == true) + { + $this->session->set_flashdata('success', 'PO updated successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO updation failed'); + } + + redirect('costListing'); + } + } + } + + /** + * This function is used to delete the user using userId + * @return boolean $result : TRUE / FALSE + */ + function deleteUser() + { + if($this->isAdmin() == TRUE) + { + echo(json_encode(array('status'=>'access'))); + } + else + { + $userId = $this->input->post('userId'); + $userInfo = array('isDeleted'=>1,'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->deleteUser($userId, $userInfo); + + if ($result > 0) { echo(json_encode(array('status'=>TRUE))); } + else { echo(json_encode(array('status'=>FALSE))); } + } + } + + + function pageNotFound() + { + $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found'; + + $this->loadViews("404", $this->global, NULL, NULL); + } +} + +?> \ No newline at end of file diff --git a/application/controllers/error.php b/application/controllers/error.php new file mode 100644 index 00000000..feb605b3 --- /dev/null +++ b/application/controllers/error.php @@ -0,0 +1,46 @@ +isLoggedIn(); + } + + /** + * This function used to check the user is logged in or not + */ + function isLoggedIn() + { + $isLoggedIn = $this->session->userdata('isLoggedIn'); + + if(!isset($isLoggedIn) || $isLoggedIn != TRUE) + { + $this->load->view('login'); + } + else + { + redirect('pageNotFound'); + } + } +} + +?> \ No newline at end of file diff --git a/application/controllers/index.html b/application/controllers/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/controllers/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/controllers/login.php b/application/controllers/login.php new file mode 100644 index 00000000..0264e69a --- /dev/null +++ b/application/controllers/login.php @@ -0,0 +1,247 @@ +load->model('login_model'); + } + + /** + * Index Page for this controller. + */ + public function index() + { + $this->isLoggedIn(); + } + + /** + * This function used to check the user is logged in or not + */ + function isLoggedIn() + { + $isLoggedIn = $this->session->userdata('isLoggedIn'); + + if(!isset($isLoggedIn) || $isLoggedIn != TRUE) + { + $this->load->view('login'); + } + else + { + redirect('/dashboard'); + } + } + + + /** + * This function used to logged in user + */ + public function loginMe() + { + $this->load->library('form_validation'); + + $this->form_validation->set_rules('email', 'Email', 'required|valid_email|max_length[128]|xss_clean|trim'); + $this->form_validation->set_rules('password', 'Password', 'required|max_length[32]|'); + + if($this->form_validation->run() == FALSE) + { + $this->index(); + } + else + { + $email = $this->input->post('email'); + $password = $this->input->post('password'); + + $result = $this->login_model->loginMe($email, $password); + + if(count($result) > 0) + { + foreach ($result as $res) + { + $sessionArray = array('userId'=>$res->userId, + 'role'=>$res->roleId, + 'roleText'=>$res->role, + 'name'=>$res->name, + 'isLoggedIn' => TRUE + ); + + $this->session->set_userdata($sessionArray); + + redirect('/dashboard'); + } + } + else + { + $this->session->set_flashdata('error', 'Email or password mismatch'); + + redirect('/login'); + } + } + } + + /** + * This function used to load forgot password view + */ + function forgotPassword() + { + $this->load->view('forgotPassword'); + } + + /** + * This function used to generate reset password request link + */ + function resetPasswordUser() + { + $status = ''; + + $this->load->library('form_validation'); + + $this->form_validation->set_rules('login_email','Email','trim|required|valid_email|xss_clean'); + + if($this->form_validation->run() == FALSE) + { + $this->forgetPasswordUser(); + } + else + { + $email = $this->input->post('login_email'); + + if($this->user_model->checkEmailExist($email)) + { + $encoded_email = urlencode($email); + + $this->load->helper('string'); + $data['email'] = $email; + $data['activation_id'] = random_string('alnum',15); + $data['created_dtm'] = date('Y-m-d H:i:s'); + $data['agent'] = $this->getBrowserAgent(); + $data['client_ip'] = $this->input->ip_address(); + + $save = $this->user_model->resetPasswordUser($data); + + if($save) + { + $config['protocol'] = 'sendmail'; + $config['mailpath'] = '/usr/sbin/sendmail'; + $config['charset'] = 'UTF-8'; + $config['wordwrap'] = TRUE; + $config['mailtype'] = 'html'; + + $this->load->library('email', $config); + + $data1['reset_link'] = base_url() . "resetPasswordConfirmUser/" . $data['activation_id'] . "/" . $encoded_email; + $data1['info'] = $this->user_model->getCustomerInfoByEmail($email); + + $this->email->from(ADMIN_EMAIL_ID, WEBSITE); + $this->email->to($email); + $this->email->subject(RESET_PASSWORD_EMAIL_SUBJECT); + $this->email->message($this->load->view('email', $data1, TRUE)); + + if ($this->email->send()) + { + $status = 'send'; + } + else + { + $status = 'notsend'; + } + } + else + { + $status = 'unable'; + } + } + else + { + $status = 'invalid'; + } + + echo json_encode(array('status'=>$status)); + } + } + + // This function used to reset the password + function resetPasswordConfirmUser() + { + + // Get email and activation code from URL values at index 3-4 + $email = urldecode($this->uri->segment(3)); + $activation_id = $this->uri->segment(2); + + // Check activation id in database + $is_correct = $this->user_model->checkActivationDetails($email, $activation_id); + + $data['email'] = $email; + $data['activation_code'] = $activation_id; + + if ($is_correct == 1) + { + $this->load->view('includes/header'); + $this->load->view('new_password', $data); + $this->load->view('includes/footer'); + } + else + { + redirect('user'); + } + } + + // This function used to create new password + function createPasswordUser() + { + $status = ''; + $message = ''; + + $this->load->library('form_validation'); + + $this->form_validation->set_rules('password','New Password','required|max_length[20]'); + $this->form_validation->set_rules('cpassword','New Re-Password','trim|required|matches[password]|max_length[20]'); + + if($this->form_validation->run() == FALSE) + { + echo json_encode(array('status' => 'validation', 'message' => 'Please validate the fields')); + } + else + { + $password = $this->input->post('password'); + $cpassword = $this->input->post('cpassword'); + $email = $this->input->post('email'); + $activation_id = $this->input->post('activation_id'); + + // Check activation id in database + $is_correct = $this->user_model->checkActivationDetails($email, $activation_id); + + if(($is_correct == 1) && ($password == $cpassword)) + { + $data = array('email_id'=>$email, 'password'=>$password); + + $this->user_model->createPasswordUser($data); + + $status = 'success'; + $message = 'Password changed successfully'; + } + else + { + $status = 'error'; + $message = 'Password changed failed'; + } + + echo json_encode(array('status'=>$status, 'message'=>$message)); + } + } + + +} + +?> \ No newline at end of file diff --git a/application/controllers/pages.php b/application/controllers/pages.php new file mode 100644 index 00000000..6d5bf11b --- /dev/null +++ b/application/controllers/pages.php @@ -0,0 +1,161 @@ +load->database(); + // $this->load->helper('url'); + $this->isLoggedIn(); + $this->load->library('grocery_CRUD'); + + } + + /* This function used to show the main page of the screen */ + public function _controller_output($output = null) + { $this->load->view('includes/header'); + $this->load->view('Mainpage',(array)$output); + $this->load->view('includes/footer'); + } + + + + + public function index() + { + $this->_controller_output((object)array('output' => '' , 'js_files' => array() , 'css_files' => array())); + } + + public function SupplierDetails() + { + + + + try{ + $crud = new grocery_CRUD(); + + + $crud->set_table('T_SupplierDetailsN'); + $crud->set_subject('Supplier Details'); + $crud->required_fields('SupplierName','Address','Contactnumber','AlternateContactNumber','EmailAddress','TIN','PAN'); + $crud->columns('SupplierID','SupplierName','Address','Contactnumber','AlternateContactNumber','EmailAddress','TIN','PAN','CreatedDate'); + $crud->field_type('CreatedDate','hidden', date("Y-m-d H:i:s")); + $crud->field_type('SupplierID','hidden'); + $output = $crud->render(); + + + $this->_controller_output($output); + + }catch(Exception $e){ + show_error($e->getMessage().' --- '.$e->getTraceAsString()); + } + } + + + function RawMaterial() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('Grocery_crud_model'); + //$data['SupplierName'] = $this->Grocery_crud_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : Add New PO'; + + $this->loadViews("Mainpage", $this->global, $data, NULL); + } + + try{ + $crud = new grocery_CRUD(); + + + $crud->set_table('T_RawMaterialDetailsN'); + $crud->set_subject('RawMaterialDetails'); + $crud->required_fields('MaterialName','MaterialType','SupplierID'); + $crud->columns('MaterialCode','MaterialName','MaterialType','SupplierID','CreatedDate'); + $crud->field_type('CreatedDate','hidden', date("Y-m-d H:i:s")); + $crud->field_type('MaterialCode','hidden'); + $output = $crud->render(); + + $this->_controller_output($output); + + }catch(Exception $e){ + show_error($e->getMessage().' --- '.$e->getTraceAsString()); + } + } + + + public function AssetDetails() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('Grocery_crud_model'); + //$data['SupplierName'] = $this->Grocery_crud_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : Add New PO'; + + $this->loadViews("Mainpage", $this->global, NULL); + } + try{ + $crud = new grocery_CRUD(); + + $now = new DateTime(); + echo $now->format('Y-m-d H:i:s'); + echo $now->getTimestamp(); + $crud->set_table('T_AssetDetails'); + $crud->set_subject('AssetDetails'); + $crud->required_fields('Asset_Name','Description','Department','Location','AssetOwner','SupplierName','DateOfPurchase','DateOfCommission','SupportVendor','SupportFrom','SupportTo','CreatedDate'); + $crud->columns('Asset_Code','Asset_Name','Description','Department','Location','AssetOwner','SupplierName','DateOfPurchase','DateOfCommission','SupportVendor','SupportFrom','SupportTo','CreatedDate'); + $crud->field_type('CreatedDate','hidden', date("Y-m-d H:i:s")); + $crud->field_type('Asset_Code','hidden'); + $output = $crud->render(); + + $this->_controller_output($output); + // $this->load->view('AssetDetails.php',(array)$output); + + }catch(Exception $e){ + show_error($e->getMessage().' --- '.$e->getTraceAsString()); + } + + } +public function CostDetails() + { + try{ + $crud = new grocery_CRUD(); + + + $crud->set_table('T_CostCentre'); + $crud->set_subject('CostDetails'); + $crud->required_fields('CostName','Description'); + $crud->columns('CostCentreID','CostName','Description','CreatedDate'); + $crud->field_type('CostCentreID','hidden'); + $crud->field_type('CreatedDate','hidden', date("Y-m-d H:i:s")); + $output = $crud->render(); + + + $this->_controller_output($output); + // $this->load->view('AssetDetails.php',(array)$output); + + }catch(Exception $e){ + show_error($e->getMessage().' --- '.$e->getTraceAsString()); + } + + } + + + + +} \ No newline at end of file diff --git a/application/controllers/purchaseorder.php b/application/controllers/purchaseorder.php new file mode 100644 index 00000000..d88c0b10 --- /dev/null +++ b/application/controllers/purchaseorder.php @@ -0,0 +1,295 @@ +load->model('purchaseorder_model'); + $this->isLoggedIn(); + } + + /** + * This function used to load the first screen of the user + */ + public function index() + { + $this->global['pageTitle'] = 'Siddharth : AddPO'; + + $this->loadViews("addPO", $this->global, NULL , NULL); + } + + /** + * This function is used to load the purchaseorder list + */ + function purchaseorderListing() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('purchaseorder_model'); + + $searchText = $this->input->post('searchText'); + $data['searchText'] = $searchText; + + $this->load->library('pagination'); + + $count = $this->purchaseorder_model->purchaseorderListingCount($searchText); + + $returns = $this->paginationCompress ( "purchaseorderListing/", $count, 5 ); + + $data['userRecords'] = $this->purchaseorder_model->purchaseorderListing($searchText, $returns["page"], $returns["segment"]); + + $this->global['pageTitle'] = 'Siddharth : PO Listing'; + + $this->loadViews("POlist", $this->global, $data, NULL); + } + } + + + /** + * This function is used to load the add new PO */ + function addPO() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('purchaseorder_model'); + $data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + $data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : AddNew PO'; + + $this->loadViews("addPO", $this->global, $data, NULL); + } + } + + /** + * This function is used to check whether email already exist or not + + function checkEmailExists() + { + $userId = $this->input->post("userId"); + $email = $this->input->post("email"); + + if(empty($userId)){ + $result = $this->user_model->checkEmailExists($email); + } else { + $result = $this->user_model->checkEmailExists($email, $userId); + } + + if(empty($result)){ echo("true"); } + else { echo("false"); } + }*/ + + /** + * This function is used to add new user to the system + */ + function addNewPO() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $PO = $this->input->post('PO'); + + $this->form_validation->set_rules('PO_Type','PO Type','trim|required|'); + $this->form_validation->set_rules('PO_Date','PO Date','trim|required|'); + $this->form_validation->set_rules('SupplierID','SupplierID','trim|required|'); + $this->form_validation->set_rules('SpecialOrder','Special Requirement of order','|max_length[20]'); + $this->form_validation->set_rules('role','UserID','trim||numeric'); + $this->form_validation->set_rules('re_email','Requester email','trim|valid_email|xss_clean|max_length[128]'); + $this->form_validation->set_rules('re_phone','Requester ph','required|min_length[10]|xss_clean'); + $this->form_validation->set_rules('re_Date','Requested Date','required'); + $this->form_validation->set_rules('bug_manager','Budget Manager'); + $this->form_validation->set_rules('bud_manager_de','Budget Manager Department','trim'); + $this->form_validation->set_rules('Pur_category','Purchasing Category','trim|required'); + + if($this->form_validation->run() == FALSE) + { + $this->addPO(); + } + else + { + $POType = ucwords(strtolower($this->input->post('PO_Type'))); + $PODate = $this->input->post('PO_Date'); + $SupplierID = $this->input->post('SupplierID'); + $SpecialOrder = $this->input->post('SpecialOrder'); + $role = $this->input->post('role'); + $re_email = $this->input->post('re_email'); + $re_phone = $this->input->post('re_phone'); + $re_Date = $this->input->post('re_Date'); + $bug_manager = $this->input->post('bug_manager'); + $bud_manager_de = $this->input->post('bud_manager_de'); + $Pur_category = $this->input->post('Pur_category'); + + + $POInfo = array('POType'=>$POType, 'PODate'=>$PODate, 'SupplierID'=>$SupplierID, 'SpecialOrder'=> $SpecialOrder,'UserID'=>$role,'RequestedDate'=>$re_Date,'RequesterEmail'=>$re_email,'RequesterPh'=>$re_phone, 'PurchasingCategory'=>$Pur_category,'BudgetManager'=>$bug_manager,'BudgetManagerDepartment'=>$bud_manager_de,'createdBy'=>$this->vendorId, 'createdDtm'=>date('Y-m-d H:i:sa')); + + $this->load->model('purchaseorder_model'); + $result = $this->purchaseorder_model->addNewPO($POInfo); + + if($result > 0) + { + $this->session->set_flashdata('success', 'New PO created successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO Not Create'); + } + + redirect('addPO'); + } + } + } + + + /** + * This function is used load user edit information + * @param number $userId : Optional : This is user id + */ + function editOldPO($PO = NULL) + { + if($this->isAdmin() == TRUE || $PO == 1) + { + $this->loadThis(); + } + else + { + if($PO == null) + { + redirect('purchaseorderListing'); + } + + $data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + $data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'Siddharth : Edit User'; + + $this->loadViews("editOldPO", $this->global, $data, NULL); + } + } + + + /** + * This function is used to edit the user information + */ + function editPO() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $PO = $this->input->post('PO'); + + $this->form_validation->set_rules('POType','PO Type','trim|required|'); + $this->form_validation->set_rules('PODate','PO Date','trim|required|'); + $this->form_validation->set_rules('SupplierID','SupplierID','trim|required|'); + $this->form_validation->set_rules('SpecialOrder','Special Requirement of order','|max_length[20]'); + $this->form_validation->set_rules('role','UserID','trim||numeric'); + $this->form_validation->set_rules('reemail','Requester email','trim|valid_email|xss_clean|max_length[128]'); + $this->form_validation->set_rules('rephone','Requester ph','required|min_length[10]|xss_clean'); + $this->form_validation->set_rules('reDate','Requested Date','required'); + $this->form_validation->set_rules('budmanager','Budget Manager'); + $this->form_validation->set_rules('budmanagerde','Budget Manager Department','trim'); + $this->form_validation->set_rules('PurchasingCategory','Purchasing Category','trim'); + + if($this->form_validation->run() == FALSE) + { + $this->editPO(); + } + else + { + $POType = ucwords(strtolower($this->input->post('POType'))); + $PODate = $this->input->post('PODate'); + $SupplierID = $this->input->post('SupplierID'); + $SpecialOrder = $this->input->post('SpecialOrder'); + $role = $this->input->post('role'); + $reemail = $this->input->post('reemail'); + $rephone = $this->input->post('rephone'); + $reDate = $this->input->post('reDate'); + $budmanager = $this->input->post('budmanager'); + $budmanagerde = $this->input->post('budmanagerde'); + $Purcategory = $this->input->post('PurchasingCategory'); + + + $POInfo = array('POType'=>$POType, 'PODate'=>$PODate, 'SupplierID'=>$SupplierID, 'SpecialOrder'=> $SpecialOrder,'UserID'=>$role,'RequestedDate'=>$reDate,'RequesterEmail'=>$reemail,'RequesterPh'=>$rephone, 'PurchasingCategory'=>$Purcategory,'BudgetManager'=>$budmanager,'BudgetManagerDepartment'=>$budmanagerde,'createdBy'=>$this->vendorId, 'createdDtm'=>date('Y-m-d H:i:sa')); + + $POInfo = array(); + + $result = $this->purchaseorder_model->editPO($POInfo, $PO); + + if($result == true) + { + $this->session->set_flashdata('success', 'PO updated successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO updation failed'); + } + + redirect('purchaseorderListing'); + } + } + } + + + + /** + * This function is used to delete the user using userId + * @return boolean $result : TRUE / FALSE + + function deleteUser() + { + if($this->isAdmin() == TRUE) + { + echo(json_encode(array('status'=>'access'))); + } + else + { + $userId = $this->input->post('userId'); + $userInfo = array('isDeleted'=>1,'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->deleteUser($userId, $userInfo); + + if ($result > 0) { echo(json_encode(array('status'=>TRUE))); } + else { echo(json_encode(array('status'=>FALSE))); } + } + }*/ + + + function pageNotFound() + { + $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found'; + + $this->loadViews("404", $this->global, NULL, NULL); + } +} + +?> \ No newline at end of file diff --git a/application/controllers/supplier.php b/application/controllers/supplier.php new file mode 100644 index 00000000..2a6c2db9 --- /dev/null +++ b/application/controllers/supplier.php @@ -0,0 +1,263 @@ +load->model('supplier_model'); + $this->isLoggedIn(); + } + /** + * This function used to load the first screen of the user + */ + public function index() + { + $this->global['pageTitle'] = 'Siddharth : Supplier'; + + $this->loadViews("supplierlisting", $this->global, NULL , NULL); + } + + /** + * This function is used to load the Supplier list + */ + function supplierListing() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('supplier_model'); + + $searchText = $this->input->post('searchText'); + $data['searchText'] = $searchText; + + $this->load->library('pagination'); + + $count = $this->supplier_model->supplierListingCount($searchText); + + $returns = $this->paginationCompress ( "supplierListing/", $count, 5 ); + + $data['userRecords'] = $this->supplier_model->supplierListing($searchText, $returns["page"], $returns["segment"]); + + $this->global['pageTitle'] = 'Siddharth : Supplier Listing'; + + $this->loadViews("supplierListing", $this->global, $data, NULL); + } + } + /** + * This function is used to load the add new supplier */ + function addsupplier() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('supplier_model'); + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'siddharth : AddNew Supplier'; + + $this->loadViews("addsupplier", $this->global, NULL); + } + } + + /** + * This function is used to add new user to the system + */ + function addNewsupplier() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $PO = $this->input->post('SupplierID'); + + $this->form_validation->set_rules('SupplierName','Supplier Name','trim'); + $this->form_validation->set_rules('Address','Address','trim|required|'); + $this->form_validation->set_rules('ContactNumber','Contact Number','trim||numeric'); + $this->form_validation->set_rules('AlternateContactNumber','Alternate Contact Number','trim||numeric'); + $this->form_validation->set_rules('EmailAddress','Email Address|valid_email|xss_clean|max_length[128]'); + $this->form_validation->set_rules('TIN','TIN','trim|required'); + $this->form_validation->set_rules('PAN','PAN','required'); + + + if($this->form_validation->run() == FALSE) + { + $this->addsupplier(); + } + else + { + $SupplierName = ucwords(strtolower($this->input->post('SupplierName'))); + $Address = $this->input->post('Address'); + $ContactNumber = $this->input->post('ContactNumber'); + $AlternateContactNumber = $this->input->post('AlternateContactNumber'); + $EmailAddress = $this->input->post('EmailAddress'); + $TIN = $this->input->post('TIN'); + $PAN = $this->input->post('PAN'); + + + + $supplier = array('SupplierName'=>$SupplierName, 'Address'=>$Address, 'ContactNumber'=>$ContactNumber, 'AlternateContactNumber'=> $AlternateContactNumber,'EmailAddress'=>$EmailAddress,'TIN'=>$TIN,'PAN'=>$PAN,'createdDate'=>date('Y-m-d H:i:sa')); + + $this->load->model('supplier_model'); + $result = $this->supplier_model->addNewsupplier($supplier); + + if($result > 0) + { + $this->session->set_flashdata('success', 'New PO created successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO Not Create'); + } + + redirect('supplierlisting'); + } + } + } + /** + * This function is used load user edit information + * @param number $userId : Optional : This is user id + */ + function editOldsupplier($supplierID = NULL) + { + if($this->isAdmin() == TRUE || $supplierID == 1) + { + $this->loadThis(); + } + else + { + if($supplierID == null) + { + redirect(''); + } + + //$data['SupplierName'] = $this->purchaseorder_model->getSupplierName(); + //$data['users'] = $this->purchaseorder_model->getusers(); + + $this->global['pageTitle'] = 'Siddharth : Edit User'; + + $this->loadViews("editOldsupplier", $this->global, NULL); + } + } + + /** + * This function is used to edit the user information + */ + function editsupplier() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $PO = $this->input->post('PO'); + + $this->form_validation->set_rules('POType','PO Type','trim|required|'); + $this->form_validation->set_rules('PODate','PO Date','trim|required|'); + $this->form_validation->set_rules('SupplierID','SupplierID','trim|required|'); + $this->form_validation->set_rules('SpecialOrder','Special Requirement of order','|max_length[20]'); + $this->form_validation->set_rules('role','UserID','trim||numeric'); + $this->form_validation->set_rules('reemail','Requester email','trim|valid_email|xss_clean|max_length[128]'); + $this->form_validation->set_rules('rephone','Requester ph','required|min_length[10]|xss_clean'); + $this->form_validation->set_rules('reDate','Requested Date','required'); + $this->form_validation->set_rules('budmanager','Budget Manager'); + $this->form_validation->set_rules('budmanagerde','Budget Manager Department','trim'); + $this->form_validation->set_rules('PurchasingCategory','Purchasing Category','trim'); + + if($this->form_validation->run() == FALSE) + { + $this->editPO(); + } + else + { + $POType = ucwords(strtolower($this->input->post('POType'))); + $PODate = $this->input->post('PODate'); + $SupplierID = $this->input->post('SupplierID'); + $SpecialOrder = $this->input->post('SpecialOrder'); + $role = $this->input->post('role'); + $reemail = $this->input->post('reemail'); + $rephone = $this->input->post('rephone'); + $reDate = $this->input->post('reDate'); + $budmanager = $this->input->post('budmanager'); + $budmanagerde = $this->input->post('budmanagerde'); + $Purcategory = $this->input->post('PurchasingCategory'); + + + $supplier = array('POType'=>$POType, 'PODate'=>$PODate, 'SupplierID'=>$SupplierID, 'SpecialOrder'=> $SpecialOrder,'UserID'=>$role,'RequestedDate'=>$reDate,'RequesterEmail'=>$reemail,'RequesterPh'=>$rephone, 'PurchasingCategory'=>$Purcategory,'BudgetManager'=>$budmanager,'BudgetManagerDepartment'=>$budmanagerde,'createdBy'=>$this->vendorId, 'createdDtm'=>date('Y-m-d H:i:sa')); + + $supplier = array(); + + $result = $this->supplier_model->editPO($supplier, $supplierID); + + if($result == true) + { + $this->session->set_flashdata('success', 'PO updated successfully'); + } + else + { + $this->session->set_flashdata('error', 'PO updation failed'); + } + + redirect('supplierListing'); + } + } + } + + /** + * This function is used to delete the user using userId + * @return boolean $result : TRUE / FALSE + */ + function deleteUser() + { + if($this->isAdmin() == TRUE) + { + echo(json_encode(array('status'=>'access'))); + } + else + { + $userId = $this->input->post('userId'); + $userInfo = array('isDeleted'=>1,'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->deleteUser($userId, $userInfo); + + if ($result > 0) { echo(json_encode(array('status'=>TRUE))); } + else { echo(json_encode(array('status'=>FALSE))); } + } + } + + + function pageNotFound() + { + $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found'; + + $this->loadViews("404", $this->global, NULL, NULL); + } +} + +?> \ No newline at end of file diff --git a/application/controllers/user.php b/application/controllers/user.php new file mode 100644 index 00000000..afff6310 --- /dev/null +++ b/application/controllers/user.php @@ -0,0 +1,331 @@ +load->model('user_model'); + $this->isLoggedIn(); + } + + /** + * This function used to load the first screen of the user + */ + public function index() + { + $this->global['pageTitle'] = 'Siddharth : Dashboard'; + + $this->loadViews("dashboard", $this->global, NULL , NULL); + } + + /** + * This function is used to load the user list + */ + function userListing() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('user_model'); + + $searchText = $this->input->post('searchText'); + $data['searchText'] = $searchText; + + $this->load->library('pagination'); + + $count = $this->user_model->userListingCount($searchText); + + $returns = $this->paginationCompress ( "userListing/", $count, 5 ); + + $data['userRecords'] = $this->user_model->userListing($searchText, $returns["page"], $returns["segment"]); + + $this->global['pageTitle'] = 'CodeInsect : User Listing'; + + $this->loadViews("users", $this->global, $data, NULL); + } + } + + + /** + * This function is used to load the add new form + */ + function addNew() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->model('user_model'); + $data['roles'] = $this->user_model->getUserRoles(); + + $this->global['pageTitle'] = 'CodeInsect : Add New User'; + + $this->loadViews("addNew", $this->global, $data, NULL); + } + } + + /** + * This function is used to check whether email already exist or not + */ + function checkEmailExists() + { + $userId = $this->input->post("userId"); + $email = $this->input->post("email"); + + if(empty($userId)){ + $result = $this->user_model->checkEmailExists($email); + } else { + $result = $this->user_model->checkEmailExists($email, $userId); + } + + if(empty($result)){ echo("true"); } + else { echo("false"); } + } + + /** + * This function is used to add new user to the system + */ + function addNewUser() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $this->form_validation->set_rules('fname','Full Name','trim|required|max_length[128]|xss_clean'); + $this->form_validation->set_rules('email','Email','trim|required|valid_email|xss_clean|max_length[128]'); + $this->form_validation->set_rules('password','Password','required|max_length[20]'); + $this->form_validation->set_rules('cpassword','Confirm Password','trim|required|matches[password]|max_length[20]'); + $this->form_validation->set_rules('role','Role','trim|required|numeric'); + $this->form_validation->set_rules('mobile','Mobile Number','required|min_length[10]|xss_clean'); + + if($this->form_validation->run() == FALSE) + { + $this->addNew(); + } + else + { + $name = ucwords(strtolower($this->input->post('fname'))); + $email = $this->input->post('email'); + $password = $this->input->post('password'); + $roleId = $this->input->post('role'); + $mobile = $this->input->post('mobile'); + + $userInfo = array('email'=>$email, 'password'=>getHashedPassword($password), 'roleId'=>$roleId, 'name'=> $name, + 'mobile'=>$mobile, 'createdBy'=>$this->vendorId, 'createdDtm'=>date('Y-m-d H:i:sa')); + + $this->load->model('user_model'); + $result = $this->user_model->addNewUser($userInfo); + + if($result > 0) + { + $this->session->set_flashdata('success', 'New User created successfully'); + } + else + { + $this->session->set_flashdata('error', 'User creation failed'); + } + + redirect('addNew'); + } + } + } + + + /** + * This function is used load user edit information + * @param number $userId : Optional : This is user id + */ + function editOld($userId = NULL) + { + if($this->isAdmin() == TRUE || $userId == 1) + { + $this->loadThis(); + } + else + { + if($userId == null) + { + redirect('userListing'); + } + + $data['roles'] = $this->user_model->getUserRoles(); + $data['userInfo'] = $this->user_model->getUserInfo($userId); + + $this->global['pageTitle'] = 'Siddharth : Edit User'; + + $this->loadViews("editOld", $this->global, $data, NULL); + } + } + + + /** + * This function is used to edit the user information + */ + function editUser() + { + if($this->isAdmin() == TRUE) + { + $this->loadThis(); + } + else + { + $this->load->library('form_validation'); + + $userId = $this->input->post('userId'); + + $this->form_validation->set_rules('fname','Full Name','trim|required|max_length[128]|xss_clean'); + $this->form_validation->set_rules('email','Email','trim|required|valid_email|xss_clean|max_length[128]'); + $this->form_validation->set_rules('password','Password','matches[cpassword]|max_length[20]'); + $this->form_validation->set_rules('cpassword','Confirm Password','matches[password]|max_length[20]'); + $this->form_validation->set_rules('role','Role','trim|required|numeric'); + $this->form_validation->set_rules('mobile','Mobile Number','required|min_length[10]|xss_clean'); + + if($this->form_validation->run() == FALSE) + { + $this->editOld($userId); + } + else + { + $name = ucwords(strtolower($this->input->post('fname'))); + $email = $this->input->post('email'); + $password = $this->input->post('password'); + $roleId = $this->input->post('role'); + $mobile = $this->input->post('mobile'); + + $userInfo = array(); + + if(empty($password)) + { + $userInfo = array('email'=>$email, 'roleId'=>$roleId, 'name'=>$name, + 'mobile'=>$mobile, 'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + } + else + { + $userInfo = array('email'=>$email, 'password'=>getHashedPassword($password), 'roleId'=>$roleId, + 'name'=>ucwords($name), 'mobile'=>$mobile, 'updatedBy'=>$this->vendorId, + 'updatedDtm'=>date('Y-m-d H:i:sa')); + } + + $result = $this->user_model->editUser($userInfo, $userId); + + if($result == true) + { + $this->session->set_flashdata('success', 'User updated successfully'); + } + else + { + $this->session->set_flashdata('error', 'User updation failed'); + } + + redirect('userListing'); + } + } + } + + + /** + * This function is used to delete the user using userId + * @return boolean $result : TRUE / FALSE + */ + function deleteUser() + { + if($this->isAdmin() == TRUE) + { + echo(json_encode(array('status'=>'access'))); + } + else + { + $userId = $this->input->post('userId'); + $userInfo = array('isDeleted'=>1,'updatedBy'=>$this->vendorId, 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->deleteUser($userId, $userInfo); + + if ($result > 0) { echo(json_encode(array('status'=>TRUE))); } + else { echo(json_encode(array('status'=>FALSE))); } + } + } + + /** + * This function is used to load the change password screen + */ + function loadChangePass() + { + $this->global['pageTitle'] = 'CodeInsect : Change Password'; + + $this->loadViews("changePassword", $this->global, NULL, NULL); + } + + + /** + * This function is used to change the password of the user + */ + function changePassword() + { + $this->load->library('form_validation'); + + $this->form_validation->set_rules('oldPassword','Old password','required|max_length[20]'); + $this->form_validation->set_rules('newPassword','New password','required|max_length[20]'); + $this->form_validation->set_rules('cNewPassword','Confirm new password','required|matches[newPassword]|max_length[20]'); + + if($this->form_validation->run() == FALSE) + { + $this->loadChangePass(); + } + else + { + $oldPassword = $this->input->post('oldPassword'); + $newPassword = $this->input->post('newPassword'); + + $resultPas = $this->user_model->matchOldPassword($this->vendorId, $oldPassword); + + if(empty($resultPas)) + { + $this->session->set_flashdata('nomatch', 'Your old password not correct'); + redirect('loadChangePass'); + } + else + { + $usersData = array('password'=>getHashedPassword($newPassword), 'updatedBy'=>$this->vendorId, + 'updatedDtm'=>date('Y-m-d H:i:sa')); + + $result = $this->user_model->changePassword($this->vendorId, $usersData); + + if($result > 0) { $this->session->set_flashdata('success', 'Password updation successful'); } + else { $this->session->set_flashdata('error', 'Password updation failed'); } + + redirect('loadChangePass'); + } + } + } + + function pageNotFound() + { + $this->global['pageTitle'] = 'CodeInsect : 404 - Page Not Found'; + + $this->loadViews("404", $this->global, NULL, NULL); + } +} + +?> \ No newline at end of file diff --git a/application/core/index.html b/application/core/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/core/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/errors/error_404.php b/application/errors/error_404.php new file mode 100644 index 00000000..792726a6 --- /dev/null +++ b/application/errors/error_404.php @@ -0,0 +1,62 @@ + + + +404 Page Not Found + + + +
+

+ +
+ + \ No newline at end of file diff --git a/application/errors/error_db.php b/application/errors/error_db.php new file mode 100644 index 00000000..b396cda9 --- /dev/null +++ b/application/errors/error_db.php @@ -0,0 +1,62 @@ + + + +Database Error + + + +
+

+ +
+ + \ No newline at end of file diff --git a/application/errors/error_general.php b/application/errors/error_general.php new file mode 100644 index 00000000..fd63ce2c --- /dev/null +++ b/application/errors/error_general.php @@ -0,0 +1,62 @@ + + + +Error + + + +
+

+ +
+ + \ No newline at end of file diff --git a/application/errors/error_php.php b/application/errors/error_php.php new file mode 100644 index 00000000..f085c203 --- /dev/null +++ b/application/errors/error_php.php @@ -0,0 +1,10 @@ +
+ +

A PHP Error was encountered

+ +

Severity:

+

Message:

+

Filename:

+

Line Number:

+ +
\ No newline at end of file diff --git a/application/errors/index.html b/application/errors/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/errors/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/helpers/cias_helper.php b/application/helpers/cias_helper.php new file mode 100644 index 00000000..d1f0b702 --- /dev/null +++ b/application/helpers/cias_helper.php @@ -0,0 +1,50 @@ +"; + print_r($data); + echo ""; +} + +/** + * This function used to get the CI instance + */ +if(!function_exists('get_instance')) +{ + function get_instance() + { + $CI = &get_instance(); + } +} + +/** + * This function used to generate the hashed password + * @param {string} $plainPassword : This is plain text password + */ +if(!function_exists('getHashedPassword')) +{ + function getHashedPassword($plainPassword) + { + return password_hash($plainPassword, PASSWORD_DEFAULT); + } +} + +/** + * This function used to generate the hashed password + * @param {string} $plainPassword : This is plain text password + * @param {string} $hashedPassword : This is hashed password + */ +if(!function_exists('verifyHashedPassword')) +{ + function verifyHashedPassword($plainPassword, $hashedPassword) + { + return password_verify($plainPassword, $hashedPassword) ? true : false; + } +} + +?> \ No newline at end of file diff --git a/application/helpers/index.html b/application/helpers/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/helpers/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/hooks/index.html b/application/hooks/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/hooks/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/index.html b/application/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/language/english/index.html b/application/language/english/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/language/english/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/language/index.html b/application/language/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/language/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

Directory access is forbidden.

+ + + \ No newline at end of file diff --git a/application/libraries/BaseController.php b/application/libraries/BaseController.php new file mode 100644 index 00000000..166f7176 --- /dev/null +++ b/application/libraries/BaseController.php @@ -0,0 +1,150 @@ +output->set_status_header ( 200 )->set_content_type ( 'application/json', 'utf-8' )->set_output ( json_encode ( $data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES ) )->_display (); + exit (); + } + + /** + * This function used to check the user is logged in or not + */ + function isLoggedIn() { + $isLoggedIn = $this->session->userdata ( 'isLoggedIn' ); + + if (! isset ( $isLoggedIn ) || $isLoggedIn != TRUE) { + redirect ( 'login' ); + } else { + $this->role = $this->session->userdata ( 'role' ); + $this->vendorId = $this->session->userdata ( 'userId' ); + $this->name = $this->session->userdata ( 'name' ); + $this->roleText = $this->session->userdata ( 'roleText' ); + + $this->global ['name'] = $this->name; + $this->global ['role'] = $this->role; + $this->global ['role_text'] = $this->roleText; + } + } + + /** + * This function is used to check the access + */ + function isAdmin() { + if ($this->role != ROLE_ADMIN) { + return true; + } else { + return false; + } + } + + /** + * This function is used to check the access + */ + function isTicketter() { + if ($this->role != ROLE_ADMIN || $this->role != ROLE_MANAGER) { + return true; + } else { + return false; + } + } + + /** + * This function is used to load the set of views + */ + function loadThis() { + $this->global ['pageTitle'] = 'CodeInsect : Access Denied'; + + $this->load->view ( 'includes/header', $this->global ); + $this->load->view ( 'access' ); + $this->load->view ( 'includes/footer' ); + } + + /** + * This function is used to logged out user from system + */ + function logout() { + $this->session->sess_destroy (); + + redirect ( 'login' ); + } + + /** + * This function used to load views + * @param {string} $viewName : This is view name + * @param {mixed} $headerInfo : This is array of header information + * @param {mixed} $pageInfo : This is array of page information + * @param {mixed} $footerInfo : This is array of footer information + * @return {null} $result : null + */ + function loadViews($viewName = "", $headerInfo = NULL, $pageInfo = NULL, $footerInfo = NULL){ + + $this->load->view('includes/header', $headerInfo); + $this->load->view($viewName, $pageInfo); + $this->load->view('includes/footer', $footerInfo); + } + + /** + * This function used provide the pagination resources + * @param {string} $link : This is page link + * @param {number} $count : This is page count + * @param {number} $perPage : This is records per page limit + * @return {mixed} $result : This is array of records and pagination data + */ + function paginationCompress($link, $count, $perPage = 10) { + $this->load->library ( 'pagination' ); + + $config ['base_url'] = base_url () . $link; + $config ['total_rows'] = $count; + $config ['uri_segment'] = SEGMENT; + $config ['per_page'] = $perPage; + $config ['num_links'] = 5; + $config ['full_tag_open'] = ''; + $config ['first_tag_open'] = '
  • '; + $config ['first_link'] = 'First'; + $config ['first_tag_close'] = '
  • '; + $config ['prev_link'] = 'Previous'; + $config ['prev_tag_open'] = '
  • '; + $config ['prev_tag_close'] = '
  • '; + $config ['next_link'] = 'Next'; + $config ['next_tag_open'] = '
  • '; + $config ['next_tag_close'] = '
  • '; + $config ['cur_tag_open'] = '
  • '; + $config ['cur_tag_close'] = '
  • '; + $config ['num_tag_open'] = '
  • '; + $config ['num_tag_close'] = '
  • '; + $config ['last_tag_open'] = '
  • '; + $config ['last_link'] = 'Last'; + $config ['last_tag_close'] = '
  • '; + + $this->pagination->initialize ( $config ); + $page = $config ['per_page']; + $segment = $this->uri->segment ( SEGMENT ); + + return array ( + "page" => $page, + "segment" => $segment + ); + } +} \ No newline at end of file diff --git a/application/libraries/Grocery_CRUD.php b/application/libraries/Grocery_CRUD.php new file mode 100644 index 00000000..5850e98a --- /dev/null +++ b/application/libraries/Grocery_CRUD.php @@ -0,0 +1,5628 @@ + + */ + +// ------------------------------------------------------------------------ + +/** + * grocery Field Types + * + * The types of the fields and the default reactions + * + * @package grocery CRUD + * @author John Skoumbourdis + * @license https://github.com/scoumbourdis/grocery-crud/blob/master/license-grocery-crud.txt + * @link http://www.grocerycrud.com/documentation + */ +class grocery_CRUD_Field_Types +{ + /** + * Gets the field types of the main table. + * @return array + */ + public function get_field_types() + { + if ($this->field_types !== null) { + return $this->field_types; + } + + $types = array(); + foreach($this->basic_model->get_field_types_basic_table() as $field_info) + { + $field_info->required = !empty($this->required_fields) && in_array($field_info->name,$this->required_fields) ? true : false; + + $field_info->display_as = + isset($this->display_as[$field_info->name]) ? + $this->display_as[$field_info->name] : + ucfirst(str_replace("_"," ",$field_info->name)); + + if($this->change_field_type !== null && isset($this->change_field_type[$field_info->name])) + { + $field_type = $this->change_field_type[$field_info->name]; + + if (isset($this->relation[$field_info->name])) { + $field_info->crud_type = "relation_".$field_type->type; + } + elseif (isset($this->upload_fields[$field_info->name])) { + $field_info->crud_type = "upload_file_".$field_type->type; + } else { + $field_info->crud_type = $field_type->type; + $field_info->extras = $field_type->extras; + } + + $real_type = $field_info->crud_type; + } + elseif(isset($this->relation[$field_info->name])) + { + $real_type = 'relation'; + $field_info->crud_type = 'relation'; + } + elseif(isset($this->upload_fields[$field_info->name])) + { + $real_type = 'upload_file'; + $field_info->crud_type = 'upload_file'; + } + else + { + $real_type = $this->get_type($field_info); + $field_info->crud_type = $real_type; + } + + switch ($real_type) { + case 'text': + if(!empty($this->unset_texteditor) && in_array($field_info->name,$this->unset_texteditor)) + $field_info->extras = false; + else + $field_info->extras = 'text_editor'; + break; + + case 'relation': + case 'relation_readonly': + $field_info->extras = $this->relation[$field_info->name]; + break; + + case 'upload_file': + case 'upload_file_readonly': + $field_info->extras = $this->upload_fields[$field_info->name]; + break; + + default: + if(empty($field_info->extras)) + $field_info->extras = false; + break; + } + + $types[$field_info->name] = $field_info; + } + + if(!empty($this->relation_n_n)) + { + foreach($this->relation_n_n as $field_name => $field_extras) + { + $is_read_only = $this->change_field_type !== null + && isset($this->change_field_type[$field_name]) + && $this->change_field_type[$field_name]->type == 'readonly' + ? true : false; + $field_info = (object)array(); + $field_info->name = $field_name; + $field_info->crud_type = $is_read_only ? 'readonly' : 'relation_n_n'; + $field_info->extras = $field_extras; + $field_info->required = !empty($this->required_fields) && in_array($field_name,$this->required_fields) ? true : false;; + $field_info->display_as = + isset($this->display_as[$field_name]) ? + $this->display_as[$field_name] : + ucfirst(str_replace("_"," ",$field_name)); + + $types[$field_name] = $field_info; + } + } + + if(!empty($this->add_fields)) + foreach($this->add_fields as $field_object) + { + $field_name = isset($field_object->field_name) ? $field_object->field_name : $field_object; + + if(!isset($types[$field_name]))//Doesn't exist in the database? Create it for the CRUD + { + $extras = false; + if($this->change_field_type !== null && isset($this->change_field_type[$field_name])) + { + $field_type = $this->change_field_type[$field_name]; + $extras = $field_type->extras; + } + + $field_info = (object)array( + 'name' => $field_name, + 'crud_type' => $this->change_field_type !== null && isset($this->change_field_type[$field_name]) ? + $this->change_field_type[$field_name]->type : + 'string', + 'display_as' => isset($this->display_as[$field_name]) ? + $this->display_as[$field_name] : + ucfirst(str_replace("_"," ",$field_name)), + 'required' => !empty($this->required_fields) && in_array($field_name,$this->required_fields) ? true : false, + 'extras' => $extras + ); + + $types[$field_name] = $field_info; + } + } + + if(!empty($this->edit_fields)) + foreach($this->edit_fields as $field_object) + { + $field_name = isset($field_object->field_name) ? $field_object->field_name : $field_object; + + if(!isset($types[$field_name]))//Doesn't exist in the database? Create it for the CRUD + { + $extras = false; + if($this->change_field_type !== null && isset($this->change_field_type[$field_name])) + { + $field_type = $this->change_field_type[$field_name]; + $extras = $field_type->extras; + } + + $field_info = (object)array( + 'name' => $field_name, + 'crud_type' => $this->change_field_type !== null && isset($this->change_field_type[$field_name]) ? + $this->change_field_type[$field_name]->type : + 'string', + 'display_as' => isset($this->display_as[$field_name]) ? + $this->display_as[$field_name] : + ucfirst(str_replace("_"," ",$field_name)), + 'required' => in_array($field_name,$this->required_fields) ? true : false, + 'extras' => $extras + ); + + $types[$field_name] = $field_info; + } + } + + $this->field_types = $types; + + return $this->field_types; + } + + public function get_primary_key() + { + return $this->basic_model->get_primary_key(); + } + + /** + * Get the html input for the specific field with the + * current value + * + * @param object $field_info + * @param string $value + * @return object + */ + protected function get_field_input($field_info, $value = null) + { + $real_type = $field_info->crud_type; + + $types_array = array( + 'integer', + 'text', + 'true_false', + 'string', + 'date', + 'datetime', + 'enum', + 'set', + 'relation', + 'relation_readonly', + 'relation_n_n', + 'upload_file', + 'upload_file_readonly', + 'hidden', + 'password', + 'readonly', + 'dropdown', + 'multiselect' + ); + + if (in_array($real_type,$types_array)) { + /* A quick way to go to an internal method of type $this->get_{type}_input . + * For example if the real type is integer then we will use the method + * $this->get_integer_input + * */ + $field_info->input = $this->{"get_".$real_type."_input"}($field_info,$value); + } + else + { + $field_info->input = $this->get_string_input($field_info,$value); + } + + return $field_info; + } + + protected function change_list_value($field_info, $value = null) + { + $real_type = $field_info->crud_type; + + switch ($real_type) { + case 'hidden': + case 'invisible': + case 'integer': + + break; + case 'true_false': + if(is_array($field_info->extras) && array_key_exists($value,$field_info->extras)) { + $value = $field_info->extras[$value]; + } else if(isset($this->default_true_false_text[$value])) { + $value = $this->default_true_false_text[$value]; + } + break; + case 'string': + $value = $this->character_limiter($value,$this->character_limiter,"..."); + break; + case 'text': + $value = $this->character_limiter(strip_tags($value),$this->character_limiter,"..."); + break; + case 'date': + if(!empty($value) && $value != '0000-00-00' && $value != '1970-01-01') + { + list($year,$month,$day) = explode("-",$value); + + $value = date($this->php_date_format, mktime (0, 0, 0, (int)$month , (int)$day , (int)$year)); + } + else + { + $value = ''; + } + break; + case 'datetime': + if(!empty($value) && $value != '0000-00-00 00:00:00' && $value != '1970-01-01 00:00:00') + { + list($year,$month,$day) = explode("-",$value); + list($hours,$minutes) = explode(":",substr($value,11)); + + $value = date($this->php_date_format." - H:i", mktime ((int)$hours , (int)$minutes , 0, (int)$month , (int)$day ,(int)$year)); + } + else + { + $value = ''; + } + break; + case 'enum': + $value = $this->character_limiter($value,$this->character_limiter,"..."); + break; + + case 'multiselect': + $value_as_array = array(); + foreach(explode(",",$value) as $row_value) + { + $value_as_array[] = array_key_exists($row_value,$field_info->extras) ? $field_info->extras[$row_value] : $row_value; + } + $value = implode(",",$value_as_array); + break; + + case 'relation_n_n': + $value = $this->character_limiter(str_replace(',',', ',$value),$this->character_limiter,"..."); + break; + + case 'password': + $value = '******'; + break; + + case 'dropdown': + $value = array_key_exists($value,$field_info->extras) ? $field_info->extras[$value] : $value; + break; + + case 'upload_file': + if(empty($value)) + { + $value = ""; + } + else + { + $is_image = !empty($value) && + ( substr($value,-4) == '.jpg' + || substr($value,-4) == '.png' + || substr($value,-5) == '.jpeg' + || substr($value,-4) == '.gif' + || substr($value,-5) == '.tiff') + ? true : false; + + $file_url = base_url().$field_info->extras->upload_path."/$value"; + + $file_url_anchor = ''; + } + else + { + $file_url_anchor .= ' target="_blank">'.$this->character_limiter($value,$this->character_limiter,'...',true); + } + $file_url_anchor .= ''; + + $value = $file_url_anchor; + } + break; + + default: + $value = $this->character_limiter($value,$this->character_limiter,"..."); + break; + } + + return $value; + } + + /** + * Character Limiter of codeigniter (I just don't want to load the helper ) + * + * Limits the string based on the character count. Preserves complete words + * so the character count may not be exactly as specified. + * + * @access public + * @param string + * @param integer + * @param string the end character. Usually an ellipsis + * @return string + */ + function character_limiter($str, $n = 500, $end_char = '…') + { + if (strlen($str) < $n) + { + return $str; + } + + // a bit complicated, but faster than preg_replace with \s+ + $str = preg_replace('/ {2,}/', ' ', str_replace(array("\r", "\n", "\t", "\x0B", "\x0C"), ' ', $str)); + + if (strlen($str) <= $n) + { + return $str; + } + + $out = ''; + foreach (explode(' ', trim($str)) as $val) + { + $out .= $val.' '; + + if (strlen($out) >= $n) + { + $out = trim($out); + return (strlen($out) === strlen($str)) ? $out : $out.$end_char; + } + } + } + + protected function get_type($db_type) + { + $type = false; + if(!empty($db_type->type)) + { + switch ($db_type->type) { + case '1': + case '3': + case 'int': + case 'tinyint': + case 'mediumint': + case 'longint': + if( $db_type->db_type == 'tinyint' && $db_type->db_max_length == 1) + $type = 'true_false'; + else + $type = 'integer'; + break; + case '254': + case 'string': + case 'enum': + if($db_type->db_type != 'enum') + $type = 'string'; + else + $type = 'enum'; + break; + case 'set': + if($db_type->db_type != 'set') + $type = 'string'; + else + $type = 'set'; + break; + case '252': + case 'blob': + case 'text': + case 'mediumtext': + case 'longtext': + $type = 'text'; + break; + case '10': + case 'date': + $type = 'date'; + break; + case '12': + case 'datetime': + case 'timestamp': + $type = 'datetime'; + break; + } + } + return $type; + } +} + +// ------------------------------------------------------------------------ + +/** + * Grocery Model Driver + * + * Drives the model - I'ts so easy like you drive a bicycle :-) + * + * @package grocery CRUD + * @author John Skoumbourdis + * @version 1.5.8 + * @link http://www.grocerycrud.com/documentation + */ +class grocery_CRUD_Model_Driver extends grocery_CRUD_Field_Types +{ + /** + * @var Grocery_crud_model + */ + public $basic_model = null; + + protected function set_default_Model() + { + $ci = &get_instance(); + $ci->load->model('Grocery_crud_model'); + + $this->basic_model = new Grocery_crud_model(); + } + + protected function get_total_results() + { + if(!empty($this->where)) + foreach($this->where as $where) + $this->basic_model->where($where[0],$where[1],$where[2]); + + if(!empty($this->or_where)) + foreach($this->or_where as $or_where) + $this->basic_model->or_where($or_where[0],$or_where[1],$or_where[2]); + + if(!empty($this->like)) + foreach($this->like as $like) + $this->basic_model->like($like[0],$like[1],$like[2]); + + if(!empty($this->or_like)) + foreach($this->or_like as $or_like) + $this->basic_model->or_like($or_like[0],$or_like[1],$or_like[2]); + + if(!empty($this->having)) + foreach($this->having as $having) + $this->basic_model->having($having[0],$having[1],$having[2]); + + if(!empty($this->or_having)) + foreach($this->or_having as $or_having) + $this->basic_model->or_having($or_having[0],$or_having[1],$or_having[2]); + + if(!empty($this->relation)) + foreach($this->relation as $relation) + $this->basic_model->join_relation($relation[0],$relation[1],$relation[2]); + + if(!empty($this->relation_n_n)) + { + $columns = $this->get_columns(); + foreach($columns as $column) + { + //Use the relation_n_n ONLY if the column is called . The set_relation_n_n are slow and it will make the table slower without any reason as we don't need those queries. + if(isset($this->relation_n_n[$column->field_name])) + { + $this->basic_model->set_relation_n_n_field($this->relation_n_n[$column->field_name]); + } + } + + } + + return $this->basic_model->get_total_results(); + } + + protected function filter_data_from_xss($post_data) { + foreach ($post_data as $field_name => $rawData) { + if (!is_array($rawData)) { + $post_data[$field_name] = filter_var(strip_tags($rawData)); + } + } + return $post_data; + } + + public function set_model($model_name) + { + $ci = &get_instance(); + $ci->load->model('Grocery_crud_model'); + + $ci->load->model($model_name); + + $temp = explode('/',$model_name); + krsort($temp); + foreach($temp as $t) + { + $real_model_name = $t; + break; + } + + $this->basic_model = $ci->$real_model_name; + } + + protected function set_ajax_list_queries($state_info = null) + { + if(!empty($state_info->per_page)) + { + if(empty($state_info->page) || !is_numeric($state_info->page) ) + $this->limit($state_info->per_page); + else + { + $limit_page = ( ($state_info->page-1) * $state_info->per_page ); + $this->limit($state_info->per_page, $limit_page); + } + } + + if(!empty($state_info->order_by)) + { + $this->order_by($state_info->order_by[0],$state_info->order_by[1]); + } + + if(!empty($state_info->search)) + { + if (!empty($this->relation)) { + foreach ($this->relation as $relation_name => $relation_values) { + $temp_relation[$this->_unique_field_name($relation_name)] = $this->_get_field_names_to_search($relation_values); + } + } + + if (is_array($state_info->search)) { + foreach ($state_info->search as $search_field => $search_text) { + + + if (isset($temp_relation[$search_field])) { + if (is_array($temp_relation[$search_field])) { + foreach ($temp_relation[$search_field] as $relation_field) { + $this->or_like($relation_field , $search_text); + } + } else { + $this->like($temp_relation[$search_field] , $search_text); + } + } elseif(isset($this->relation_n_n[$search_field])) { + $escaped_text = $this->basic_model->escape_str($search_text); + $this->having($search_field." LIKE '%".$escaped_text."%'"); + } else { + $this->like($search_field, $search_text); + } + + + + } + } elseif ($state_info->search->field !== null) { + if (isset($temp_relation[$state_info->search->field])) { + if (is_array($temp_relation[$state_info->search->field])) { + foreach ($temp_relation[$state_info->search->field] as $search_field) { + $this->or_like($search_field , $state_info->search->text); + } + } else { + $this->like($temp_relation[$state_info->search->field] , $state_info->search->text); + } + } elseif(isset($this->relation_n_n[$state_info->search->field])) { + $escaped_text = $this->basic_model->escape_str($state_info->search->text); + $this->having($state_info->search->field." LIKE '%".$escaped_text."%'"); + } else { + $this->like($state_info->search->field , $state_info->search->text); + } + } + else + { + $columns = $this->get_columns(); + + $search_text = $state_info->search->text; + + if(!empty($this->where)) + foreach($this->where as $where) + $this->basic_model->having($where[0],$where[1],$where[2]); + + foreach($columns as $column) + { + if(isset($temp_relation[$column->field_name])) + { + if(is_array($temp_relation[$column->field_name])) + { + foreach($temp_relation[$column->field_name] as $search_field) + { + $this->or_like($search_field, $search_text); + } + } + else + { + $this->or_like($temp_relation[$column->field_name], $search_text); + } + } + elseif(isset($this->relation_n_n[$column->field_name])) + { + //@todo have a where for the relation_n_n statement + } + else + { + $this->or_like($column->field_name, $search_text); + } + } + } + } + } + + protected function table_exists($table_name = null) + { + if($this->basic_model->db_table_exists($table_name)) + return true; + return false; + } + + protected function get_relation_array($relation_info, $primary_key_value = null, $limit = null) + { + list($field_name , $related_table , $related_field_title, $where_clause, $order_by) = $relation_info; + + if($primary_key_value !== null) + { + $primary_key = $this->basic_model->get_primary_key($related_table); + + //A where clause with the primary key is enough to take the selected key row + $where_clause = array($primary_key => $primary_key_value); + } + + $relation_array = $this->basic_model->get_relation_array($field_name , $related_table , $related_field_title, $where_clause, $order_by, $limit); + + return $relation_array; + } + + protected function get_relation_total_rows($relation_info) + { + list($field_name , $related_table , $related_field_title, $where_clause) = $relation_info; + + $relation_array = $this->basic_model->get_relation_total_rows($field_name , $related_table , $related_field_title, $where_clause); + + return $relation_array; + } + + protected function db_insert_validation() + { + $validation_result = (object)array('success'=>false); + + $field_types = $this->get_field_types(); + $required_fields = $this->required_fields; + $unique_fields = $this->_unique_fields; + $add_fields = $this->get_add_fields(); + + if(!empty($required_fields)) + { + foreach($add_fields as $add_field) + { + $field_name = $add_field->field_name; + if(!isset($this->validation_rules[$field_name]) && in_array( $field_name, $required_fields) ) + { + $this->set_rules( $field_name, $field_types[$field_name]->display_as, 'required'); + } + } + } + + /** Checking for unique fields. If the field value is not unique then + * return a validation error straight away, if not continue... */ + if(!empty($unique_fields)) + { + $form_validation = $this->form_validation(); + + foreach($add_fields as $add_field) + { + $field_name = $add_field->field_name; + if(in_array( $field_name, $unique_fields) ) + { + $form_validation->set_rules( $field_name, + $field_types[$field_name]->display_as, + 'is_unique['.$this->basic_db_table.'.'.$field_name.']'); + } + } + + if(!$form_validation->run()) + { + $validation_result->error_message = $form_validation->error_string(); + $validation_result->error_fields = $form_validation->_error_array; + + return $validation_result; + } + } + + if(!empty($this->validation_rules)) + { + $form_validation = $this->form_validation(); + + $add_fields = $this->get_add_fields(); + + foreach($add_fields as $add_field) + { + $field_name = $add_field->field_name; + if(isset($this->validation_rules[$field_name])) + { + $rule = $this->validation_rules[$field_name]; + $form_validation->set_rules($rule['field'],$rule['label'],$rule['rules'],$rule['errors']); + } + } + + if($form_validation->run()) + { + $validation_result->success = true; + } + else + { + $validation_result->error_message = $form_validation->error_string(); + $validation_result->error_fields = $form_validation->_error_array; + } + } + else + { + $validation_result->success = true; + } + + return $validation_result; + } + + protected function form_validation() + { + if($this->form_validation === null) + { + $this->form_validation = new grocery_CRUD_Form_validation(); + $ci = &get_instance(); + $ci->load->library('form_validation'); + $ci->form_validation = $this->form_validation; + } + return $this->form_validation; + } + + protected function db_update_validation() + { + $validation_result = (object)array('success'=>false); + + $field_types = $this->get_field_types(); + $required_fields = $this->required_fields; + $unique_fields = $this->_unique_fields; + $edit_fields = $this->get_edit_fields(); + + if(!empty($required_fields)) + { + foreach($edit_fields as $edit_field) + { + $field_name = $edit_field->field_name; + if(!isset($this->validation_rules[$field_name]) && in_array( $field_name, $required_fields) ) + { + $this->set_rules( $field_name, $field_types[$field_name]->display_as, 'required'); + } + } + } + + + /** Checking for unique fields. If the field value is not unique then + * return a validation error straight away, if not continue... */ + if(!empty($unique_fields)) + { + $form_validation = $this->form_validation(); + + $form_validation_check = false; + + foreach($edit_fields as $edit_field) + { + $field_name = $edit_field->field_name; + if(in_array( $field_name, $unique_fields) ) + { + $state_info = $this->getStateInfo(); + $primary_key = $this->get_primary_key(); + $field_name_value = $_POST[$field_name]; + + $this->basic_model->where($primary_key,$state_info->primary_key); + $row = $this->basic_model->get_row(); + + if(!isset($row->$field_name)) { + throw new Exception("The field name doesn't exist in the database. ". + "Please use the unique fields only for fields ". + "that exist in the database"); + } + + $previous_field_name_value = $row->$field_name; + + if(!empty($previous_field_name_value) && $previous_field_name_value != $field_name_value) { + $form_validation->set_rules( $field_name, + $field_types[$field_name]->display_as, + 'is_unique['.$this->basic_db_table.'.'.$field_name.']'); + + $form_validation_check = true; + } + } + } + + if($form_validation_check && !$form_validation->run()) + { + $validation_result->error_message = $form_validation->error_string(); + $validation_result->error_fields = $form_validation->_error_array; + + return $validation_result; + } + } + + if(!empty($this->validation_rules)) + { + $form_validation = $this->form_validation(); + + $edit_fields = $this->get_edit_fields(); + + foreach($edit_fields as $edit_field) + { + $field_name = $edit_field->field_name; + if(isset($this->validation_rules[$field_name])) + { + $rule = $this->validation_rules[$field_name]; + $form_validation->set_rules($rule['field'],$rule['label'],$rule['rules'],$rule['errors']); + } + } + + if($form_validation->run()) + { + $validation_result->success = true; + } + else + { + $validation_result->error_message = $form_validation->error_string(); + $validation_result->error_fields = $form_validation->_error_array; + } + } + else + { + $validation_result->success = true; + } + + return $validation_result; + } + + protected function db_insert($state_info) + { + $validation_result = $this->db_insert_validation(); + + if($validation_result->success) + { + $post_data = $state_info->unwrapped_data; + + if ($this->config->xss_clean) { + $post_data = $this->filter_data_from_xss($post_data); + } + + $add_fields = $this->get_add_fields(); + + if($this->callback_insert === null) + { + if($this->callback_before_insert !== null) + { + $callback_return = call_user_func($this->callback_before_insert, $post_data); + + if(!empty($callback_return) && is_array($callback_return)) + $post_data = $callback_return; + elseif($callback_return === false) + return false; + } + + $insert_data = array(); + $types = $this->get_field_types(); + foreach($add_fields as $num_row => $field) + { + /* If the multiselect or the set is empty then the browser doesn't send an empty array. Instead it sends nothing */ + if(isset($types[$field->field_name]->crud_type) && ($types[$field->field_name]->crud_type == 'set' || $types[$field->field_name]->crud_type == 'multiselect') && !isset($post_data[$field->field_name])) + { + $post_data[$field->field_name] = array(); + } + + if(isset($post_data[$field->field_name]) && !isset($this->relation_n_n[$field->field_name])) + { + if(isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && is_array($post_data[$field->field_name]) && empty($post_data[$field->field_name])) + { + $insert_data[$field->field_name] = null; + } + elseif(isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && $post_data[$field->field_name] === '') + { + $insert_data[$field->field_name] = null; + } + elseif(isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'date') + { + $insert_data[$field->field_name] = $this->_convert_date_to_sql_date($post_data[$field->field_name]); + } + elseif(isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'readonly') + { + //This empty if statement is to make sure that a readonly field will never inserted/updated + } + elseif(isset($types[$field->field_name]->crud_type) && ($types[$field->field_name]->crud_type == 'set' || $types[$field->field_name]->crud_type == 'multiselect')) + { + $insert_data[$field->field_name] = !empty($post_data[$field->field_name]) ? implode(',',$post_data[$field->field_name]) : ''; + } + elseif(isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'datetime'){ + $insert_data[$field->field_name] = $this->_convert_date_to_sql_date(substr($post_data[$field->field_name],0,10)). + substr($post_data[$field->field_name],10); + } + else + { + $insert_data[$field->field_name] = $post_data[$field->field_name]; + } + } + } + + $insert_result = $this->basic_model->db_insert($insert_data); + + if($insert_result !== false) + { + $insert_primary_key = $insert_result; + } + else + { + return false; + } + + if(!empty($this->relation_n_n)) + { + foreach($this->relation_n_n as $field_name => $field_info) + { + $relation_data = isset( $post_data[$field_name] ) ? $post_data[$field_name] : array() ; + $this->db_relation_n_n_update($field_info, $relation_data ,$insert_primary_key); + } + } + + if($this->callback_after_insert !== null) + { + $callback_return = call_user_func($this->callback_after_insert, $post_data, $insert_primary_key); + + if($callback_return === false) + { + return false; + } + + } + }else + { + $callback_return = call_user_func($this->callback_insert, $post_data); + + if($callback_return === false) + { + return false; + } + } + + if(isset($insert_primary_key)) + return $insert_primary_key; + else + return true; + } + + return false; + + } + + protected function db_update($state_info) + { + $validation_result = $this->db_update_validation(); + + $edit_fields = $this->get_edit_fields(); + + if($validation_result->success) + { + $post_data = $state_info->unwrapped_data; + $primary_key = $state_info->primary_key; + + if ($this->config->xss_clean) { + $post_data = $this->filter_data_from_xss($post_data); + } + + if($this->callback_update === null) + { + if($this->callback_before_update !== null) + { + $callback_return = call_user_func($this->callback_before_update, $post_data, $primary_key); + + if(!empty($callback_return) && is_array($callback_return)) + { + $post_data = $callback_return; + } + elseif($callback_return === false) + { + return false; + } + + } + + $update_data = array(); + $types = $this->get_field_types(); + foreach($edit_fields as $num_row => $field) + { + /* If the multiselect or the set is empty then the browser doesn't send an empty array. Instead it sends nothing */ + if(isset($types[$field->field_name]->crud_type) && ($types[$field->field_name]->crud_type == 'set' || $types[$field->field_name]->crud_type == 'multiselect') && !isset($post_data[$field->field_name])) + { + $post_data[$field->field_name] = array(); + } + + if(isset($post_data[$field->field_name]) && !isset($this->relation_n_n[$field->field_name])) + { + if(isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && is_array($post_data[$field->field_name]) && empty($post_data[$field->field_name])) + { + $update_data[$field->field_name] = null; + } + elseif(isset($types[$field->field_name]->db_null) && $types[$field->field_name]->db_null && $post_data[$field->field_name] === '') + { + $update_data[$field->field_name] = null; + } + elseif(isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'date') + { + $update_data[$field->field_name] = $this->_convert_date_to_sql_date($post_data[$field->field_name]); + } + elseif(isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'readonly') + { + //This empty if statement is to make sure that a readonly field will never inserted/updated + } + elseif(isset($types[$field->field_name]->crud_type) && ($types[$field->field_name]->crud_type == 'set' || $types[$field->field_name]->crud_type == 'multiselect')) + { + $update_data[$field->field_name] = !empty($post_data[$field->field_name]) ? implode(',',$post_data[$field->field_name]) : ''; + } + elseif(isset($types[$field->field_name]->crud_type) && $types[$field->field_name]->crud_type == 'datetime'){ + $update_data[$field->field_name] = $this->_convert_date_to_sql_date(substr($post_data[$field->field_name],0,10)). + substr($post_data[$field->field_name],10); + } + else + { + $update_data[$field->field_name] = $post_data[$field->field_name]; + } + } + } + + if($this->basic_model->db_update($update_data, $primary_key) === false) + { + return false; + } + + if(!empty($this->relation_n_n)) + { + foreach($this->relation_n_n as $field_name => $field_info) + { + if ( $this->unset_edit_fields !== null + && is_array($this->unset_edit_fields) + && in_array($field_name,$this->unset_edit_fields) + ) { + continue; + } + + $relation_data = isset( $post_data[$field_name] ) ? $post_data[$field_name] : array() ; + $this->db_relation_n_n_update($field_info, $relation_data ,$primary_key); + } + } + + if($this->callback_after_update !== null) + { + $callback_return = call_user_func($this->callback_after_update, $post_data, $primary_key); + + if($callback_return === false) + { + return false; + } + + } + } + else + { + $callback_return = call_user_func($this->callback_update, $post_data, $primary_key); + + if($callback_return === false) + { + return false; + } + } + + return true; + } + else + { + return false; + } + } + + protected function _convert_date_to_sql_date($date) + { + $date = substr($date,0,10); + if(preg_match('/\d{4}-\d{2}-\d{2}/',$date)) + { + //If it's already a sql-date don't convert it! + return $date; + }elseif(empty($date)) + { + return ''; + } + + $date_array = preg_split( '/[-\.\/ ]/', $date); + if($this->php_date_format == 'd/m/Y') + { + $sql_date = date('Y-m-d',mktime(0,0,0,$date_array[1],$date_array[0],$date_array[2])); + } + elseif($this->php_date_format == 'm/d/Y') + { + $sql_date = date('Y-m-d',mktime(0,0,0,$date_array[0],$date_array[1],$date_array[2])); + } + else + { + $sql_date = $date; + } + + return $sql_date; + } + + protected function _get_field_names_to_search(array $relation_values) + { + if(!strstr($relation_values[2],'{')) + return $this->_unique_join_name($relation_values[0]).'.'.$relation_values[2]; + else + { + $relation_values[2] = ' '.$relation_values[2].' '; + $temp1 = explode('{',$relation_values[2]); + unset($temp1[0]); + + $field_names_array = array(); + foreach($temp1 as $field) + list($field_names_array[]) = explode('}',$field); + + return $field_names_array; + } + } + + protected function _unique_join_name($field_name) + { + return 'j'.substr(md5($field_name),0,8); //This j is because is better for a string to begin with a letter and not a number + } + + protected function _unique_field_name($field_name) + { + return 's'.substr(md5($field_name),0,8); //This s is because is better for a string to begin with a letter and not a number + } + + protected function db_multiple_delete($state_info) + { + foreach ($state_info->ids as $delete_id) { + $result = $this->db_delete((object)array('primary_key' => $delete_id)); + if (!$result) { + return false; + } + } + + return true; + } + + protected function db_delete($state_info) + { + $primary_key_value = $state_info->primary_key; + + if($this->callback_delete === null) + { + if($this->callback_before_delete !== null) + { + $callback_return = call_user_func($this->callback_before_delete, $primary_key_value); + + if($callback_return === false) + { + return false; + } + + } + + if(!empty($this->relation_n_n)) + { + foreach($this->relation_n_n as $field_name => $field_info) + { + $this->db_relation_n_n_delete( $field_info, $primary_key_value ); + } + } + + $delete_result = $this->basic_model->db_delete($primary_key_value); + + if($delete_result === false) + { + return false; + } + + if($this->callback_after_delete !== null) + { + $callback_return = call_user_func($this->callback_after_delete, $primary_key_value); + + if($callback_return === false) + { + return false; + } + + } + } + else + { + $callback_return = call_user_func($this->callback_delete, $primary_key_value); + + if($callback_return === false) + { + return false; + } + } + + return true; + } + + protected function db_relation_n_n_update($field_info, $post_data , $primary_key_value) + { + $this->basic_model->db_relation_n_n_update($field_info, $post_data , $primary_key_value); + } + + protected function db_relation_n_n_delete($field_info, $primary_key_value) + { + $this->basic_model->db_relation_n_n_delete($field_info, $primary_key_value); + } + + protected function get_list() + { + if(!empty($this->order_by)) + $this->basic_model->order_by($this->order_by[0],$this->order_by[1]); + + if(!empty($this->where)) + foreach($this->where as $where) + $this->basic_model->where($where[0],$where[1],$where[2]); + + if(!empty($this->or_where)) + foreach($this->or_where as $or_where) + $this->basic_model->or_where($or_where[0],$or_where[1],$or_where[2]); + + if(!empty($this->like)) + foreach($this->like as $like) + $this->basic_model->like($like[0],$like[1],$like[2]); + + if(!empty($this->or_like)) + foreach($this->or_like as $or_like) + $this->basic_model->or_like($or_like[0],$or_like[1],$or_like[2]); + + if(!empty($this->having)) + foreach($this->having as $having) + $this->basic_model->having($having[0],$having[1],$having[2]); + + if(!empty($this->or_having)) + foreach($this->or_having as $or_having) + $this->basic_model->or_having($or_having[0],$or_having[1],$or_having[2]); + + if(!empty($this->relation)) + foreach($this->relation as $relation) + $this->basic_model->join_relation($relation[0],$relation[1],$relation[2]); + + if(!empty($this->relation_n_n)) + { + $columns = $this->get_columns(); + foreach($columns as $column) + { + //Use the relation_n_n ONLY if the column is called . The set_relation_n_n are slow and it will make the table slower without any reason as we don't need those queries. + if(isset($this->relation_n_n[$column->field_name])) + { + $this->basic_model->set_relation_n_n_field($this->relation_n_n[$column->field_name]); + } + } + + } + + if($this->theme_config['crud_paging'] === true) + { + if($this->limit === null) + { + $default_per_page = $this->config->default_per_page; + if(is_numeric($default_per_page) && $default_per_page >1) + { + $this->basic_model->limit($default_per_page); + } + else + { + $this->basic_model->limit(10); + } + } + else + { + $this->basic_model->limit($this->limit[0],$this->limit[1]); + } + } + + $results = $this->basic_model->get_list(); + + return $results; + } + + protected function get_edit_values($primary_key_value) + { + $values = $this->basic_model->get_edit_values($primary_key_value); + + if(!empty($this->relation_n_n)) + { + foreach($this->relation_n_n as $field_name => $field_info) + { + $values->$field_name = $this->get_relation_n_n_selection_array($primary_key_value, $field_info); + } + } + + return $values; + } + + protected function get_relation_n_n_selection_array($primary_key_value, $field_info) + { + return $this->basic_model->get_relation_n_n_selection_array($primary_key_value, $field_info); + } + + protected function get_relation_n_n_unselected_array($field_info, $selected_values) + { + return $this->basic_model->get_relation_n_n_unselected_array($field_info, $selected_values); + } + + protected function set_basic_db_table($table_name = null) + { + $this->basic_model->set_basic_table($table_name); + } + + protected function upload_file($state_info) + { + if(isset($this->upload_fields[$state_info->field_name]) ) + { + if($this->callback_upload === null) + { + if($this->callback_before_upload !== null) + { + $callback_before_upload_response = call_user_func($this->callback_before_upload, $_FILES, $this->upload_fields[$state_info->field_name]); + + if($callback_before_upload_response === false) + return false; + elseif(is_string($callback_before_upload_response)) + return $callback_before_upload_response; + } + + $upload_info = $this->upload_fields[$state_info->field_name]; + + header('Pragma: no-cache'); + header('Cache-Control: private, no-cache'); + header('Content-Disposition: inline; filename="files.json"'); + header('X-Content-Type-Options: nosniff'); + header('Access-Control-Allow-Origin: *'); + header('Access-Control-Allow-Methods: OPTIONS, HEAD, GET, POST, PUT, DELETE'); + header('Access-Control-Allow-Headers: X-File-Name, X-File-Type, X-File-Size'); + + $allowed_files = $this->config->file_upload_allow_file_types; + + $reg_exp = ''; + if(!empty($upload_info->allowed_file_types)){ + $reg_exp = '/(\\.|\\/)('.$upload_info->allowed_file_types.')$/i'; + }else{ + $reg_exp = '/(\\.|\\/)('.$allowed_files.')$/i'; + } + + $max_file_size_ui = $this->config->file_upload_max_file_size; + $max_file_size_bytes = $this->_convert_bytes_ui_to_bytes($max_file_size_ui); + + $options = array( + 'upload_dir' => $upload_info->upload_path.'/', + 'param_name' => $this->_unique_field_name($state_info->field_name), + 'upload_url' => base_url().$upload_info->upload_path.'/', + 'accept_file_types' => $reg_exp, + 'max_file_size' => $max_file_size_bytes + ); + $upload_handler = new UploadHandler($options); + $upload_handler->default_config_path = $this->default_config_path; + $uploader_response = $upload_handler->post(); + + if(is_array($uploader_response)) + { + foreach($uploader_response as &$response) + { + unset($response->delete_url); + unset($response->delete_type); + } + } + + if($this->callback_after_upload !== null) + { + $callback_after_upload_response = call_user_func($this->callback_after_upload, $uploader_response , $this->upload_fields[$state_info->field_name] , $_FILES ); + + if($callback_after_upload_response === false) + return false; + elseif(is_string($callback_after_upload_response)) + return $callback_after_upload_response; + elseif(is_array($callback_after_upload_response)) + $uploader_response = $callback_after_upload_response; + } + + return $uploader_response; + } + else + { + $upload_response = call_user_func($this->callback_upload, $_FILES, $this->upload_fields[$state_info->field_name] ); + + if($upload_response === false) + { + return false; + } + else + { + return $upload_response; + } + } + } + else + { + return false; + } + } + + protected function delete_file($state_info) + { + + if(isset($state_info->field_name) && isset($this->upload_fields[$state_info->field_name])) + { + $upload_info = $this->upload_fields[$state_info->field_name]; + + if(file_exists("{$upload_info->upload_path}/{$state_info->file_name}")) + { + if( unlink("{$upload_info->upload_path}/{$state_info->file_name}") ) + { + $this->basic_model->db_file_delete($state_info->field_name, $state_info->file_name); + + return true; + } + else + { + return false; + } + } + else + { + $this->basic_model->db_file_delete($state_info->field_name, $state_info->file_name); + return true; + } + } + else + { + return false; + } + } + + protected function ajax_relation($state_info) + { + if(!isset($this->relation[$state_info->field_name])) + return false; + + list($field_name, $related_table, $related_field_title, $where_clause, $order_by) = $this->relation[$state_info->field_name]; + + return $this->basic_model->get_ajax_relation_array($state_info->search, $field_name, $related_table, $related_field_title, $where_clause, $order_by); + } +} + + +/** + * PHP grocery CRUD + * + * LICENSE + * + * Grocery CRUD is released with dual licensing, using the GPL v3 (license-gpl3.txt) and the MIT license (license-mit.txt). + * You don't have to do anything special to choose one license or the other and you don't have to notify anyone which license you are using. + * Please see the corresponding license file for details of these licenses. + * You are free to use, modify and distribute this software, but all copyright information must remain. + * + * @package grocery CRUD + * @copyright Copyright (c) 2010 through 2014, John Skoumbourdis + * @license https://github.com/scoumbourdis/grocery-crud/blob/master/license-grocery-crud.txt + * @author John Skoumbourdis + */ + +// ------------------------------------------------------------------------ + +/** + * PHP grocery Layout + * + * Here you manage all the HTML Layout + * + * @package grocery CRUD + * @author John Skoumbourdis + * @version 1.5.8 + */ +class grocery_CRUD_Layout extends grocery_CRUD_Model_Driver +{ + private $theme_path = null; + private $views_as_string = ''; + private $echo_and_die = false; + protected $theme = null; + protected $default_true_false_text = array('inactive' , 'active'); + + protected $css_files = array(); + protected $js_files = array(); + protected $js_lib_files = array(); + protected $js_config_files = array(); + + protected function set_basic_Layout() + { + if(!file_exists($this->theme_path.$this->theme.'/views/list_template.php')) + { + throw new Exception('The template does not exist. Please check your files and try again.', 12); + die(); + } + } + + protected function showList($ajax = false, $state_info = null) + { + $data = $this->get_common_data(); + + $data->order_by = $this->order_by; + + $data->types = $this->get_field_types(); + + $data->list = $this->get_list(); + $data->list = $this->change_list($data->list , $data->types); + $data->list = $this->change_list_add_actions($data->list); + + $data->total_results = $this->get_total_results(); + + $data->columns = $this->get_columns(); + + $data->success_message = $this->get_success_message_at_list($state_info); + + $data->primary_key = $this->get_primary_key(); + $data->add_url = $this->getAddUrl(); + $data->edit_url = $this->getEditUrl(); + $data->delete_url = $this->getDeleteUrl(); + $data->delete_multiple_url = $this->getDeleteMultipleUrl(); + $data->read_url = $this->getReadUrl(); + $data->ajax_list_url = $this->getAjaxListUrl(); + $data->ajax_list_info_url = $this->getAjaxListInfoUrl(); + $data->export_url = $this->getExportToExcelUrl(); + $data->print_url = $this->getPrintUrl(); + $data->actions = $this->actions; + $data->unique_hash = $this->get_method_hash(); + $data->order_by = $this->order_by; + + $data->unset_add = $this->unset_add; + $data->unset_edit = $this->unset_edit; + $data->unset_read = $this->unset_read; + $data->unset_delete = $this->unset_delete; + $data->unset_export = $this->unset_export; + $data->unset_print = $this->unset_print; + + $default_per_page = $this->config->default_per_page; + $data->paging_options = $this->config->paging_options; + $data->default_per_page = is_numeric($default_per_page) && $default_per_page >1 && in_array($default_per_page,$data->paging_options)? $default_per_page : 25; + + if($data->list === false) + { + throw new Exception('It is impossible to get data. Please check your model and try again.', 13); + $data->list = array(); + } + + foreach($data->list as $num_row => $row) + { + $data->list[$num_row]->primary_key_value = $row->{$data->primary_key}; + $data->list[$num_row]->edit_url = $data->edit_url.'/'.$row->{$data->primary_key}; + $data->list[$num_row]->delete_url = $data->delete_url.'/'.$row->{$data->primary_key}; + $data->list[$num_row]->read_url = $data->read_url.'/'.$row->{$data->primary_key}; + } + + if(!$ajax) + { + $this->_add_js_vars(array('dialog_forms' => $this->config->dialog_forms)); + + $data->list_view = $this->_theme_view('list.php',$data,true); + $this->_theme_view('list_template.php',$data); + } + else + { + $this->set_echo_and_die(); + $this->_theme_view('list.php',$data); + } + } + + protected function exportToExcel($state_info = null) + { + $data = $this->get_common_data(); + + $data->order_by = $this->order_by; + $data->types = $this->get_field_types(); + + $data->list = $this->get_list(); + $data->list = $this->change_list($data->list , $data->types); + $data->list = $this->change_list_add_actions($data->list); + + $data->total_results = $this->get_total_results(); + + $data->columns = $this->get_columns(); + $data->primary_key = $this->get_primary_key(); + + @ob_end_clean(); + $this->_export_to_excel($data); + } + + protected function _export_to_excel($data) + { + /** + * No need to use an external library here. The only bad thing without using external library is that Microsoft Excel is complaining + * that the file is in a different format than specified by the file extension. If you press "Yes" everything will be just fine. + * */ + + $string_to_export = ""; + foreach($data->columns as $column){ + $string_to_export .= $column->display_as."\t"; + } + $string_to_export .= "\n"; + + foreach($data->list as $num_row => $row){ + foreach($data->columns as $column){ + $string_to_export .= $this->_trim_export_string($row->{$column->field_name})."\t"; + } + $string_to_export .= "\n"; + } + + // Convert to UTF-16LE and Prepend BOM + $string_to_export = "\xFF\xFE" .mb_convert_encoding($string_to_export, 'UTF-16LE', 'UTF-8'); + + $filename = "export-".date("Y-m-d_H:i:s").".xls"; + + header('Content-type: application/vnd.ms-excel;charset=UTF-16LE'); + header('Content-Disposition: attachment; filename='.$filename); + header("Cache-Control: no-cache"); + echo $string_to_export; + die(); + } + + protected function print_webpage($state_info = null) + { + $data = $this->get_common_data(); + + $data->order_by = $this->order_by; + $data->types = $this->get_field_types(); + + $data->list = $this->get_list(); + $data->list = $this->change_list($data->list , $data->types); + $data->list = $this->change_list_add_actions($data->list); + + $data->total_results = $this->get_total_results(); + + $data->columns = $this->get_columns(); + $data->primary_key = $this->get_primary_key(); + + @ob_end_clean(); + $this->_print_webpage($data); + } + + protected function _print_webpage($data) + { + $string_to_print = ""; + $string_to_print .= ""; + + echo $string_to_print; + die(); + } + + protected function _trim_export_string($value) + { + $value = str_replace(array(" ","&",">","<"),array(" ","&",">","<"),$value); + return strip_tags(str_replace(array("\t","\n","\r"),"",$value)); + } + + protected function _trim_print_string($value) + { + $value = str_replace(array(" ","&",">","<"),array(" ","&",">","<"),$value); + + //If the value has only spaces and nothing more then add the whitespace html character + if(str_replace(" ","",$value) == "") + $value = " "; + + return strip_tags($value); + } + + protected function set_echo_and_die() + { + $this->echo_and_die = true; + } + + protected function unset_echo_and_die() + { + $this->echo_and_die = false; + } + + protected function showListInfo() + { + $this->set_echo_and_die(); + + $total_results = (int)$this->get_total_results(); + @ob_end_clean(); + echo json_encode(array('total_results' => $total_results)); + die(); + } + + protected function change_list_add_actions($list) + { + if(empty($this->actions)) + return $list; + + $primary_key = $this->get_primary_key(); + + foreach($list as $num_row => $row) + { + $actions_urls = array(); + foreach($this->actions as $unique_id => $action) + { + if(!empty($action->url_callback)) + { + $actions_urls[$unique_id] = call_user_func($action->url_callback, $row->$primary_key, $row); + } + else + { + $actions_urls[$unique_id] = + $action->url_has_http ? + $action->link_url.$row->$primary_key : + site_url($action->link_url.'/'.$row->$primary_key); + } + } + $row->action_urls = $actions_urls; + } + + return $list; + } + + protected function change_list($list,$types) + { + $primary_key = $this->get_primary_key(); + $has_callbacks = !empty($this->callback_column) ? true : false; + $output_columns = $this->get_columns(); + foreach($list as $num_row => $row) + { + foreach($output_columns as $column) + { + $field_name = $column->field_name; + $field_value = isset( $row->{$column->field_name} ) ? $row->{$column->field_name} : null; + if( $has_callbacks && isset($this->callback_column[$field_name]) ) + $list[$num_row]->$field_name = call_user_func($this->callback_column[$field_name], $field_value, $row); + elseif(isset($types[$field_name])) + $list[$num_row]->$field_name = $this->change_list_value($types[$field_name] , $field_value); + else + $list[$num_row]->$field_name = $field_value; + } + } + + return $list; + } + + protected function showAddForm() + { + $this->set_js_lib($this->default_javascript_path.'/'.grocery_CRUD::JQUERY); + + $data = $this->get_common_data(); + $data->types = $this->get_field_types(); + + $data->list_url = $this->getListUrl(); + $data->insert_url = $this->getInsertUrl(); + $data->validation_url = $this->getValidationInsertUrl(); + $data->input_fields = $this->get_add_input_fields(); + + $data->fields = $this->get_add_fields(); + $data->hidden_fields = $this->get_add_hidden_fields(); + $data->unset_back_to_list = $this->unset_back_to_list; + $data->unique_hash = $this->get_method_hash(); + $data->is_ajax = $this->_is_ajax(); + + $this->_theme_view('add.php',$data); + $this->_inline_js("var js_date_format = '".$this->js_date_format."';"); + + $this->_get_ajax_results(); + } + + protected function showEditForm($state_info) + { + $this->set_js_lib($this->default_javascript_path.'/'.grocery_CRUD::JQUERY); + + $data = $this->get_common_data(); + $data->types = $this->get_field_types(); + + $data->field_values = $this->get_edit_values($state_info->primary_key); + + $data->add_url = $this->getAddUrl(); + + $data->list_url = $this->getListUrl(); + $data->update_url = $this->getUpdateUrl($state_info); + $data->delete_url = $this->getDeleteUrl($state_info); + $data->read_url = $this->getReadUrl($state_info->primary_key); + $data->input_fields = $this->get_edit_input_fields($data->field_values); + $data->unique_hash = $this->get_method_hash(); + + $data->fields = $this->get_edit_fields(); + $data->hidden_fields = $this->get_edit_hidden_fields(); + $data->unset_back_to_list = $this->unset_back_to_list; + + $data->validation_url = $this->getValidationUpdateUrl($state_info->primary_key); + $data->is_ajax = $this->_is_ajax(); + + $this->_theme_view('edit.php',$data); + $this->_inline_js("var js_date_format = '".$this->js_date_format."';"); + + $this->_get_ajax_results(); + } + + protected function showReadForm($state_info) + { + $this->set_js_lib($this->default_javascript_path.'/'.grocery_CRUD::JQUERY); + + $data = $this->get_common_data(); + $data->types = $this->get_field_types(); + + $data->field_values = $this->get_edit_values($state_info->primary_key); + + $data->add_url = $this->getAddUrl(); + + $data->list_url = $this->getListUrl(); + $data->update_url = $this->getUpdateUrl($state_info); + $data->delete_url = $this->getDeleteUrl($state_info); + $data->read_url = $this->getReadUrl($state_info->primary_key); + $data->input_fields = $this->get_read_input_fields($data->field_values); + $data->unique_hash = $this->get_method_hash(); + + $data->fields = $this->get_read_fields(); + $data->hidden_fields = $this->get_edit_hidden_fields(); + $data->unset_back_to_list = $this->unset_back_to_list; + + $data->validation_url = $this->getValidationUpdateUrl($state_info->primary_key); + $data->is_ajax = $this->_is_ajax(); + + $this->_theme_view('read.php',$data); + $this->_inline_js("var js_date_format = '".$this->js_date_format."';"); + + $this->_get_ajax_results(); + } + + protected function delete_layout($delete_result = true) + { + @ob_end_clean(); + if($delete_result === false) + { + $error_message = '

    '.$this->l('delete_error_message').'

    '; + + echo json_encode(array('success' => $delete_result ,'error_message' => $error_message)); + } + else + { + $success_message = '

    '.$this->l('delete_success_message').'

    '; + + echo json_encode(array('success' => true , 'success_message' => $success_message)); + } + $this->set_echo_and_die(); + } + + protected function get_success_message_at_list($field_info = null) + { + if($field_info !== null && isset($field_info->success_message) && $field_info->success_message) + { + if(!empty($field_info->primary_key) && !$this->unset_edit) + { + return $this->l('insert_success_message')." ".$this->l('form_edit')." {$this->subject} "; + } + else + { + return $this->l('insert_success_message'); + } + } + else + { + return null; + } + } + + protected function insert_layout($insert_result = false) + { + @ob_end_clean(); + if($insert_result === false) + { + echo json_encode(array('success' => false)); + } + else + { + $success_message = '

    '.$this->l('insert_success_message'); + + if(!$this->unset_back_to_list && !empty($insert_result) && !$this->unset_edit) + { + $success_message .= " ".$this->l('form_edit')." {$this->subject} "; + + if (!$this->_is_ajax()) { + $success_message .= $this->l('form_or'); + } + } + + if(!$this->unset_back_to_list && !$this->_is_ajax()) + { + $success_message .= " ".$this->l('form_go_back_to_list').""; + } + + $success_message .= '

    '; + + echo json_encode(array( + 'success' => true , + 'insert_primary_key' => $insert_result, + 'success_message' => $success_message, + 'success_list_url' => $this->getListSuccessUrl($insert_result) + )); + } + $this->set_echo_and_die(); + } + + protected function validation_layout($validation_result) + { + @ob_end_clean(); + echo json_encode($validation_result); + $this->set_echo_and_die(); + } + + protected function upload_layout($upload_result, $field_name) + { + @ob_end_clean(); + if($upload_result !== false && !is_string($upload_result) && empty($upload_result[0]->error)) + { + echo json_encode( + (object)array( + 'success' => true, + 'files' => $upload_result + )); + } + else + { + $result = (object)array('success' => false); + if(is_string($upload_result)) + $result->message = $upload_result; + if(!empty($upload_result[0]->error)) + $result->message = $upload_result[0]->error; + + echo json_encode($result); + } + + $this->set_echo_and_die(); + } + + protected function delete_file_layout($upload_result) + { + @ob_end_clean(); + if($upload_result !== false) + { + echo json_encode( (object)array( 'success' => true ) ); + } + else + { + echo json_encode((object)array('success' => false)); + } + + $this->set_echo_and_die(); + } + + public function set_css($css_file) + { + $this->css_files[sha1($css_file)] = base_url().$css_file; + } + + public function set_js($js_file) + { + $this->js_files[sha1($js_file)] = base_url().$js_file; + } + + public function set_js_lib($js_file) + { + $this->js_lib_files[sha1($js_file)] = base_url().$js_file; + $this->js_files[sha1($js_file)] = base_url().$js_file; + } + + public function set_js_config($js_file) + { + $this->js_config_files[sha1($js_file)] = base_url().$js_file; + $this->js_files[sha1($js_file)] = base_url().$js_file; + } + + public function is_IE7() + { + return isset($_SERVER['HTTP_USER_AGENT']) + && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7') !== false) + ? true : false; + } + + public function get_css_files() + { + return $this->css_files; + } + + public function get_js_files() + { + return $this->js_files; + } + + public function get_js_lib_files() + { + return $this->js_lib_files; + } + + public function get_js_config_files() + { + return $this->js_config_files; + } + + /** + * Load Javascripts + **/ + protected function load_js_fancybox() + { + $this->set_css($this->default_css_path.'/jquery_plugins/fancybox/jquery.fancybox.css'); + + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.fancybox-1.3.4.js'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.easing-1.3.pack.js'); + } + + protected function load_js_chosen() + { + $this->set_css($this->default_css_path.'/jquery_plugins/chosen/chosen.css'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.chosen.min.js'); + } + + protected function load_js_jqueryui() + { + $this->set_css($this->default_css_path.'/ui/simple/'.grocery_CRUD::JQUERY_UI_CSS); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/ui/'.grocery_CRUD::JQUERY_UI_JS); + } + + protected function load_js_uploader() + { + $this->set_css($this->default_css_path.'/ui/simple/'.grocery_CRUD::JQUERY_UI_CSS); + $this->set_css($this->default_css_path.'/jquery_plugins/file_upload/file-uploader.css'); + $this->set_css($this->default_css_path.'/jquery_plugins/file_upload/jquery.fileupload-ui.css'); + + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/ui/'.grocery_CRUD::JQUERY_UI_JS); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/tmpl.min.js'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/load-image.min.js'); + + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.iframe-transport.js'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.fileupload.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.fileupload.config.js'); + } + + protected function get_layout() + { + $js_files = $this->get_js_files(); + $css_files = $this->get_css_files(); + + $js_lib_files = $this->get_js_lib_files(); + $js_config_files = $this->get_js_config_files(); + + if ($this->unset_jquery) { + unset($js_files[sha1($this->default_javascript_path.'/'.grocery_CRUD::JQUERY)]); + } + + if ($this->unset_jquery_ui) { + unset($css_files[sha1($this->default_css_path.'/ui/simple/'.grocery_CRUD::JQUERY_UI_CSS)]); + unset($js_files[sha1($this->default_javascript_path.'/jquery_plugins/ui/'.grocery_CRUD::JQUERY_UI_JS)]); + } + + if ($this->unset_bootstrap) { + unset($js_files[sha1($this->default_theme_path.'/bootstrap/js/bootstrap/dropdown.js')]); + unset($js_files[sha1($this->default_theme_path.'/bootstrap/js/bootstrap/modal.js')]); + unset($js_files[sha1($this->default_theme_path.'/bootstrap/js/bootstrap/dropdown.min.js')]); + unset($js_files[sha1($this->default_theme_path.'/bootstrap/js/bootstrap/modal.min.js')]); + unset($css_files[sha1($this->default_theme_path.'/bootstrap/css/bootstrap/bootstrap.css')]); + unset($css_files[sha1($this->default_theme_path.'/bootstrap/css/bootstrap/bootstrap.min.css')]); + unset($css_files[sha1($this->default_theme_path.'/bootstrap-v4/css/bootstrap/bootstrap.css')]); + unset($css_files[sha1($this->default_theme_path.'/bootstrap-v4/css/bootstrap/bootstrap.min.css')]); + } + + if($this->echo_and_die === false) + { + /** Initialize JavaScript variables */ + $js_vars = array( + 'default_javascript_path' => base_url().$this->default_javascript_path, + 'default_css_path' => base_url().$this->default_css_path, + 'default_texteditor_path' => base_url().$this->default_texteditor_path, + 'default_theme_path' => base_url().$this->default_theme_path, + 'base_url' => base_url() + ); + $this->_add_js_vars($js_vars); + + return (object)array( + 'js_files' => $js_files, + 'js_lib_files' => $js_lib_files, + 'js_config_files' => $js_config_files, + 'css_files' => $css_files, + 'output' => $this->views_as_string, + ); + } + elseif($this->echo_and_die === true) + { + echo $this->views_as_string; + die(); + } + } + + protected function update_layout($update_result = false, $state_info = null) + { + @ob_end_clean(); + if($update_result === false) + { + echo json_encode(array('success' => $update_result)); + } + else + { + $success_message = '

    '.$this->l('update_success_message'); + if(!$this->unset_back_to_list && !$this->_is_ajax()) + { + $success_message .= " ".$this->l('form_go_back_to_list').""; + } + $success_message .= '

    '; + + echo json_encode(array( + 'success' => true , + 'insert_primary_key' => $update_result, + 'success_message' => $success_message, + 'success_list_url' => $this->getListSuccessUrl($state_info->primary_key) + )); + } + $this->set_echo_and_die(); + } + + protected function get_integer_input($field_info,$value) + { + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.numeric.min.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.numeric.config.js'); + $extra_attributes = ''; + if(!empty($field_info->db_max_length)) + $extra_attributes .= "maxlength='{$field_info->db_max_length}'"; + $input = ""; + return $input; + } + + protected function get_true_false_input($field_info,$value) + { + $value_is_null = empty($value) && $value !== '0' && $value !== 0 ? true : false; + + $input = "
    "; + + $true_string = is_array($field_info->extras) && array_key_exists(1,$field_info->extras) ? $field_info->extras[1] : $this->default_true_false_text[1]; + $checked = $value === '1' || ($value_is_null && $field_info->default === '1') ? "checked = 'checked'" : ""; + $input .= + "
    "; + + $false_string = is_array($field_info->extras) && array_key_exists(0,$field_info->extras) ? $field_info->extras[0] : $this->default_true_false_text[0]; + $checked = $value === '0' || ($value_is_null && $field_info->default === '0') ? "checked = 'checked'" : ""; + $input .= + "
    "; + + $input .= "
    "; + + return $input; + } + + protected function get_string_input($field_info,$value) + { + $value = !is_string($value) ? '' : str_replace('"',""",$value); + + $extra_attributes = ''; + if (!empty($field_info->db_max_length)) { + + if (in_array($field_info->type, array("decimal", "float"))) { + $decimal_lentgh = explode(",", $field_info->db_max_length); + $decimal_lentgh = ((int)$decimal_lentgh[0]) + 1; + + $extra_attributes .= "maxlength='" . $decimal_lentgh . "'"; + } else { + $extra_attributes .= "maxlength='{$field_info->db_max_length}'"; + } + + } + $input = ""; + return $input; + } + + protected function get_text_input($field_info,$value) + { + if($field_info->extras == 'text_editor') + { + $editor = $this->config->default_text_editor; + switch ($editor) { + case 'ckeditor': + $this->set_js_lib($this->default_texteditor_path.'/ckeditor/ckeditor.js'); + $this->set_js_lib($this->default_texteditor_path.'/ckeditor/adapters/jquery.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.ckeditor.config.js'); + break; + + case 'tinymce': + $this->set_js_lib($this->default_texteditor_path.'/tiny_mce/jquery.tinymce.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.tine_mce.config.js'); + break; + + case 'markitup': + $this->set_css($this->default_texteditor_path.'/markitup/skins/markitup/style.css'); + $this->set_css($this->default_texteditor_path.'/markitup/sets/default/style.css'); + + $this->set_js_lib($this->default_texteditor_path.'/markitup/jquery.markitup.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.markitup.config.js'); + break; + } + + $class_name = $this->config->text_editor_type == 'minimal' ? 'mini-texteditor' : 'texteditor'; + + $input = ""; + } + else + { + $input = ""; + } + return $input; + } + + protected function get_datetime_input($field_info,$value) + { + $this->set_css($this->default_css_path.'/ui/simple/'.grocery_CRUD::JQUERY_UI_CSS); + $this->set_css($this->default_css_path.'/jquery_plugins/jquery.ui.datetime.css'); + $this->set_css($this->default_css_path.'/jquery_plugins/jquery-ui-timepicker-addon.css'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/ui/'.grocery_CRUD::JQUERY_UI_JS); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery-ui-timepicker-addon.js'); + + if($this->language !== 'english') + { + include($this->default_config_path.'/language_alias.php'); + if(array_key_exists($this->language, $language_alias)) + { + $i18n_date_js_file = $this->default_javascript_path.'/jquery_plugins/ui/i18n/datepicker/jquery.ui.datepicker-'.$language_alias[$this->language].'.js'; + if(file_exists($i18n_date_js_file)) + { + $this->set_js_lib($i18n_date_js_file); + } + + $i18n_datetime_js_file = $this->default_javascript_path.'/jquery_plugins/ui/i18n/timepicker/jquery-ui-timepicker-'.$language_alias[$this->language].'.js'; + if(file_exists($i18n_datetime_js_file)) + { + $this->set_js_lib($i18n_datetime_js_file); + } + } + } + + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery-ui-timepicker-addon.config.js'); + + if(!empty($value) && $value != '0000-00-00 00:00:00' && $value != '1970-01-01 00:00:00'){ + list($year,$month,$day) = explode('-',substr($value,0,10)); + $date = date($this->php_date_format, mktime(0,0,0,$month,$day,$year)); + $datetime = $date.substr($value,10); + } + else + { + $datetime = ''; + } + $input = " + ".$this->l('form_button_clear')." + ({$this->ui_date_format}) hh:mm:ss"; + return $input; + } + + protected function get_hidden_input($field_info,$value) + { + if($field_info->extras !== null && $field_info->extras != false) + $value = $field_info->extras; + $input = ""; + return $input; + } + + protected function get_password_input($field_info,$value) + { + $value = !is_string($value) ? '' : $value; + + $extra_attributes = ''; + if(!empty($field_info->db_max_length)) + $extra_attributes .= "maxlength='{$field_info->db_max_length}'"; + $input = ""; + return $input; + } + + protected function get_date_input($field_info,$value) + { + $this->set_css($this->default_css_path.'/ui/simple/'.grocery_CRUD::JQUERY_UI_CSS); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/ui/'.grocery_CRUD::JQUERY_UI_JS); + + if($this->language !== 'english') + { + include($this->default_config_path.'/language_alias.php'); + if(array_key_exists($this->language, $language_alias)) + { + $i18n_date_js_file = $this->default_javascript_path.'/jquery_plugins/ui/i18n/datepicker/jquery.ui.datepicker-'.$language_alias[$this->language].'.js'; + if(file_exists($i18n_date_js_file)) + { + $this->set_js_lib($i18n_date_js_file); + } + } + } + + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.datepicker.config.js'); + + if(!empty($value) && $value != '0000-00-00' && $value != '1970-01-01') + { + list($year,$month,$day) = explode('-',substr($value,0,10)); + $date = date($this->php_date_format, mktime(0,0,0,$month,$day,$year)); + } + else + { + $date = ''; + } + + $input = " + ".$this->l('form_button_clear')." (".$this->ui_date_format.")"; + return $input; + } + + protected function get_dropdown_input($field_info,$value) + { + $this->load_js_chosen(); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js'); + + $select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title')); + + $input = ""; + return $input; + } + + protected function get_enum_input($field_info,$value) + { + $this->load_js_chosen(); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js'); + + $select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title')); + + $input = ""; + return $input; + } + + protected function get_readonly_input($field_info, $value) + { + $read_only_value = " "; + + if (!empty($value) && !is_array($value)) { + $read_only_value = $value; + } elseif (is_array($value)) { + $all_values = array_values($value); + $read_only_value = implode(", ",$all_values); + } + + return '
    '.$read_only_value.'
    '; + } + + protected function get_set_input($field_info,$value) + { + $this->load_js_chosen(); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js'); + + $options_array = $field_info->extras !== false && is_array($field_info->extras)? $field_info->extras : explode("','",substr($field_info->db_max_length,1,-1)); + $selected_values = !empty($value) ? explode(",",$value) : array(); + + $select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title')); + $input = ""; + + return $input; + } + + protected function get_multiselect_input($field_info,$value) + { + $this->load_js_chosen(); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js'); + + $options_array = $field_info->extras; + $selected_values = !empty($value) ? explode(",",$value) : array(); + + $select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title')); + $input = ""; + + return $input; + } + + protected function get_relation_input($field_info,$value) + { + $this->load_js_chosen(); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js'); + + $ajax_limitation = 10000; + $total_rows = $this->get_relation_total_rows($field_info->extras); + + + //Check if we will use ajax for our queries or just clien-side javascript + $using_ajax = $total_rows > $ajax_limitation ? true : false; + + //We will not use it for now. It is not ready yet. Probably we will have this functionality at version 1.4 + $using_ajax = false; + + //If total rows are more than the limitation, use the ajax plugin + $ajax_or_not_class = $using_ajax ? 'chosen-select' : 'chosen-select'; + + $this->_inline_js("var ajax_relation_url = '".$this->getAjaxRelationUrl()."';\n"); + + $select_title = str_replace('{field_display_as}',$field_info->display_as,$this->l('set_relation_title')); + $input = ""; + return $input; + } + + protected function get_relation_readonly_input($field_info,$value) + { + $options_array = $this->get_relation_array($field_info->extras); + + $value = isset($options_array[$value]) ? $options_array[$value] : ''; + + return $this->get_readonly_input($field_info, $value); + } + + protected function get_upload_file_readonly_input($field_info,$value) + { + $file = $file_url = base_url().$field_info->extras->upload_path.'/'.$value; + + $value = !empty($value) ? ''.$value.'' : ''; + + return $this->get_readonly_input($field_info, $value); + } + + protected function get_relation_n_n_input($field_info_type, $selected_values) + { + $has_priority_field = !empty($field_info_type->extras->priority_field_relation_table) ? true : false; + $is_ie_7 = isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7') !== false) ? true : false; + + if($has_priority_field || $is_ie_7) + { + $this->set_css($this->default_css_path.'/ui/simple/'.grocery_CRUD::JQUERY_UI_CSS); + $this->set_css($this->default_css_path.'/jquery_plugins/ui.multiselect.css'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/ui/'.grocery_CRUD::JQUERY_UI_JS); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/ui.multiselect.min.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.multiselect.js'); + + if($this->language !== 'english') + { + include($this->default_config_path.'/language_alias.php'); + if(array_key_exists($this->language, $language_alias)) + { + $i18n_date_js_file = $this->default_javascript_path.'/jquery_plugins/ui/i18n/multiselect/ui-multiselect-'.$language_alias[$this->language].'.js'; + if(file_exists($i18n_date_js_file)) + { + $this->set_js_lib($i18n_date_js_file); + } + } + } + } + else + { + $this->set_css($this->default_css_path.'/jquery_plugins/chosen/chosen.css'); + $this->set_js_lib($this->default_javascript_path.'/jquery_plugins/jquery.chosen.min.js'); + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.chosen.config.js'); + } + + $this->_inline_js("var ajax_relation_url = '".$this->getAjaxRelationUrl()."';\n"); + + $field_info = $this->relation_n_n[$field_info_type->name]; //As we use this function the relation_n_n exists, so don't need to check + $unselected_values = $this->get_relation_n_n_unselected_array($field_info, $selected_values); + + if(empty($unselected_values) && empty($selected_values)) + { + $input = "Please add {$field_info_type->display_as} first"; + } + else + { + $css_class = $has_priority_field || $is_ie_7 ? 'multiselect': 'chosen-multiple-select'; + $width_style = $has_priority_field || $is_ie_7 ? '' : 'width:510px;'; + + $select_title = str_replace('{field_display_as}',$field_info_type->display_as,$this->l('set_relation_title')); + $input = ""; + } + + return $input; + } + + protected function _convert_bytes_ui_to_bytes($bytes_ui) + { + $bytes_ui = str_replace(' ','',$bytes_ui); + if(strstr($bytes_ui,'MB')) + $bytes = (int)(str_replace('MB','',$bytes_ui))*1024*1024; + elseif(strstr($bytes_ui,'KB')) + $bytes = (int)(str_replace('KB','',$bytes_ui))*1024; + elseif(strstr($bytes_ui,'B')) + $bytes = (int)(str_replace('B','',$bytes_ui)); + else + $bytes = (int)($bytes_ui); + + return $bytes; + } + + protected function get_upload_file_input($field_info, $value) + { + $this->load_js_uploader(); + + //Fancybox + $this->load_js_fancybox(); + + $this->set_js_config($this->default_javascript_path.'/jquery_plugins/config/jquery.fancybox.config.js'); + + $unique = mt_rand(); + + $allowed_files = $this->config->file_upload_allow_file_types; + $allowed_files_ui = '.'.str_replace('|',',.',$allowed_files); + $max_file_size_ui = $this->config->file_upload_max_file_size; + $max_file_size_bytes = $this->_convert_bytes_ui_to_bytes($max_file_size_ui); + + $this->_inline_js(' + var upload_info_'.$unique.' = { + accepted_file_types: /(\\.|\\/)('.$allowed_files.')$/i, + accepted_file_types_ui : "'.$allowed_files_ui.'", + max_file_size: '.$max_file_size_bytes.', + max_file_size_ui: "'.$max_file_size_ui.'" + }; + + var string_upload_file = "'.$this->l('form_upload_a_file').'"; + var string_delete_file = "'.$this->l('string_delete_file').'"; + var string_progress = "'.$this->l('string_progress').'"; + var error_on_uploading = "'.$this->l('error_on_uploading').'"; + var message_prompt_delete_file = "'.$this->l('message_prompt_delete_file').'"; + + var error_max_number_of_files = "'.$this->l('error_max_number_of_files').'"; + var error_accept_file_types = "'.$this->l('error_accept_file_types').'"; + var error_max_file_size = "'.str_replace("{max_file_size}",$max_file_size_ui,$this->l('error_max_file_size')).'"; + var error_min_file_size = "'.$this->l('error_min_file_size').'"; + + var base_url = "'.base_url().'"; + var upload_a_file_string = "'.$this->l('form_upload_a_file').'"; + '); + + $uploader_display_none = empty($value) ? "" : "display:none;"; + $file_display_none = empty($value) ? "display:none;" : ""; + + $is_image = !empty($value) && + ( substr($value,-4) == '.jpg' + || substr($value,-4) == '.png' + || substr($value,-5) == '.jpeg' + || substr($value,-4) == '.gif' + || substr($value,-5) == '.tiff') + ? true : false; + + $image_class = $is_image ? 'image-thumbnail' : ''; + + $input = ' + '.$this->l('form_upload_a_file').' + + + '; + + $this->set_css($this->default_css_path.'/jquery_plugins/file_upload/fileuploader.css'); + + $file_url = base_url().$field_info->extras->upload_path.'/'.$value; + + $input .= "
    "; + $input .= "
    "; + $input .= ""; + $input .= "
    "; + $input .= "
    "; + + return $input; + } + + protected function get_add_hidden_fields() + { + return $this->add_hidden_fields; + } + + protected function get_edit_hidden_fields() + { + return $this->edit_hidden_fields; + } + + protected function get_add_input_fields($field_values = null) + { + $fields = $this->get_add_fields(); + $types = $this->get_field_types(); + + $input_fields = array(); + + foreach($fields as $field_num => $field) + { + $field_info = $types[$field->field_name]; + + $field_value = !empty($field_values) && isset($field_values->{$field->field_name}) ? $field_values->{$field->field_name} : null; + + if(!isset($this->callback_add_field[$field->field_name])) + { + $field_input = $this->get_field_input($field_info, $field_value); + } + else + { + $field_input = $field_info; + $field_input->input = call_user_func($this->callback_add_field[$field->field_name], $field_value, null, $field_info); + } + + switch ($field_info->crud_type) { + case 'invisible': + unset($this->add_fields[$field_num]); + unset($fields[$field_num]); + continue; + break; + case 'hidden': + $this->add_hidden_fields[] = $field_input; + unset($this->add_fields[$field_num]); + unset($fields[$field_num]); + continue; + break; + } + + $input_fields[$field->field_name] = $field_input; + } + + return $input_fields; + } + + protected function get_edit_input_fields($field_values = null) + { + $fields = $this->get_edit_fields(); + $types = $this->get_field_types(); + + $input_fields = array(); + + foreach($fields as $field_num => $field) + { + $field_info = $types[$field->field_name]; + + $field_value = !empty($field_values) && isset($field_values->{$field->field_name}) ? $field_values->{$field->field_name} : null; + if(!isset($this->callback_edit_field[$field->field_name])) + { + $field_input = $this->get_field_input($field_info, $field_value); + } + else + { + $primary_key = $this->getStateInfo()->primary_key; + $field_input = $field_info; + $field_input->input = call_user_func($this->callback_edit_field[$field->field_name], $field_value, $primary_key, $field_info, $field_values); + } + + switch ($field_info->crud_type) { + case 'invisible': + unset($this->edit_fields[$field_num]); + unset($fields[$field_num]); + continue; + break; + case 'hidden': + $this->edit_hidden_fields[] = $field_input; + unset($this->edit_fields[$field_num]); + unset($fields[$field_num]); + continue; + break; + } + + $input_fields[$field->field_name] = $field_input; + } + + return $input_fields; + } + + protected function get_read_input_fields($field_values = null) + { + $read_fields = $this->get_read_fields(); + + $this->field_types = null; + $this->required_fields = null; + + $read_inputs = array(); + foreach ($read_fields as $field) { + if (!empty($this->change_field_type) + && isset($this->change_field_type[$field->field_name]) + && $this->change_field_type[$field->field_name]->type == 'hidden') { + continue; + } + $this->field_type($field->field_name, 'readonly'); + } + + $fields = $this->get_read_fields(); + $types = $this->get_field_types(); + + $input_fields = array(); + + foreach($fields as $field_num => $field) + { + $field_info = $types[$field->field_name]; + + $field_value = !empty($field_values) && isset($field_values->{$field->field_name}) ? $field_values->{$field->field_name} : null; + if(!isset($this->callback_read_field[$field->field_name])) + { + $field_input = $this->get_field_input($field_info, $field_value); + } + else + { + $primary_key = $this->getStateInfo()->primary_key; + $field_input = $field_info; + $field_input->input = call_user_func($this->callback_read_field[$field->field_name], $field_value, $primary_key, $field_info, $field_values); + } + + switch ($field_info->crud_type) { + case 'invisible': + unset($this->read_fields[$field_num]); + unset($fields[$field_num]); + continue; + break; + case 'hidden': + $this->read_hidden_fields[] = $field_input; + unset($this->read_fields[$field_num]); + unset($fields[$field_num]); + continue; + break; + } + + $input_fields[$field->field_name] = $field_input; + } + + return $input_fields; + } + + protected function setThemeBasics() + { + $this->theme_path = $this->default_theme_path; + if(substr($this->theme_path,-1) != '/') + $this->theme_path = $this->theme_path.'/'; + + include($this->theme_path.$this->theme.'/config.php'); + + $this->theme_config = $config; + } + + public function set_theme($theme = null) + { + $this->theme = $theme; + + return $this; + } + + protected function _get_ajax_results() + { + //This is a $_POST request rather that $_GET request , because + //Codeigniter doesn't like the $_GET requests so much! + if ($this->_is_ajax()) { + @ob_end_clean(); + $results= (object)array( + 'output' => $this->views_as_string, + 'js_files' => array_values($this->get_js_files()), + 'js_lib_files' => array_values($this->get_js_lib_files()), + 'js_config_files' => array_values($this->get_js_config_files()), + 'css_files' => array_values($this->get_css_files()) + ); + + echo json_encode($results); + die; + } + //else just continue + } + + protected function _is_ajax() + { + return array_key_exists('is_ajax', $_POST) && $_POST['is_ajax'] == 'true' ? true: false; + } + + protected function _theme_view($view, $vars = array(), $return = FALSE) + { + $vars = (is_object($vars)) ? get_object_vars($vars) : $vars; + + $file_exists = FALSE; + + $ext = pathinfo($view, PATHINFO_EXTENSION); + $file = ($ext == '') ? $view.'.php' : $view; + + $view_file = $this->theme_path.$this->theme.'/views/'; + + if (file_exists($view_file.$file)) + { + $path = $view_file.$file; + $file_exists = TRUE; + } + + if ( ! $file_exists) + { + throw new Exception('Unable to load the requested file: '.$file, 16); + } + + extract($vars); + + #region buffering... + ob_start(); + + include($path); + + $buffer = ob_get_contents(); + @ob_end_clean(); + #endregion + + if ($return === TRUE) + { + return $buffer; + } + + $this->views_as_string .= $buffer; + } + + protected function _inline_js($inline_js = '') + { + $this->views_as_string .= "\n"; + } + + protected function _add_js_vars($js_vars = array()) + { + $javascript_as_string = "\n"; + $this->views_as_string .= $javascript_as_string; + } + + protected function get_views_as_string() + { + if(!empty($this->views_as_string)) + return $this->views_as_string; + else + return null; + } +} + + +/** + * PHP grocery CRUD + * + * LICENSE + * + * Grocery CRUD is released with dual licensing, using the GPL v3 (license-gpl3.txt) and the MIT license (license-mit.txt). + * You don't have to do anything special to choose one license or the other and you don't have to notify anyone which license you are using. + * Please see the corresponding license file for details of these licenses. + * You are free to use, modify and distribute this software, but all copyright information must remain. + * + * @package grocery CRUD + * @copyright Copyright (c) 2010 through 2014, John Skoumbourdis + * @license https://github.com/scoumbourdis/grocery-crud/blob/master/license-grocery-crud.txt + * @author John Skoumbourdis + */ + +// ------------------------------------------------------------------------ + +/** + * PHP grocery States + * + * States of grocery CRUD + * + * @package grocery CRUD + * @author John Skoumbourdis + * @version 1.5.8 + */ +class grocery_CRUD_States extends grocery_CRUD_Layout +{ + const STATE_UNKNOWN = 0; + const STATE_LIST = 1; + const STATE_ADD = 2; + const STATE_EDIT = 3; + const STATE_DELETE = 4; + const STATE_INSERT = 5; + + const STATE_READ = 18; + const STATE_DELETE_MULTIPLE = '19'; + + protected $states = array( + 0 => 'unknown', + 1 => 'list', + 2 => 'add', + 3 => 'edit', + 4 => 'delete', + 5 => 'insert', + 6 => 'update', + 7 => 'ajax_list', + 8 => 'ajax_list_info', + 9 => 'insert_validation', + 10 => 'update_validation', + 11 => 'upload_file', + 12 => 'delete_file', + 13 => 'ajax_relation', + 14 => 'ajax_relation_n_n', + 15 => 'success', + 16 => 'export', + 17 => 'print', + 18 => 'read', + 19 => 'delete_multiple' + ); + + public function getStateInfo() + { + $state_code = $this->getStateCode(); + $segment_object = $this->get_state_info_from_url(); + + $first_parameter = $segment_object->first_parameter; + $second_parameter = $segment_object->second_parameter; + + $state_info = (object)array(); + + switch ($state_code) { + case self::STATE_LIST: + case self::STATE_ADD: + //for now... do nothing! Keeping this switch here in case we need any information at the future. + break; + + case self::STATE_EDIT: + case self::STATE_READ: + if ($first_parameter !== null) { + $state_info = (object) array('primary_key' => $first_parameter); + } else { + throw new Exception('On the state "edit" the Primary key cannot be null', 6); + die(); + } + break; + + case self::STATE_DELETE: + if ($first_parameter !== null) { + $state_info = (object) array('primary_key' => $first_parameter); + } else { + throw new Exception('On the state "delete" the Primary key cannot be null',7); + die(); + } + break; + + case self::STATE_DELETE_MULTIPLE: + if (!empty($_POST) && !empty($_POST['ids']) && is_array($_POST['ids'])) { + $state_info = (object) array('ids' => $_POST['ids']); + } else { + throw new Exception('On the state "Delete Multiple" you need send the ids as a post array.'); + die(); + } + break; + + case self::STATE_INSERT: + if(!empty($_POST)) + { + $state_info = (object)array('unwrapped_data' => $_POST); + } + else + { + throw new Exception('On the state "insert" you must have post data',8); + die(); + } + break; + + case 6: + if(!empty($_POST) && $first_parameter !== null) + { + $state_info = (object)array('primary_key' => $first_parameter,'unwrapped_data' => $_POST); + } + elseif(empty($_POST)) + { + throw new Exception('On the state "update" you must have post data',9); + die(); + } + else + { + throw new Exception('On the state "update" the Primary key cannot be null',10); + die(); + } + break; + + case 7: + case 8: + case 16: //export to excel + case 17: //print + $state_info = (object)array(); + if(!empty($_POST['per_page'])) + { + $state_info->per_page = is_numeric($_POST['per_page']) ? $_POST['per_page'] : null; + } + if(!empty($_POST['page'])) + { + $state_info->page = is_numeric($_POST['page']) ? $_POST['page'] : null; + } + //If we request an export or a print we don't care about what page we are + if($state_code === 16 || $state_code === 17) + { + $state_info->page = 1; + $state_info->per_page = 1000000; //a very big number! + } + if(!empty($_POST['order_by'][0])) + { + $state_info->order_by = $_POST['order_by']; + } + if(!empty($_POST['search_text'])) + { + if(empty($_POST['search_field'])) + { + $search_text = strip_tags($_POST['search_field']); + $state_info->search = (object)array('field' => null , 'text' => $_POST['search_text']); + } + else + { + if (is_array($_POST['search_field'])) { + $search_array = array(); + foreach ($_POST['search_field'] as $search_key => $search_field_name) { + $search_array[$search_field_name] = !empty($_POST['search_text'][$search_key]) ? $_POST['search_text'][$search_key] : ''; + } + $state_info->search = $search_array; + } else { + $state_info->search = (object)array( + 'field' => strip_tags($_POST['search_field']) , + 'text' => $_POST['search_text'] ); + } + } + } + break; + + case 9: + + break; + + case 10: + if($first_parameter !== null) + { + $state_info = (object)array('primary_key' => $first_parameter); + } + break; + + case 11: + $state_info->field_name = $first_parameter; + break; + + case 12: + $state_info->field_name = $first_parameter; + $state_info->file_name = $second_parameter; + break; + + case 13: + $state_info->field_name = $_POST['field_name']; + $state_info->search = $_POST['term']; + break; + + case 14: + $state_info->field_name = $_POST['field_name']; + $state_info->search = $_POST['term']; + break; + + case 15: + $state_info = (object)array( + 'primary_key' => $first_parameter, + 'success_message' => true + ); + break; + } + + return $state_info; + } + + protected function getStateCode() + { + $state_string = $this->get_state_info_from_url()->operation; + + if( $state_string != 'unknown' && in_array( $state_string, $this->states ) ) + $state_code = array_search($state_string, $this->states); + else + $state_code = 0; + + return $state_code; + } + + protected function state_url($url = '', $is_list_page = false) + { + //Easy scenario, we had set the crud_url_path + if (!empty($this->crud_url_path)) { + $state_url = !empty($this->list_url_path) && $is_list_page? + $this->list_url_path : + $this->crud_url_path.'/'.$url ; + } else { + //Complicated scenario. The crud_url_path is not specified so we are + //trying to understand what is going on from the URL. + $ci = &get_instance(); + + $segment_object = $this->get_state_info_from_url(); + $method_name = $this->get_method_name(); + $segment_position = $segment_object->segment_position; + + $state_url_array = array(); + + if( sizeof($ci->uri->segments) > 0 ) { + foreach($ci->uri->segments as $num => $value) + { + $state_url_array[$num] = $value; + if($num == ($segment_position - 1)) + break; + } + + if( $method_name == 'index' && !in_array( 'index', $state_url_array ) ) //there is a scenario that you don't have the index to your url + $state_url_array[$num+1] = 'index'; + } + + $state_url = site_url(implode('/',$state_url_array).'/'.$url); + } + + return $state_url; + } + + protected function get_state_info_from_url() + { + $ci = &get_instance(); + + $segment_position = count($ci->uri->segments) + 1; + $operation = 'list'; + + $segements = $ci->uri->segments; + foreach($segements as $num => $value) + { + if($value != 'unknown' && in_array($value, $this->states)) + { + $segment_position = (int)$num; + $operation = $value; //I don't have a "break" here because I want to ensure that is the LAST segment with name that is in the array. + } + } + + $function_name = $this->get_method_name(); + + if($function_name == 'index' && !in_array('index',$ci->uri->segments)) + $segment_position++; + + $first_parameter = isset($segements[$segment_position+1]) ? $segements[$segment_position+1] : null; + $second_parameter = isset($segements[$segment_position+2]) ? $segements[$segment_position+2] : null; + + return (object)array('segment_position' => $segment_position, 'operation' => $operation, 'first_parameter' => $first_parameter, 'second_parameter' => $second_parameter); + } + + protected function get_method_hash() + { + $ci = &get_instance(); + + $state_info = $this->get_state_info_from_url(); + $extra_values = $ci->uri->segment($state_info->segment_position - 1) != $this->get_method_name() ? $ci->uri->segment($state_info->segment_position - 1) : ''; + + return $this->crud_url_path !== null + ? md5($this->crud_url_path) + : md5($this->get_controller_name().$this->get_method_name().$extra_values); + } + + protected function get_method_name() + { + $ci = &get_instance(); + return $ci->router->method; + } + + protected function get_controller_name() + { + $ci = &get_instance(); + return $ci->router->class; + } + + public function getState() + { + return $this->states[$this->getStateCode()]; + } + + protected function getListUrl() + { + return $this->state_url('',true); + } + + protected function getAjaxListUrl() + { + return $this->state_url('ajax_list'); + } + + protected function getExportToExcelUrl() + { + return $this->state_url('export'); + } + + protected function getPrintUrl() + { + return $this->state_url('print'); + } + + protected function getAjaxListInfoUrl() + { + return $this->state_url('ajax_list_info'); + } + + protected function getAddUrl() + { + return $this->state_url('add'); + } + + protected function getInsertUrl() + { + return $this->state_url('insert'); + } + + protected function getValidationInsertUrl() + { + return $this->state_url('insert_validation'); + } + + protected function getValidationUpdateUrl($primary_key = null) + { + if($primary_key === null) + return $this->state_url('update_validation'); + else + return $this->state_url('update_validation/'.$primary_key); + } + + protected function getEditUrl($primary_key = null) + { + if($primary_key === null) + return $this->state_url('edit'); + else + return $this->state_url('edit/'.$primary_key); + } + + protected function getReadUrl($primary_key = null) + { + if($primary_key === null) + return $this->state_url('read'); + else + return $this->state_url('read/'.$primary_key); + } + + protected function getUpdateUrl($state_info) + { + return $this->state_url('update/'.$state_info->primary_key); + } + + protected function getDeleteUrl($state_info = null) + { + if (empty($state_info)) { + return $this->state_url('delete'); + } else { + return $this->state_url('delete/'.$state_info->primary_key); + } + } + + protected function getDeleteMultipleUrl() + { + return $this->state_url('delete_multiple'); + } + + protected function getListSuccessUrl($primary_key = null) + { + if(empty($primary_key)) + return $this->state_url('success',true); + else + return $this->state_url('success/'.$primary_key,true); + } + + protected function getUploadUrl($field_name) + { + return $this->state_url('upload_file/'.$field_name); + } + + protected function getFileDeleteUrl($field_name) + { + return $this->state_url('delete_file/'.$field_name); + } + + protected function getAjaxRelationUrl() + { + return $this->state_url('ajax_relation'); + } + + protected function getAjaxRelationManytoManyUrl() + { + return $this->state_url('ajax_relation_n_n'); + } +} + + +/** + * PHP grocery CRUD + * + * LICENSE + * + * Grocery CRUD is released with dual licensing, using the GPL v3 (license-gpl3.txt) and the MIT license (license-mit.txt). + * You don't have to do anything special to choose one license or the other and you don't have to notify anyone which license you are using. + * Please see the corresponding license file for details of these licenses. + * You are free to use, modify and distribute this software, but all copyright information must remain. + * + * @package grocery CRUD + * @copyright Copyright (c) 2010 through 2014, John Skoumbourdis + * @license https://github.com/scoumbourdis/grocery-crud/blob/master/license-grocery-crud.txt + * @version 1.5.8 + * @author John Skoumbourdis + */ + +// ------------------------------------------------------------------------ + +/** + * PHP grocery CRUD + * + * Creates a full functional CRUD with few lines of code. + * + * @package grocery CRUD + * @author John Skoumbourdis + * @license https://github.com/scoumbourdis/grocery-crud/blob/master/license-grocery-crud.txt + * @link http://www.grocerycrud.com/documentation + */ +class Grocery_CRUD extends grocery_CRUD_States +{ + /** + * Grocery CRUD version + * + * @var string + */ + const VERSION = "1.5.8"; + + const JQUERY = "jquery-1.11.1.min.js"; + const JQUERY_UI_JS = "jquery-ui-1.10.3.custom.min.js"; + const JQUERY_UI_CSS = "jquery-ui-1.10.1.custom.min.css"; + + protected $state_code = null; + protected $state_info = null; + protected $columns = null; + + private $basic_db_table_checked = false; + private $columns_checked = false; + private $add_fields_checked = false; + private $edit_fields_checked = false; + private $read_fields_checked = false; + + protected $default_theme = 'flexigrid'; + protected $language = null; + protected $lang_strings = array(); + protected $php_date_format = null; + protected $js_date_format = null; + protected $ui_date_format = null; + protected $character_limiter = null; + protected $config = null; + + protected $add_fields = null; + protected $edit_fields = null; + protected $read_fields = null; + protected $add_hidden_fields = array(); + protected $edit_hidden_fields = array(); + protected $field_types = null; + protected $basic_db_table = null; + protected $theme_config = array(); + protected $subject = null; + protected $subject_plural = null; + protected $display_as = array(); + protected $order_by = null; + protected $where = array(); + protected $like = array(); + protected $having = array(); + protected $or_having = array(); + protected $limit = null; + protected $required_fields = array(); + protected $_unique_fields = array(); + protected $validation_rules = array(); + protected $relation = array(); + protected $relation_n_n = array(); + protected $upload_fields = array(); + protected $actions = array(); + + protected $form_validation = null; + protected $change_field_type = null; + protected $primary_keys = array(); + protected $crud_url_path = null; + protected $list_url_path = null; + + /* The unsetters */ + protected $unset_texteditor = array(); + protected $unset_add = false; + protected $unset_edit = false; + protected $unset_delete = false; + protected $unset_read = false; + protected $unset_jquery = false; + protected $unset_jquery_ui = false; + protected $unset_bootstrap = false; + protected $unset_list = false; + protected $unset_export = false; + protected $unset_print = false; + protected $unset_back_to_list = false; + protected $unset_columns = null; + protected $unset_add_fields = null; + protected $unset_edit_fields = null; + protected $unset_read_fields = null; + + /* Callbacks */ + protected $callback_before_insert = null; + protected $callback_after_insert = null; + protected $callback_insert = null; + protected $callback_before_update = null; + protected $callback_after_update = null; + protected $callback_update = null; + protected $callback_before_delete = null; + protected $callback_after_delete = null; + protected $callback_delete = null; + protected $callback_column = array(); + protected $callback_add_field = array(); + protected $callback_edit_field = array(); + protected $callback_upload = null; + protected $callback_before_upload = null; + protected $callback_after_upload = null; + + protected $default_javascript_path = null; //autogenerate, please do not modify + protected $default_css_path = null; //autogenerate, please do not modify + protected $default_texteditor_path = null; //autogenerate, please do not modify + protected $default_theme_path = null; //autogenerate, please do not modify + protected $default_language_path = 'assets/grocery_crud/languages'; + protected $default_config_path = 'assets/grocery_crud/config'; + protected $default_assets_path = 'assets/grocery_crud'; + + /** + * + * Constructor + * + * @access public + */ + public function __construct() + { + + } + + /** + * The displayed columns that user see + * + * @access public + * @param string + * @param array + * @return void + */ + public function columns() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->columns = $args; + + return $this; + } + + + /** + * Set Validation Rules + * + * Important note: If the $field is an array then no automated crud fields will take apart + * + * @access public + * @param mixed + * @param string + * @oaram array + * @return void + */ + function set_rules($field, $label = '', $rules = '', $errors = array()) + { + if(is_string($field)) + { + $this->validation_rules[$field] = array('field' => $field, 'label' => $label, 'rules' => $rules, 'errors' => $errors); + }elseif(is_array($field)) + { + foreach($field as $num_field => $field_array) + { + $this->validation_rules[$field_array['field']] = $field_array; + } + } + return $this; + } + + /** + * + * Changes the default field type + * @param string $field + * @param string $type + * @param array|string $extras + */ + public function change_field_type($field , $type, $extras = null) + { + $field_type = (object)array('type' => $type); + + $field_type->extras = $extras; + + $this->change_field_type[$field] = $field_type; + + return $this; + } + + /** + * + * Just an alias to the change_field_type method + * @param string $field + * @param string $type + * @param array|string $extras + */ + public function field_type($field , $type, $extras = null) + { + return $this->change_field_type($field , $type, $extras); + } + + /** + * Change the default primary key for a specific table. + * If the $table_name is NULL then the primary key is for the default table name that we added at the set_table method + * + * @param string $primary_key_field + * @param string $table_name + */ + public function set_primary_key($primary_key_field, $table_name = null) + { + $this->primary_keys[] = array('field_name' => $primary_key_field, 'table_name' => $table_name); + + return $this; + } + + /** + * Unsets the texteditor of the selected fields + * + * @access public + * @param string + * @param array + * @return void + */ + public function unset_texteditor() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + foreach($args as $arg) + { + $this->unset_texteditor[] = $arg; + } + + return $this; + } + + /** + * Unsets just the jquery library from the js. This function can be used if there is already a jquery included + * in the main template. This will avoid all jquery conflicts. + * + * @return void + */ + public function unset_jquery() + { + $this->unset_jquery = true; + + return $this; + } + + /** + * Unsets the jquery UI Javascript and CSS. This function is really useful + * when the jquery UI JavaScript and CSS are already included in the main template. + * This will avoid all jquery UI conflicts. + * + * @return void + */ + public function unset_jquery_ui() + { + $this->unset_jquery_ui = true; + + return $this; + } + + /** + * Unsets just the twitter bootstrap libraries from the js and css. This function can be used if there is already twitter bootstrap files included + * in the main template. If you are already using a bootstrap template then it's not necessary to load the files again. + * + * @return void + */ + public function unset_bootstrap() + { + $this->unset_bootstrap = true; + + return $this; + } + + /** + * Unsets the add operation from the list + * + * @return void + */ + public function unset_add() + { + $this->unset_add = true; + + return $this; + } + + /** + * Unsets the edit operation from the list + * + * @return void + */ + public function unset_edit() + { + $this->unset_edit = true; + + return $this; + } + + /** + * Unsets the delete operation from the list + * + * @return void + */ + public function unset_delete() + { + $this->unset_delete = true; + + return $this; + } + + /** + * Unsets the read operation from the list + * + * @return void + */ + public function unset_read() + { + $this->unset_read = true; + + return $this; + } + + /** + * Just an alias to unset_read + * + * @return void + * */ + public function unset_view() + { + return unset_read(); + } + + /** + * Unsets the export button and functionality from the list + * + * @return void + */ + public function unset_export() + { + $this->unset_export = true; + + return $this; + } + + + /** + * Unsets the print button and functionality from the list + * + * @return void + */ + public function unset_print() + { + $this->unset_print = true; + + return $this; + } + + /** + * Unsets all the operations from the list + * + * @return void + */ + public function unset_operations() + { + $this->unset_add = true; + $this->unset_edit = true; + $this->unset_delete = true; + $this->unset_read = true; + $this->unset_export = true; + $this->unset_print = true; + + return $this; + } + + /** + * Unsets a column from the list + * + * @return void. + */ + public function unset_columns() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->unset_columns = $args; + + return $this; + } + + public function unset_list() + { + $this->unset_list = true; + + return $this; + } + + public function unset_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->unset_add_fields = $args; + $this->unset_edit_fields = $args; + $this->unset_read_fields = $args; + + return $this; + } + + public function unset_add_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->unset_add_fields = $args; + + return $this; + } + + public function unset_edit_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->unset_edit_fields = $args; + + return $this; + } + + public function unset_read_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->unset_read_fields = $args; + + return $this; + } + + + /** + * Unsets everything that has to do with buttons or links with go back to list message + * @access public + * @return void + */ + public function unset_back_to_list() + { + $this->unset_back_to_list = true; + + return $this; + } + + /** + * + * The fields that user will see on add/edit + * + * @access public + * @param string + * @param array + * @return void + */ + public function fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->add_fields = $args; + $this->edit_fields = $args; + + return $this; + } + + /** + * + * The fields that user can see . It is only for the add form + */ + public function add_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->add_fields = $args; + + return $this; + } + + /** + * + * The fields that user can see . It is only for the edit form + */ + public function edit_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->edit_fields = $args; + + return $this; + } + + public function set_read_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) { + $args = $args[0]; + } + + $this->read_fields = $args; + + return $this;$args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) { + $args = $args[0]; + } + + $this->read_fields = $args; + + return $this; + } + + /** + * + * Changes the displaying label of the field + * @param $field_name + * @param $display_as + * @return void + */ + public function display_as($field_name, $display_as = null) + { + if(is_array($field_name)) + { + foreach($field_name as $field => $display_as) + { + $this->display_as[$field] = $display_as; + } + } + elseif($display_as !== null) + { + $this->display_as[$field_name] = $display_as; + } + return $this; + } + + /** + * + * Load the language strings array from the language file + */ + protected function _load_language() + { + if($this->language === null) + { + $this->language = strtolower($this->config->default_language); + } + include($this->default_language_path.'/'.$this->language.'.php'); + + foreach($lang as $handle => $lang_string) + if(!isset($this->lang_strings[$handle])) + $this->lang_strings[$handle] = $lang_string; + + $this->default_true_false_text = array( $this->l('form_inactive') , $this->l('form_active')); + $this->subject = $this->subject === null ? $this->l('list_record') : $this->subject; + + } + + protected function _load_date_format() + { + list($php_day, $php_month, $php_year) = array('d','m','Y'); + list($js_day, $js_month, $js_year) = array('dd','mm','yy'); + list($ui_day, $ui_month, $ui_year) = array($this->l('ui_day'), $this->l('ui_month'), $this->l('ui_year')); + + $date_format = $this->config->date_format; + switch ($date_format) { + case 'uk-date': + $this->php_date_format = "$php_day/$php_month/$php_year"; + $this->js_date_format = "$js_day/$js_month/$js_year"; + $this->ui_date_format = "$ui_day/$ui_month/$ui_year"; + break; + + case 'us-date': + $this->php_date_format = "$php_month/$php_day/$php_year"; + $this->js_date_format = "$js_month/$js_day/$js_year"; + $this->ui_date_format = "$ui_month/$ui_day/$ui_year"; + break; + + case 'sql-date': + default: + $this->php_date_format = "$php_year-$php_month-$php_day"; + $this->js_date_format = "$js_year-$js_month-$js_day"; + $this->ui_date_format = "$ui_year-$ui_month-$ui_day"; + break; + } + } + + /** + * + * Set a language string directly + * @param string $handle + * @param string $string + */ + public function set_lang_string($handle, $lang_string){ + $this->lang_strings[$handle] = $lang_string; + + return $this; + } + + /** + * + * Just an alias to get_lang_string method + * @param string $handle + */ + public function l($handle) + { + return $this->get_lang_string($handle); + } + + /** + * + * Get the language string of the inserted string handle + * @param string $handle + */ + public function get_lang_string($handle) + { + return $this->lang_strings[$handle]; + } + + /** + * + * Simply set the language + * @example english + * @param string $language + */ + public function set_language($language) + { + $this->language = $language; + + return $this; + } + + /** + * + * Enter description here ... + */ + protected function get_columns() + { + if($this->columns_checked === false) + { + $field_types = $this->get_field_types(); + if(empty($this->columns)) + { + $this->columns = array(); + foreach($field_types as $field) + { + if( !isset($field->db_extra) || $field->db_extra != 'auto_increment' ) + $this->columns[] = $field->name; + } + } + + foreach($this->columns as $col_num => $column) + { + + if(isset($this->relation[$column])) + { + + $new_column = $this->_unique_field_name($this->relation[$column][0]); + $this->columns[$col_num] = $new_column; + + if(isset($this->display_as[$column])) + { + $display_as = $this->display_as[$column]; + unset($this->display_as[$column]); + $this->display_as[$new_column] = $display_as; + } + else + { + $this->display_as[$new_column] = ucfirst(str_replace('_',' ',$column)); + } + + $column = $new_column; + $this->columns[$col_num] = $new_column; + } + else + { + if(!empty($this->relation)) + { + $table_name = $this->get_table(); + foreach($this->relation as $relation) + { + if( $relation[2] == $column ) + { + $new_column = $table_name.'.'.$column; + if(isset($this->display_as[$column])) + { + $display_as = $this->display_as[$column]; + unset($this->display_as[$column]); + $this->display_as[$new_column] = $display_as; + } + else + { + $this->display_as[$new_column] = ucfirst(str_replace('_',' ',$column)); + } + + $column = $new_column; + $this->columns[$col_num] = $new_column; + } + } + } + + } + + if(isset($this->display_as[$column])) + $this->columns[$col_num] = (object)array('field_name' => $column, 'display_as' => $this->display_as[$column]); + elseif(isset($field_types[$column])) + $this->columns[$col_num] = (object)array('field_name' => $column, 'display_as' => $field_types[$column]->display_as); + else + $this->columns[$col_num] = (object)array('field_name' => $column, 'display_as' => + ucfirst(str_replace('_',' ',$column))); + + if(!empty($this->unset_columns) && in_array($column,$this->unset_columns)) + { + unset($this->columns[$col_num]); + } + } + + $this->columns_checked = true; + + } + + return $this->columns; + } + + /** + * + * Enter description here ... + */ + protected function get_add_fields() + { + if($this->add_fields_checked === false) + { + $field_types = $this->get_field_types(); + if(!empty($this->add_fields)) + { + foreach($this->add_fields as $field_num => $field) + { + if(isset($this->display_as[$field])) + $this->add_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => $this->display_as[$field]); + elseif(isset($field_types[$field]->display_as)) + $this->add_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => $field_types[$field]->display_as); + else + $this->add_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => ucfirst(str_replace('_',' ',$field))); + } + } + else + { + $this->add_fields = array(); + foreach($field_types as $field) + { + //Check if an unset_add_field is initialize for this field name + if($this->unset_add_fields !== null && is_array($this->unset_add_fields) && in_array($field->name,$this->unset_add_fields)) + continue; + + if( (!isset($field->db_extra) || $field->db_extra != 'auto_increment') ) + { + if(isset($this->display_as[$field->name])) + $this->add_fields[] = (object)array('field_name' => $field->name, 'display_as' => $this->display_as[$field->name]); + else + $this->add_fields[] = (object)array('field_name' => $field->name, 'display_as' => $field->display_as); + } + } + } + + $this->add_fields_checked = true; + } + return $this->add_fields; + } + + /** + * + * Enter description here ... + */ + protected function get_edit_fields() + { + if($this->edit_fields_checked === false) + { + $field_types = $this->get_field_types(); + if(!empty($this->edit_fields)) + { + foreach($this->edit_fields as $field_num => $field) + { + if(isset($this->display_as[$field])) + $this->edit_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => $this->display_as[$field]); + else + $this->edit_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => $field_types[$field]->display_as); + } + } + else + { + $this->edit_fields = array(); + foreach($field_types as $field) + { + //Check if an unset_edit_field is initialize for this field name + if($this->unset_edit_fields !== null && is_array($this->unset_edit_fields) && in_array($field->name,$this->unset_edit_fields)) + continue; + + if(!isset($field->db_extra) || $field->db_extra != 'auto_increment') + { + if(isset($this->display_as[$field->name])) + $this->edit_fields[] = (object)array('field_name' => $field->name, 'display_as' => $this->display_as[$field->name]); + else + $this->edit_fields[] = (object)array('field_name' => $field->name, 'display_as' => $field->display_as); + } + } + } + + $this->edit_fields_checked = true; + } + return $this->edit_fields; + } + + /** + * + * Enter description here ... + */ + protected function get_read_fields() + { + if($this->read_fields_checked === false) + { + $field_types = $this->get_field_types(); + if(!empty($this->read_fields)) + { + foreach($this->read_fields as $field_num => $field) + { + if(isset($this->display_as[$field])) + $this->read_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => $this->display_as[$field]); + else + $this->read_fields[$field_num] = (object)array('field_name' => $field, 'display_as' => $field_types[$field]->display_as); + } + } + else + { + $this->read_fields = array(); + foreach($field_types as $field) + { + //Check if an unset_read_field is initialize for this field name + if($this->unset_read_fields !== null && is_array($this->unset_read_fields) && in_array($field->name,$this->unset_read_fields)) + continue; + + if(!isset($field->db_extra) || $field->db_extra != 'auto_increment') + { + if(isset($this->display_as[$field->name])) + $this->read_fields[] = (object)array('field_name' => $field->name, 'display_as' => $this->display_as[$field->name]); + else + $this->read_fields[] = (object)array('field_name' => $field->name, 'display_as' => $field->display_as); + } + } + } + + $this->read_fields_checked = true; + } + return $this->read_fields; + } + + public function order_by($order_by, $direction = 'asc') + { + $this->order_by = array($order_by,$direction); + + return $this; + } + + public function where($key, $value = NULL, $escape = TRUE) + { + $this->where[] = array($key,$value,$escape); + + return $this; + } + + public function or_where($key, $value = NULL, $escape = TRUE) + { + $this->or_where[] = array($key,$value,$escape); + + return $this; + } + + public function like($field, $match = '', $side = 'both') + { + $this->like[] = array($field, $match, $side); + + return $this; + } + + protected function having($key, $value = '', $escape = TRUE) + { + $this->having[] = array($key, $value, $escape); + + return $this; + } + + protected function or_having($key, $value = '', $escape = TRUE) + { + $this->or_having[] = array($key, $value, $escape); + + return $this; + } + + public function or_like($field, $match = '', $side = 'both') + { + $this->or_like[] = array($field, $match, $side); + + return $this; + } + + public function limit($limit, $offset = '') + { + $this->limit = array($limit,$offset); + + return $this; + } + + protected function _initialize_helpers() + { + $ci = &get_instance(); + + $ci->load->helper('url'); + $ci->load->helper('form'); + } + + protected function _initialize_variables() + { + $ci = &get_instance(); + $ci->load->config('grocery_crud'); + + $this->config = (object)array(); + + /** Initialize all the config variables into this object */ + $this->config->default_language = $ci->config->item('grocery_crud_default_language'); + $this->config->date_format = $ci->config->item('grocery_crud_date_format'); + $this->config->default_per_page = $ci->config->item('grocery_crud_default_per_page'); + $this->config->file_upload_allow_file_types = $ci->config->item('grocery_crud_file_upload_allow_file_types'); + $this->config->file_upload_max_file_size = $ci->config->item('grocery_crud_file_upload_max_file_size'); + $this->config->default_text_editor = $ci->config->item('grocery_crud_default_text_editor'); + $this->config->text_editor_type = $ci->config->item('grocery_crud_text_editor_type'); + $this->config->character_limiter = $ci->config->item('grocery_crud_character_limiter'); + $this->config->dialog_forms = $ci->config->item('grocery_crud_dialog_forms'); + $this->config->paging_options = $ci->config->item('grocery_crud_paging_options'); + $this->config->default_theme = $ci->config->item('grocery_crud_default_theme'); + $this->config->environment = $ci->config->item('grocery_crud_environment'); + $this->config->xss_clean = $ci->config->item('grocery_crud_xss_clean'); + + /** Initialize default paths */ + $this->default_javascript_path = $this->default_assets_path.'/js'; + $this->default_css_path = $this->default_assets_path.'/css'; + $this->default_texteditor_path = $this->default_assets_path.'/texteditor'; + $this->default_theme_path = $this->default_assets_path.'/themes'; + + $this->character_limiter = $this->config->character_limiter; + + if ($this->character_limiter === 0 || $this->character_limiter === '0') { + $this->character_limiter = 1000000; //a very big number + } elseif($this->character_limiter === null || $this->character_limiter === false) { + $this->character_limiter = 30; //is better to have the number 30 rather than the 0 value + } + + if ($this->theme === null && !empty($this->config->default_theme)) { + $this->set_theme($this->config->default_theme); + } + } + + protected function _set_primary_keys_to_model() + { + if(!empty($this->primary_keys)) + { + foreach($this->primary_keys as $primary_key) + { + $this->basic_model->set_primary_key($primary_key['field_name'],$primary_key['table_name']); + } + } + } + + /** + * Initialize all the required libraries and variables before rendering + */ + protected function pre_render() + { + $this->_initialize_variables(); + $this->_initialize_helpers(); + $this->_load_language(); + $this->state_code = $this->getStateCode(); + + if($this->basic_model === null) + $this->set_default_Model(); + + $this->set_basic_db_table($this->get_table()); + + $this->_load_date_format(); + + $this->_set_primary_keys_to_model(); + } + + /** + * + * Or else ... make it work! The web application takes decision of what to do and show it to the final user. + * Without this function nothing works. Here is the core of grocery CRUD project. + * + * @access public + */ + public function render() + { + $this->pre_render(); + + if( $this->state_code != 0 ) + { + $this->state_info = $this->getStateInfo(); + } + else + { + throw new Exception('The state is unknown , I don\'t know what I will do with your data!', 4); + die(); + } + + switch ($this->state_code) { + case 15://success + case 1://list + if($this->unset_list) + { + throw new Exception('You don\'t have permissions for this operation', 14); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + + $this->showList(false,$state_info); + + break; + + case 2://add + if($this->unset_add) + { + throw new Exception('You don\'t have permissions for this operation', 14); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $this->showAddForm(); + + break; + + case 3://edit + if($this->unset_edit) + { + throw new Exception('You don\'t have permissions for this operation', 14); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + + $this->showEditForm($state_info); + + break; + + case 4://delete + if($this->unset_delete) + { + throw new Exception('This user is not allowed to do this operation', 14); + die(); + } + + $state_info = $this->getStateInfo(); + $delete_result = $this->db_delete($state_info); + + $this->delete_layout( $delete_result ); + break; + + case 5://insert + if($this->unset_add) + { + throw new Exception('This user is not allowed to do this operation', 14); + die(); + } + + $state_info = $this->getStateInfo(); + $insert_result = $this->db_insert($state_info); + + $this->insert_layout($insert_result); + break; + + case 6://update + if($this->unset_edit) + { + throw new Exception('This user is not allowed to do this operation', 14); + die(); + } + + $state_info = $this->getStateInfo(); + $update_result = $this->db_update($state_info); + + $this->update_layout( $update_result,$state_info); + break; + + case 7://ajax_list + + if($this->unset_list) + { + throw new Exception('You don\'t have permissions for this operation', 14); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + $this->set_ajax_list_queries($state_info); + + $this->showList(true); + + break; + + case 8://ajax_list_info + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + $this->set_ajax_list_queries($state_info); + + $this->showListInfo(); + break; + + case 9://insert_validation + + $validation_result = $this->db_insert_validation(); + + $this->validation_layout($validation_result); + break; + + case 10://update_validation + + $validation_result = $this->db_update_validation(); + + $this->validation_layout($validation_result); + break; + + case 11://upload_file + + $state_info = $this->getStateInfo(); + + $upload_result = $this->upload_file($state_info); + + $this->upload_layout($upload_result, $state_info->field_name); + break; + + case 12://delete_file + $state_info = $this->getStateInfo(); + + $delete_file_result = $this->delete_file($state_info); + + $this->delete_file_layout($delete_file_result); + break; + /* + case 13: //ajax_relation + $state_info = $this->getStateInfo(); + + $ajax_relation_result = $this->ajax_relation($state_info); + + $ajax_relation_result[""] = ""; + + echo json_encode($ajax_relation_result); + die(); + break; + + case 14: //ajax_relation_n_n + echo json_encode(array("34" => 'Johnny' , "78" => "Test")); + die(); + break; + */ + case 16: //export to excel + //a big number just to ensure that the table characters will not be cutted. + $this->character_limiter = 1000000; + + if($this->unset_export) + { + throw new Exception('You don\'t have permissions for this operation', 15); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + $this->set_ajax_list_queries($state_info); + $this->exportToExcel($state_info); + break; + + case 17: //print + //a big number just to ensure that the table characters will not be cutted. + $this->character_limiter = 1000000; + + if($this->unset_print) + { + throw new Exception('You don\'t have permissions for this operation', 15); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + $this->set_ajax_list_queries($state_info); + $this->print_webpage($state_info); + break; + + case grocery_CRUD_States::STATE_READ: + if($this->unset_read) + { + throw new Exception('You don\'t have permissions for this operation', 14); + die(); + } + + if($this->theme === null) + $this->set_theme($this->default_theme); + $this->setThemeBasics(); + + $this->set_basic_Layout(); + + $state_info = $this->getStateInfo(); + + $this->showReadForm($state_info); + + break; + + case grocery_CRUD_States::STATE_DELETE_MULTIPLE: + + if($this->unset_delete) + { + throw new Exception('This user is not allowed to do this operation'); + die(); + } + + $state_info = $this->getStateInfo(); + $delete_result = $this->db_multiple_delete($state_info); + + $this->delete_layout($delete_result); + + break; + + } + + return $this->get_layout(); + } + + protected function get_common_data() + { + $data = (object)array(); + + $data->subject = $this->subject; + $data->subject_plural = $this->subject_plural; + + return $data; + } + + /** + * + * Enter description here ... + */ + public function callback_before_insert($callback = null) + { + $this->callback_before_insert = $callback; + + return $this; + } + + /** + * + * Enter description here ... + */ + public function callback_after_insert($callback = null) + { + $this->callback_after_insert = $callback; + + return $this; + } + + /** + * + * Enter description here ... + */ + public function callback_insert($callback = null) + { + $this->callback_insert = $callback; + + return $this; + } + + + /** + * + * Enter description here ... + */ + public function callback_before_update($callback = null) + { + $this->callback_before_update = $callback; + + return $this; + } + + /** + * + * Enter description here ... + */ + public function callback_after_update($callback = null) + { + $this->callback_after_update = $callback; + + return $this; + } + + + /** + * + * Enter description here ... + * @param mixed $callback + */ + public function callback_update($callback = null) + { + $this->callback_update = $callback; + + return $this; + } + + /** + * + * Enter description here ... + */ + public function callback_before_delete($callback = null) + { + $this->callback_before_delete = $callback; + + return $this; + } + + /** + * + * Enter description here ... + */ + public function callback_after_delete($callback = null) + { + $this->callback_after_delete = $callback; + + return $this; + } + + /** + * + * Enter description here ... + */ + public function callback_delete($callback = null) + { + $this->callback_delete = $callback; + + return $this; + } + + /** + * + * Enter description here ... + * @param string $column + * @param mixed $callback + */ + public function callback_column($column ,$callback = null) + { + $this->callback_column[$column] = $callback; + + return $this; + } + + /** + * + * Enter description here ... + * @param string $field + * @param mixed $callback + */ + public function callback_field($field, $callback = null) + { + $this->callback_add_field[$field] = $callback; + $this->callback_edit_field[$field] = $callback; + + return $this; + } + + /** + * + * Enter description here ... + * @param string $field + * @param mixed $callback + */ + public function callback_add_field($field, $callback = null) + { + $this->callback_add_field[$field] = $callback; + + return $this; + } + + /** + * + * Enter description here ... + * @param string $field + * @param mixed $callback + */ + public function callback_edit_field($field, $callback = null) + { + $this->callback_edit_field[$field] = $callback; + + return $this; + } + + /** + * + * Callback that replace the default auto uploader + * + * @param mixed $callback + * @return grocery_CRUD + */ + public function callback_upload($callback = null) + { + $this->callback_upload = $callback; + + return $this; + } + + /** + * + * A callback that triggered before the upload functionality. This callback is suggested for validation checks + * @param mixed $callback + * @return grocery_CRUD + */ + public function callback_before_upload($callback = null) + { + $this->callback_before_upload = $callback; + + return $this; + } + + /** + * + * A callback that triggered after the upload functionality + * @param mixed $callback + * @return grocery_CRUD + */ + public function callback_after_upload($callback = null) + { + $this->callback_after_upload = $callback; + + return $this; + + } + + /** + * + * Gets the basic database table of our crud. + * @return string + */ + public function get_table() + { + if($this->basic_db_table_checked) + { + return $this->basic_db_table; + } + elseif( $this->basic_db_table !== null ) + { + if(!$this->table_exists($this->basic_db_table)) + { + throw new Exception('The table name does not exist. Please check you database and try again.',11); + die(); + } + $this->basic_db_table_checked = true; + return $this->basic_db_table; + } + else + { + //Last try , try to find the table from your view / function name!!! Not suggested but it works . + $last_chance_table_name = $this->get_method_name(); + if($this->table_exists($last_chance_table_name)) + { + $this->set_table($last_chance_table_name); + } + $this->basic_db_table_checked = true; + return $this->basic_db_table; + + } + + return false; + } + + /** + * + * The field names of the required fields + */ + public function required_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->required_fields = $args; + + return $this; + } + + /** + * Add the fields that they are as UNIQUE in the database structure + * + * @return grocery_CRUD + */ + public function unique_fields() + { + $args = func_get_args(); + + if(isset($args[0]) && is_array($args[0])) + { + $args = $args[0]; + } + + $this->_unique_fields = $args; + + return $this; + } + + /** + * + * Sets the basic database table that we will get our data. + * @param string $table_name + * @return grocery_CRUD + */ + public function set_table($table_name) + { + if(!empty($table_name) && $this->basic_db_table === null) + { + $this->basic_db_table = $table_name; + } + elseif(!empty($table_name)) + { + throw new Exception('You have already insert a table name once...', 1); + } + else + { + throw new Exception('The table name cannot be empty.', 2); + die(); + } + + return $this; + } + + /** + * Set a full URL path to this method. + * + * This method is useful when the path is not specified correctly. + * Especially when we are using routes. + * For example: + * Let's say we have the path http://www.example.com/ however the original url path is + * http://www.example.com/example/index . We have to specify the url so we can have + * all the CRUD operations correctly. + * The url path has to be set from this method like this: + * + * $crud->set_crud_url_path(site_url('example/index')); + * + * + * @param string $crud_url_path + * @param string $list_url_path + * @return grocery_CRUD + */ + public function set_crud_url_path($crud_url_path, $list_url_path = null) + { + $this->crud_url_path = $crud_url_path; + + //If the list_url_path is empty so we are guessing that the list_url_path + //will be the same with crud_url_path + $this->list_url_path = !empty($list_url_path) ? $list_url_path : $crud_url_path; + + return $this; + } + + /** + * + * Set a subject to understand what type of CRUD you use. + * ---------------------------------------------------------------------------------------------- + * Subject_plural: Sets the subject to its plural form. For example the plural + * of "Customer" is "Customers", "Product" is "Products"... e.t.c. + * @example In this CRUD we work with the table db_categories. The $subject will be the 'Category' + * and the $subject_plural will be 'Categories' + * @param string $subject + * @param string $subject_plural + * @return grocery_CRUD + */ + public function set_subject($subject, $subject_plural = null) + { + $this->subject = $subject; + $this->subject_plural = $subject_plural === null ? $subject : $subject_plural; + + return $this; + } + + /** + * + * Enter description here ... + * @param $title + * @param $image_url + * @param $url + * @param $css_class + * @param $url_callback + */ + public function add_action( $label, $image_url = '', $link_url = '', $css_class = '', $url_callback = null) + { + $unique_id = substr($label,0,1).substr(md5($label.$link_url),-8); //The unique id is used for class name so it must begin with a string + + $this->actions[$unique_id] = (object)array( + 'label' => $label, + 'image_url' => $image_url, + 'link_url' => $link_url, + 'css_class' => $css_class, + 'url_callback' => $url_callback, + 'url_has_http' => substr($link_url,0,7) == 'http://' || substr($link_url,0,8) == 'https://' ? true : false + ); + + return $this; + } + + /** + * + * Set a simple 1-n foreign key relation + * @param string $field_name + * @param string $related_table + * @param string $related_title_field + * @param mixed $where_clause + * @param string $order_by + * @return Grocery_CRUD + */ + public function set_relation($field_name , $related_table, $related_title_field, $where_clause = null, $order_by = null) + { + $this->relation[$field_name] = array($field_name, $related_table,$related_title_field, $where_clause, $order_by); + return $this; + } + + /** + * + * Sets a relation with n-n relationship. + * @param string $field_name + * @param string $relation_table + * @param string $selection_table + * @param string $primary_key_alias_to_this_table + * @param string $primary_key_alias_to_selection_table + * @param string $title_field_selection_table + * @param string $priority_field_relation_table + * @param mixed $where_clause + * @return Grocery_CRUD + */ + public function set_relation_n_n($field_name, $relation_table, $selection_table, $primary_key_alias_to_this_table, $primary_key_alias_to_selection_table , $title_field_selection_table , $priority_field_relation_table = null, $where_clause = null) + { + $this->relation_n_n[$field_name] = + (object)array( + 'field_name' => $field_name, + 'relation_table' => $relation_table, + 'selection_table' => $selection_table, + 'primary_key_alias_to_this_table' => $primary_key_alias_to_this_table, + 'primary_key_alias_to_selection_table' => $primary_key_alias_to_selection_table , + 'title_field_selection_table' => $title_field_selection_table , + 'priority_field_relation_table' => $priority_field_relation_table, + 'where_clause' => $where_clause + ); + + return $this; + } + + /** + * + * Transform a field to an upload field + * + * @param string $field_name + * @param string $upload_path + * @return Grocery_CRUD + */ + public function set_field_upload($field_name, $upload_dir = '', $allowed_file_types = '') + { + $upload_dir = !empty($upload_dir) && substr($upload_dir,-1,1) == '/' + ? substr($upload_dir,0,-1) + : $upload_dir; + $upload_dir = !empty($upload_dir) ? $upload_dir : 'assets/uploads/files'; + + /** Check if the upload Url folder exists. If not then throw an exception **/ + if (!is_dir(FCPATH.$upload_dir)) { + throw new Exception("It seems that the folder \"".FCPATH.$upload_dir."\" for the field name + \"".$field_name."\" doesn't exists. Please create the folder and try again."); + } + + $this->upload_fields[$field_name] = (object) array( + 'field_name' => $field_name, + 'upload_path' => $upload_dir, + 'allowed_file_types' => $allowed_file_types, + 'encrypted_field_name' => $this->_unique_field_name($field_name)); + return $this; + } +} + +if(defined('CI_VERSION')) +{ + $ci = &get_instance(); + $ci->load->library('Form_validation'); + + class grocery_CRUD_Form_validation extends CI_Form_validation{ + + public $CI; + public $_field_data = array(); + public $_config_rules = array(); + public $_error_array = array(); + public $_error_messages = array(); + public $_error_prefix = '

    '; + public $_error_suffix = '

    '; + public $error_string = ''; + public $_safe_form_data = FALSE; + } +} + +/* + * jQuery File Upload Plugin PHP Example 5.5 + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * http://www.opensource.org/licenses/MIT + */ + +class UploadHandler +{ + private $options; + public $default_config_path = null; + + function __construct($options=null) { + $this->options = array( + 'script_url' => $this->getFullUrl().'/'.basename(__FILE__), + 'upload_dir' => dirname(__FILE__).'/files/', + 'upload_url' => $this->getFullUrl().'/files/', + 'param_name' => 'files', + // The php.ini settings upload_max_filesize and post_max_size + // take precedence over the following max_file_size setting: + 'max_file_size' => null, + 'min_file_size' => 1, + 'accept_file_types' => '/.+$/i', + 'max_number_of_files' => null, + // Set the following option to false to enable non-multipart uploads: + 'discard_aborted_uploads' => true, + // Set to true to rotate images based on EXIF meta data, if available: + 'orient_image' => false, + 'image_versions' => array( + // Uncomment the following version to restrict the size of + // uploaded images. You can also add additional versions with + // their own upload directories: + /* + 'large' => array( + 'upload_dir' => dirname(__FILE__).'/files/', + 'upload_url' => dirname($_SERVER['PHP_SELF']).'/files/', + 'max_width' => 1920, + 'max_height' => 1200 + ), + + 'thumbnail' => array( + 'upload_dir' => dirname(__FILE__).'/thumbnails/', + 'upload_url' => $this->getFullUrl().'/thumbnails/', + 'max_width' => 80, + 'max_height' => 80 + ) + */ + ) + ); + if ($options) { + // Or else for PHP >= 5.3.0 use: $this->options = array_replace_recursive($this->options, $options); + foreach($options as $option_name => $option) + { + $this->options[$option_name] = $option; + } + } + } + + function getFullUrl() { + return + (isset($_SERVER['HTTPS']) ? 'https://' : 'http://'). + (isset($_SERVER['REMOTE_USER']) ? $_SERVER['REMOTE_USER'].'@' : ''). + (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ($_SERVER['SERVER_NAME']. + (isset($_SERVER['HTTPS']) && $_SERVER['SERVER_PORT'] === 443 || + $_SERVER['SERVER_PORT'] === 80 ? '' : ':'.$_SERVER['SERVER_PORT']))). + substr($_SERVER['SCRIPT_NAME'],0, strrpos($_SERVER['SCRIPT_NAME'], '/')); + } + + private function get_file_object($file_name) { + $file_path = $this->options['upload_dir'].$file_name; + if (is_file($file_path) && $file_name[0] !== '.') { + $file = new stdClass(); + $file->name = $file_name; + $file->size = filesize($file_path); + $file->url = $this->options['upload_url'].rawurlencode($file->name); + foreach($this->options['image_versions'] as $version => $options) { + if (is_file($options['upload_dir'].$file_name)) { + $file->{$version.'_url'} = $options['upload_url'] + .rawurlencode($file->name); + } + } + $file->delete_url = $this->options['script_url'] + .'?file='.rawurlencode($file->name); + $file->delete_type = 'DELETE'; + return $file; + } + return null; + } + + private function get_file_objects() { + return array_values(array_filter(array_map( + array($this, 'get_file_object'), + scandir($this->options['upload_dir']) + ))); + } + + private function create_scaled_image($file_name, $options) { + $file_path = $this->options['upload_dir'].$file_name; + $new_file_path = $options['upload_dir'].$file_name; + list($img_width, $img_height) = @getimagesize($file_path); + if (!$img_width || !$img_height) { + return false; + } + $scale = min( + $options['max_width'] / $img_width, + $options['max_height'] / $img_height + ); + if ($scale > 1) { + $scale = 1; + } + $new_width = $img_width * $scale; + $new_height = $img_height * $scale; + $new_img = @imagecreatetruecolor($new_width, $new_height); + switch (strtolower(substr(strrchr($file_name, '.'), 1))) { + case 'jpg': + case 'jpeg': + $src_img = @imagecreatefromjpeg($file_path); + $write_image = 'imagejpeg'; + break; + case 'gif': + @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0)); + $src_img = @imagecreatefromgif($file_path); + $write_image = 'imagegif'; + break; + case 'png': + @imagecolortransparent($new_img, @imagecolorallocate($new_img, 0, 0, 0)); + @imagealphablending($new_img, false); + @imagesavealpha($new_img, true); + $src_img = @imagecreatefrompng($file_path); + $write_image = 'imagepng'; + break; + default: + $src_img = $image_method = null; + } + $success = $src_img && @imagecopyresampled( + $new_img, + $src_img, + 0, 0, 0, 0, + $new_width, + $new_height, + $img_width, + $img_height + ) && $write_image($new_img, $new_file_path); + // Free up memory (imagedestroy does not delete files): + @imagedestroy($src_img); + @imagedestroy($new_img); + return $success; + } + + private function has_error($uploaded_file, $file, $error) { + if ($error) { + switch($error) { + case UPLOAD_ERR_INI_SIZE: + return 'The uploaded file exceeds the upload_max_filesize directive in php.ini.'; + break; + case UPLOAD_ERR_PARTIAL: + return 'The uploaded file was only partially uploaded.'; + break; + case UPLOAD_ERR_NO_FILE: + return 'No file was uploaded.'; + break; + case UPLOAD_ERR_CANT_WRITE: + return 'Failed to write file to disk.'; + break; + case UPLOAD_ERR_EXTENSION: + return 'File upload stopped by extension.'; + break; + default: + return $error; + break; + } + } + if (!preg_match($this->options['accept_file_types'], $file->name)) { + return 'acceptFileTypes'; + } + if ($uploaded_file && is_uploaded_file($uploaded_file)) { + $file_size = filesize($uploaded_file); + } else { + $file_size = $_SERVER['CONTENT_LENGTH']; + } + + if ($this->options['max_file_size'] && ( + $file_size > $this->options['max_file_size'] || + $file->size > $this->options['max_file_size']) + ) { + return 'maxFileSize'; + } + if ($this->options['min_file_size'] && + $file_size < $this->options['min_file_size']) { + return 'minFileSize'; + } + if (is_int($this->options['max_number_of_files']) && ( + count($this->get_file_objects()) >= $this->options['max_number_of_files']) + ) { + return 'maxNumberOfFiles'; + } + return $error; + } + + private function trim_file_name($name, $type) { + // Remove path information and dots around the filename, to prevent uploading + // into different directories or replacing hidden system files. + // Also remove control characters and spaces (\x00..\x20) around the filename: + $file_name = trim(basename(stripslashes($name)), ".\x00..\x20"); + // Add missing file extension for known image types: + if (strpos($file_name, '.') === false && + preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) { + $file_name .= '.'.$matches[1]; + } + + //Ensure that we don't have disallowed characters and add a unique id just to ensure that the file name will be unique + $file_name = substr(uniqid(),-5).'-'.$this->_transliterate_characters($file_name); + + //all the characters has to be lowercase + $file_name = strtolower($file_name); + + return $file_name; + } + + private function _transliterate_characters($file_name) + { + include($this->default_config_path.'/translit_chars.php'); + if ( isset($translit_characters)) + { + $file_name = preg_replace(array_keys($translit_characters), array_values($translit_characters), $file_name); + } + + $file_name = preg_replace("/([^a-zA-Z0-9\.\-\_]+?){1}/i", '-', $file_name); + $file_name = str_replace(" ", "-", $file_name); + + return preg_replace('/\-+/', '-', trim($file_name, '-')); + } + + private function orient_image($file_path) { + $exif = exif_read_data($file_path); + $orientation = intval(@$exif['Orientation']); + if (!in_array($orientation, array(3, 6, 8))) { + return false; + } + $image = @imagecreatefromjpeg($file_path); + switch ($orientation) { + case 3: + $image = @imagerotate($image, 180, 0); + break; + case 6: + $image = @imagerotate($image, 270, 0); + break; + case 8: + $image = @imagerotate($image, 90, 0); + break; + default: + return false; + } + $success = imagejpeg($image, $file_path); + // Free up memory (imagedestroy does not delete files): + @imagedestroy($image); + return $success; + } + + private function handle_file_upload($uploaded_file, $name, $size, $type, $error) { + $file = new stdClass(); + $file->name = $this->trim_file_name($name, $type); + $file->size = intval($size); + $file->type = $type; + $error = $this->has_error($uploaded_file, $file, $error); + if (!$error && $file->name) { + $file_path = $this->options['upload_dir'].$file->name; + $append_file = !$this->options['discard_aborted_uploads'] && + is_file($file_path) && $file->size > filesize($file_path); + clearstatcache(); + if ($uploaded_file && is_uploaded_file($uploaded_file)) { + // multipart/formdata uploads (POST method uploads) + if ($append_file) { + file_put_contents( + $file_path, + fopen($uploaded_file, 'r'), + FILE_APPEND + ); + } else { + move_uploaded_file($uploaded_file, $file_path); + } + } else { + // Non-multipart uploads (PUT method support) + file_put_contents( + $file_path, + fopen('php://input', 'r'), + $append_file ? FILE_APPEND : 0 + ); + } + $file_size = filesize($file_path); + if ($file_size === $file->size) { + if ($this->options['orient_image']) { + $this->orient_image($file_path); + } + $file->url = $this->options['upload_url'].rawurlencode($file->name); + foreach($this->options['image_versions'] as $version => $options) { + if ($this->create_scaled_image($file->name, $options)) { + $file->{$version.'_url'} = $options['upload_url'] + .rawurlencode($file->name); + } + } + } else if ($this->options['discard_aborted_uploads']) { + unlink($file_path); + $file->error = "It seems that this user doesn't have permissions to upload to this folder"; + } + $file->size = $file_size; + $file->delete_url = $this->options['script_url'] + .'?file='.rawurlencode($file->name); + $file->delete_type = 'DELETE'; + } else { + $file->error = $error; + } + return $file; + } + + public function get() { + $file_name = isset($_REQUEST['file']) ? + basename(stripslashes($_REQUEST['file'])) : null; + if ($file_name) { + $info = $this->get_file_object($file_name); + } else { + $info = $this->get_file_objects(); + } + header('Content-type: application/json'); + echo json_encode($info); + } + + public function post() { + if (isset($_REQUEST['_method']) && $_REQUEST['_method'] === 'DELETE') { + return $this->delete(); + } + $upload = isset($_FILES[$this->options['param_name']]) ? + $_FILES[$this->options['param_name']] : null; + $info = array(); + if ($upload && is_array($upload['tmp_name'])) { + foreach ($upload['tmp_name'] as $index => $value) { + $info[] = $this->handle_file_upload( + $upload['tmp_name'][$index], + isset($_SERVER['HTTP_X_FILE_NAME']) ? + $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'][$index], + isset($_SERVER['HTTP_X_FILE_SIZE']) ? + $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'][$index], + isset($_SERVER['HTTP_X_FILE_TYPE']) ? + $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'][$index], + $upload['error'][$index] + ); + } + } elseif ($upload || isset($_SERVER['HTTP_X_FILE_NAME'])) { + $info[] = $this->handle_file_upload( + isset($upload['tmp_name']) ? $upload['tmp_name'] : null, + isset($_SERVER['HTTP_X_FILE_NAME']) ? + $_SERVER['HTTP_X_FILE_NAME'] : $upload['name'], + isset($_SERVER['HTTP_X_FILE_SIZE']) ? + $_SERVER['HTTP_X_FILE_SIZE'] : $upload['size'], + isset($_SERVER['HTTP_X_FILE_TYPE']) ? + $_SERVER['HTTP_X_FILE_TYPE'] : $upload['type'], + isset($upload['error']) ? $upload['error'] : null + ); + } + header('Vary: Accept'); + + $redirect = isset($_REQUEST['redirect']) ? + stripslashes($_REQUEST['redirect']) : null; + if ($redirect) { + header('Location: '.sprintf($redirect, rawurlencode($json))); + return; + } + if (isset($_SERVER['HTTP_ACCEPT']) && + (strpos($_SERVER['HTTP_ACCEPT'], 'application/json') !== false)) { + header('Content-type: application/json'); + } else { + header('Content-type: text/plain'); + } + return $info; + } + + public function delete() { + $file_name = isset($_REQUEST['file']) ? + basename(stripslashes($_REQUEST['file'])) : null; + $file_path = $this->options['upload_dir'].$file_name; + $success = is_file($file_path) && $file_name[0] !== '.' && unlink($file_path); + if ($success) { + foreach($this->options['image_versions'] as $version => $options) { + $file = $options['upload_dir'].$file_name; + if (is_file($file)) { + unlink($file); + } + } + } + header('Content-type: application/json'); + echo json_encode($success); + } + +} diff --git a/application/libraries/index.html b/application/libraries/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/libraries/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + \ No newline at end of file diff --git a/application/logs/index.html b/application/logs/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/logs/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + \ No newline at end of file diff --git a/application/models/Grocery_crud_model.php b/application/models/Grocery_crud_model.php new file mode 100644 index 00000000..24930055 --- /dev/null +++ b/application/models/Grocery_crud_model.php @@ -0,0 +1,587 @@ + + */ + +// ------------------------------------------------------------------------ + +/** + * Grocery CRUD Model + * + * + * @package grocery CRUD + * @author John Skoumbourdis + * @version 1.5.6 + * @link http://www.grocerycrud.com/documentation + */ +class Grocery_crud_model extends CI_Model { + + protected $primary_key = null; + protected $table_name = null; + protected $relation = array(); + protected $relation_n_n = array(); + protected $primary_keys = array(); + + function __construct() + { + parent::__construct(); + } + + function db_table_exists($table_name = null) + { + return $this->db->table_exists($table_name); + } + + function get_list() + { + if($this->table_name === null) + return false; + + $select = "`{$this->table_name}`.*"; + + //set_relation special queries + if(!empty($this->relation)) + { + foreach($this->relation as $relation) + { + list($field_name , $related_table , $related_field_title) = $relation; + $unique_join_name = $this->_unique_join_name($field_name); + $unique_field_name = $this->_unique_field_name($field_name); + + if(strstr($related_field_title,'{')) + { + $related_field_title = str_replace(" "," ",$related_field_title); + $select .= ", CONCAT('".str_replace(array('{','}'),array("',COALESCE({$unique_join_name}.",", ''),'"),str_replace("'","\\'",$related_field_title))."') as $unique_field_name"; + } + else + { + $select .= ", $unique_join_name.$related_field_title AS $unique_field_name"; + } + + if($this->field_exists($related_field_title)) + $select .= ", `{$this->table_name}`.$related_field_title AS '{$this->table_name}.$related_field_title'"; + } + } + + //set_relation_n_n special queries. We prefer sub queries from a simple join for the relation_n_n as it is faster and more stable on big tables. + if(!empty($this->relation_n_n)) + { + $select = $this->relation_n_n_queries($select); + } + + $this->db->select($select, false); + + $results = $this->db->get($this->table_name)->result(); + + return $results; + } + + public function get_row($table_name = null) + { + $table_name = $table_name === null ? $this->table_name : $table_name; + + return $this->db->get($table_name)->row(); + } + + public function set_primary_key($field_name, $table_name = null) + { + $table_name = $table_name === null ? $this->table_name : $table_name; + + $this->primary_keys[$table_name] = $field_name; + } + + protected function relation_n_n_queries($select) + { + $this_table_primary_key = $this->get_primary_key(); + foreach($this->relation_n_n as $relation_n_n) + { + list($field_name, $relation_table, $selection_table, $primary_key_alias_to_this_table, + $primary_key_alias_to_selection_table, $title_field_selection_table, $priority_field_relation_table) = array_values((array)$relation_n_n); + + $primary_key_selection_table = $this->get_primary_key($selection_table); + + $field = ""; + $use_template = strpos($title_field_selection_table,'{') !== false; + $field_name_hash = $this->_unique_field_name($title_field_selection_table); + if($use_template) + { + $title_field_selection_table = str_replace(" ", " ", $title_field_selection_table); + $field .= "CONCAT('".str_replace(array('{','}'),array("',COALESCE(",", ''),'"),str_replace("'","\\'",$title_field_selection_table))."')"; + } + else + { + $field .= "$selection_table.$title_field_selection_table"; + } + + //Sorry Codeigniter but you cannot help me with the subquery! + $select .= ", (SELECT GROUP_CONCAT(DISTINCT $field) FROM $selection_table " + ."LEFT JOIN $relation_table ON $relation_table.$primary_key_alias_to_selection_table = $selection_table.$primary_key_selection_table " + ."WHERE $relation_table.$primary_key_alias_to_this_table = `{$this->table_name}`.$this_table_primary_key GROUP BY $relation_table.$primary_key_alias_to_this_table) AS $field_name"; + } + + return $select; + } + + function order_by($order_by , $direction) + { + $this->db->order_by( $order_by , $direction ); + } + + function where($key, $value = NULL, $escape = TRUE) + { + $this->db->where( $key, $value, $escape); + } + + function or_where($key, $value = NULL, $escape = TRUE) + { + $this->db->or_where( $key, $value, $escape); + } + + function having($key, $value = NULL, $escape = TRUE) + { + $this->db->having( $key, $value, $escape); + } + + function or_having($key, $value = NULL, $escape = TRUE) + { + $this->db->or_having( $key, $value, $escape); + } + + function like($field, $match = '', $side = 'both') + { + $this->db->like($field, $match, $side); + } + + function or_like($field, $match = '', $side = 'both') + { + $this->db->or_like($field, $match, $side); + } + + function limit($value, $offset = '') + { + $this->db->limit( $value , $offset ); + } + + function get_total_results() + { + // A fast way to calculate the total results + $key = $this->get_primary_key(); + + //set_relation_n_n special queries. We prefer sub queries from a simple join for the relation_n_n as it is faster and more stable on big tables. + if(!empty($this->relation_n_n)) + { + $select = "{$this->table_name}." . $key; + $select = $this->relation_n_n_queries($select); + + $this->db->select($select,false); + } else { + $this->db->select($this->table_name . '.' . $key); + } + + return $this->db->get($this->table_name)->num_rows(); + } + + function set_basic_table($table_name = null) + { + if( !($this->db->table_exists($table_name)) ) + return false; + + $this->table_name = $table_name; + + return true; + } + + function get_edit_values($primary_key_value) + { + $primary_key_field = $this->get_primary_key(); + $this->db->where($primary_key_field,$primary_key_value); + $result = $this->db->get($this->table_name)->row(); + return $result; + } + + function join_relation($field_name , $related_table , $related_field_title) + { + $related_primary_key = $this->get_primary_key($related_table); + + if($related_primary_key !== false) + { + $unique_name = $this->_unique_join_name($field_name); + $this->db->join( $related_table.' as '.$unique_name , "$unique_name.$related_primary_key = {$this->table_name}.$field_name",'left'); + + $this->relation[$field_name] = array($field_name , $related_table , $related_field_title); + + return true; + } + + return false; + } + + function set_relation_n_n_field($field_info) + { + $this->relation_n_n[$field_info->field_name] = $field_info; + } + + protected function _unique_join_name($field_name) + { + return 'j'.substr(md5($field_name),0,8); //This j is because is better for a string to begin with a letter and not with a number + } + + protected function _unique_field_name($field_name) + { + return 's'.substr(md5($field_name),0,8); //This s is because is better for a string to begin with a letter and not with a number + } + + function get_relation_array($field_name , $related_table , $related_field_title, $where_clause, $order_by, $limit = null, $search_like = null) + { + $relation_array = array(); + $field_name_hash = $this->_unique_field_name($field_name); + + $related_primary_key = $this->get_primary_key($related_table); + + $select = "$related_table.$related_primary_key, "; + + if(strstr($related_field_title,'{')) + { + $related_field_title = str_replace(" ", " ", $related_field_title); + $select .= "CONCAT('".str_replace(array('{','}'),array("',COALESCE(",", ''),'"),str_replace("'","\\'",$related_field_title))."') as $field_name_hash"; + } + else + { + $select .= "$related_table.$related_field_title as $field_name_hash"; + } + + $this->db->select($select,false); + if($where_clause !== null) + $this->db->where($where_clause); + + if($where_clause !== null) + $this->db->where($where_clause); + + if($limit !== null) + $this->db->limit($limit); + + if($search_like !== null) + $this->db->having("$field_name_hash LIKE '%".$this->db->escape_like_str($search_like)."%'"); + + $order_by !== null + ? $this->db->order_by($order_by) + : $this->db->order_by($field_name_hash); + + $results = $this->db->get($related_table)->result(); + + foreach($results as $row) + { + $relation_array[$row->$related_primary_key] = $row->$field_name_hash; + } + + return $relation_array; + } + + function get_ajax_relation_array($search, $field_name , $related_table , $related_field_title, $where_clause, $order_by) + { + return $this->get_relation_array($field_name , $related_table , $related_field_title, $where_clause, $order_by, 10 , $search); + } + + function get_relation_total_rows($field_name , $related_table , $related_field_title, $where_clause) + { + if($where_clause !== null) + $this->db->where($where_clause); + + return $this->db->count_all_results($related_table); + } + + function get_relation_n_n_selection_array($primary_key_value, $field_info) + { + $select = ""; + $related_field_title = $field_info->title_field_selection_table; + $use_template = strpos($related_field_title,'{') !== false;; + $field_name_hash = $this->_unique_field_name($related_field_title); + if($use_template) + { + $related_field_title = str_replace(" ", " ", $related_field_title); + $select .= "CONCAT('".str_replace(array('{','}'),array("',COALESCE(",", ''),'"),str_replace("'","\\'",$related_field_title))."') as $field_name_hash"; + } + else + { + $select .= "$related_field_title as $field_name_hash"; + } + $this->db->select('*, '.$select,false); + + $selection_primary_key = $this->get_primary_key($field_info->selection_table); + + if(empty($field_info->priority_field_relation_table)) + { + if(!$use_template){ + $this->db->order_by("{$field_info->selection_table}.{$field_info->title_field_selection_table}"); + } + } + else + { + $this->db->order_by("{$field_info->relation_table}.{$field_info->priority_field_relation_table}"); + } + $this->db->where($field_info->primary_key_alias_to_this_table, $primary_key_value); + $this->db->join( + $field_info->selection_table, + "{$field_info->relation_table}.{$field_info->primary_key_alias_to_selection_table} = {$field_info->selection_table}.{$selection_primary_key}" + ); + $results = $this->db->get($field_info->relation_table)->result(); + + $results_array = array(); + foreach($results as $row) + { + $results_array[$row->{$field_info->primary_key_alias_to_selection_table}] = $row->{$field_name_hash}; + } + + return $results_array; + } + + function get_relation_n_n_unselected_array($field_info, $selected_values) + { + $use_where_clause = !empty($field_info->where_clause); + + $select = ""; + $related_field_title = $field_info->title_field_selection_table; + $use_template = strpos($related_field_title,'{') !== false; + $field_name_hash = $this->_unique_field_name($related_field_title); + + if($use_template) + { + $related_field_title = str_replace(" ", " ", $related_field_title); + $select .= "CONCAT('".str_replace(array('{','}'),array("',COALESCE(",", ''),'"),str_replace("'","\\'",$related_field_title))."') as $field_name_hash"; + } + else + { + $select .= "$related_field_title as $field_name_hash"; + } + $this->db->select('*, '.$select,false); + + if($use_where_clause){ + $this->db->where($field_info->where_clause); + } + + $selection_primary_key = $this->get_primary_key($field_info->selection_table); + if(!$use_template) + $this->db->order_by("{$field_info->selection_table}.{$field_info->title_field_selection_table}"); + $results = $this->db->get($field_info->selection_table)->result(); + + $results_array = array(); + foreach($results as $row) + { + if(!isset($selected_values[$row->$selection_primary_key])) + $results_array[$row->$selection_primary_key] = $row->{$field_name_hash}; + } + + return $results_array; + } + + function db_relation_n_n_update($field_info, $post_data ,$main_primary_key) + { + $this->db->where($field_info->primary_key_alias_to_this_table, $main_primary_key); + if(!empty($post_data)) + $this->db->where_not_in($field_info->primary_key_alias_to_selection_table , $post_data); + $this->db->delete($field_info->relation_table); + + $counter = 0; + if(!empty($post_data)) + { + foreach($post_data as $primary_key_value) + { + $where_array = array( + $field_info->primary_key_alias_to_this_table => $main_primary_key, + $field_info->primary_key_alias_to_selection_table => $primary_key_value, + ); + + $this->db->where($where_array); + $count = $this->db->from($field_info->relation_table)->count_all_results(); + + if($count == 0) + { + if(!empty($field_info->priority_field_relation_table)) + $where_array[$field_info->priority_field_relation_table] = $counter; + + $this->db->insert($field_info->relation_table, $where_array); + + }elseif($count >= 1 && !empty($field_info->priority_field_relation_table)) + { + $this->db->update( $field_info->relation_table, array($field_info->priority_field_relation_table => $counter) , $where_array); + } + + $counter++; + } + } + } + + function db_relation_n_n_delete($field_info, $main_primary_key) + { + $this->db->where($field_info->primary_key_alias_to_this_table, $main_primary_key); + $this->db->delete($field_info->relation_table); + } + + function get_field_types_basic_table() + { + $db_field_types = array(); + foreach($this->db->query("SHOW COLUMNS FROM `{$this->table_name}`")->result() as $db_field_type) + { + $type = explode("(",$db_field_type->Type); + $db_type = $type[0]; + + if(isset($type[1])) + { + if(substr($type[1],-1) == ')') + { + $length = substr($type[1],0,-1); + } + else + { + list($length) = explode(" ",$type[1]); + $length = substr($length,0,-1); + } + } + else + { + $length = ''; + } + $db_field_types[$db_field_type->Field]['db_max_length'] = $length; + $db_field_types[$db_field_type->Field]['db_type'] = $db_type; + $db_field_types[$db_field_type->Field]['db_null'] = $db_field_type->Null == 'YES' ? true : false; + $db_field_types[$db_field_type->Field]['db_extra'] = $db_field_type->Extra; + } + + $results = $this->db->field_data($this->table_name); + foreach($results as $num => $row) + { + $row = (array)$row; + $results[$num] = (object)( array_merge($row, $db_field_types[$row['name']]) ); + } + + return $results; + } + + function get_field_types($table_name) + { + $results = $this->db->field_data($table_name); + + return $results; + } + + function db_update($post_array, $primary_key_value) + { + $primary_key_field = $this->get_primary_key(); + return $this->db->update($this->table_name,$post_array, array( $primary_key_field => $primary_key_value)); + } + + function db_insert($post_array) + { + $insert = $this->db->insert($this->table_name,$post_array); + if($insert) + { + return $this->db->insert_id(); + } + return false; + } + + function db_delete($primary_key_value) + { + $primary_key_field = $this->get_primary_key(); + + if($primary_key_field === false) + return false; + + $this->db->limit(1); + $this->db->delete($this->table_name,array( $primary_key_field => $primary_key_value)); + if( $this->db->affected_rows() != 1) + return false; + else + return true; + } + + function db_file_delete($field_name, $filename) + { + if( $this->db->update($this->table_name,array($field_name => ''),array($field_name => $filename)) ) + { + return true; + } + else + { + return false; + } + } + + function field_exists($field,$table_name = null) + { + if(empty($table_name)) + { + $table_name = $this->table_name; + } + return $this->db->field_exists($field,$table_name); + } + + function get_primary_key($table_name = null) + { + if($table_name == null) + { + if(isset($this->primary_keys[$this->table_name])) + { + return $this->primary_keys[$this->table_name]; + } + + if(empty($this->primary_key)) + { + $fields = $this->get_field_types_basic_table(); + + foreach($fields as $field) + { + if($field->primary_key == 1) + { + return $field->name; + } + } + + return false; + } + else + { + return $this->primary_key; + } + } + else + { + if(isset($this->primary_keys[$table_name])) + { + return $this->primary_keys[$table_name]; + } + + $fields = $this->get_field_types($table_name); + + foreach($fields as $field) + { + if($field->primary_key == 1) + { + return $field->name; + } + } + + return false; + } + + } + + function escape_str($value) + { + return $this->db->escape_str($value); + } + +} diff --git a/application/models/Purchaseorder_model.php b/application/models/Purchaseorder_model.php new file mode 100644 index 00000000..8e30f2ef --- /dev/null +++ b/application/models/Purchaseorder_model.php @@ -0,0 +1,193 @@ +db->select('BaseT.PONO, BaseT.POType, BaseT.PODate, ID.SupplierID,BaseT.SpecialOrder, users.UserID,BaseT.RequesterEmail,BaseT.RequesterPh,BaseT.RequestedDate,BaseT.BudgetManager,BaseT.BudgetManagerDepartment,BaseT.PurchasingCategory'); + $this->db->from('T_PurchaseOrderDetails as BaseT'); + $this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + $this->db->join('T_SupplierDetailsN as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.PONO LIKE '%".$searchText."%' + OR BaseT.POType LIKE '%".$searchText."%' + OR BaseT.PODate LIKE '%".$searchText."%' + OR BaseT.SupplierID LIKE '%".$searchText."%' + OR BaseT.UserID LIKE '%".$searchText."%' + OR BaseT.RequesterEmail LIKE '%".$searchText."%' + OR BaseT.RequesterPh LIKE '%".$searchText."%' + OR BaseT.RequestedDate LIKE '%".$searchText."%' + OR BaseT.BudgetManager LIKE '%".$searchText."%' + OR BaseT.BudgetManagerDepartment LIKE '%".$searchText."%' + OR BaseT.PurchasingCategory LIKE '%".$searchText."%' + OR BaseT.SpecialOrder LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + $this->db->where('BaseT.userId !=', 1); + $query = $this->db->get(); + + return count($query->result()); + } + + /** + * This function is used to get the user listing count + * @param string $searchText : This is optional search text + * @param number $page : This is pagination offset + * @param number $segment : This is pagination limit + * @return array $result : This is result + */ + function purchaseorderListing($searchText = '', $page, $segment) + { + $this->db->select('BaseT.PONO, BaseT.POType, BaseT.PODate, ID.SupplierID,BaseT.SpecialOrder, users.UserID,BaseT.RequesterEmail,BaseT.RequesterPh, BaseT.RequestedDate, BaseT.BudgetManager, BaseT.BudgetManagerDepartment, BaseT.PurchasingCategory'); + $this->db->from('T_PurchaseOrderDetails as BaseT'); + $this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + $this->db->join('T_SupplierDetailsN as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.PONO LIKE '%".$searchfield."%' + OR BaseT.POType LIKE '%".$searchText."%' + OR BaseT.PODate LIKE '%".$searchText."%' + OR BaseT.SupplierID LIKE '%".$searchText."%' + OR BaseT.UserID LIKE '%".$searchText."%' + OR BaseT.RequesterEmail LIKE '%".$searchText."%' + OR BaseT.RequesterPh LIKE '%".$searchText."%' + OR BaseT.RequestedDate LIKE '%".$searchText."%' + OR BaseT.BudgetManager LIKE '%".$searchText."%' + OR BaseT.BudgetManagerDepartment LIKE '%".$searchText."%' + OR BaseT.PurchasingCategory LIKE '%".$searchText."%' + OR BaseT.SpecialOrder LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + //$this->db->where('BaseT.userId !=', 1); + $this->db->limit($page, $segment); + $query = $this->db->get(); + + $result = $query->result(); + return $result; + } + + /** + * This function is used to get the SupplierID information + * @return array $result : This is result of the query + */ + function getSupplierName() + { + $this->db->select('SupplierID, SupplierName'); + $this->db->from('T_SupplierDetailsN'); + //$this->db->where('roleId !=', 1); + $query = $this->db->get(); + + return $query->result(); + } + /** + * This function is used to get the userId information + * @return array $result : This is result of the query + */ + function getusers() + { + $this->db->select('userId, name'); + $this->db->from('tbl_users'); + //$this->db->where('roleId !=', 1); + $query = $this->db->get(); + + return $query->result(); + } + + /** + * This function is used to check whether email id is already exist or not + * @param {string} $email : This is email id + * @param {number} $userId : This is user id + * @return {mixed} $result : This is searched result + + function checkEmailExists($email, $userId = 0) + { + $this->db->select("email"); + $this->db->from("tbl_users"); + $this->db->where("email", $email); + $this->db->where("isDeleted", 0); + if($userId != 0){ + $this->db->where("userId !=", $userId); + } + $query = $this->db->get(); + + return $query->result(); + }*/ + + + /** + * This function is used to add new user to system + * @return number $insert_id : This is last inserted id + */ + function addNewPO($POInfo) + { + $this->db->trans_start(); + $this->db->insert('T_PurchaseOrderDetails', $POInfo); + + $PO_id = $this->db->insert_id(); + + $this->db->trans_complete(); + + return $PO_id; + } + + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + function getuserInfo($PO) + { + $this->db->select('POType, PODate, SupplierID,SpecialOrder,UserID,RequestedDate,RequesterEmail,RequesterPh,PurchasingCategory,BudgetManager,BudgetManagerDepartment,'); + $this->db->from('T_PurchaseOrderDetails'); + //$this->db->where('isDeleted', 0); + //$this->db->where('roleId !=', 1); + $this->db->where('PONO', $PO); + $query = $this->db->get(); + + return $query->result(); + } + + + /** + * This function is used to update the user information + * @param array $userInfo : This is users updated information + * @param number $userId : This is user id + */ + function editPO($POInfo, $PO) + { + $this->db->where('PONO', $PO); + $this->db->update('T_PurchaseOrderDetails', $PO); + + return TRUE; + } + + + + /** + * This function is used to delete the user information + * @param number $userId : This is user id + * @return boolean $result : TRUE / FALSE + + function deletePO($PO, $POinfo) + { + $this->db->where('PO', $PO); + $this->db->update('T_PurchaseOrderDetails', $POInfo); + + return $this->db->affected_rows(); + }*/ + + + /** + * This function is used to match users password for change password + * @param number $userId : This is user id + */ + +} + + \ No newline at end of file diff --git a/application/models/costcenter_model.php b/application/models/costcenter_model.php new file mode 100644 index 00000000..27f83742 --- /dev/null +++ b/application/models/costcenter_model.php @@ -0,0 +1,110 @@ +db->select('BaseT.CostCentreID, BaseT.CostName, BaseT.Description, BaseT.CreatedDate'); + $this->db->from('T_CostCentre as BaseT'); + //$this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + //$this->db->join('T_SupplierDetails as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.CostCentreID LIKE '%".$searchText."%' + OR BaseT.CostName LIKE '%".$searchText."%' + OR BaseT.Description LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + //$this->db->where('BaseT.userId !=', 1); + $query = $this->db->get(); + + return count($query->result()); + } + /** + * This function is used to get the user listing count + * @param string $searchText : This is optional search text + * @param number $page : This is pagination offset + * @param number $segment : This is pagination limit + * @return array $result : This is result + */ + function CostListing($searchText = '', $page, $segment) + { + $this->db->select('BaseT.CostCentreID, BaseT.CostName, BaseT.Description,BaseT.CreatedDate'); + $this->db->from('T_CostCentre as BaseT'); + //$this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + //$this->db->join('T_SupplierDetails as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.CostCentreID LIKE '%".$searchText."%' + OR BaseT.CostName LIKE '%".$searchText."%' + OR BaseT.CreatedDate LIKE '%".$searchText."%' + OR BaseT.Description LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + //$this->db->where('BaseT.userId !=', 1); + $this->db->limit($page, $segment); + $query = $this->db->get(); + + $result = $query->result(); + return $result; + } + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + +function addNewcost($Cost) + { + $this->db->trans_start(); + $this->db->insert('T_CostCentre', $Cost); + + $PO_id = $this->db->insert_id(); + + $this->db->trans_complete(); + + return $PO_id; + } + + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + function getuserInfo($CostCenterID) + { + $this->db->select('CostCenterID, CostName,Description,CreatedDate'); + $this->db->from('T_CostCentre'); + //$this->db->where('isDeleted', 0); + //$this->db->where('roleId !=', 1); + $this->db->where('CostCenterID', $CostCenterID); + $query = $this->db->get(); + + return $query->result(); + } + function editcost($Cost, $CostCenterID) + { + $this->db->where('CostCenterID', $CostCenterID); + $this->db->update('T_CostCentre', $Cost); + + return TRUE; + } + /** + * This function is used to delete the user information + * @param number $userId : This is user id + * @return boolean $result : TRUE / FALSE + + function deletePO($PO, $POinfo) + { + $this->db->where('PO', $PO); + $this->db->update('T_PurchaseOrderDetails', $POInfo); + + return $this->db->affected_rows(); + }*/ +} +?> \ No newline at end of file diff --git a/application/models/index.html b/application/models/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/models/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + \ No newline at end of file diff --git a/application/models/login_model.php b/application/models/login_model.php new file mode 100644 index 00000000..51177edd --- /dev/null +++ b/application/models/login_model.php @@ -0,0 +1,34 @@ +db->select('BaseTbl.userId, BaseTbl.password, BaseTbl.name, BaseTbl.roleId, Roles.role'); + $this->db->from('tbl_users as BaseTbl'); + $this->db->join('tbl_roles as Roles','Roles.roleId = BaseTbl.roleId'); + $this->db->where('BaseTbl.email', $email); + $this->db->where('BaseTbl.isDeleted', 0); + $query = $this->db->get(); + + $user = $query->result(); + + if(!empty($user)){ + if(verifyHashedPassword($password, $user[0]->password)){ + return $user; + } else { + return array(); + } + } else { + return array(); + } + } +} + +?> \ No newline at end of file diff --git a/application/models/supplier_model.php b/application/models/supplier_model.php new file mode 100644 index 00000000..49125945 --- /dev/null +++ b/application/models/supplier_model.php @@ -0,0 +1,120 @@ +db->select('BaseT.SupplierID, BaseT.SupplierName, BaseT.Address, BaseT.ContactNumber, BaseT.AlternateContactNumber,BaseT.EmailAddress,BaseT.TIN,BaseT.PAN'); + $this->db->from('T_SupplierDetailsN as BaseT'); + //$this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + //$this->db->join('T_SupplierDetails as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.SupplierID LIKE '%".$searchText."%' + OR BaseT.SupplierName LIKE '%".$searchText."%' + OR BaseT.Address LIKE '%".$searchText."%' + OR BaseT.ContactNumber LIKE '%".$searchText."%' + OR BaseT.AlternateContactNumber LIKE '%".$searchText."%' + OR BaseT.EmailAddress LIKE '%".$searchText."%' + OR BaseT.TIN LIKE '%".$searchText."%' + OR BaseT.PAN LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + //$this->db->where('BaseT.userId !=', 1); + $query = $this->db->get(); + + return count($query->result()); + } + /** + * This function is used to get the user listing count + * @param string $searchText : This is optional search text + * @param number $page : This is pagination offset + * @param number $segment : This is pagination limit + * @return array $result : This is result + */ + function supplierListing($searchText = '', $page, $segment) + { + $this->db->select('BaseT.SupplierID, BaseT.SupplierName, BaseT.Address, BaseT.ContactNumber, BaseT.AlternateContactNumber,BaseT.EmailAddress, BaseT.TIN, BaseT.PAN,BaseT.CreatedDate'); + $this->db->from('T_SupplierDetailsN as BaseT'); + //$this->db->join('tbl_users as users', 'users.userId = BaseT.userId','left'); + //$this->db->join('T_SupplierDetails as ID', 'ID.SupplierID = BaseT.SupplierID','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseT.SupplierID LIKE '%".$searchfield."%' + OR BaseT.SupplierName LIKE '%".$searchText."%' + OR BaseT.Address LIKE '%".$searchText."%' + OR BaseT.ContactNumber LIKE '%".$searchText."%' + OR BaseT.AlternateContactNumber LIKE '%".$searchText."%' + OR BaseT.EmailAddress LIKE '%".$searchText."%' + OR BaseT.TIN LIKE '%".$searchText."%' + OR BaseT.CreatedDate LIKE '%".$searchText."%' + OR BaseT.PAN LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + //$this->db->where('BaseT.isDeleted', 0); + //$this->db->where('BaseT.userId !=', 1); + $this->db->limit($page, $segment); + $query = $this->db->get(); + + $result = $query->result(); + return $result; + } + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + +function addNewsupplier($supplier) + { + $this->db->trans_start(); + $this->db->insert('T_SupplierDetailsN', $supplier); + + $PO_id = $this->db->insert_id(); + + $this->db->trans_complete(); + + return $PO_id; + } + + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + function getuserInfo($supplierID) + { + $this->db->select('SupplierID, SupplierName,Address,ContactNumber,AlternateContactNumber,EmailAddress,TIN,PAN,CreatedDate'); + $this->db->from('T_SupplierDetailsN'); + //$this->db->where('isDeleted', 0); + //$this->db->where('roleId !=', 1); + $this->db->where('SupplierID', $supplierID); + $query = $this->db->get(); + + return $query->result(); + } + function editPO($supplier, $supplierID) + { + $this->db->where('SupplierID', $supplierID); + $this->db->update('T_SupplierDetailsN', $supplier); + + return TRUE; + } + /** + * This function is used to delete the user information + * @param number $userId : This is user id + * @return boolean $result : TRUE / FALSE + + function deletePO($PO, $POinfo) + { + $this->db->where('PO', $PO); + $this->db->update('T_PurchaseOrderDetails', $POInfo); + + return $this->db->affected_rows(); + }*/ +} +?> \ No newline at end of file diff --git a/application/models/user_model.php b/application/models/user_model.php new file mode 100644 index 00000000..74effecf --- /dev/null +++ b/application/models/user_model.php @@ -0,0 +1,192 @@ +db->select('BaseTbl.userId, BaseTbl.email, BaseTbl.name, BaseTbl.mobile, Role.role'); + $this->db->from('tbl_users as BaseTbl'); + $this->db->join('tbl_roles as Role', 'Role.roleId = BaseTbl.roleId','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseTbl.email LIKE '%".$searchText."%' + OR BaseTbl.name LIKE '%".$searchText."%' + OR BaseTbl.mobile LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + $this->db->where('BaseTbl.isDeleted', 0); + $this->db->where('BaseTbl.roleId !=', 1); + $query = $this->db->get(); + + return count($query->result()); + } + + /** + * This function is used to get the user listing count + * @param string $searchText : This is optional search text + * @param number $page : This is pagination offset + * @param number $segment : This is pagination limit + * @return array $result : This is result + */ + function userListing($searchText = '', $page, $segment) + { + $this->db->select('BaseTbl.userId, BaseTbl.email, BaseTbl.name, BaseTbl.mobile, Role.role'); + $this->db->from('tbl_users as BaseTbl'); + $this->db->join('tbl_roles as Role', 'Role.roleId = BaseTbl.roleId','left'); + if(!empty($searchText)) { + $likeCriteria = "(BaseTbl.email LIKE '%".$searchText."%' + OR BaseTbl.name LIKE '%".$searchText."%' + OR BaseTbl.mobile LIKE '%".$searchText."%')"; + $this->db->where($likeCriteria); + } + $this->db->where('BaseTbl.isDeleted', 0); + $this->db->where('BaseTbl.roleId !=', 1); + $this->db->limit($page, $segment); + $query = $this->db->get(); + + $result = $query->result(); + return $result; + } + + /** + * This function is used to get the user roles information + * @return array $result : This is result of the query + */ + function getUserRoles() + { + $this->db->select('roleId, role'); + $this->db->from('tbl_roles'); + $this->db->where('roleId !=', 1); + $query = $this->db->get(); + + return $query->result(); + } + + /** + * This function is used to check whether email id is already exist or not + * @param {string} $email : This is email id + * @param {number} $userId : This is user id + * @return {mixed} $result : This is searched result + */ + function checkEmailExists($email, $userId = 0) + { + $this->db->select("email"); + $this->db->from("tbl_users"); + $this->db->where("email", $email); + $this->db->where("isDeleted", 0); + if($userId != 0){ + $this->db->where("userId !=", $userId); + } + $query = $this->db->get(); + + return $query->result(); + } + + + /** + * This function is used to add new user to system + * @return number $insert_id : This is last inserted id + */ + function addNewUser($userInfo) + { + $this->db->trans_start(); + $this->db->insert('tbl_users', $userInfo); + + $insert_id = $this->db->insert_id(); + + $this->db->trans_complete(); + + return $insert_id; + } + + /** + * This function used to get user information by id + * @param number $userId : This is user id + * @return array $result : This is user information + */ + function getUserInfo($userId) + { + $this->db->select('userId, name, email, mobile, roleId'); + $this->db->from('tbl_users'); + $this->db->where('isDeleted', 0); + $this->db->where('roleId !=', 1); + $this->db->where('userId', $userId); + $query = $this->db->get(); + + return $query->result(); + } + + + /** + * This function is used to update the user information + * @param array $userInfo : This is users updated information + * @param number $userId : This is user id + */ + function editUser($userInfo, $userId) + { + $this->db->where('userId', $userId); + $this->db->update('tbl_users', $userInfo); + + return TRUE; + } + + + + /** + * This function is used to delete the user information + * @param number $userId : This is user id + * @return boolean $result : TRUE / FALSE + */ + function deleteUser($userId, $userInfo) + { + $this->db->where('userId', $userId); + $this->db->update('tbl_users', $userInfo); + + return $this->db->affected_rows(); + } + + + /** + * This function is used to match users password for change password + * @param number $userId : This is user id + */ + function matchOldPassword($userId, $oldPassword) + { + $this->db->select('userId, password'); + $this->db->where('userId', $userId); + $this->db->where('isDeleted', 0); + $query = $this->db->get('tbl_users'); + + $user = $query->result(); + + if(!empty($user)){ + if(verifyHashedPassword($oldPassword, $user[0]->password)){ + return $user; + } else { + return array(); + } + } else { + return array(); + } + } + + /** + * This function is used to change users password + * @param number $userId : This is user id + * @param array $userInfo : This is user updation info + */ + function changePassword($userId, $userInfo) + { + $this->db->where('userId', $userId); + $this->db->where('isDeleted', 0); + $this->db->update('tbl_users', $userInfo); + + return $this->db->affected_rows(); + } +} + + \ No newline at end of file diff --git a/application/third_party/index.html b/application/third_party/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/third_party/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + \ No newline at end of file diff --git a/application/views/404.php b/application/views/404.php new file mode 100644 index 00000000..19faf453 --- /dev/null +++ b/application/views/404.php @@ -0,0 +1,15 @@ +
    +
    +

    + 404 + This is not the page you are looking for +

    +
    +
    +
    +
    + Page Not Found Image +
    +
    +
    +
    \ No newline at end of file diff --git a/application/views/Mainpage.php b/application/views/Mainpage.php new file mode 100644 index 00000000..421e6518 --- /dev/null +++ b/application/views/Mainpage.php @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + +
    +
    + +
    +
    + + + + + diff --git a/application/views/POlist.php b/application/views/POlist.php new file mode 100644 index 00000000..c5f90e6f --- /dev/null +++ b/application/views/POlist.php @@ -0,0 +1,99 @@ +
    + +
    +
    +

    PO ListAdd, Edit, Delete

    +
    +
    +
    +
    +
    +
    + AddNew +
    +
    +
    +
    +
    +
    +
    +

    PO List

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    PONOPO TypePO DateSupplierIDSpecialOrderRoleRequesterEmailRequesterPhRequesterDateBudgetManagerBudgetManagerDepartmentPurchasingCategory
    PONO ?>POType ?>PODate ?>SupplierID ?>SpecialOrder ?>UserID ?>RequesterEmail ?>RequesterPh ?>RequestedDate ?>BudgetManager ?>BudgetManagerDepartment ?>PurchasingCategory ?> +     + +
    + +
    + +
    +
    +
    +
    +
    + + diff --git a/application/views/access.php b/application/views/access.php new file mode 100644 index 00000000..ea49534b --- /dev/null +++ b/application/views/access.php @@ -0,0 +1,15 @@ +
    +
    +

    + Access Denied + You are not authorize user to use this +

    +
    +
    +
    +
    + Access Denied Image +
    +
    +
    +
    \ No newline at end of file diff --git a/application/views/addNew.php b/application/views/addNew.php new file mode 100644 index 00000000..e2ed8f81 --- /dev/null +++ b/application/views/addNew.php @@ -0,0 +1,125 @@ +
    + +
    +

    + User Management + Add / Edit User +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter User Details

    +
    + + +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/addPO.php b/application/views/addPO.php new file mode 100644 index 00000000..6a39c11d --- /dev/null +++ b/application/views/addPO.php @@ -0,0 +1,257 @@ +
    + +
    +
    +

    Purchase Order

    +
    +
    + +
    + +
    + +
    + + + + +
    +
    +
    +

    Purchase Order

    +
    +
    + + +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    + + max= value="" class="form-control" placeholder="" /> +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + + +
    +
    + + +
    +
    +
    +
    + + max= value="" class="form-control" placeholder="" /> +
    +
    + +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    + +
    +
    Purchase Order Line Item
    +
    + +
    +

    S.NO

    +
    1
    +
    2
    +
    +
    +

    Product Details

    +
    Waste sand
    +
    Waste sand
    +
    +
    +

    Unit Of Measure

    +
    Ton
    +
    Ton
    +
    +
    +

    Quantity

    +
    100
    +
    100
    +
    +
    +

    Unit Price

    +
    200
    +
    200
    +
    +
    +

    Total Amout

    +
    20000
    +
    20000
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/addcost.php b/application/views/addcost.php new file mode 100644 index 00000000..f2eb97f9 --- /dev/null +++ b/application/views/addcost.php @@ -0,0 +1,94 @@ +
    + +
    +

    + Cost List + Add / Edit SupplierDetails +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter Cost Details

    +
    + + +
    +
    +
    + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/addsupplier.php b/application/views/addsupplier.php new file mode 100644 index 00000000..7bfda86c --- /dev/null +++ b/application/views/addsupplier.php @@ -0,0 +1,120 @@ +
    + +
    +

    + Supplier List + Add / Edit SupplierDetails +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter Supplier Details

    +
    + + +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/changePassword.php b/application/views/changePassword.php new file mode 100644 index 00000000..1a143392 --- /dev/null +++ b/application/views/changePassword.php @@ -0,0 +1,96 @@ +
    + +
    +

    + Change Password + Set new password for your account +

    +
    +
    +
    +
    + +
    +
    +

    Enter Details

    +
    + +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + + session->flashdata('nomatch'); + if($noMatch) + { + ?> +
    + + session->flashdata('nomatch'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + \ No newline at end of file diff --git a/application/views/costListing.php b/application/views/costListing.php new file mode 100644 index 00000000..7733f667 --- /dev/null +++ b/application/views/costListing.php @@ -0,0 +1,88 @@ +
    + +
    +

    + Cost List + Add, Edit, Delete +

    +
    +
    +
    +
    +
    + AddNew +
    +
    +
    +
    +
    +
    +
    +

    Cost List

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + +
    CostCenterIDCostNameDescriptionCreateDate
    CostCentreID ?>CostName ?>Description ?>CreatedDate ?> +     + +
    + +
    + +
    +
    +
    +
    +
    + + diff --git a/application/views/dashboard.php b/application/views/dashboard.php new file mode 100644 index 00000000..b79eb4b6 --- /dev/null +++ b/application/views/dashboard.php @@ -0,0 +1,66 @@ +
    + +
    +

    + + Control panel +

    +
    + +
    +
    +
    + +
    +
    +

    150

    +

    New Tasks

    +
    +
    + +
    + More info +
    +
    +
    + +
    +
    +

    53%

    +

    Completed Tasks

    +
    +
    + +
    + More info +
    +
    +
    + +
    +
    +

    44

    +

    New User

    +
    +
    + +
    + More info +
    +
    +
    + +
    +
    +

    65

    +

    Reopened Issue

    +
    +
    + +
    + More info +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/application/views/editOld.php b/application/views/editOld.php new file mode 100644 index 00000000..74c89f12 --- /dev/null +++ b/application/views/editOld.php @@ -0,0 +1,149 @@ +userId; + $name = $uf->name; + $email = $uf->email; + $mobile = $uf->mobile; + $roleId = $uf->roleId; + } +} + + +?> + +
    + +
    +

    + User Management + Add / Edit User +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter User Details

    +
    + + +
    +
    +
    +
    +
    + + + +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/editOldPO.php b/application/views/editOldPO.php new file mode 100644 index 00000000..330d4a22 --- /dev/null +++ b/application/views/editOldPO.php @@ -0,0 +1,256 @@ +POType; + $PODate = $PO->PODate; + $SupplierID = $PO->SupplierID; + $SpecialOrder = $PO->SpecialOrder; + $UserID = $PO->role; + $RequesterEmail = $PO->reemail; + $RequesterPh = $PO->RequesterPh; + $RequestedDate = $PO->RequestedDate; + $BudgetManager = $PO->BudgetManager; + $BudgetManagerDepartment = $PO->BudgetManagerDepartment; + $PurchasingCategory = $PO->PurchasingCategory; + } +} + + +?> + +
    + +
    +

    + Purchase Order + Add / Edit User +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter PO Details

    +
    + + +
    +
    +
    +
    +
    +
    + + +
    + +
    + +
    +
    +
    + + max= value="" class="form-control" placeholder="" /> +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    + +
    + +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + + +
    +
    + + +
    +
    +
    +
    + + max= value="" class="form-control" placeholder="" /> +
    +
    + +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    + +
    +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/editOldcost.php b/application/views/editOldcost.php new file mode 100644 index 00000000..9a810382 --- /dev/null +++ b/application/views/editOldcost.php @@ -0,0 +1,105 @@ +CostName; + $Description = $uf->Description; + + } +} + + +?> + +
    + +
    +

    + Cost Center + Add / Edit Cost +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter Cost Details

    +
    + + +
    +
    +
    +
    +
    + + + +
    + +
    +
    +
    + + +
    +
    +
    + +
    +
    + + + +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    + + + + + \ No newline at end of file diff --git a/application/views/editOldsupplier.php b/application/views/editOldsupplier.php new file mode 100644 index 00000000..4db17a41 --- /dev/null +++ b/application/views/editOldsupplier.php @@ -0,0 +1,149 @@ +userId; + $SupplierName = $uf->name; + $Address = $uf->email; + $ContactNumber = $uf->mobile; + $AlternateContactNumber = $uf->roleId; + $EmailAddress = $uf->roleId; + $TIN = $uf->roleId; + $PAN = $uf->roleId; + } +} + + +?> + +
    + +
    +

    + Supplier Details + Add / Edit list +

    +
    + +
    + +
    + +
    + + + + +
    +
    +

    Enter Supplier Details

    +
    + + +
    +
    +
    +
    +
    + + +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    + + +
    +
    +
    +
    + load->helper('form'); + $error = $this->session->flashdata('error'); + if($error) + { + ?> +
    + + session->flashdata('error'); ?> +
    + + session->flashdata('success'); + if($success) + { + ?> +
    + + session->flashdata('success'); ?> +
    + + +
    +
    + ', '
    '); ?> +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/application/views/forgotPassword.php b/application/views/forgotPassword.php new file mode 100644 index 00000000..a37f8982 --- /dev/null +++ b/application/views/forgotPassword.php @@ -0,0 +1,63 @@ + + + + + CodeInsect | Admin System Log in + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/application/views/includes/footer.php b/application/views/includes/footer.php new file mode 100644 index 00000000..b1f985b7 --- /dev/null +++ b/application/views/includes/footer.php @@ -0,0 +1,29 @@ + + +
    + + Copyright © 2014-2015 Siddharth. All rights reserved. +
    + + + + + + + + + + + + \ No newline at end of file diff --git a/application/views/includes/header.php b/application/views/includes/header.php new file mode 100644 index 00000000..b2780422 --- /dev/null +++ b/application/views/includes/header.php @@ -0,0 +1,198 @@ + + + + + <?php echo $pageTitle; ?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Siddharth Industries + + + + + + + + + +
    + +
    + + + + +
    + + \ No newline at end of file diff --git a/application/views/index.html b/application/views/index.html new file mode 100644 index 00000000..c942a79c --- /dev/null +++ b/application/views/index.html @@ -0,0 +1,10 @@ + + + 403 Forbidden + + + +

    Directory access is forbidden.

    + + + \ No newline at end of file diff --git a/application/views/login.php b/application/views/login.php new file mode 100644 index 00000000..99f1ac0b --- /dev/null +++ b/application/views/login.php @@ -0,0 +1,74 @@ + + + + + Siddharth Industries | Admin System Log in + + + + + + + + + + + +
    + + + + + \ No newline at end of file diff --git a/application/views/supplierListing.php b/application/views/supplierListing.php new file mode 100644 index 00000000..91975043 --- /dev/null +++ b/application/views/supplierListing.php @@ -0,0 +1,96 @@ +
    + +
    +

    + Supplier List + Add, Edit, Delete +

    +
    +
    +
    +
    +
    + AddNew +
    +
    +
    +
    +
    +
    +
    +

    Supplier List

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    SupplierIDSupplierNameAddressContactNumberAlternate Contact NumberEmailAddressTINPANCreateDate
    SupplierID ?>SupplierName ?>Address ?>ContactNumber ?>AlternateContactNumber ?>EmailAddress ?>TIN ?>PAN ?>CreatedDate ?> +     + +
    + +
    + +
    +
    +
    +
    +
    + + diff --git a/application/views/users.php b/application/views/users.php new file mode 100644 index 00000000..56f17fb5 --- /dev/null +++ b/application/views/users.php @@ -0,0 +1,86 @@ +
    + +
    +

    + User Management + Add, Edit, Delete +

    +
    +
    +
    +
    +
    + Add New +
    +
    +
    +
    +
    +
    +
    +

    Users List

    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + +
    IdNameEmailMobileRoleActions
    userId ?>name ?>email ?>mobile ?>role ?> +     +     +
    + +
    + +
    +
    +
    +
    +
    + + diff --git a/assets/404.html b/assets/404.html deleted file mode 100644 index 05e627bc..00000000 --- a/assets/404.html +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - INSPINIA | 404 Error - - - - - - - - - - - - -
    -

    404

    -

    Page Not Found

    - -
    - Sorry, but the page you are looking for has note been found. Try checking the URL for error, then hit the refresh button on your browser or try found something else in our app. -
    -
    - -
    - -
    -
    -
    - - - - - - - - diff --git a/assets/500.html b/assets/500.html deleted file mode 100644 index 933ad4c5..00000000 --- a/assets/500.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - INSPINIA | 404 Error - - - - - - - - - - - - -
    -

    500

    -

    Internal Server Error

    - -
    - The server encountered something unexpected that didn't allow it to complete the request. We apologize.
    - You can go back to main page:
    Dashboard -
    -
    - - - - - - - - diff --git a/assets/badges_labels.html b/assets/badges_labels.html deleted file mode 100644 index 8b63c618..00000000 --- a/assets/badges_labels.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - - - - INSPINIA | Badges, Labels, Progress - - - - - - - - - - - -
    - - - -
    -
    - -
    -
    -
    -

    Badges, Labels, Progress

    - -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    Badges
    - -
    -
    -

    - To add a badge style You have to add .badgeclass to element. To change a color od badge you can add extra class like .badge-primary. -

    -

    Plain

    -

    Primary

    -

    Information

    -

    Success

    -

    Warning

    -

    Danger

    -
    -
    -
    - -
    -
    -
    -
    Labels
    - -
    -
    -

    - Analogic to badge. To add a label style You have to add .labelclass to element. To change a color od label you can add extra class like .label-primary. -

    -

    Plain

    -

    Primary

    -

    Information

    -

    Success

    -

    Warning

    -

    Danger

    -
    -
    -
    - -
    -
    -
    -
    -
    -
    Progress Bars
    - -
    -
    -
    Basic ProgressBars
    -
    -
    - 35% Complete (success) -
    -
    - -
    -
    - 43% Complete (success) -
    -
    - -
    Striped Progressbars
    - -
    -
    - 40% Complete (success) -
    -
    - -
    Active Progressbars
    - -
    -
    - 40% Complete (success) -
    -
    - -
    Stacked Progressbars
    - -
    -
    - 30% Complete (success) -
    -
    - 15% Complete (warning) -
    -
    - 40% Complete (danger) -
    -
    - -
    -
    -
    -
    -
    - - -
    -
    - - - - - - - - - - - - - - - - diff --git a/assets/basic_gallery.html b/assets/basic_gallery.html deleted file mode 100644 index db35cde7..00000000 --- a/assets/basic_gallery.html +++ /dev/null @@ -1,482 +0,0 @@ - - - - - - - - - INSPINIA | Lightbox Gallery - - - - - - - - - - - -
    - - - -
    -
    - -
    -
    -
    -

    Lightbox Gallery

    - -
    -
    - -
    -
    -
    -
    -
    -
    - -
    - -

    Lightbox image gallery

    -

    - blueimp Gallery is a touch-enabled, responsive and customizable image & video gallery, carousel and lightbox, optimized for both mobile and desktop web browsers. - It features swipe, mouse and keyboard navigation, transition effects, slideshow functionality, fullscreen support and on-demand content loading and can be extended to display additional content types. - Full documentation you can find at: https://github.com/blueimp/Gallery/blob/master/README.md -

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    - -
    -
    - - -
    -
    - - - - - - - - - - - - - - - - - - - - diff --git a/assets/bootstrap/css/bootstrap.css b/assets/bootstrap/css/bootstrap.css new file mode 100644 index 00000000..fb15e3d6 --- /dev/null +++ b/assets/bootstrap/css/bootstrap.css @@ -0,0 +1,6584 @@ +/*! + * Bootstrap v3.3.4 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +.glyphicon-cd:before { + content: "\e201"; +} +.glyphicon-save-file:before { + content: "\e202"; +} +.glyphicon-open-file:before { + content: "\e203"; +} +.glyphicon-level-up:before { + content: "\e204"; +} +.glyphicon-copy:before { + content: "\e205"; +} +.glyphicon-paste:before { + content: "\e206"; +} +.glyphicon-alert:before { + content: "\e209"; +} +.glyphicon-equalizer:before { + content: "\e210"; +} +.glyphicon-king:before { + content: "\e211"; +} +.glyphicon-queen:before { + content: "\e212"; +} +.glyphicon-pawn:before { + content: "\e213"; +} +.glyphicon-bishop:before { + content: "\e214"; +} +.glyphicon-knight:before { + content: "\e215"; +} +.glyphicon-baby-formula:before { + content: "\e216"; +} +.glyphicon-tent:before { + content: "\26fa"; +} +.glyphicon-blackboard:before { + content: "\e218"; +} +.glyphicon-bed:before { + content: "\e219"; +} +.glyphicon-apple:before { + content: "\f8ff"; +} +.glyphicon-erase:before { + content: "\e221"; +} +.glyphicon-hourglass:before { + content: "\231b"; +} +.glyphicon-lamp:before { + content: "\e223"; +} +.glyphicon-duplicate:before { + content: "\e224"; +} +.glyphicon-piggy-bank:before { + content: "\e225"; +} +.glyphicon-scissors:before { + content: "\e226"; +} +.glyphicon-bitcoin:before { + content: "\e227"; +} +.glyphicon-btc:before { + content: "\e227"; +} +.glyphicon-xbt:before { + content: "\e227"; +} +.glyphicon-yen:before { + content: "\00a5"; +} +.glyphicon-jpy:before { + content: "\00a5"; +} +.glyphicon-ruble:before { + content: "\20bd"; +} +.glyphicon-rub:before { + content: "\20bd"; +} +.glyphicon-scale:before { + content: "\e230"; +} +.glyphicon-ice-lolly:before { + content: "\e231"; +} +.glyphicon-ice-lolly-tasted:before { + content: "\e232"; +} +.glyphicon-education:before { + content: "\e233"; +} +.glyphicon-option-horizontal:before { + content: "\e234"; +} +.glyphicon-option-vertical:before { + content: "\e235"; +} +.glyphicon-menu-hamburger:before { + content: "\e236"; +} +.glyphicon-modal-window:before { + content: "\e237"; +} +.glyphicon-oil:before { + content: "\e238"; +} +.glyphicon-grain:before { + content: "\e239"; +} +.glyphicon-sunglasses:before { + content: "\e240"; +} +.glyphicon-text-size:before { + content: "\e241"; +} +.glyphicon-text-color:before { + content: "\e242"; +} +.glyphicon-text-background:before { + content: "\e243"; +} +.glyphicon-object-align-top:before { + content: "\e244"; +} +.glyphicon-object-align-bottom:before { + content: "\e245"; +} +.glyphicon-object-align-horizontal:before { + content: "\e246"; +} +.glyphicon-object-align-left:before { + content: "\e247"; +} +.glyphicon-object-align-vertical:before { + content: "\e248"; +} +.glyphicon-object-align-right:before { + content: "\e249"; +} +.glyphicon-triangle-right:before { + content: "\e250"; +} +.glyphicon-triangle-left:before { + content: "\e251"; +} +.glyphicon-triangle-bottom:before { + content: "\e252"; +} +.glyphicon-triangle-top:before { + content: "\e253"; +} +.glyphicon-console:before { + content: "\e254"; +} +.glyphicon-superscript:before { + content: "\e255"; +} +.glyphicon-subscript:before { + content: "\e256"; +} +.glyphicon-menu-left:before { + content: "\e257"; +} +.glyphicon-menu-right:before { + content: "\e258"; +} +.glyphicon-menu-down:before { + content: "\e259"; +} +.glyphicon-menu-up:before { + content: "\e260"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +[role="button"] { + cursor: pointer; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-of-type(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + background-color: #eee; + opacity: 1; +} +.form-control[disabled], +fieldset[disabled] .form-control { + cursor: not-allowed; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm, + .input-group-sm input[type="date"], + .input-group-sm input[type="time"], + .input-group-sm input[type="datetime-local"], + .input-group-sm input[type="month"] { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg, + .input-group-lg input[type="date"], + .input-group-lg input[type="time"], + .input-group-lg input[type="datetime-local"], + .input-group-lg input[type="month"] { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + position: relative; + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + min-height: 34px; + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +select[multiple].input-sm { + height: auto; +} +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.form-group-sm .form-control, +select[multiple].form-group-sm .form-control { + height: auto; +} +.form-group-sm .form-control-static { + height: 30px; + min-height: 32px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; +} +.input-lg { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-lg { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +select[multiple].input-lg { + height: auto; +} +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.form-group-lg .form-control, +select[multiple].form-group-lg .form-control { + height: auto; +} +.form-group-lg .form-control-static { + height: 46px; + min-height: 38px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.333333px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; +} +.collapse.in { + display: block; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px dashed; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropup, +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 2px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.3333333; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; +} +.tab-content > .active { + display: block; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + margin-bottom: 0; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge, +.btn-group-xs > .btn .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media, +.media-body { + overflow: hidden; + zoom: 1; +} +.media-body { + width: 10000px; +} +.media-object { + display: block; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +a.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a, +.panel-title > small, +.panel-title > .small, +.panel-title > small > a, +.panel-title > .small > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000; + perspective: 1000; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; + line-height: 1; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} +/*# sourceMappingURL=bootstrap.css.map */ diff --git a/assets/bootstrap/css/bootstrap.css.map b/assets/bootstrap/css/bootstrap.css.map new file mode 100644 index 00000000..2fd84f36 --- /dev/null +++ b/assets/bootstrap/css/bootstrap.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["bootstrap.css","less/normalize.less","less/print.less","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":"AAAA,6DAA4D;ACQ5D;EACE,yBAAA;EACA,4BAAA;EACA,gCAAA;EDND;ACaD;EACE,WAAA;EDXD;ACwBD;;;;;;;;;;;;;EAaE,gBAAA;EDtBD;AC8BD;;;;EAIE,uBAAA;EACA,0BAAA;ED5BD;ACoCD;EACE,eAAA;EACA,WAAA;EDlCD;AC0CD;;EAEE,eAAA;EDxCD;ACkDD;EACE,+BAAA;EDhDD;ACuDD;;EAEE,YAAA;EDrDD;AC+DD;EACE,2BAAA;ED7DD;ACoED;;EAEE,mBAAA;EDlED;ACyED;EACE,oBAAA;EDvED;AC+ED;EACE,gBAAA;EACA,kBAAA;ED7ED;ACoFD;EACE,kBAAA;EACA,aAAA;EDlFD;ACyFD;EACE,gBAAA;EDvFD;AC8FD;;EAEE,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,0BAAA;ED5FD;AC+FD;EACE,aAAA;ED7FD;ACgGD;EACE,iBAAA;ED9FD;ACwGD;EACE,WAAA;EDtGD;AC6GD;EACE,kBAAA;ED3GD;ACqHD;EACE,kBAAA;EDnHD;AC0HD;EACE,8BAAA;EACA,iCAAA;UAAA,yBAAA;EACA,WAAA;EDxHD;AC+HD;EACE,gBAAA;ED7HD;ACoID;;;;EAIE,mCAAA;EACA,gBAAA;EDlID;ACoJD;;;;;EAKE,gBAAA;EACA,eAAA;EACA,WAAA;EDlJD;ACyJD;EACE,mBAAA;EDvJD;ACiKD;;EAEE,sBAAA;ED/JD;AC0KD;;;;EAIE,4BAAA;EACA,iBAAA;EDxKD;AC+KD;;EAEE,iBAAA;ED7KD;ACoLD;;EAEE,WAAA;EACA,YAAA;EDlLD;AC0LD;EACE,qBAAA;EDxLD;ACmMD;;EAEE,gCAAA;KAAA,6BAAA;UAAA,wBAAA;EACA,YAAA;EDjMD;AC0MD;;EAEE,cAAA;EDxMD;ACiND;EACE,+BAAA;EACA,8BAAA;EACA,iCAAA;EACA,yBAAA;ED/MD;ACwND;;EAEE,0BAAA;EDtND;AC6ND;EACE,2BAAA;EACA,eAAA;EACA,gCAAA;ED3ND;ACmOD;EACE,WAAA;EACA,YAAA;EDjOD;ACwOD;EACE,gBAAA;EDtOD;AC8OD;EACE,mBAAA;ED5OD;ACsPD;EACE,2BAAA;EACA,mBAAA;EDpPD;ACuPD;;EAEE,YAAA;EDrPD;AACD,sFAAqF;AE1ErF;EAnGI;;;IAGI,oCAAA;IACA,wBAAA;IACA,qCAAA;YAAA,6BAAA;IACA,8BAAA;IFgLL;EE7KC;;IAEI,4BAAA;IF+KL;EE5KC;IACI,8BAAA;IF8KL;EE3KC;IACI,+BAAA;IF6KL;EExKC;;IAEI,aAAA;IF0KL;EEvKC;;IAEI,wBAAA;IACA,0BAAA;IFyKL;EEtKC;IACI,6BAAA;IFwKL;EErKC;;IAEI,0BAAA;IFuKL;EEpKC;IACI,4BAAA;IFsKL;EEnKC;;;IAGI,YAAA;IACA,WAAA;IFqKL;EElKC;;IAEI,yBAAA;IFoKL;EE7JC;IACI,6BAAA;IF+JL;EE3JC;IACI,eAAA;IF6JL;EE3JC;;IAGQ,mCAAA;IF4JT;EEzJC;IACI,wBAAA;IF2JL;EExJC;IACI,sCAAA;IF0JL;EE3JC;;IAKQ,mCAAA;IF0JT;EEvJC;;IAGQ,mCAAA;IFwJT;EACF;AGpPD;EACE,qCAAA;EACA,uDAAA;EACA,iYAAA;EHsPD;AG9OD;EACE,oBAAA;EACA,UAAA;EACA,uBAAA;EACA,qCAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,qCAAA;EACA,oCAAA;EHgPD;AG5OmC;EAAW,gBAAA;EH+O9C;AG9OmC;EAAW,gBAAA;EHiP9C;AG/OmC;;EAAW,kBAAA;EHmP9C;AGlPmC;EAAW,kBAAA;EHqP9C;AGpPmC;EAAW,kBAAA;EHuP9C;AGtPmC;EAAW,kBAAA;EHyP9C;AGxPmC;EAAW,kBAAA;EH2P9C;AG1PmC;EAAW,kBAAA;EH6P9C;AG5PmC;EAAW,kBAAA;EH+P9C;AG9PmC;EAAW,kBAAA;EHiQ9C;AGhQmC;EAAW,kBAAA;EHmQ9C;AGlQmC;EAAW,kBAAA;EHqQ9C;AGpQmC;EAAW,kBAAA;EHuQ9C;AGtQmC;EAAW,kBAAA;EHyQ9C;AGxQmC;EAAW,kBAAA;EH2Q9C;AG1QmC;EAAW,kBAAA;EH6Q9C;AG5QmC;EAAW,kBAAA;EH+Q9C;AG9QmC;EAAW,kBAAA;EHiR9C;AGhRmC;EAAW,kBAAA;EHmR9C;AGlRmC;EAAW,kBAAA;EHqR9C;AGpRmC;EAAW,kBAAA;EHuR9C;AGtRmC;EAAW,kBAAA;EHyR9C;AGxRmC;EAAW,kBAAA;EH2R9C;AG1RmC;EAAW,kBAAA;EH6R9C;AG5RmC;EAAW,kBAAA;EH+R9C;AG9RmC;EAAW,kBAAA;EHiS9C;AGhSmC;EAAW,kBAAA;EHmS9C;AGlSmC;EAAW,kBAAA;EHqS9C;AGpSmC;EAAW,kBAAA;EHuS9C;AGtSmC;EAAW,kBAAA;EHyS9C;AGxSmC;EAAW,kBAAA;EH2S9C;AG1SmC;EAAW,kBAAA;EH6S9C;AG5SmC;EAAW,kBAAA;EH+S9C;AG9SmC;EAAW,kBAAA;EHiT9C;AGhTmC;EAAW,kBAAA;EHmT9C;AGlTmC;EAAW,kBAAA;EHqT9C;AGpTmC;EAAW,kBAAA;EHuT9C;AGtTmC;EAAW,kBAAA;EHyT9C;AGxTmC;EAAW,kBAAA;EH2T9C;AG1TmC;EAAW,kBAAA;EH6T9C;AG5TmC;EAAW,kBAAA;EH+T9C;AG9TmC;EAAW,kBAAA;EHiU9C;AGhUmC;EAAW,kBAAA;EHmU9C;AGlUmC;EAAW,kBAAA;EHqU9C;AGpUmC;EAAW,kBAAA;EHuU9C;AGtUmC;EAAW,kBAAA;EHyU9C;AGxUmC;EAAW,kBAAA;EH2U9C;AG1UmC;EAAW,kBAAA;EH6U9C;AG5UmC;EAAW,kBAAA;EH+U9C;AG9UmC;EAAW,kBAAA;EHiV9C;AGhVmC;EAAW,kBAAA;EHmV9C;AGlVmC;EAAW,kBAAA;EHqV9C;AGpVmC;EAAW,kBAAA;EHuV9C;AGtVmC;EAAW,kBAAA;EHyV9C;AGxVmC;EAAW,kBAAA;EH2V9C;AG1VmC;EAAW,kBAAA;EH6V9C;AG5VmC;EAAW,kBAAA;EH+V9C;AG9VmC;EAAW,kBAAA;EHiW9C;AGhWmC;EAAW,kBAAA;EHmW9C;AGlWmC;EAAW,kBAAA;EHqW9C;AGpWmC;EAAW,kBAAA;EHuW9C;AGtWmC;EAAW,kBAAA;EHyW9C;AGxWmC;EAAW,kBAAA;EH2W9C;AG1WmC;EAAW,kBAAA;EH6W9C;AG5WmC;EAAW,kBAAA;EH+W9C;AG9WmC;EAAW,kBAAA;EHiX9C;AGhXmC;EAAW,kBAAA;EHmX9C;AGlXmC;EAAW,kBAAA;EHqX9C;AGpXmC;EAAW,kBAAA;EHuX9C;AGtXmC;EAAW,kBAAA;EHyX9C;AGxXmC;EAAW,kBAAA;EH2X9C;AG1XmC;EAAW,kBAAA;EH6X9C;AG5XmC;EAAW,kBAAA;EH+X9C;AG9XmC;EAAW,kBAAA;EHiY9C;AGhYmC;EAAW,kBAAA;EHmY9C;AGlYmC;EAAW,kBAAA;EHqY9C;AGpYmC;EAAW,kBAAA;EHuY9C;AGtYmC;EAAW,kBAAA;EHyY9C;AGxYmC;EAAW,kBAAA;EH2Y9C;AG1YmC;EAAW,kBAAA;EH6Y9C;AG5YmC;EAAW,kBAAA;EH+Y9C;AG9YmC;EAAW,kBAAA;EHiZ9C;AGhZmC;EAAW,kBAAA;EHmZ9C;AGlZmC;EAAW,kBAAA;EHqZ9C;AGpZmC;EAAW,kBAAA;EHuZ9C;AGtZmC;EAAW,kBAAA;EHyZ9C;AGxZmC;EAAW,kBAAA;EH2Z9C;AG1ZmC;EAAW,kBAAA;EH6Z9C;AG5ZmC;EAAW,kBAAA;EH+Z9C;AG9ZmC;EAAW,kBAAA;EHia9C;AGhamC;EAAW,kBAAA;EHma9C;AGlamC;EAAW,kBAAA;EHqa9C;AGpamC;EAAW,kBAAA;EHua9C;AGtamC;EAAW,kBAAA;EHya9C;AGxamC;EAAW,kBAAA;EH2a9C;AG1amC;EAAW,kBAAA;EH6a9C;AG5amC;EAAW,kBAAA;EH+a9C;AG9amC;EAAW,kBAAA;EHib9C;AGhbmC;EAAW,kBAAA;EHmb9C;AGlbmC;EAAW,kBAAA;EHqb9C;AGpbmC;EAAW,kBAAA;EHub9C;AGtbmC;EAAW,kBAAA;EHyb9C;AGxbmC;EAAW,kBAAA;EH2b9C;AG1bmC;EAAW,kBAAA;EH6b9C;AG5bmC;EAAW,kBAAA;EH+b9C;AG9bmC;EAAW,kBAAA;EHic9C;AGhcmC;EAAW,kBAAA;EHmc9C;AGlcmC;EAAW,kBAAA;EHqc9C;AGpcmC;EAAW,kBAAA;EHuc9C;AGtcmC;EAAW,kBAAA;EHyc9C;AGxcmC;EAAW,kBAAA;EH2c9C;AG1cmC;EAAW,kBAAA;EH6c9C;AG5cmC;EAAW,kBAAA;EH+c9C;AG9cmC;EAAW,kBAAA;EHid9C;AGhdmC;EAAW,kBAAA;EHmd9C;AGldmC;EAAW,kBAAA;EHqd9C;AGpdmC;EAAW,kBAAA;EHud9C;AGtdmC;EAAW,kBAAA;EHyd9C;AGxdmC;EAAW,kBAAA;EH2d9C;AG1dmC;EAAW,kBAAA;EH6d9C;AG5dmC;EAAW,kBAAA;EH+d9C;AG9dmC;EAAW,kBAAA;EHie9C;AGhemC;EAAW,kBAAA;EHme9C;AGlemC;EAAW,kBAAA;EHqe9C;AGpemC;EAAW,kBAAA;EHue9C;AGtemC;EAAW,kBAAA;EHye9C;AGxemC;EAAW,kBAAA;EH2e9C;AG1emC;EAAW,kBAAA;EH6e9C;AG5emC;EAAW,kBAAA;EH+e9C;AG9emC;EAAW,kBAAA;EHif9C;AGhfmC;EAAW,kBAAA;EHmf9C;AGlfmC;EAAW,kBAAA;EHqf9C;AGpfmC;EAAW,kBAAA;EHuf9C;AGtfmC;EAAW,kBAAA;EHyf9C;AGxfmC;EAAW,kBAAA;EH2f9C;AG1fmC;EAAW,kBAAA;EH6f9C;AG5fmC;EAAW,kBAAA;EH+f9C;AG9fmC;EAAW,kBAAA;EHigB9C;AGhgBmC;EAAW,kBAAA;EHmgB9C;AGlgBmC;EAAW,kBAAA;EHqgB9C;AGpgBmC;EAAW,kBAAA;EHugB9C;AGtgBmC;EAAW,kBAAA;EHygB9C;AGxgBmC;EAAW,kBAAA;EH2gB9C;AG1gBmC;EAAW,kBAAA;EH6gB9C;AG5gBmC;EAAW,kBAAA;EH+gB9C;AG9gBmC;EAAW,kBAAA;EHihB9C;AGhhBmC;EAAW,kBAAA;EHmhB9C;AGlhBmC;EAAW,kBAAA;EHqhB9C;AGphBmC;EAAW,kBAAA;EHuhB9C;AGthBmC;EAAW,kBAAA;EHyhB9C;AGxhBmC;EAAW,kBAAA;EH2hB9C;AG1hBmC;EAAW,kBAAA;EH6hB9C;AG5hBmC;EAAW,kBAAA;EH+hB9C;AG9hBmC;EAAW,kBAAA;EHiiB9C;AGhiBmC;EAAW,kBAAA;EHmiB9C;AGliBmC;EAAW,kBAAA;EHqiB9C;AGpiBmC;EAAW,kBAAA;EHuiB9C;AGtiBmC;EAAW,kBAAA;EHyiB9C;AGxiBmC;EAAW,kBAAA;EH2iB9C;AG1iBmC;EAAW,kBAAA;EH6iB9C;AG5iBmC;EAAW,kBAAA;EH+iB9C;AG9iBmC;EAAW,kBAAA;EHijB9C;AGhjBmC;EAAW,kBAAA;EHmjB9C;AGljBmC;EAAW,kBAAA;EHqjB9C;AGpjBmC;EAAW,kBAAA;EHujB9C;AGtjBmC;EAAW,kBAAA;EHyjB9C;AGxjBmC;EAAW,kBAAA;EH2jB9C;AG1jBmC;EAAW,kBAAA;EH6jB9C;AG5jBmC;EAAW,kBAAA;EH+jB9C;AG9jBmC;EAAW,kBAAA;EHikB9C;AGhkBmC;EAAW,kBAAA;EHmkB9C;AGlkBmC;EAAW,kBAAA;EHqkB9C;AGpkBmC;EAAW,kBAAA;EHukB9C;AGtkBmC;EAAW,kBAAA;EHykB9C;AGxkBmC;EAAW,kBAAA;EH2kB9C;AG1kBmC;EAAW,kBAAA;EH6kB9C;AG5kBmC;EAAW,kBAAA;EH+kB9C;AG9kBmC;EAAW,kBAAA;EHilB9C;AGhlBmC;EAAW,kBAAA;EHmlB9C;AGllBmC;EAAW,kBAAA;EHqlB9C;AGplBmC;EAAW,kBAAA;EHulB9C;AGtlBmC;EAAW,kBAAA;EHylB9C;AGxlBmC;EAAW,kBAAA;EH2lB9C;AG1lBmC;EAAW,kBAAA;EH6lB9C;AG5lBmC;EAAW,kBAAA;EH+lB9C;AG9lBmC;EAAW,kBAAA;EHimB9C;AGhmBmC;EAAW,kBAAA;EHmmB9C;AGlmBmC;EAAW,kBAAA;EHqmB9C;AGpmBmC;EAAW,kBAAA;EHumB9C;AGtmBmC;EAAW,kBAAA;EHymB9C;AGxmBmC;EAAW,kBAAA;EH2mB9C;AG1mBmC;EAAW,kBAAA;EH6mB9C;AG5mBmC;EAAW,kBAAA;EH+mB9C;AG9mBmC;EAAW,kBAAA;EHinB9C;AGhnBmC;EAAW,kBAAA;EHmnB9C;AGlnBmC;EAAW,kBAAA;EHqnB9C;AGpnBmC;EAAW,kBAAA;EHunB9C;AGtnBmC;EAAW,kBAAA;EHynB9C;AGxnBmC;EAAW,kBAAA;EH2nB9C;AG1nBmC;EAAW,kBAAA;EH6nB9C;AG5nBmC;EAAW,kBAAA;EH+nB9C;AG9nBmC;EAAW,kBAAA;EHioB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGhoBmC;EAAW,kBAAA;EHmoB9C;AGloBmC;EAAW,kBAAA;EHqoB9C;AGpoBmC;EAAW,kBAAA;EHuoB9C;AGtoBmC;EAAW,kBAAA;EHyoB9C;AGxoBmC;EAAW,kBAAA;EH2oB9C;AG1oBmC;EAAW,kBAAA;EH6oB9C;AG5oBmC;EAAW,kBAAA;EH+oB9C;AG9oBmC;EAAW,kBAAA;EHipB9C;AGhpBmC;EAAW,kBAAA;EHmpB9C;AGlpBmC;EAAW,kBAAA;EHqpB9C;AGppBmC;EAAW,kBAAA;EHupB9C;AGtpBmC;EAAW,kBAAA;EHypB9C;AGxpBmC;EAAW,kBAAA;EH2pB9C;AG1pBmC;EAAW,kBAAA;EH6pB9C;AG5pBmC;EAAW,kBAAA;EH+pB9C;AG9pBmC;EAAW,kBAAA;EHiqB9C;AGhqBmC;EAAW,kBAAA;EHmqB9C;AGlqBmC;EAAW,kBAAA;EHqqB9C;AGpqBmC;EAAW,kBAAA;EHuqB9C;AGtqBmC;EAAW,kBAAA;EHyqB9C;AGxqBmC;EAAW,kBAAA;EH2qB9C;AG1qBmC;EAAW,kBAAA;EH6qB9C;AG5qBmC;EAAW,kBAAA;EH+qB9C;AG9qBmC;EAAW,kBAAA;EHirB9C;AGhrBmC;EAAW,kBAAA;EHmrB9C;AGlrBmC;EAAW,kBAAA;EHqrB9C;AGprBmC;EAAW,kBAAA;EHurB9C;AGtrBmC;EAAW,kBAAA;EHyrB9C;AGxrBmC;EAAW,kBAAA;EH2rB9C;AG1rBmC;EAAW,kBAAA;EH6rB9C;AG5rBmC;EAAW,kBAAA;EH+rB9C;AG9rBmC;EAAW,kBAAA;EHisB9C;AGhsBmC;EAAW,kBAAA;EHmsB9C;AGlsBmC;EAAW,kBAAA;EHqsB9C;AGpsBmC;EAAW,kBAAA;EHusB9C;AGtsBmC;EAAW,kBAAA;EHysB9C;AGxsBmC;EAAW,kBAAA;EH2sB9C;AG1sBmC;EAAW,kBAAA;EH6sB9C;AG5sBmC;EAAW,kBAAA;EH+sB9C;AG9sBmC;EAAW,kBAAA;EHitB9C;AGhtBmC;EAAW,kBAAA;EHmtB9C;AGltBmC;EAAW,kBAAA;EHqtB9C;AGptBmC;EAAW,kBAAA;EHutB9C;AGttBmC;EAAW,kBAAA;EHytB9C;AGxtBmC;EAAW,kBAAA;EH2tB9C;AG1tBmC;EAAW,kBAAA;EH6tB9C;AG5tBmC;EAAW,kBAAA;EH+tB9C;AG9tBmC;EAAW,kBAAA;EHiuB9C;AGhuBmC;EAAW,kBAAA;EHmuB9C;AGluBmC;EAAW,kBAAA;EHquB9C;AGpuBmC;EAAW,kBAAA;EHuuB9C;AGtuBmC;EAAW,kBAAA;EHyuB9C;AGxuBmC;EAAW,kBAAA;EH2uB9C;AG1uBmC;EAAW,kBAAA;EH6uB9C;AG5uBmC;EAAW,kBAAA;EH+uB9C;AG9uBmC;EAAW,kBAAA;EHivB9C;AIvhCD;ECgEE,gCAAA;EACG,6BAAA;EACK,wBAAA;EL09BT;AIzhCD;;EC6DE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELg+BT;AIvhCD;EACE,iBAAA;EACA,+CAAA;EJyhCD;AIthCD;EACE,6DAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EJwhCD;AIphCD;;;;EAIE,sBAAA;EACA,oBAAA;EACA,sBAAA;EJshCD;AIhhCD;EACE,gBAAA;EACA,uBAAA;EJkhCD;AIhhCC;;EAEE,gBAAA;EACA,4BAAA;EJkhCH;AI/gCC;EErDA,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENskCD;AIzgCD;EACE,WAAA;EJ2gCD;AIrgCD;EACE,wBAAA;EJugCD;AIngCD;;;;;EGvEE,gBAAA;EACA,iBAAA;EACA,cAAA;EPilCD;AIvgCD;EACE,oBAAA;EJygCD;AIngCD;EACE,cAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EC6FA,0CAAA;EACK,qCAAA;EACG,kCAAA;EEvLR,uBAAA;EACA,iBAAA;EACA,cAAA;EPimCD;AIngCD;EACE,oBAAA;EJqgCD;AI//BD;EACE,kBAAA;EACA,qBAAA;EACA,WAAA;EACA,+BAAA;EJigCD;AIz/BD;EACE,oBAAA;EACA,YAAA;EACA,aAAA;EACA,cAAA;EACA,YAAA;EACA,kBAAA;EACA,wBAAA;EACA,WAAA;EJ2/BD;AIn/BC;;EAEE,kBAAA;EACA,aAAA;EACA,cAAA;EACA,WAAA;EACA,mBAAA;EACA,YAAA;EJq/BH;AIz+BD;EACE,iBAAA;EJ2+BD;AQnoCD;;;;;;;;;;;;EAEE,sBAAA;EACA,kBAAA;EACA,kBAAA;EACA,gBAAA;ER+oCD;AQppCD;;;;;;;;;;;;;;;;;;;;;;;;EASI,qBAAA;EACA,gBAAA;EACA,gBAAA;ERqqCH;AQjqCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERsqCD;AQ1qCD;;;;;;;;;;;;EAQI,gBAAA;ERgrCH;AQ7qCD;;;;;;EAGE,kBAAA;EACA,qBAAA;ERkrCD;AQtrCD;;;;;;;;;;;;EAQI,gBAAA;ER4rCH;AQxrCD;;EAAU,iBAAA;ER4rCT;AQ3rCD;;EAAU,iBAAA;ER+rCT;AQ9rCD;;EAAU,iBAAA;ERksCT;AQjsCD;;EAAU,iBAAA;ERqsCT;AQpsCD;;EAAU,iBAAA;ERwsCT;AQvsCD;;EAAU,iBAAA;ER2sCT;AQrsCD;EACE,kBAAA;ERusCD;AQpsCD;EACE,qBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ERssCD;AQjsCD;EAAA;IAFI,iBAAA;IRusCD;EACF;AQ/rCD;;EAEE,gBAAA;ERisCD;AQ9rCD;;EAEE,2BAAA;EACA,eAAA;ERgsCD;AQ5rCD;EAAuB,kBAAA;ER+rCtB;AQ9rCD;EAAuB,mBAAA;ERisCtB;AQhsCD;EAAuB,oBAAA;ERmsCtB;AQlsCD;EAAuB,qBAAA;ERqsCtB;AQpsCD;EAAuB,qBAAA;ERusCtB;AQpsCD;EAAuB,2BAAA;ERusCtB;AQtsCD;EAAuB,2BAAA;ERysCtB;AQxsCD;EAAuB,4BAAA;ER2sCtB;AQxsCD;EACE,gBAAA;ER0sCD;AQxsCD;ECrGE,gBAAA;ETgzCD;AS/yCC;EACE,gBAAA;ETizCH;AQ3sCD;ECxGE,gBAAA;ETszCD;ASrzCC;EACE,gBAAA;ETuzCH;AQ9sCD;EC3GE,gBAAA;ET4zCD;AS3zCC;EACE,gBAAA;ET6zCH;AQjtCD;EC9GE,gBAAA;ETk0CD;ASj0CC;EACE,gBAAA;ETm0CH;AQptCD;ECjHE,gBAAA;ETw0CD;ASv0CC;EACE,gBAAA;ETy0CH;AQntCD;EAGE,aAAA;EE3HA,2BAAA;EV+0CD;AU90CC;EACE,2BAAA;EVg1CH;AQptCD;EE9HE,2BAAA;EVq1CD;AUp1CC;EACE,2BAAA;EVs1CH;AQvtCD;EEjIE,2BAAA;EV21CD;AU11CC;EACE,2BAAA;EV41CH;AQ1tCD;EEpIE,2BAAA;EVi2CD;AUh2CC;EACE,2BAAA;EVk2CH;AQ7tCD;EEvIE,2BAAA;EVu2CD;AUt2CC;EACE,2BAAA;EVw2CH;AQ3tCD;EACE,qBAAA;EACA,qBAAA;EACA,kCAAA;ER6tCD;AQrtCD;;EAEE,eAAA;EACA,qBAAA;ERutCD;AQ1tCD;;;;EAMI,kBAAA;ER0tCH;AQntCD;EACE,iBAAA;EACA,kBAAA;ERqtCD;AQjtCD;EALE,iBAAA;EACA,kBAAA;EAMA,mBAAA;ERotCD;AQttCD;EAKI,uBAAA;EACA,mBAAA;EACA,oBAAA;ERotCH;AQ/sCD;EACE,eAAA;EACA,qBAAA;ERitCD;AQ/sCD;;EAEE,yBAAA;ERitCD;AQ/sCD;EACE,mBAAA;ERitCD;AQ/sCD;EACE,gBAAA;ERitCD;AQxrCD;EAAA;IAVM,aAAA;IACA,cAAA;IACA,aAAA;IACA,mBAAA;IGtNJ,kBAAA;IACA,yBAAA;IACA,qBAAA;IX65CC;EQlsCH;IAHM,oBAAA;IRwsCH;EACF;AQ/rCD;;EAGE,cAAA;EACA,mCAAA;ERgsCD;AQ9rCD;EACE,gBAAA;EA9IqB,2BAAA;ER+0CtB;AQ5rCD;EACE,oBAAA;EACA,kBAAA;EACA,mBAAA;EACA,gCAAA;ER8rCD;AQzrCG;;;EACE,kBAAA;ER6rCL;AQvsCD;;;EAmBI,gBAAA;EACA,gBAAA;EACA,yBAAA;EACA,gBAAA;ERyrCH;AQvrCG;;;EACE,wBAAA;ER2rCL;AQnrCD;;EAEE,qBAAA;EACA,iBAAA;EACA,iCAAA;EACA,gBAAA;EACA,mBAAA;ERqrCD;AQ/qCG;;;;;;EAAW,aAAA;ERurCd;AQtrCG;;;;;;EACE,wBAAA;ER6rCL;AQvrCD;EACE,qBAAA;EACA,oBAAA;EACA,yBAAA;ERyrCD;AY/9CD;;;;EAIE,gEAAA;EZi+CD;AY79CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EZ+9CD;AY39CD;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,2BAAA;EACA,oBAAA;EACA,wDAAA;UAAA,gDAAA;EZ69CD;AYn+CD;EASI,YAAA;EACA,iBAAA;EACA,mBAAA;EACA,0BAAA;UAAA,kBAAA;EZ69CH;AYx9CD;EACE,gBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,uBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EZ09CD;AYr+CD;EAeI,YAAA;EACA,oBAAA;EACA,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,kBAAA;EZy9CH;AYp9CD;EACE,mBAAA;EACA,oBAAA;EZs9CD;AahhDD;ECHE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;EdshDD;AahhDC;EAAA;IAFE,cAAA;IbshDD;EACF;AalhDC;EAAA;IAFE,cAAA;IbwhDD;EACF;AaphDD;EAAA;IAFI,eAAA;Ib0hDD;EACF;AajhDD;ECvBE,oBAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;Ed2iDD;Aa9gDD;ECvBE,oBAAA;EACA,qBAAA;EdwiDD;AexiDG;EACE,oBAAA;EAEA,iBAAA;EAEA,oBAAA;EACA,qBAAA;EfwiDL;AexhDG;EACE,aAAA;Ef0hDL;AenhDC;EACE,aAAA;EfqhDH;AethDC;EACE,qBAAA;EfwhDH;AezhDC;EACE,qBAAA;Ef2hDH;Ae5hDC;EACE,YAAA;Ef8hDH;Ae/hDC;EACE,qBAAA;EfiiDH;AeliDC;EACE,qBAAA;EfoiDH;AeriDC;EACE,YAAA;EfuiDH;AexiDC;EACE,qBAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,YAAA;EfgjDH;AejjDC;EACE,qBAAA;EfmjDH;AepjDC;EACE,oBAAA;EfsjDH;AexiDC;EACE,aAAA;Ef0iDH;Ae3iDC;EACE,qBAAA;Ef6iDH;Ae9iDC;EACE,qBAAA;EfgjDH;AejjDC;EACE,YAAA;EfmjDH;AepjDC;EACE,qBAAA;EfsjDH;AevjDC;EACE,qBAAA;EfyjDH;Ae1jDC;EACE,YAAA;Ef4jDH;Ae7jDC;EACE,qBAAA;Ef+jDH;AehkDC;EACE,qBAAA;EfkkDH;AenkDC;EACE,YAAA;EfqkDH;AetkDC;EACE,qBAAA;EfwkDH;AezkDC;EACE,oBAAA;Ef2kDH;AevkDC;EACE,aAAA;EfykDH;AezlDC;EACE,YAAA;Ef2lDH;Ae5lDC;EACE,oBAAA;Ef8lDH;Ae/lDC;EACE,oBAAA;EfimDH;AelmDC;EACE,WAAA;EfomDH;AermDC;EACE,oBAAA;EfumDH;AexmDC;EACE,oBAAA;Ef0mDH;Ae3mDC;EACE,WAAA;Ef6mDH;Ae9mDC;EACE,oBAAA;EfgnDH;AejnDC;EACE,oBAAA;EfmnDH;AepnDC;EACE,WAAA;EfsnDH;AevnDC;EACE,oBAAA;EfynDH;Ae1nDC;EACE,mBAAA;Ef4nDH;AexnDC;EACE,YAAA;Ef0nDH;Ae5mDC;EACE,mBAAA;Ef8mDH;Ae/mDC;EACE,2BAAA;EfinDH;AelnDC;EACE,2BAAA;EfonDH;AernDC;EACE,kBAAA;EfunDH;AexnDC;EACE,2BAAA;Ef0nDH;Ae3nDC;EACE,2BAAA;Ef6nDH;Ae9nDC;EACE,kBAAA;EfgoDH;AejoDC;EACE,2BAAA;EfmoDH;AepoDC;EACE,2BAAA;EfsoDH;AevoDC;EACE,kBAAA;EfyoDH;Ae1oDC;EACE,2BAAA;Ef4oDH;Ae7oDC;EACE,0BAAA;Ef+oDH;AehpDC;EACE,iBAAA;EfkpDH;AalpDD;EElCI;IACE,aAAA;IfurDH;EehrDD;IACE,aAAA;IfkrDD;EenrDD;IACE,qBAAA;IfqrDD;EetrDD;IACE,qBAAA;IfwrDD;EezrDD;IACE,YAAA;If2rDD;Ee5rDD;IACE,qBAAA;If8rDD;Ee/rDD;IACE,qBAAA;IfisDD;EelsDD;IACE,YAAA;IfosDD;EersDD;IACE,qBAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,YAAA;If6sDD;Ee9sDD;IACE,qBAAA;IfgtDD;EejtDD;IACE,oBAAA;IfmtDD;EersDD;IACE,aAAA;IfusDD;EexsDD;IACE,qBAAA;If0sDD;Ee3sDD;IACE,qBAAA;If6sDD;Ee9sDD;IACE,YAAA;IfgtDD;EejtDD;IACE,qBAAA;IfmtDD;EeptDD;IACE,qBAAA;IfstDD;EevtDD;IACE,YAAA;IfytDD;Ee1tDD;IACE,qBAAA;If4tDD;Ee7tDD;IACE,qBAAA;If+tDD;EehuDD;IACE,YAAA;IfkuDD;EenuDD;IACE,qBAAA;IfquDD;EetuDD;IACE,oBAAA;IfwuDD;EepuDD;IACE,aAAA;IfsuDD;EetvDD;IACE,YAAA;IfwvDD;EezvDD;IACE,oBAAA;If2vDD;Ee5vDD;IACE,oBAAA;If8vDD;Ee/vDD;IACE,WAAA;IfiwDD;EelwDD;IACE,oBAAA;IfowDD;EerwDD;IACE,oBAAA;IfuwDD;EexwDD;IACE,WAAA;If0wDD;Ee3wDD;IACE,oBAAA;If6wDD;Ee9wDD;IACE,oBAAA;IfgxDD;EejxDD;IACE,WAAA;IfmxDD;EepxDD;IACE,oBAAA;IfsxDD;EevxDD;IACE,mBAAA;IfyxDD;EerxDD;IACE,YAAA;IfuxDD;EezwDD;IACE,mBAAA;If2wDD;Ee5wDD;IACE,2BAAA;If8wDD;Ee/wDD;IACE,2BAAA;IfixDD;EelxDD;IACE,kBAAA;IfoxDD;EerxDD;IACE,2BAAA;IfuxDD;EexxDD;IACE,2BAAA;If0xDD;Ee3xDD;IACE,kBAAA;If6xDD;Ee9xDD;IACE,2BAAA;IfgyDD;EejyDD;IACE,2BAAA;IfmyDD;EepyDD;IACE,kBAAA;IfsyDD;EevyDD;IACE,2BAAA;IfyyDD;Ee1yDD;IACE,0BAAA;If4yDD;Ee7yDD;IACE,iBAAA;If+yDD;EACF;AavyDD;EE3CI;IACE,aAAA;Ifq1DH;Ee90DD;IACE,aAAA;Ifg1DD;Eej1DD;IACE,qBAAA;Ifm1DD;Eep1DD;IACE,qBAAA;Ifs1DD;Eev1DD;IACE,YAAA;Ify1DD;Ee11DD;IACE,qBAAA;If41DD;Ee71DD;IACE,qBAAA;If+1DD;Eeh2DD;IACE,YAAA;Ifk2DD;Een2DD;IACE,qBAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,YAAA;If22DD;Ee52DD;IACE,qBAAA;If82DD;Ee/2DD;IACE,oBAAA;Ifi3DD;Een2DD;IACE,aAAA;Ifq2DD;Eet2DD;IACE,qBAAA;Ifw2DD;Eez2DD;IACE,qBAAA;If22DD;Ee52DD;IACE,YAAA;If82DD;Ee/2DD;IACE,qBAAA;Ifi3DD;Eel3DD;IACE,qBAAA;Ifo3DD;Eer3DD;IACE,YAAA;Ifu3DD;Eex3DD;IACE,qBAAA;If03DD;Ee33DD;IACE,qBAAA;If63DD;Ee93DD;IACE,YAAA;Ifg4DD;Eej4DD;IACE,qBAAA;Ifm4DD;Eep4DD;IACE,oBAAA;Ifs4DD;Eel4DD;IACE,aAAA;Ifo4DD;Eep5DD;IACE,YAAA;Ifs5DD;Eev5DD;IACE,oBAAA;Ify5DD;Ee15DD;IACE,oBAAA;If45DD;Ee75DD;IACE,WAAA;If+5DD;Eeh6DD;IACE,oBAAA;Ifk6DD;Een6DD;IACE,oBAAA;Ifq6DD;Eet6DD;IACE,WAAA;Ifw6DD;Eez6DD;IACE,oBAAA;If26DD;Ee56DD;IACE,oBAAA;If86DD;Ee/6DD;IACE,WAAA;Ifi7DD;Eel7DD;IACE,oBAAA;Ifo7DD;Eer7DD;IACE,mBAAA;Ifu7DD;Een7DD;IACE,YAAA;Ifq7DD;Eev6DD;IACE,mBAAA;Ify6DD;Ee16DD;IACE,2BAAA;If46DD;Ee76DD;IACE,2BAAA;If+6DD;Eeh7DD;IACE,kBAAA;Ifk7DD;Een7DD;IACE,2BAAA;Ifq7DD;Eet7DD;IACE,2BAAA;Ifw7DD;Eez7DD;IACE,kBAAA;If27DD;Ee57DD;IACE,2BAAA;If87DD;Ee/7DD;IACE,2BAAA;Ifi8DD;Eel8DD;IACE,kBAAA;Ifo8DD;Eer8DD;IACE,2BAAA;Ifu8DD;Eex8DD;IACE,0BAAA;If08DD;Ee38DD;IACE,iBAAA;If68DD;EACF;Aal8DD;EE9CI;IACE,aAAA;Ifm/DH;Ee5+DD;IACE,aAAA;If8+DD;Ee/+DD;IACE,qBAAA;Ifi/DD;Eel/DD;IACE,qBAAA;Ifo/DD;Eer/DD;IACE,YAAA;Ifu/DD;Eex/DD;IACE,qBAAA;If0/DD;Ee3/DD;IACE,qBAAA;If6/DD;Ee9/DD;IACE,YAAA;IfggED;EejgED;IACE,qBAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,YAAA;IfygED;Ee1gED;IACE,qBAAA;If4gED;Ee7gED;IACE,oBAAA;If+gED;EejgED;IACE,aAAA;IfmgED;EepgED;IACE,qBAAA;IfsgED;EevgED;IACE,qBAAA;IfygED;Ee1gED;IACE,YAAA;If4gED;Ee7gED;IACE,qBAAA;If+gED;EehhED;IACE,qBAAA;IfkhED;EenhED;IACE,YAAA;IfqhED;EethED;IACE,qBAAA;IfwhED;EezhED;IACE,qBAAA;If2hED;Ee5hED;IACE,YAAA;If8hED;Ee/hED;IACE,qBAAA;IfiiED;EeliED;IACE,oBAAA;IfoiED;EehiED;IACE,aAAA;IfkiED;EeljED;IACE,YAAA;IfojED;EerjED;IACE,oBAAA;IfujED;EexjED;IACE,oBAAA;If0jED;Ee3jED;IACE,WAAA;If6jED;Ee9jED;IACE,oBAAA;IfgkED;EejkED;IACE,oBAAA;IfmkED;EepkED;IACE,WAAA;IfskED;EevkED;IACE,oBAAA;IfykED;Ee1kED;IACE,oBAAA;If4kED;Ee7kED;IACE,WAAA;If+kED;EehlED;IACE,oBAAA;IfklED;EenlED;IACE,mBAAA;IfqlED;EejlED;IACE,YAAA;IfmlED;EerkED;IACE,mBAAA;IfukED;EexkED;IACE,2BAAA;If0kED;Ee3kED;IACE,2BAAA;If6kED;Ee9kED;IACE,kBAAA;IfglED;EejlED;IACE,2BAAA;IfmlED;EeplED;IACE,2BAAA;IfslED;EevlED;IACE,kBAAA;IfylED;Ee1lED;IACE,2BAAA;If4lED;Ee7lED;IACE,2BAAA;If+lED;EehmED;IACE,kBAAA;IfkmED;EenmED;IACE,2BAAA;IfqmED;EetmED;IACE,0BAAA;IfwmED;EezmED;IACE,iBAAA;If2mED;EACF;AgB/qED;EACE,+BAAA;EhBirED;AgB/qED;EACE,kBAAA;EACA,qBAAA;EACA,gBAAA;EACA,kBAAA;EhBirED;AgB/qED;EACE,kBAAA;EhBirED;AgB3qED;EACE,aAAA;EACA,iBAAA;EACA,qBAAA;EhB6qED;AgBhrED;;;;;;EAWQ,cAAA;EACA,yBAAA;EACA,qBAAA;EACA,+BAAA;EhB6qEP;AgB3rED;EAoBI,wBAAA;EACA,kCAAA;EhB0qEH;AgB/rED;;;;;;EA8BQ,eAAA;EhByqEP;AgBvsED;EAoCI,+BAAA;EhBsqEH;AgB1sED;EAyCI,2BAAA;EhBoqEH;AgB7pED;;;;;;EAOQ,cAAA;EhB8pEP;AgBnpED;EACE,2BAAA;EhBqpED;AgBtpED;;;;;;EAQQ,2BAAA;EhBspEP;AgB9pED;;EAeM,0BAAA;EhBmpEL;AgBzoED;EAEI,2BAAA;EhB0oEH;AgBjoED;EAEI,2BAAA;EhBkoEH;AgBznED;EACE,kBAAA;EACA,aAAA;EACA,uBAAA;EhB2nED;AgBtnEG;;EACE,kBAAA;EACA,aAAA;EACA,qBAAA;EhBynEL;AiBrwEC;;;;;;;;;;;;EAOI,2BAAA;EjB4wEL;AiBtwEC;;;;;EAMI,2BAAA;EjBuwEL;AiB1xEC;;;;;;;;;;;;EAOI,2BAAA;EjBiyEL;AiB3xEC;;;;;EAMI,2BAAA;EjB4xEL;AiB/yEC;;;;;;;;;;;;EAOI,2BAAA;EjBszEL;AiBhzEC;;;;;EAMI,2BAAA;EjBizEL;AiBp0EC;;;;;;;;;;;;EAOI,2BAAA;EjB20EL;AiBr0EC;;;;;EAMI,2BAAA;EjBs0EL;AiBz1EC;;;;;;;;;;;;EAOI,2BAAA;EjBg2EL;AiB11EC;;;;;EAMI,2BAAA;EjB21EL;AgBzsED;EACE,kBAAA;EACA,mBAAA;EhB2sED;AgB9oED;EAAA;IA1DI,aAAA;IACA,qBAAA;IACA,oBAAA;IACA,8CAAA;IACA,2BAAA;IhB4sED;EgBtpEH;IAlDM,kBAAA;IhB2sEH;EgBzpEH;;;;;;IAzCY,qBAAA;IhB0sET;EgBjqEH;IAjCM,WAAA;IhBqsEH;EgBpqEH;;;;;;IAxBY,gBAAA;IhBosET;EgB5qEH;;;;;;IApBY,iBAAA;IhBwsET;EgBprEH;;;;IAPY,kBAAA;IhBisET;EACF;AkB35ED;EACE,YAAA;EACA,WAAA;EACA,WAAA;EAIA,cAAA;ElB05ED;AkBv5ED;EACE,gBAAA;EACA,aAAA;EACA,YAAA;EACA,qBAAA;EACA,iBAAA;EACA,sBAAA;EACA,gBAAA;EACA,WAAA;EACA,kCAAA;ElBy5ED;AkBt5ED;EACE,uBAAA;EACA,iBAAA;EACA,oBAAA;EACA,mBAAA;ElBw5ED;AkB74ED;Eb4BE,gCAAA;EACG,6BAAA;EACK,wBAAA;ELo3ET;AkB74ED;;EAEE,iBAAA;EACA,oBAAA;EACA,qBAAA;ElB+4ED;AkB34ED;EACE,gBAAA;ElB64ED;AkBz4ED;EACE,gBAAA;EACA,aAAA;ElB24ED;AkBv4ED;;EAEE,cAAA;ElBy4ED;AkBr4ED;;;EZxEE,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENi9ED;AkBr4ED;EACE,gBAAA;EACA,kBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;ElBu4ED;AkB72ED;EACE,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,2BAAA;EACA,wBAAA;EACA,2BAAA;EACA,oBAAA;EbzDA,0DAAA;EACQ,kDAAA;EAyHR,wFAAA;EACK,2EAAA;EACG,wEAAA;ELizET;AmBz7EC;EACE,uBAAA;EACA,YAAA;EdUF,wFAAA;EACQ,gFAAA;ELk7ET;AKj5EC;EACE,gBAAA;EACA,YAAA;ELm5EH;AKj5EC;EAA0B,gBAAA;ELo5E3B;AKn5EC;EAAgC,gBAAA;ELs5EjC;AkBr3EC;;;EAGE,2BAAA;EACA,YAAA;ElBu3EH;AkBp3EC;;EAEE,qBAAA;ElBs3EH;AkBl3EC;EACE,cAAA;ElBo3EH;AkBx2ED;EACE,0BAAA;ElB02ED;AkBt0ED;EAxBE;;;;IAIE,mBAAA;IlBi2ED;EkB/1EC;;;;;;;;IAEE,mBAAA;IlBu2EH;EkBp2EC;;;;;;;;IAEE,mBAAA;IlB42EH;EACF;AkBl2ED;EACE,qBAAA;ElBo2ED;AkB51ED;;EAEE,oBAAA;EACA,gBAAA;EACA,kBAAA;EACA,qBAAA;ElB81ED;AkBn2ED;;EAQI,kBAAA;EACA,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,iBAAA;ElB+1EH;AkB51ED;;;;EAIE,oBAAA;EACA,oBAAA;EACA,oBAAA;ElB81ED;AkB31ED;;EAEE,kBAAA;ElB61ED;AkBz1ED;;EAEE,oBAAA;EACA,uBAAA;EACA,oBAAA;EACA,kBAAA;EACA,wBAAA;EACA,qBAAA;EACA,iBAAA;ElB21ED;AkBz1ED;;EAEE,eAAA;EACA,mBAAA;ElB21ED;AkBl1EC;;;;;;EAGE,qBAAA;ElBu1EH;AkBj1EC;;;;EAEE,qBAAA;ElBq1EH;AkB/0EC;;;;EAGI,qBAAA;ElBk1EL;AkBv0ED;EAEE,kBAAA;EACA,qBAAA;EAEA,kBAAA;EACA,kBAAA;ElBu0ED;AkBr0EC;;EAEE,iBAAA;EACA,kBAAA;ElBu0EH;AkB1zED;EC1PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBujFD;AmBrjFC;EACE,cAAA;EACA,mBAAA;EnBujFH;AmBpjFC;;EAEE,cAAA;EnBsjFH;AkBt0ED;EC7PE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnBskFD;AmBpkFC;EACE,cAAA;EACA,mBAAA;EnBskFH;AmBnkFC;;EAEE,cAAA;EnBqkFH;AkBr1ED;EAKI,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;ElBm1EH;AkB/0ED;EC1QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB4lFD;AmB1lFC;EACE,cAAA;EACA,mBAAA;EnB4lFH;AmBzlFC;;EAEE,cAAA;EnB2lFH;AkB31ED;EC7QE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnB2mFD;AmBzmFC;EACE,cAAA;EACA,mBAAA;EnB2mFH;AmBxmFC;;EAEE,cAAA;EnB0mFH;AkB12ED;EAKI,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,kBAAA;ElBw2EH;AkB/1ED;EAEE,oBAAA;ElBg2ED;AkBl2ED;EAMI,uBAAA;ElB+1EH;AkB31ED;EACE,oBAAA;EACA,QAAA;EACA,UAAA;EACA,YAAA;EACA,gBAAA;EACA,aAAA;EACA,cAAA;EACA,mBAAA;EACA,oBAAA;EACA,sBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkB31ED;EACE,aAAA;EACA,cAAA;EACA,mBAAA;ElB61ED;AkBz1ED;;;;;;;;;;ECrXI,gBAAA;EnB0tFH;AkBr2ED;ECjXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;EL2qFT;AmBztFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;ELgrFT;AkB/2ED;ECvWI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBytFH;AkBp3ED;ECjWI,gBAAA;EnBwtFH;AkBp3ED;;;;;;;;;;ECxXI,gBAAA;EnBwvFH;AkBh4ED;ECpXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELysFT;AmBvvFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL8sFT;AkB14ED;EC1WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBuvFH;AkB/4ED;ECpWI,gBAAA;EnBsvFH;AkB/4ED;;;;;;;;;;EC3XI,gBAAA;EnBsxFH;AkB35ED;ECvXI,uBAAA;Ed+CF,0DAAA;EACQ,kDAAA;ELuuFT;AmBrxFG;EACE,uBAAA;Ed4CJ,2EAAA;EACQ,mEAAA;EL4uFT;AkBr6ED;EC7WI,gBAAA;EACA,uBAAA;EACA,2BAAA;EnBqxFH;AkB16ED;ECvWI,gBAAA;EnBoxFH;AkBt6EC;EACG,WAAA;ElBw6EJ;AkBt6EC;EACG,QAAA;ElBw6EJ;AkB95ED;EACE,gBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;ElBg6ED;AkB70ED;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlB+4EH;EkBn1EH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlB64EH;EkBx1EH;IAhDM,uBAAA;IlB24EH;EkB31EH;IA5CM,uBAAA;IACA,wBAAA;IlB04EH;EkB/1EH;;;IAtCQ,aAAA;IlB04EL;EkBp2EH;IAhCM,aAAA;IlBu4EH;EkBv2EH;IA5BM,kBAAA;IACA,wBAAA;IlBs4EH;EkB32EH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlBm4EH;EkBl3EH;;IAdQ,iBAAA;IlBo4EL;EkBt3EH;;IATM,oBAAA;IACA,gBAAA;IlBm4EH;EkB33EH;IAHM,QAAA;IlBi4EH;EACF;AkBv3ED;;;;EASI,eAAA;EACA,kBAAA;EACA,kBAAA;ElBo3EH;AkB/3ED;;EAiBI,kBAAA;ElBk3EH;AkBn4ED;EJjfE,oBAAA;EACA,qBAAA;Edu3FD;AkBh2EC;EAAA;IAVI,mBAAA;IACA,kBAAA;IACA,kBAAA;IlB82EH;EACF;AkB94ED;EAwCI,aAAA;ElBy2EH;AkB51EC;EAAA;IAHM,0BAAA;IlBm2EL;EACF;AkB11EC;EAAA;IAHM,kBAAA;IlBi2EL;EACF;AoBn5FD;EACE,uBAAA;EACA,kBAAA;EACA,qBAAA;EACA,oBAAA;EACA,wBAAA;EACA,gCAAA;MAAA,4BAAA;EACA,iBAAA;EACA,wBAAA;EACA,+BAAA;EACA,qBAAA;EC6BA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,oBAAA;EhB4KA,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;EL8sFT;AoBt5FG;;;;;;EdrBF,sBAAA;EAEA,4CAAA;EACA,sBAAA;ENk7FD;AoB15FC;;;EAGE,gBAAA;EACA,uBAAA;EpB45FH;AoBz5FC;;EAEE,YAAA;EACA,wBAAA;Ef2BF,0DAAA;EACQ,kDAAA;ELi4FT;AoBz5FC;;;EAGE,qBAAA;EACA,sBAAA;EE9CF,eAAA;EAGA,2BAAA;EjB8DA,0BAAA;EACQ,kBAAA;EL24FT;AoBr5FD;ECrDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB68FD;AqB38FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB68FP;AqB38FC;;;EAGE,wBAAA;ErB68FH;AqBx8FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBs9FT;AoB97FD;ECnBI,gBAAA;EACA,2BAAA;ErBo9FH;AoB/7FD;ECxDE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB0/FD;AqBx/FC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB0/FP;AqBx/FC;;;EAGE,wBAAA;ErB0/FH;AqBr/FG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBmgGT;AoBx+FD;ECtBI,gBAAA;EACA,2BAAA;ErBigGH;AoBx+FD;EC5DE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBuiGD;AqBriGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBuiGP;AqBriGC;;;EAGE,wBAAA;ErBuiGH;AqBliGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBgjGT;AoBjhGD;EC1BI,gBAAA;EACA,2BAAA;ErB8iGH;AoBjhGD;EChEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBolGD;AqBllGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBolGP;AqBllGC;;;EAGE,wBAAA;ErBolGH;AqB/kGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB6lGT;AoB1jGD;EC9BI,gBAAA;EACA,2BAAA;ErB2lGH;AoB1jGD;ECpEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErBioGD;AqB/nGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErBioGP;AqB/nGC;;;EAGE,wBAAA;ErBioGH;AqB5nGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErB0oGT;AoBnmGD;EClCI,gBAAA;EACA,2BAAA;ErBwoGH;AoBnmGD;ECxEE,gBAAA;EACA,2BAAA;EACA,uBAAA;ErB8qGD;AqB5qGC;;;;;;EAME,gBAAA;EACA,2BAAA;EACI,uBAAA;ErB8qGP;AqB5qGC;;;EAGE,wBAAA;ErB8qGH;AqBzqGG;;;;;;;;;;;;;;;;;;EAME,2BAAA;EACI,uBAAA;ErBurGT;AoB5oGD;ECtCI,gBAAA;EACA,2BAAA;ErBqrGH;AoBvoGD;EACE,gBAAA;EACA,qBAAA;EACA,kBAAA;EpByoGD;AoBvoGC;;;;;EAKE,+BAAA;Ef7BF,0BAAA;EACQ,kBAAA;ELuqGT;AoBxoGC;;;;EAIE,2BAAA;EpB0oGH;AoBxoGC;;EAEE,gBAAA;EACA,4BAAA;EACA,+BAAA;EpB0oGH;AoBtoGG;;;;EAEE,gBAAA;EACA,uBAAA;EpB0oGL;AoBjoGD;;EC/EE,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;ErBotGD;AoBpoGD;;ECnFE,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErB2tGD;AoBvoGD;;ECvFE,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;ErBkuGD;AoBtoGD;EACE,gBAAA;EACA,aAAA;EpBwoGD;AoBpoGD;EACE,iBAAA;EpBsoGD;AoB/nGC;;;EACE,aAAA;EpBmoGH;AuBvxGD;EACE,YAAA;ElBoLA,0CAAA;EACK,qCAAA;EACG,kCAAA;ELsmGT;AuB1xGC;EACE,YAAA;EvB4xGH;AuBxxGD;EACE,eAAA;EvB0xGD;AuBxxGC;EAAY,gBAAA;EvB2xGb;AuB1xGC;EAAY,oBAAA;EvB6xGb;AuB5xGC;EAAY,0BAAA;EvB+xGb;AuB5xGD;EACE,oBAAA;EACA,WAAA;EACA,kBAAA;ElBuKA,iDAAA;EACQ,4CAAA;KAAA,yCAAA;EAOR,oCAAA;EACQ,+BAAA;KAAA,4BAAA;EAGR,0CAAA;EACQ,qCAAA;KAAA,kCAAA;ELgnGT;AwB1zGD;EACE,uBAAA;EACA,UAAA;EACA,WAAA;EACA,kBAAA;EACA,wBAAA;EACA,wBAAA;EACA,qCAAA;EACA,oCAAA;ExB4zGD;AwBxzGD;;EAEE,oBAAA;ExB0zGD;AwBtzGD;EACE,YAAA;ExBwzGD;AwBpzGD;EACE,oBAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,kBAAA;EACA,2BAAA;EACA,2BAAA;EACA,uCAAA;EACA,oBAAA;EnBuBA,qDAAA;EACQ,6CAAA;EmBtBR,sCAAA;UAAA,8BAAA;ExBuzGD;AwBlzGC;EACE,UAAA;EACA,YAAA;ExBozGH;AwB70GD;ECxBE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzBw2GD;AwBn1GD;EAmCI,gBAAA;EACA,mBAAA;EACA,aAAA;EACA,qBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExBmzGH;AwB7yGC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;ExB+yGH;AwBzyGC;;;EAGE,gBAAA;EACA,uBAAA;EACA,YAAA;EACA,2BAAA;ExB2yGH;AwBlyGC;;;EAGE,gBAAA;ExBoyGH;AwBhyGC;;EAEE,uBAAA;EACA,+BAAA;EACA,wBAAA;EE1GF,qEAAA;EF4GE,qBAAA;ExBkyGH;AwB7xGD;EAGI,gBAAA;ExB6xGH;AwBhyGD;EAQI,YAAA;ExB2xGH;AwBnxGD;EACE,YAAA;EACA,UAAA;ExBqxGD;AwB7wGD;EACE,SAAA;EACA,aAAA;ExB+wGD;AwB3wGD;EACE,gBAAA;EACA,mBAAA;EACA,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,qBAAA;ExB6wGD;AwBzwGD;EACE,iBAAA;EACA,SAAA;EACA,UAAA;EACA,WAAA;EACA,QAAA;EACA,cAAA;ExB2wGD;AwBvwGD;EACE,UAAA;EACA,YAAA;ExBywGD;AwBjwGD;;EAII,eAAA;EACA,0BAAA;EACA,aAAA;ExBiwGH;AwBvwGD;;EAUI,WAAA;EACA,cAAA;EACA,oBAAA;ExBiwGH;AwB5uGD;EAXE;IAnEA,YAAA;IACA,UAAA;IxB8zGC;EwB5vGD;IAzDA,SAAA;IACA,aAAA;IxBwzGC;EACF;A2Bv8GD;;EAEE,oBAAA;EACA,uBAAA;EACA,wBAAA;E3By8GD;A2B78GD;;EAMI,oBAAA;EACA,aAAA;E3B28GH;A2Bz8GG;;;;;;;;EAIE,YAAA;E3B+8GL;A2Bz8GD;;;;EAKI,mBAAA;E3B08GH;A2Br8GD;EACE,mBAAA;E3Bu8GD;A2Bx8GD;;EAMI,aAAA;E3Bs8GH;A2B58GD;;;EAWI,kBAAA;E3Bs8GH;A2Bl8GD;EACE,kBAAA;E3Bo8GD;A2Bh8GD;EACE,gBAAA;E3Bk8GD;A2Bj8GC;ECjDA,+BAAA;EACG,4BAAA;E5Bq/GJ;A2Bh8GD;;EC9CE,8BAAA;EACG,2BAAA;E5Bk/GJ;A2B/7GD;EACE,aAAA;E3Bi8GD;A2B/7GD;EACE,kBAAA;E3Bi8GD;A2B/7GD;;EClEE,+BAAA;EACG,4BAAA;E5BqgHJ;A2B97GD;EChEE,8BAAA;EACG,2BAAA;E5BigHJ;A2B77GD;;EAEE,YAAA;E3B+7GD;A2B96GD;EACE,mBAAA;EACA,oBAAA;E3Bg7GD;A2B96GD;EACE,oBAAA;EACA,qBAAA;E3Bg7GD;A2B36GD;EtB9CE,0DAAA;EACQ,kDAAA;EL49GT;A2B36GC;EtBlDA,0BAAA;EACQ,kBAAA;ELg+GT;A2Bx6GD;EACE,gBAAA;E3B06GD;A2Bv6GD;EACE,yBAAA;EACA,wBAAA;E3By6GD;A2Bt6GD;EACE,yBAAA;E3Bw6GD;A2Bj6GD;;;EAII,gBAAA;EACA,aAAA;EACA,aAAA;EACA,iBAAA;E3Bk6GH;A2Bz6GD;EAcM,aAAA;E3B85GL;A2B56GD;;;;EAsBI,kBAAA;EACA,gBAAA;E3B45GH;A2Bv5GC;EACE,kBAAA;E3By5GH;A2Bv5GC;EACE,8BAAA;ECnKF,+BAAA;EACC,8BAAA;E5B6jHF;A2Bx5GC;EACE,gCAAA;EC/KF,4BAAA;EACC,2BAAA;E5B0kHF;A2Bx5GD;EACE,kBAAA;E3B05GD;A2Bx5GD;;EC9KE,+BAAA;EACC,8BAAA;E5B0kHF;A2Bv5GD;EC5LE,4BAAA;EACC,2BAAA;E5BslHF;A2Bn5GD;EACE,gBAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;E3Bq5GD;A2Bz5GD;;EAOI,aAAA;EACA,qBAAA;EACA,WAAA;E3Bs5GH;A2B/5GD;EAYI,aAAA;E3Bs5GH;A2Bl6GD;EAgBI,YAAA;E3Bq5GH;A2Bp4GD;;;;EAKM,oBAAA;EACA,wBAAA;EACA,sBAAA;E3Bq4GL;A6B9mHD;EACE,oBAAA;EACA,gBAAA;EACA,2BAAA;E7BgnHD;A6B7mHC;EACE,aAAA;EACA,iBAAA;EACA,kBAAA;E7B+mHH;A6BxnHD;EAeI,oBAAA;EACA,YAAA;EAKA,aAAA;EAEA,aAAA;EACA,kBAAA;E7BumHH;A6B9lHD;;;EV8BE,cAAA;EACA,oBAAA;EACA,iBAAA;EACA,wBAAA;EACA,oBAAA;EnBqkHD;AmBnkHC;;;EACE,cAAA;EACA,mBAAA;EnBukHH;AmBpkHC;;;;;;EAEE,cAAA;EnB0kHH;A6BhnHD;;;EVyBE,cAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;EnB4lHD;AmB1lHC;;;EACE,cAAA;EACA,mBAAA;EnB8lHH;AmB3lHC;;;;;;EAEE,cAAA;EnBimHH;A6B9nHD;;;EAGE,qBAAA;E7BgoHD;A6B9nHC;;;EACE,kBAAA;E7BkoHH;A6B9nHD;;EAEE,WAAA;EACA,qBAAA;EACA,wBAAA;E7BgoHD;A6B3nHD;EACE,mBAAA;EACA,iBAAA;EACA,qBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;E7B6nHD;A6B1nHC;EACE,mBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6B1nHC;EACE,oBAAA;EACA,iBAAA;EACA,oBAAA;E7B4nHH;A6BhpHD;;EA0BI,eAAA;E7B0nHH;A6BrnHD;;;;;;;EDhGE,+BAAA;EACG,4BAAA;E5B8tHJ;A6BtnHD;EACE,iBAAA;E7BwnHD;A6BtnHD;;;;;;;EDpGE,8BAAA;EACG,2BAAA;E5BmuHJ;A6BvnHD;EACE,gBAAA;E7BynHD;A6BpnHD;EACE,oBAAA;EAGA,cAAA;EACA,qBAAA;E7BonHD;A6BznHD;EAUI,oBAAA;E7BknHH;A6B5nHD;EAYM,mBAAA;E7BmnHL;A6BhnHG;;;EAGE,YAAA;E7BknHL;A6B7mHC;;EAGI,oBAAA;E7B8mHL;A6B3mHC;;EAGI,mBAAA;E7B4mHL;A8BtwHD;EACE,kBAAA;EACA,iBAAA;EACA,kBAAA;E9BwwHD;A8B3wHD;EAOI,oBAAA;EACA,gBAAA;E9BuwHH;A8B/wHD;EAWM,oBAAA;EACA,gBAAA;EACA,oBAAA;E9BuwHL;A8BtwHK;;EAEE,uBAAA;EACA,2BAAA;E9BwwHP;A8BnwHG;EACE,gBAAA;E9BqwHL;A8BnwHK;;EAEE,gBAAA;EACA,uBAAA;EACA,+BAAA;EACA,qBAAA;E9BqwHP;A8B9vHG;;;EAGE,2BAAA;EACA,uBAAA;E9BgwHL;A8BzyHD;ELHE,aAAA;EACA,eAAA;EACA,kBAAA;EACA,2BAAA;EzB+yHD;A8B/yHD;EA0DI,iBAAA;E9BwvHH;A8B/uHD;EACE,kCAAA;E9BivHD;A8BlvHD;EAGI,aAAA;EAEA,qBAAA;E9BivHH;A8BtvHD;EASM,mBAAA;EACA,yBAAA;EACA,+BAAA;EACA,4BAAA;E9BgvHL;A8B/uHK;EACE,uCAAA;E9BivHP;A8B3uHK;;;EAGE,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,kCAAA;EACA,iBAAA;E9B6uHP;A8BxuHC;EAqDA,aAAA;EA8BA,kBAAA;E9BypHD;A8B5uHC;EAwDE,aAAA;E9BurHH;A8B/uHC;EA0DI,oBAAA;EACA,oBAAA;E9BwrHL;A8BnvHC;EAgEE,WAAA;EACA,YAAA;E9BsrHH;A8B1qHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BqrHH;E8B/qHH;IAJQ,kBAAA;I9BsrHL;EACF;A8BhwHC;EAuFE,iBAAA;EACA,oBAAA;E9B4qHH;A8BpwHC;;;EA8FE,2BAAA;E9B2qHH;A8B7pHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B0qHH;E8BlqHH;;;IAHM,8BAAA;I9B0qHH;EACF;A8B3wHD;EAEI,aAAA;E9B4wHH;A8B9wHD;EAMM,oBAAA;E9B2wHL;A8BjxHD;EASM,kBAAA;E9B2wHL;A8BtwHK;;;EAGE,gBAAA;EACA,2BAAA;E9BwwHP;A8BhwHD;EAEI,aAAA;E9BiwHH;A8BnwHD;EAIM,iBAAA;EACA,gBAAA;E9BkwHL;A8BtvHD;EACE,aAAA;E9BwvHD;A8BzvHD;EAII,aAAA;E9BwvHH;A8B5vHD;EAMM,oBAAA;EACA,oBAAA;E9ByvHL;A8BhwHD;EAYI,WAAA;EACA,YAAA;E9BuvHH;A8B3uHD;EAAA;IAPM,qBAAA;IACA,WAAA;I9BsvHH;E8BhvHH;IAJQ,kBAAA;I9BuvHL;EACF;A8B/uHD;EACE,kBAAA;E9BivHD;A8BlvHD;EAKI,iBAAA;EACA,oBAAA;E9BgvHH;A8BtvHD;;;EAYI,2BAAA;E9B+uHH;A8BjuHD;EAAA;IATM,kCAAA;IACA,4BAAA;I9B8uHH;E8BtuHH;;;IAHM,8BAAA;I9B8uHH;EACF;A8BruHD;EAEI,eAAA;E9BsuHH;A8BxuHD;EAKI,gBAAA;E9BsuHH;A8B7tHD;EAEE,kBAAA;EF3OA,4BAAA;EACC,2BAAA;E5B08HF;A+Bp8HD;EACE,oBAAA;EACA,kBAAA;EACA,qBAAA;EACA,+BAAA;E/Bs8HD;A+B97HD;EAAA;IAFI,oBAAA;I/Bo8HD;EACF;A+Br7HD;EAAA;IAFI,aAAA;I/B27HD;EACF;A+B76HD;EACE,qBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,4DAAA;UAAA,oDAAA;EAEA,mCAAA;E/B86HD;A+B56HC;EACE,kBAAA;E/B86HH;A+Bl5HD;EAAA;IAxBI,aAAA;IACA,eAAA;IACA,0BAAA;YAAA,kBAAA;I/B86HD;E+B56HC;IACE,2BAAA;IACA,yBAAA;IACA,mBAAA;IACA,8BAAA;I/B86HH;E+B36HC;IACE,qBAAA;I/B66HH;E+Bx6HC;;;IAGE,iBAAA;IACA,kBAAA;I/B06HH;EACF;A+Bt6HD;;EAGI,mBAAA;E/Bu6HH;A+Bl6HC;EAAA;;IAFI,mBAAA;I/By6HH;EACF;A+Bh6HD;;;;EAII,qBAAA;EACA,oBAAA;E/Bk6HH;A+B55HC;EAAA;;;;IAHI,iBAAA;IACA,gBAAA;I/Bs6HH;EACF;A+B15HD;EACE,eAAA;EACA,uBAAA;E/B45HD;A+Bv5HD;EAAA;IAFI,kBAAA;I/B65HD;EACF;A+Bz5HD;;EAEE,iBAAA;EACA,UAAA;EACA,SAAA;EACA,eAAA;E/B25HD;A+Br5HD;EAAA;;IAFI,kBAAA;I/B45HD;EACF;A+B15HD;EACE,QAAA;EACA,uBAAA;E/B45HD;A+B15HD;EACE,WAAA;EACA,kBAAA;EACA,uBAAA;E/B45HD;A+Bt5HD;EACE,aAAA;EACA,oBAAA;EACA,iBAAA;EACA,mBAAA;EACA,cAAA;E/Bw5HD;A+Bt5HC;;EAEE,uBAAA;E/Bw5HH;A+Bj6HD;EAaI,gBAAA;E/Bu5HH;A+B94HD;EALI;;IAEE,oBAAA;I/Bs5HH;EACF;A+B54HD;EACE,oBAAA;EACA,cAAA;EACA,oBAAA;EACA,mBAAA;EC9LA,iBAAA;EACA,oBAAA;ED+LA,+BAAA;EACA,wBAAA;EACA,+BAAA;EACA,oBAAA;E/B+4HD;A+B34HC;EACE,YAAA;E/B64HH;A+B35HD;EAmBI,gBAAA;EACA,aAAA;EACA,aAAA;EACA,oBAAA;E/B24HH;A+Bj6HD;EAyBI,iBAAA;E/B24HH;A+Br4HD;EAAA;IAFI,eAAA;I/B24HD;EACF;A+Bl4HD;EACE,qBAAA;E/Bo4HD;A+Br4HD;EAII,mBAAA;EACA,sBAAA;EACA,mBAAA;E/Bo4HH;A+Bx2HC;EAAA;IAtBI,kBAAA;IACA,aAAA;IACA,aAAA;IACA,eAAA;IACA,+BAAA;IACA,WAAA;IACA,0BAAA;YAAA,kBAAA;I/Bk4HH;E+Bl3HD;;IAbM,4BAAA;I/Bm4HL;E+Bt3HD;IAVM,mBAAA;I/Bm4HL;E+Bl4HK;;IAEE,wBAAA;I/Bo4HP;EACF;A+Bl3HD;EAAA;IAXI,aAAA;IACA,WAAA;I/Bi4HD;E+Bv3HH;IAPM,aAAA;I/Bi4HH;E+B13HH;IALQ,mBAAA;IACA,sBAAA;I/Bk4HL;EACF;A+Bv3HD;EACE,oBAAA;EACA,qBAAA;EACA,oBAAA;EACA,mCAAA;EACA,sCAAA;E1B9NA,8FAAA;EACQ,sFAAA;E2B/DR,iBAAA;EACA,oBAAA;EhCwpID;AkBvqHD;EAAA;IA9DM,uBAAA;IACA,kBAAA;IACA,wBAAA;IlByuHH;EkB7qHH;IAvDM,uBAAA;IACA,aAAA;IACA,wBAAA;IlBuuHH;EkBlrHH;IAhDM,uBAAA;IlBquHH;EkBrrHH;IA5CM,uBAAA;IACA,wBAAA;IlBouHH;EkBzrHH;;;IAtCQ,aAAA;IlBouHL;EkB9rHH;IAhCM,aAAA;IlBiuHH;EkBjsHH;IA5BM,kBAAA;IACA,wBAAA;IlBguHH;EkBrsHH;;IApBM,uBAAA;IACA,eAAA;IACA,kBAAA;IACA,wBAAA;IlB6tHH;EkB5sHH;;IAdQ,iBAAA;IlB8tHL;EkBhtHH;;IATM,oBAAA;IACA,gBAAA;IlB6tHH;EkBrtHH;IAHM,QAAA;IlB2tHH;EACF;A+Bh6HC;EAAA;IANI,oBAAA;I/B06HH;E+Bx6HG;IACE,kBAAA;I/B06HL;EACF;A+Bz5HD;EAAA;IARI,aAAA;IACA,WAAA;IACA,gBAAA;IACA,iBAAA;IACA,gBAAA;IACA,mBAAA;I1BzPF,0BAAA;IACQ,kBAAA;IL+pIP;EACF;A+B/5HD;EACE,eAAA;EHpUA,4BAAA;EACC,2BAAA;E5BsuIF;A+B/5HD;EACE,kBAAA;EHzUA,8BAAA;EACC,6BAAA;EAOD,+BAAA;EACC,8BAAA;E5BquIF;A+B35HD;EChVE,iBAAA;EACA,oBAAA;EhC8uID;A+B55HC;ECnVA,kBAAA;EACA,qBAAA;EhCkvID;A+B75HC;ECtVA,kBAAA;EACA,qBAAA;EhCsvID;A+Bv5HD;EChWE,kBAAA;EACA,qBAAA;EhC0vID;A+Bn5HD;EAAA;IAJI,aAAA;IACA,mBAAA;IACA,oBAAA;I/B25HD;EACF;A+B93HD;EAhBE;IExWA,wBAAA;IjC0vIC;E+Bj5HD;IE5WA,yBAAA;IF8WE,qBAAA;I/Bm5HD;E+Br5HD;IAKI,iBAAA;I/Bm5HH;EACF;A+B14HD;EACE,2BAAA;EACA,uBAAA;E/B44HD;A+B94HD;EAKI,gBAAA;E/B44HH;A+B34HG;;EAEE,gBAAA;EACA,+BAAA;E/B64HL;A+Bt5HD;EAcI,gBAAA;E/B24HH;A+Bz5HD;EAmBM,gBAAA;E/By4HL;A+Bv4HK;;EAEE,gBAAA;EACA,+BAAA;E/By4HP;A+Br4HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bu4HP;A+Bn4HK;;;EAGE,gBAAA;EACA,+BAAA;E/Bq4HP;A+B76HD;EA8CI,uBAAA;E/Bk4HH;A+Bj4HG;;EAEE,2BAAA;E/Bm4HL;A+Bp7HD;EAoDM,2BAAA;E/Bm4HL;A+Bv7HD;;EA0DI,uBAAA;E/Bi4HH;A+B13HK;;;EAGE,2BAAA;EACA,gBAAA;E/B43HP;A+B31HC;EAAA;IAzBQ,gBAAA;I/Bw3HP;E+Bv3HO;;IAEE,gBAAA;IACA,+BAAA;I/By3HT;E+Br3HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bu3HT;E+Bn3HO;;;IAGE,gBAAA;IACA,+BAAA;I/Bq3HT;EACF;A+Bv9HD;EA8GI,gBAAA;E/B42HH;A+B32HG;EACE,gBAAA;E/B62HL;A+B79HD;EAqHI,gBAAA;E/B22HH;A+B12HG;;EAEE,gBAAA;E/B42HL;A+Bx2HK;;;;EAEE,gBAAA;E/B42HP;A+Bp2HD;EACE,2BAAA;EACA,uBAAA;E/Bs2HD;A+Bx2HD;EAKI,gBAAA;E/Bs2HH;A+Br2HG;;EAEE,gBAAA;EACA,+BAAA;E/Bu2HL;A+Bh3HD;EAcI,gBAAA;E/Bq2HH;A+Bn3HD;EAmBM,gBAAA;E/Bm2HL;A+Bj2HK;;EAEE,gBAAA;EACA,+BAAA;E/Bm2HP;A+B/1HK;;;EAGE,gBAAA;EACA,2BAAA;E/Bi2HP;A+B71HK;;;EAGE,gBAAA;EACA,+BAAA;E/B+1HP;A+Bv4HD;EA+CI,uBAAA;E/B21HH;A+B11HG;;EAEE,2BAAA;E/B41HL;A+B94HD;EAqDM,2BAAA;E/B41HL;A+Bj5HD;;EA2DI,uBAAA;E/B01HH;A+Bp1HK;;;EAGE,2BAAA;EACA,gBAAA;E/Bs1HP;A+B/yHC;EAAA;IA/BQ,uBAAA;I/Bk1HP;E+BnzHD;IA5BQ,2BAAA;I/Bk1HP;E+BtzHD;IAzBQ,gBAAA;I/Bk1HP;E+Bj1HO;;IAEE,gBAAA;IACA,+BAAA;I/Bm1HT;E+B/0HO;;;IAGE,gBAAA;IACA,2BAAA;I/Bi1HT;E+B70HO;;;IAGE,gBAAA;IACA,+BAAA;I/B+0HT;EACF;A+Bv7HD;EA+GI,gBAAA;E/B20HH;A+B10HG;EACE,gBAAA;E/B40HL;A+B77HD;EAsHI,gBAAA;E/B00HH;A+Bz0HG;;EAEE,gBAAA;E/B20HL;A+Bv0HK;;;;EAEE,gBAAA;E/B20HP;AkCr9ID;EACE,mBAAA;EACA,qBAAA;EACA,kBAAA;EACA,2BAAA;EACA,oBAAA;ElCu9ID;AkC59ID;EAQI,uBAAA;ElCu9IH;AkC/9ID;EAWM,mBAAA;EACA,gBAAA;EACA,gBAAA;ElCu9IL;AkCp+ID;EAkBI,gBAAA;ElCq9IH;AmCz+ID;EACE,uBAAA;EACA,iBAAA;EACA,gBAAA;EACA,oBAAA;EnC2+ID;AmC/+ID;EAOI,iBAAA;EnC2+IH;AmCl/ID;;EAUM,oBAAA;EACA,aAAA;EACA,mBAAA;EACA,yBAAA;EACA,uBAAA;EACA,gBAAA;EACA,2BAAA;EACA,2BAAA;EACA,mBAAA;EnC4+IL;AmC1+IG;;EAGI,gBAAA;EPXN,gCAAA;EACG,6BAAA;E5Bu/IJ;AmCz+IG;;EPvBF,iCAAA;EACG,8BAAA;E5BogJJ;AmCp+IG;;;;EAEE,gBAAA;EACA,2BAAA;EACA,uBAAA;EnCw+IL;AmCl+IG;;;;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,iBAAA;EnCu+IL;AmC7hJD;;;;;;EAiEM,gBAAA;EACA,2BAAA;EACA,uBAAA;EACA,qBAAA;EnCo+IL;AmC39ID;;EC1EM,oBAAA;EACA,iBAAA;EpCyiJL;AoCviJG;;ERMF,gCAAA;EACG,6BAAA;E5BqiJJ;AoCtiJG;;ERRF,iCAAA;EACG,8BAAA;E5BkjJJ;AmCr+ID;;EC/EM,mBAAA;EACA,iBAAA;EpCwjJL;AoCtjJG;;ERMF,gCAAA;EACG,6BAAA;E5BojJJ;AoCrjJG;;ERRF,iCAAA;EACG,8BAAA;E5BikJJ;AqCpkJD;EACE,iBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oBAAA;ErCskJD;AqC1kJD;EAOI,iBAAA;ErCskJH;AqC7kJD;;EAUM,uBAAA;EACA,mBAAA;EACA,2BAAA;EACA,2BAAA;EACA,qBAAA;ErCukJL;AqCrlJD;;EAmBM,uBAAA;EACA,2BAAA;ErCskJL;AqC1lJD;;EA2BM,cAAA;ErCmkJL;AqC9lJD;;EAkCM,aAAA;ErCgkJL;AqClmJD;;;;EA2CM,gBAAA;EACA,2BAAA;EACA,qBAAA;ErC6jJL;AsC3mJD;EACE,iBAAA;EACA,yBAAA;EACA,gBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,oBAAA;EACA,qBAAA;EACA,0BAAA;EACA,sBAAA;EtC6mJD;AsCzmJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EtC2mJL;AsCtmJC;EACE,eAAA;EtCwmJH;AsCpmJC;EACE,oBAAA;EACA,WAAA;EtCsmJH;AsC/lJD;ECtCE,2BAAA;EvCwoJD;AuCroJG;;EAEE,2BAAA;EvCuoJL;AsClmJD;EC1CE,2BAAA;EvC+oJD;AuC5oJG;;EAEE,2BAAA;EvC8oJL;AsCrmJD;EC9CE,2BAAA;EvCspJD;AuCnpJG;;EAEE,2BAAA;EvCqpJL;AsCxmJD;EClDE,2BAAA;EvC6pJD;AuC1pJG;;EAEE,2BAAA;EvC4pJL;AsC3mJD;ECtDE,2BAAA;EvCoqJD;AuCjqJG;;EAEE,2BAAA;EvCmqJL;AsC9mJD;EC1DE,2BAAA;EvC2qJD;AuCxqJG;;EAEE,2BAAA;EvC0qJL;AwC5qJD;EACE,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,0BAAA;EACA,qBAAA;EACA,oBAAA;EACA,2BAAA;EACA,qBAAA;ExC8qJD;AwC3qJC;EACE,eAAA;ExC6qJH;AwCzqJC;EACE,oBAAA;EACA,WAAA;ExC2qJH;AwCxqJC;;EAEE,QAAA;EACA,kBAAA;ExC0qJH;AwCrqJG;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;ExCuqJL;AwClqJC;;EAEE,gBAAA;EACA,2BAAA;ExCoqJH;AwCjqJC;EACE,cAAA;ExCmqJH;AwChqJC;EACE,mBAAA;ExCkqJH;AwC/pJC;EACE,kBAAA;ExCiqJH;AyC3tJD;EACE,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,2BAAA;EzC6tJD;AyCjuJD;;EAQI,gBAAA;EzC6tJH;AyCruJD;EAYI,qBAAA;EACA,iBAAA;EACA,kBAAA;EzC4tJH;AyC1uJD;EAkBI,2BAAA;EzC2tJH;AyCxtJC;;EAEE,oBAAA;EzC0tJH;AyCjvJD;EA2BI,iBAAA;EzCytJH;AyCxsJD;EAAA;IAbI,iBAAA;IzCytJD;EyCvtJC;;IAEE,oBAAA;IACA,qBAAA;IzCytJH;EyCjtJH;;IAHM,iBAAA;IzCwtJH;EACF;A0CjwJD;EACE,gBAAA;EACA,cAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;ErCiLA,6CAAA;EACK,wCAAA;EACG,qCAAA;ELmlJT;A0C7wJD;;EAaI,mBAAA;EACA,oBAAA;E1CowJH;A0ChwJC;;;EAGE,uBAAA;E1CkwJH;A0CvxJD;EA0BI,cAAA;EACA,gBAAA;E1CgwJH;A2CzxJD;EACE,eAAA;EACA,qBAAA;EACA,+BAAA;EACA,oBAAA;E3C2xJD;A2C/xJD;EAQI,eAAA;EAEA,gBAAA;E3CyxJH;A2CnyJD;EAeI,mBAAA;E3CuxJH;A2CtyJD;;EAqBI,kBAAA;E3CqxJH;A2C1yJD;EAyBI,iBAAA;E3CoxJH;A2C5wJD;;EAEE,qBAAA;E3C8wJD;A2ChxJD;;EAMI,oBAAA;EACA,WAAA;EACA,cAAA;EACA,gBAAA;E3C8wJH;A2CtwJD;ECvDE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cg0JD;A2C3wJD;EClDI,2BAAA;E5Cg0JH;A2C9wJD;EC/CI,gBAAA;E5Cg0JH;A2C7wJD;EC3DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5C20JD;A2ClxJD;ECtDI,2BAAA;E5C20JH;A2CrxJD;ECnDI,gBAAA;E5C20JH;A2CpxJD;EC/DE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Cs1JD;A2CzxJD;EC1DI,2BAAA;E5Cs1JH;A2C5xJD;ECvDI,gBAAA;E5Cs1JH;A2C3xJD;ECnEE,2BAAA;EACA,uBAAA;EACA,gBAAA;E5Ci2JD;A2ChyJD;EC9DI,2BAAA;E5Ci2JH;A2CnyJD;EC3DI,gBAAA;E5Ci2JH;A6Cn2JD;EACE;IAAQ,6BAAA;I7Cs2JP;E6Cr2JD;IAAQ,0BAAA;I7Cw2JP;EACF;A6Cr2JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6C72JD;EACE;IAAQ,6BAAA;I7Cw2JP;E6Cv2JD;IAAQ,0BAAA;I7C02JP;EACF;A6Cn2JD;EACE,kBAAA;EACA,cAAA;EACA,qBAAA;EACA,2BAAA;EACA,oBAAA;ExCsCA,wDAAA;EACQ,gDAAA;ELg0JT;A6Cl2JD;EACE,aAAA;EACA,WAAA;EACA,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2BAAA;ExCyBA,wDAAA;EACQ,gDAAA;EAyHR,qCAAA;EACK,gCAAA;EACG,6BAAA;ELotJT;A6C/1JD;;ECCI,+MAAA;EACA,0MAAA;EACA,uMAAA;EDAF,oCAAA;UAAA,4BAAA;E7Cm2JD;A6C51JD;;ExC5CE,4DAAA;EACK,uDAAA;EACG,oDAAA;EL44JT;A6Cz1JD;EErEE,2BAAA;E/Ci6JD;A+C95JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci3JH;A6C71JD;EEzEE,2BAAA;E/Cy6JD;A+Ct6JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy3JH;A6Cj2JD;EE7EE,2BAAA;E/Ci7JD;A+C96JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Ci4JH;A6Cr2JD;EEjFE,2BAAA;E/Cy7JD;A+Ct7JC;EDgDE,+MAAA;EACA,0MAAA;EACA,uMAAA;E9Cy4JH;AgDj8JD;EAEE,kBAAA;EhDk8JD;AgDh8JC;EACE,eAAA;EhDk8JH;AgD97JD;;EAEE,SAAA;EACA,kBAAA;EhDg8JD;AgD77JD;EACE,gBAAA;EhD+7JD;AgD57JD;EACE,gBAAA;EhD87JD;AgD37JD;;EAEE,oBAAA;EhD67JD;AgD17JD;;EAEE,qBAAA;EhD47JD;AgDz7JD;;;EAGE,qBAAA;EACA,qBAAA;EhD27JD;AgDx7JD;EACE,wBAAA;EhD07JD;AgDv7JD;EACE,wBAAA;EhDy7JD;AgDr7JD;EACE,eAAA;EACA,oBAAA;EhDu7JD;AgDj7JD;EACE,iBAAA;EACA,kBAAA;EhDm7JD;AiDr+JD;EAEE,qBAAA;EACA,iBAAA;EjDs+JD;AiD99JD;EACE,oBAAA;EACA,gBAAA;EACA,oBAAA;EAEA,qBAAA;EACA,2BAAA;EACA,2BAAA;EjD+9JD;AiD59JC;ErB3BA,8BAAA;EACC,6BAAA;E5B0/JF;AiD79JC;EACE,kBAAA;ErBvBF,iCAAA;EACC,gCAAA;E5Bu/JF;AiDt9JD;EACE,gBAAA;EjDw9JD;AiDz9JD;EAII,gBAAA;EjDw9JH;AiDp9JC;;EAEE,uBAAA;EACA,gBAAA;EACA,2BAAA;EjDs9JH;AiDh9JC;;;EAGE,2BAAA;EACA,gBAAA;EACA,qBAAA;EjDk9JH;AiDv9JC;;;EASI,gBAAA;EjDm9JL;AiD59JC;;;EAYI,gBAAA;EjDq9JL;AiDh9JC;;;EAGE,YAAA;EACA,gBAAA;EACA,2BAAA;EACA,uBAAA;EjDk9JH;AiDx9JC;;;;;;;;;EAYI,gBAAA;EjDu9JL;AiDn+JC;;;EAeI,gBAAA;EjDy9JL;AkDrjKC;EACE,gBAAA;EACA,2BAAA;ElDujKH;AkDrjKG;EACE,gBAAA;ElDujKL;AkDxjKG;EAII,gBAAA;ElDujKP;AkDpjKK;;EAEE,gBAAA;EACA,2BAAA;ElDsjKP;AkDpjKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDsjKP;AkD3kKC;EACE,gBAAA;EACA,2BAAA;ElD6kKH;AkD3kKG;EACE,gBAAA;ElD6kKL;AkD9kKG;EAII,gBAAA;ElD6kKP;AkD1kKK;;EAEE,gBAAA;EACA,2BAAA;ElD4kKP;AkD1kKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElD4kKP;AkDjmKC;EACE,gBAAA;EACA,2BAAA;ElDmmKH;AkDjmKG;EACE,gBAAA;ElDmmKL;AkDpmKG;EAII,gBAAA;ElDmmKP;AkDhmKK;;EAEE,gBAAA;EACA,2BAAA;ElDkmKP;AkDhmKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDkmKP;AkDvnKC;EACE,gBAAA;EACA,2BAAA;ElDynKH;AkDvnKG;EACE,gBAAA;ElDynKL;AkD1nKG;EAII,gBAAA;ElDynKP;AkDtnKK;;EAEE,gBAAA;EACA,2BAAA;ElDwnKP;AkDtnKK;;;EAGE,aAAA;EACA,2BAAA;EACA,uBAAA;ElDwnKP;AiD5hKD;EACE,eAAA;EACA,oBAAA;EjD8hKD;AiD5hKD;EACE,kBAAA;EACA,kBAAA;EjD8hKD;AmDlpKD;EACE,qBAAA;EACA,2BAAA;EACA,+BAAA;EACA,oBAAA;E9C0DA,mDAAA;EACQ,2CAAA;EL2lKT;AmDjpKD;EACE,eAAA;EnDmpKD;AmD9oKD;EACE,oBAAA;EACA,sCAAA;EvBpBA,8BAAA;EACC,6BAAA;E5BqqKF;AmDppKD;EAMI,gBAAA;EnDipKH;AmD5oKD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,gBAAA;EnD8oKD;AmDlpKD;;;;;EAWI,gBAAA;EnD8oKH;AmDzoKD;EACE,oBAAA;EACA,2BAAA;EACA,+BAAA;EvBxCA,iCAAA;EACC,gCAAA;E5BorKF;AmDnoKD;;EAGI,kBAAA;EnDooKH;AmDvoKD;;EAMM,qBAAA;EACA,kBAAA;EnDqoKL;AmDjoKG;;EAEI,eAAA;EvBvEN,8BAAA;EACC,6BAAA;E5B2sKF;AmDhoKG;;EAEI,kBAAA;EvBtEN,iCAAA;EACC,gCAAA;E5BysKF;AmD7nKD;EAEI,qBAAA;EnD8nKH;AmD3nKD;EACE,qBAAA;EnD6nKD;AmDrnKD;;;EAII,kBAAA;EnDsnKH;AmD1nKD;;;EAOM,oBAAA;EACA,qBAAA;EnDwnKL;AmDhoKD;;EvBnGE,8BAAA;EACC,6BAAA;E5BuuKF;AmDroKD;;;;EAmBQ,6BAAA;EACA,8BAAA;EnDwnKP;AmD5oKD;;;;;;;;EAwBU,6BAAA;EnD8nKT;AmDtpKD;;;;;;;;EA4BU,8BAAA;EnDooKT;AmDhqKD;;EvB3FE,iCAAA;EACC,gCAAA;E5B+vKF;AmDrqKD;;;;EAyCQ,gCAAA;EACA,iCAAA;EnDkoKP;AmD5qKD;;;;;;;;EA8CU,gCAAA;EnDwoKT;AmDtrKD;;;;;;;;EAkDU,iCAAA;EnD8oKT;AmDhsKD;;;;EA2DI,+BAAA;EnD2oKH;AmDtsKD;;EA+DI,eAAA;EnD2oKH;AmD1sKD;;EAmEI,WAAA;EnD2oKH;AmD9sKD;;;;;;;;;;;;EA0EU,gBAAA;EnDkpKT;AmD5tKD;;;;;;;;;;;;EA8EU,iBAAA;EnD4pKT;AmD1uKD;;;;;;;;EAuFU,kBAAA;EnD6pKT;AmDpvKD;;;;;;;;EAgGU,kBAAA;EnD8pKT;AmD9vKD;EAsGI,WAAA;EACA,kBAAA;EnD2pKH;AmDjpKD;EACE,qBAAA;EnDmpKD;AmDppKD;EAKI,kBAAA;EACA,oBAAA;EnDkpKH;AmDxpKD;EASM,iBAAA;EnDkpKL;AmD3pKD;EAcI,kBAAA;EnDgpKH;AmD9pKD;;EAkBM,+BAAA;EnDgpKL;AmDlqKD;EAuBI,eAAA;EnD8oKH;AmDrqKD;EAyBM,kCAAA;EnD+oKL;AmDxoKD;ECpPE,uBAAA;EpD+3KD;AoD73KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpD+3KH;AoDl4KC;EAMI,2BAAA;EpD+3KL;AoDr4KC;EASI,gBAAA;EACA,2BAAA;EpD+3KL;AoD53KC;EAEI,8BAAA;EpD63KL;AmDvpKD;ECvPE,uBAAA;EpDi5KD;AoD/4KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDi5KH;AoDp5KC;EAMI,2BAAA;EpDi5KL;AoDv5KC;EASI,gBAAA;EACA,2BAAA;EpDi5KL;AoD94KC;EAEI,8BAAA;EpD+4KL;AmDtqKD;EC1PE,uBAAA;EpDm6KD;AoDj6KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDm6KH;AoDt6KC;EAMI,2BAAA;EpDm6KL;AoDz6KC;EASI,gBAAA;EACA,2BAAA;EpDm6KL;AoDh6KC;EAEI,8BAAA;EpDi6KL;AmDrrKD;EC7PE,uBAAA;EpDq7KD;AoDn7KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDq7KH;AoDx7KC;EAMI,2BAAA;EpDq7KL;AoD37KC;EASI,gBAAA;EACA,2BAAA;EpDq7KL;AoDl7KC;EAEI,8BAAA;EpDm7KL;AmDpsKD;EChQE,uBAAA;EpDu8KD;AoDr8KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDu8KH;AoD18KC;EAMI,2BAAA;EpDu8KL;AoD78KC;EASI,gBAAA;EACA,2BAAA;EpDu8KL;AoDp8KC;EAEI,8BAAA;EpDq8KL;AmDntKD;ECnQE,uBAAA;EpDy9KD;AoDv9KC;EACE,gBAAA;EACA,2BAAA;EACA,uBAAA;EpDy9KH;AoD59KC;EAMI,2BAAA;EpDy9KL;AoD/9KC;EASI,gBAAA;EACA,2BAAA;EpDy9KL;AoDt9KC;EAEI,8BAAA;EpDu9KL;AqDv+KD;EACE,oBAAA;EACA,gBAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;ErDy+KD;AqD9+KD;;;;;EAYI,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,cAAA;EACA,aAAA;EACA,WAAA;ErDy+KH;AqDp+KD;EACE,wBAAA;ErDs+KD;AqDl+KD;EACE,qBAAA;ErDo+KD;AsD//KD;EACE,kBAAA;EACA,eAAA;EACA,qBAAA;EACA,2BAAA;EACA,2BAAA;EACA,oBAAA;EjDwDA,yDAAA;EACQ,iDAAA;EL08KT;AsDzgLD;EASI,oBAAA;EACA,mCAAA;EtDmgLH;AsD9/KD;EACE,eAAA;EACA,oBAAA;EtDggLD;AsD9/KD;EACE,cAAA;EACA,oBAAA;EtDggLD;AuDthLD;EACE,cAAA;EACA,iBAAA;EACA,mBAAA;EACA,gBAAA;EACA,gBAAA;EACA,8BAAA;EjCRA,cAAA;EAGA,2BAAA;EtB+hLD;AuDvhLC;;EAEE,gBAAA;EACA,uBAAA;EACA,iBAAA;EjCfF,cAAA;EAGA,2BAAA;EtBuiLD;AuDnhLC;EACE,YAAA;EACA,iBAAA;EACA,yBAAA;EACA,WAAA;EACA,0BAAA;EvDqhLH;AwD1iLD;EACE,kBAAA;ExD4iLD;AwDxiLD;EACE,eAAA;EACA,kBAAA;EACA,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,mCAAA;EAIA,YAAA;ExDuiLD;AwDpiLC;EnD+GA,uCAAA;EACI,mCAAA;EACC,kCAAA;EACG,+BAAA;EAkER,qDAAA;EAEK,2CAAA;EACG,qCAAA;ELu3KT;AwD1iLC;EnD2GA,oCAAA;EACI,gCAAA;EACC,+BAAA;EACG,4BAAA;ELk8KT;AwD9iLD;EACE,oBAAA;EACA,kBAAA;ExDgjLD;AwD5iLD;EACE,oBAAA;EACA,aAAA;EACA,cAAA;ExD8iLD;AwD1iLD;EACE,oBAAA;EACA,2BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;EnDaA,kDAAA;EACQ,0CAAA;EmDZR,sCAAA;UAAA,8BAAA;EAEA,YAAA;ExD4iLD;AwDxiLD;EACE,iBAAA;EACA,QAAA;EACA,UAAA;EACA,WAAA;EACA,SAAA;EACA,eAAA;EACA,2BAAA;ExD0iLD;AwDxiLC;ElCrEA,YAAA;EAGA,0BAAA;EtB8mLD;AwD3iLC;ElCtEA,cAAA;EAGA,2BAAA;EtBknLD;AwD1iLD;EACE,eAAA;EACA,kCAAA;EACA,2BAAA;ExD4iLD;AwDziLD;EACE,kBAAA;ExD2iLD;AwDviLD;EACE,WAAA;EACA,yBAAA;ExDyiLD;AwDpiLD;EACE,oBAAA;EACA,eAAA;ExDsiLD;AwDliLD;EACE,eAAA;EACA,mBAAA;EACA,+BAAA;ExDoiLD;AwDviLD;EAQI,kBAAA;EACA,kBAAA;ExDkiLH;AwD3iLD;EAaI,mBAAA;ExDiiLH;AwD9iLD;EAiBI,gBAAA;ExDgiLH;AwD3hLD;EACE,oBAAA;EACA,cAAA;EACA,aAAA;EACA,cAAA;EACA,kBAAA;ExD6hLD;AwD3gLD;EAZE;IACE,cAAA;IACA,mBAAA;IxD0hLD;EwDxhLD;InDvEA,mDAAA;IACQ,2CAAA;ILkmLP;EwDvhLD;IAAY,cAAA;IxD0hLX;EACF;AwDrhLD;EAFE;IAAY,cAAA;IxD2hLX;EACF;AyD1qLD;EACE,oBAAA;EACA,eAAA;EACA,gBAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,kBAAA;EnCXA,YAAA;EAGA,0BAAA;EtBqrLD;AyD1qLC;EnCdA,cAAA;EAGA,2BAAA;EtByrLD;AyD7qLC;EAAW,kBAAA;EAAmB,gBAAA;EzDirL/B;AyDhrLC;EAAW,kBAAA;EAAmB,gBAAA;EzDorL/B;AyDnrLC;EAAW,iBAAA;EAAmB,gBAAA;EzDurL/B;AyDtrLC;EAAW,mBAAA;EAAmB,gBAAA;EzD0rL/B;AyDtrLD;EACE,kBAAA;EACA,kBAAA;EACA,gBAAA;EACA,oBAAA;EACA,uBAAA;EACA,2BAAA;EACA,oBAAA;EzDwrLD;AyDprLD;EACE,oBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;EzDsrLD;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,YAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,WAAA;EACA,WAAA;EACA,qBAAA;EACA,yBAAA;EACA,2BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,SAAA;EACA,kBAAA;EACA,6BAAA;EACA,6BAAA;EzDorLH;AyDlrLC;EACE,UAAA;EACA,UAAA;EACA,kBAAA;EACA,6BAAA;EACA,4BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,mBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,YAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;AyDlrLC;EACE,QAAA;EACA,WAAA;EACA,kBAAA;EACA,yBAAA;EACA,8BAAA;EzDorLH;A0DlxLD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EACA,cAAA;EAEA,6DAAA;EACA,iBAAA;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,2BAAA;EACA,sCAAA;UAAA,8BAAA;EACA,2BAAA;EACA,sCAAA;EACA,oBAAA;ErD6CA,mDAAA;EACQ,2CAAA;EqD1CR,qBAAA;E1DkxLD;A0D/wLC;EAAY,mBAAA;E1DkxLb;A0DjxLC;EAAY,mBAAA;E1DoxLb;A0DnxLC;EAAY,kBAAA;E1DsxLb;A0DrxLC;EAAY,oBAAA;E1DwxLb;A0DrxLD;EACE,WAAA;EACA,mBAAA;EACA,iBAAA;EACA,2BAAA;EACA,kCAAA;EACA,4BAAA;E1DuxLD;A0DpxLD;EACE,mBAAA;E1DsxLD;A0D9wLC;;EAEE,oBAAA;EACA,gBAAA;EACA,UAAA;EACA,WAAA;EACA,2BAAA;EACA,qBAAA;E1DgxLH;A0D7wLD;EACE,oBAAA;E1D+wLD;A0D7wLD;EACE,oBAAA;EACA,aAAA;E1D+wLD;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;EACA,uCAAA;EACA,eAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,aAAA;EACA,oBAAA;EACA,wBAAA;EACA,2BAAA;E1D8wLL;A0D3wLC;EACE,UAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,6BAAA;EACA,yCAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,WAAA;EACA,eAAA;EACA,sBAAA;EACA,6BAAA;E1D8wLL;A0D3wLC;EACE,WAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;EACA,0CAAA;EACA,YAAA;E1D6wLH;A0D5wLG;EACE,cAAA;EACA,UAAA;EACA,oBAAA;EACA,qBAAA;EACA,8BAAA;E1D8wLL;A0D1wLC;EACE,UAAA;EACA,cAAA;EACA,mBAAA;EACA,uBAAA;EACA,4BAAA;EACA,wCAAA;E1D4wLH;A0D3wLG;EACE,cAAA;EACA,YAAA;EACA,uBAAA;EACA,4BAAA;EACA,eAAA;E1D6wLL;A2D14LD;EACE,oBAAA;E3D44LD;A2Dz4LD;EACE,oBAAA;EACA,kBAAA;EACA,aAAA;E3D24LD;A2D94LD;EAMI,eAAA;EACA,oBAAA;EtD6KF,2CAAA;EACK,sCAAA;EACG,mCAAA;EL+tLT;A2Dr5LD;;EAcM,gBAAA;E3D24LL;A2Dj3LC;EAAA;ItDiKA,wDAAA;IAEK,8CAAA;IACG,wCAAA;IA7JR,qCAAA;IAEQ,6BAAA;IA+GR,2BAAA;IAEQ,mBAAA;ILowLP;E2D/4LG;;ItDmHJ,4CAAA;IACQ,oCAAA;IsDjHF,SAAA;I3Dk5LL;E2Dh5LG;;ItD8GJ,6CAAA;IACQ,qCAAA;IsD5GF,SAAA;I3Dm5LL;E2Dj5LG;;;ItDyGJ,yCAAA;IACQ,iCAAA;IsDtGF,SAAA;I3Do5LL;EACF;A2D17LD;;;EA6CI,gBAAA;E3Dk5LH;A2D/7LD;EAiDI,SAAA;E3Di5LH;A2Dl8LD;;EAsDI,oBAAA;EACA,QAAA;EACA,aAAA;E3Dg5LH;A2Dx8LD;EA4DI,YAAA;E3D+4LH;A2D38LD;EA+DI,aAAA;E3D+4LH;A2D98LD;;EAmEI,SAAA;E3D+4LH;A2Dl9LD;EAuEI,aAAA;E3D84LH;A2Dr9LD;EA0EI,YAAA;E3D84LH;A2Dt4LD;EACE,oBAAA;EACA,QAAA;EACA,SAAA;EACA,WAAA;EACA,YAAA;ErC9FA,cAAA;EAGA,2BAAA;EqC6FA,iBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3Dy4LD;A2Dp4LC;EblGE,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Cy+LH;A2Dx4LC;EACE,YAAA;EACA,UAAA;EbvGA,oGAAA;EACA,+FAAA;EACA,sHAAA;EAAA,gGAAA;EACA,6BAAA;EACA,wHAAA;E9Ck/LH;A2D14LC;;EAEE,YAAA;EACA,gBAAA;EACA,uBAAA;ErCtHF,cAAA;EAGA,2BAAA;EtBigMD;A2D36LD;;;;EAsCI,oBAAA;EACA,UAAA;EACA,YAAA;EACA,uBAAA;E3D24LH;A2Dp7LD;;EA6CI,WAAA;EACA,oBAAA;E3D24LH;A2Dz7LD;;EAkDI,YAAA;EACA,qBAAA;E3D24LH;A2D97LD;;EAuDI,aAAA;EACA,cAAA;EACA,mBAAA;EACA,gBAAA;EACA,oBAAA;E3D24LH;A2Dt4LG;EACE,kBAAA;E3Dw4LL;A2Dp4LG;EACE,kBAAA;E3Ds4LL;A2D53LD;EACE,oBAAA;EACA,cAAA;EACA,WAAA;EACA,aAAA;EACA,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,oBAAA;E3D83LD;A2Dv4LD;EAYI,uBAAA;EACA,aAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,2BAAA;EACA,qBAAA;EACA,iBAAA;EAWA,2BAAA;EACA,oCAAA;E3Do3LH;A2Dn5LD;EAkCI,WAAA;EACA,aAAA;EACA,cAAA;EACA,2BAAA;E3Do3LH;A2D72LD;EACE,oBAAA;EACA,WAAA;EACA,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,sBAAA;EACA,gBAAA;EACA,oBAAA;EACA,2CAAA;E3D+2LD;A2D92LC;EACE,mBAAA;E3Dg3LH;A2Dv0LD;EAhCE;;;;IAKI,aAAA;IACA,cAAA;IACA,mBAAA;IACA,iBAAA;I3Dy2LH;E2Dj3LD;;IAYI,oBAAA;I3Dy2LH;E2Dr3LD;;IAgBI,qBAAA;I3Dy2LH;E2Dp2LD;IACE,WAAA;IACA,YAAA;IACA,sBAAA;I3Ds2LD;E2Dl2LD;IACE,cAAA;I3Do2LD;EACF;A4DlmMC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEE,cAAA;EACA,gBAAA;E5DgoMH;A4D9nMC;;;;;;;;;;;;;;;EACE,aAAA;E5D8oMH;AiCtpMD;E4BRE,gBAAA;EACA,mBAAA;EACA,oBAAA;E7DiqMD;AiCxpMD;EACE,yBAAA;EjC0pMD;AiCxpMD;EACE,wBAAA;EjC0pMD;AiClpMD;EACE,0BAAA;EjCopMD;AiClpMD;EACE,2BAAA;EjCopMD;AiClpMD;EACE,oBAAA;EjCopMD;AiClpMD;E6BzBE,aAAA;EACA,oBAAA;EACA,mBAAA;EACA,+BAAA;EACA,WAAA;E9D8qMD;AiChpMD;EACE,0BAAA;EjCkpMD;AiC3oMD;EACE,iBAAA;EjC6oMD;A+D9qMD;EACE,qBAAA;E/DgrMD;A+D1qMD;;;;ECdE,0BAAA;EhE8rMD;A+DzqMD;;;;;;;;;;;;EAYE,0BAAA;E/D2qMD;A+DpqMD;EAAA;IChDE,2BAAA;IhEwtMC;EgEvtMD;IAAU,gBAAA;IhE0tMT;EgEztMD;IAAU,+BAAA;IhE4tMT;EgE3tMD;;IACU,gCAAA;IhE8tMT;EACF;A+D9qMD;EAAA;IAFI,2BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,4BAAA;I/DorMD;EACF;A+D9qMD;EAAA;IAFI,kCAAA;I/DorMD;EACF;A+D7qMD;EAAA;ICrEE,2BAAA;IhEsvMC;EgErvMD;IAAU,gBAAA;IhEwvMT;EgEvvMD;IAAU,+BAAA;IhE0vMT;EgEzvMD;;IACU,gCAAA;IhE4vMT;EACF;A+DvrMD;EAAA;IAFI,2BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,4BAAA;I/D6rMD;EACF;A+DvrMD;EAAA;IAFI,kCAAA;I/D6rMD;EACF;A+DtrMD;EAAA;IC1FE,2BAAA;IhEoxMC;EgEnxMD;IAAU,gBAAA;IhEsxMT;EgErxMD;IAAU,+BAAA;IhEwxMT;EgEvxMD;;IACU,gCAAA;IhE0xMT;EACF;A+DhsMD;EAAA;IAFI,2BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,4BAAA;I/DssMD;EACF;A+DhsMD;EAAA;IAFI,kCAAA;I/DssMD;EACF;A+D/rMD;EAAA;IC/GE,2BAAA;IhEkzMC;EgEjzMD;IAAU,gBAAA;IhEozMT;EgEnzMD;IAAU,+BAAA;IhEszMT;EgErzMD;;IACU,gCAAA;IhEwzMT;EACF;A+DzsMD;EAAA;IAFI,2BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,4BAAA;I/D+sMD;EACF;A+DzsMD;EAAA;IAFI,kCAAA;I/D+sMD;EACF;A+DxsMD;EAAA;IC5HE,0BAAA;IhEw0MC;EACF;A+DxsMD;EAAA;ICjIE,0BAAA;IhE60MC;EACF;A+DxsMD;EAAA;ICtIE,0BAAA;IhEk1MC;EACF;A+DxsMD;EAAA;IC3IE,0BAAA;IhEu1MC;EACF;A+DrsMD;ECnJE,0BAAA;EhE21MD;A+DlsMD;EAAA;ICjKE,2BAAA;IhEu2MC;EgEt2MD;IAAU,gBAAA;IhEy2MT;EgEx2MD;IAAU,+BAAA;IhE22MT;EgE12MD;;IACU,gCAAA;IhE62MT;EACF;A+DhtMD;EACE,0BAAA;E/DktMD;A+D7sMD;EAAA;IAFI,2BAAA;I/DmtMD;EACF;A+DjtMD;EACE,0BAAA;E/DmtMD;A+D9sMD;EAAA;IAFI,4BAAA;I/DotMD;EACF;A+DltMD;EACE,0BAAA;E/DotMD;A+D/sMD;EAAA;IAFI,kCAAA;I/DqtMD;EACF;A+D9sMD;EAAA;ICpLE,0BAAA;IhEs4MC;EACF","file":"bootstrap.css","sourcesContent":["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\nhtml {\n font-family: sans-serif;\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n}\nbody {\n margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n[hidden],\ntemplate {\n display: none;\n}\na {\n background-color: transparent;\n}\na:active,\na:hover {\n outline: 0;\n}\nabbr[title] {\n border-bottom: 1px dotted;\n}\nb,\nstrong {\n font-weight: bold;\n}\ndfn {\n font-style: italic;\n}\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\nmark {\n background: #ff0;\n color: #000;\n}\nsmall {\n font-size: 80%;\n}\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\nimg {\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit;\n font: inherit;\n margin: 0;\n}\nbutton {\n overflow: visible;\n}\nbutton,\nselect {\n text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\ninput {\n line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: textfield;\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box;\n box-sizing: content-box;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\nlegend {\n border: 0;\n padding: 0;\n}\ntextarea {\n overflow: auto;\n}\noptgroup {\n font-weight: bold;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n a,\n a:visited {\n text-decoration: underline;\n }\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n thead {\n display: table-header-group;\n }\n tr,\n img {\n page-break-inside: avoid;\n }\n img {\n max-width: 100% !important;\n }\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n h2,\n h3 {\n page-break-after: avoid;\n }\n select {\n background: #fff !important;\n }\n .navbar {\n display: none;\n }\n .btn > .caret,\n .dropup > .btn > .caret {\n border-top-color: #000 !important;\n }\n .label {\n border: 1px solid #000;\n }\n .table {\n border-collapse: collapse !important;\n }\n .table td,\n .table th {\n background-color: #fff !important;\n }\n .table-bordered th,\n .table-bordered td {\n border: 1px solid #ddd !important;\n }\n}\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('../fonts/glyphicons-halflings-regular.eot');\n src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n content: \"\\2a\";\n}\n.glyphicon-plus:before {\n content: \"\\2b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n content: \"\\270f\";\n}\n.glyphicon-glass:before {\n content: \"\\e001\";\n}\n.glyphicon-music:before {\n content: \"\\e002\";\n}\n.glyphicon-search:before {\n content: \"\\e003\";\n}\n.glyphicon-heart:before {\n content: \"\\e005\";\n}\n.glyphicon-star:before {\n content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n content: \"\\e007\";\n}\n.glyphicon-user:before {\n content: \"\\e008\";\n}\n.glyphicon-film:before {\n content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n content: \"\\e010\";\n}\n.glyphicon-th:before {\n content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n content: \"\\e012\";\n}\n.glyphicon-ok:before {\n content: \"\\e013\";\n}\n.glyphicon-remove:before {\n content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n content: \"\\e016\";\n}\n.glyphicon-off:before {\n content: \"\\e017\";\n}\n.glyphicon-signal:before {\n content: \"\\e018\";\n}\n.glyphicon-cog:before {\n content: \"\\e019\";\n}\n.glyphicon-trash:before {\n content: \"\\e020\";\n}\n.glyphicon-home:before {\n content: \"\\e021\";\n}\n.glyphicon-file:before {\n content: \"\\e022\";\n}\n.glyphicon-time:before {\n content: \"\\e023\";\n}\n.glyphicon-road:before {\n content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n content: \"\\e025\";\n}\n.glyphicon-download:before {\n content: \"\\e026\";\n}\n.glyphicon-upload:before {\n content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n content: \"\\e032\";\n}\n.glyphicon-lock:before {\n content: \"\\e033\";\n}\n.glyphicon-flag:before {\n content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n content: \"\\e040\";\n}\n.glyphicon-tag:before {\n content: \"\\e041\";\n}\n.glyphicon-tags:before {\n content: \"\\e042\";\n}\n.glyphicon-book:before {\n content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n content: \"\\e044\";\n}\n.glyphicon-print:before {\n content: \"\\e045\";\n}\n.glyphicon-camera:before {\n content: \"\\e046\";\n}\n.glyphicon-font:before {\n content: \"\\e047\";\n}\n.glyphicon-bold:before {\n content: \"\\e048\";\n}\n.glyphicon-italic:before {\n content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n content: \"\\e055\";\n}\n.glyphicon-list:before {\n content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n content: \"\\e059\";\n}\n.glyphicon-picture:before {\n content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n content: \"\\e063\";\n}\n.glyphicon-tint:before {\n content: \"\\e064\";\n}\n.glyphicon-edit:before {\n content: \"\\e065\";\n}\n.glyphicon-share:before {\n content: \"\\e066\";\n}\n.glyphicon-check:before {\n content: \"\\e067\";\n}\n.glyphicon-move:before {\n content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n content: \"\\e070\";\n}\n.glyphicon-backward:before {\n content: \"\\e071\";\n}\n.glyphicon-play:before {\n content: \"\\e072\";\n}\n.glyphicon-pause:before {\n content: \"\\e073\";\n}\n.glyphicon-stop:before {\n content: \"\\e074\";\n}\n.glyphicon-forward:before {\n content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n content: \"\\e077\";\n}\n.glyphicon-eject:before {\n content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n content: \"\\e101\";\n}\n.glyphicon-gift:before {\n content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n content: \"\\e103\";\n}\n.glyphicon-fire:before {\n content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n content: \"\\e107\";\n}\n.glyphicon-plane:before {\n content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n content: \"\\e109\";\n}\n.glyphicon-random:before {\n content: \"\\e110\";\n}\n.glyphicon-comment:before {\n content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n content: \"\\e122\";\n}\n.glyphicon-bell:before {\n content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n content: \"\\e134\";\n}\n.glyphicon-globe:before {\n content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n content: \"\\e137\";\n}\n.glyphicon-filter:before {\n content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n content: \"\\e143\";\n}\n.glyphicon-link:before {\n content: \"\\e144\";\n}\n.glyphicon-phone:before {\n content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n content: \"\\e146\";\n}\n.glyphicon-usd:before {\n content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n content: \"\\e149\";\n}\n.glyphicon-sort:before {\n content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n content: \"\\e157\";\n}\n.glyphicon-expand:before {\n content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n content: \"\\e161\";\n}\n.glyphicon-flash:before {\n content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n content: \"\\e164\";\n}\n.glyphicon-record:before {\n content: \"\\e165\";\n}\n.glyphicon-save:before {\n content: \"\\e166\";\n}\n.glyphicon-open:before {\n content: \"\\e167\";\n}\n.glyphicon-saved:before {\n content: \"\\e168\";\n}\n.glyphicon-import:before {\n content: \"\\e169\";\n}\n.glyphicon-export:before {\n content: \"\\e170\";\n}\n.glyphicon-send:before {\n content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n content: \"\\e179\";\n}\n.glyphicon-header:before {\n content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n content: \"\\e183\";\n}\n.glyphicon-tower:before {\n content: \"\\e184\";\n}\n.glyphicon-stats:before {\n content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n content: \"\\e200\";\n}\n.glyphicon-cd:before {\n content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n content: \"\\e204\";\n}\n.glyphicon-copy:before {\n content: \"\\e205\";\n}\n.glyphicon-paste:before {\n content: \"\\e206\";\n}\n.glyphicon-alert:before {\n content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n content: \"\\e210\";\n}\n.glyphicon-king:before {\n content: \"\\e211\";\n}\n.glyphicon-queen:before {\n content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n content: \"\\e214\";\n}\n.glyphicon-knight:before {\n content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n content: \"\\e216\";\n}\n.glyphicon-tent:before {\n content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n content: \"\\e218\";\n}\n.glyphicon-bed:before {\n content: \"\\e219\";\n}\n.glyphicon-apple:before {\n content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n content: \"\\e227\";\n}\n.glyphicon-btc:before {\n content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n content: \"\\e227\";\n}\n.glyphicon-yen:before {\n content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n content: \"\\e232\";\n}\n.glyphicon-education:before {\n content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n content: \"\\e237\";\n}\n.glyphicon-oil:before {\n content: \"\\e238\";\n}\n.glyphicon-grain:before {\n content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n content: \"\\e253\";\n}\n.glyphicon-console:before {\n content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n content: \"\\e260\";\n}\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.42857143;\n color: #333333;\n background-color: #ffffff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\na {\n color: #337ab7;\n text-decoration: none;\n}\na:hover,\na:focus {\n color: #23527c;\n text-decoration: underline;\n}\na:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\nfigure {\n margin: 0;\n}\nimg {\n vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n display: block;\n max-width: 100%;\n height: auto;\n}\n.img-rounded {\n border-radius: 6px;\n}\n.img-thumbnail {\n padding: 4px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: all 0.2s ease-in-out;\n -o-transition: all 0.2s ease-in-out;\n transition: all 0.2s ease-in-out;\n display: inline-block;\n max-width: 100%;\n height: auto;\n}\n.img-circle {\n border-radius: 50%;\n}\nhr {\n margin-top: 20px;\n margin-bottom: 20px;\n border: 0;\n border-top: 1px solid #eeeeee;\n}\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n}\n[role=\"button\"] {\n cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n font-family: inherit;\n font-weight: 500;\n line-height: 1.1;\n color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n font-weight: normal;\n line-height: 1;\n color: #777777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n margin-top: 20px;\n margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n margin-top: 10px;\n margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n font-size: 75%;\n}\nh1,\n.h1 {\n font-size: 36px;\n}\nh2,\n.h2 {\n font-size: 30px;\n}\nh3,\n.h3 {\n font-size: 24px;\n}\nh4,\n.h4 {\n font-size: 18px;\n}\nh5,\n.h5 {\n font-size: 14px;\n}\nh6,\n.h6 {\n font-size: 12px;\n}\np {\n margin: 0 0 10px;\n}\n.lead {\n margin-bottom: 20px;\n font-size: 16px;\n font-weight: 300;\n line-height: 1.4;\n}\n@media (min-width: 768px) {\n .lead {\n font-size: 21px;\n }\n}\nsmall,\n.small {\n font-size: 85%;\n}\nmark,\n.mark {\n background-color: #fcf8e3;\n padding: .2em;\n}\n.text-left {\n text-align: left;\n}\n.text-right {\n text-align: right;\n}\n.text-center {\n text-align: center;\n}\n.text-justify {\n text-align: justify;\n}\n.text-nowrap {\n white-space: nowrap;\n}\n.text-lowercase {\n text-transform: lowercase;\n}\n.text-uppercase {\n text-transform: uppercase;\n}\n.text-capitalize {\n text-transform: capitalize;\n}\n.text-muted {\n color: #777777;\n}\n.text-primary {\n color: #337ab7;\n}\na.text-primary:hover {\n color: #286090;\n}\n.text-success {\n color: #3c763d;\n}\na.text-success:hover {\n color: #2b542c;\n}\n.text-info {\n color: #31708f;\n}\na.text-info:hover {\n color: #245269;\n}\n.text-warning {\n color: #8a6d3b;\n}\na.text-warning:hover {\n color: #66512c;\n}\n.text-danger {\n color: #a94442;\n}\na.text-danger:hover {\n color: #843534;\n}\n.bg-primary {\n color: #fff;\n background-color: #337ab7;\n}\na.bg-primary:hover {\n background-color: #286090;\n}\n.bg-success {\n background-color: #dff0d8;\n}\na.bg-success:hover {\n background-color: #c1e2b3;\n}\n.bg-info {\n background-color: #d9edf7;\n}\na.bg-info:hover {\n background-color: #afd9ee;\n}\n.bg-warning {\n background-color: #fcf8e3;\n}\na.bg-warning:hover {\n background-color: #f7ecb5;\n}\n.bg-danger {\n background-color: #f2dede;\n}\na.bg-danger:hover {\n background-color: #e4b9b9;\n}\n.page-header {\n padding-bottom: 9px;\n margin: 40px 0 20px;\n border-bottom: 1px solid #eeeeee;\n}\nul,\nol {\n margin-top: 0;\n margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n margin-bottom: 0;\n}\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n.list-inline {\n padding-left: 0;\n list-style: none;\n margin-left: -5px;\n}\n.list-inline > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n}\ndl {\n margin-top: 0;\n margin-bottom: 20px;\n}\ndt,\ndd {\n line-height: 1.42857143;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0;\n}\n@media (min-width: 768px) {\n .dl-horizontal dt {\n float: left;\n width: 160px;\n clear: left;\n text-align: right;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n .dl-horizontal dd {\n margin-left: 180px;\n }\n}\nabbr[title],\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted #777777;\n}\n.initialism {\n font-size: 90%;\n text-transform: uppercase;\n}\nblockquote {\n padding: 10px 20px;\n margin: 0 0 20px;\n font-size: 17.5px;\n border-left: 5px solid #eeeeee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n display: block;\n font-size: 80%;\n line-height: 1.42857143;\n color: #777777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid #eeeeee;\n border-left: 0;\n text-align: right;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n content: '\\00A0 \\2014';\n}\naddress {\n margin-bottom: 20px;\n font-style: normal;\n line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: #c7254e;\n background-color: #f9f2f4;\n border-radius: 4px;\n}\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: #ffffff;\n background-color: #333333;\n border-radius: 3px;\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\nkbd kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n}\npre {\n display: block;\n padding: 9.5px;\n margin: 0 0 10px;\n font-size: 13px;\n line-height: 1.42857143;\n word-break: break-all;\n word-wrap: break-word;\n color: #333333;\n background-color: #f5f5f5;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\npre code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n}\n.pre-scrollable {\n max-height: 340px;\n overflow-y: scroll;\n}\n.container {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n margin-right: auto;\n margin-left: auto;\n padding-left: 15px;\n padding-right: 15px;\n}\n.row {\n margin-left: -15px;\n margin-right: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n float: left;\n}\n.col-xs-12 {\n width: 100%;\n}\n.col-xs-11 {\n width: 91.66666667%;\n}\n.col-xs-10 {\n width: 83.33333333%;\n}\n.col-xs-9 {\n width: 75%;\n}\n.col-xs-8 {\n width: 66.66666667%;\n}\n.col-xs-7 {\n width: 58.33333333%;\n}\n.col-xs-6 {\n width: 50%;\n}\n.col-xs-5 {\n width: 41.66666667%;\n}\n.col-xs-4 {\n width: 33.33333333%;\n}\n.col-xs-3 {\n width: 25%;\n}\n.col-xs-2 {\n width: 16.66666667%;\n}\n.col-xs-1 {\n width: 8.33333333%;\n}\n.col-xs-pull-12 {\n right: 100%;\n}\n.col-xs-pull-11 {\n right: 91.66666667%;\n}\n.col-xs-pull-10 {\n right: 83.33333333%;\n}\n.col-xs-pull-9 {\n right: 75%;\n}\n.col-xs-pull-8 {\n right: 66.66666667%;\n}\n.col-xs-pull-7 {\n right: 58.33333333%;\n}\n.col-xs-pull-6 {\n right: 50%;\n}\n.col-xs-pull-5 {\n right: 41.66666667%;\n}\n.col-xs-pull-4 {\n right: 33.33333333%;\n}\n.col-xs-pull-3 {\n right: 25%;\n}\n.col-xs-pull-2 {\n right: 16.66666667%;\n}\n.col-xs-pull-1 {\n right: 8.33333333%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-12 {\n left: 100%;\n}\n.col-xs-push-11 {\n left: 91.66666667%;\n}\n.col-xs-push-10 {\n left: 83.33333333%;\n}\n.col-xs-push-9 {\n left: 75%;\n}\n.col-xs-push-8 {\n left: 66.66666667%;\n}\n.col-xs-push-7 {\n left: 58.33333333%;\n}\n.col-xs-push-6 {\n left: 50%;\n}\n.col-xs-push-5 {\n left: 41.66666667%;\n}\n.col-xs-push-4 {\n left: 33.33333333%;\n}\n.col-xs-push-3 {\n left: 25%;\n}\n.col-xs-push-2 {\n left: 16.66666667%;\n}\n.col-xs-push-1 {\n left: 8.33333333%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-12 {\n margin-left: 100%;\n}\n.col-xs-offset-11 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n margin-left: 75%;\n}\n.col-xs-offset-8 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n margin-left: 50%;\n}\n.col-xs-offset-5 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n margin-left: 25%;\n}\n.col-xs-offset-2 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n float: left;\n }\n .col-sm-12 {\n width: 100%;\n }\n .col-sm-11 {\n width: 91.66666667%;\n }\n .col-sm-10 {\n width: 83.33333333%;\n }\n .col-sm-9 {\n width: 75%;\n }\n .col-sm-8 {\n width: 66.66666667%;\n }\n .col-sm-7 {\n width: 58.33333333%;\n }\n .col-sm-6 {\n width: 50%;\n }\n .col-sm-5 {\n width: 41.66666667%;\n }\n .col-sm-4 {\n width: 33.33333333%;\n }\n .col-sm-3 {\n width: 25%;\n }\n .col-sm-2 {\n width: 16.66666667%;\n }\n .col-sm-1 {\n width: 8.33333333%;\n }\n .col-sm-pull-12 {\n right: 100%;\n }\n .col-sm-pull-11 {\n right: 91.66666667%;\n }\n .col-sm-pull-10 {\n right: 83.33333333%;\n }\n .col-sm-pull-9 {\n right: 75%;\n }\n .col-sm-pull-8 {\n right: 66.66666667%;\n }\n .col-sm-pull-7 {\n right: 58.33333333%;\n }\n .col-sm-pull-6 {\n right: 50%;\n }\n .col-sm-pull-5 {\n right: 41.66666667%;\n }\n .col-sm-pull-4 {\n right: 33.33333333%;\n }\n .col-sm-pull-3 {\n right: 25%;\n }\n .col-sm-pull-2 {\n right: 16.66666667%;\n }\n .col-sm-pull-1 {\n right: 8.33333333%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-12 {\n left: 100%;\n }\n .col-sm-push-11 {\n left: 91.66666667%;\n }\n .col-sm-push-10 {\n left: 83.33333333%;\n }\n .col-sm-push-9 {\n left: 75%;\n }\n .col-sm-push-8 {\n left: 66.66666667%;\n }\n .col-sm-push-7 {\n left: 58.33333333%;\n }\n .col-sm-push-6 {\n left: 50%;\n }\n .col-sm-push-5 {\n left: 41.66666667%;\n }\n .col-sm-push-4 {\n left: 33.33333333%;\n }\n .col-sm-push-3 {\n left: 25%;\n }\n .col-sm-push-2 {\n left: 16.66666667%;\n }\n .col-sm-push-1 {\n left: 8.33333333%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-12 {\n margin-left: 100%;\n }\n .col-sm-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-9 {\n margin-left: 75%;\n }\n .col-sm-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-6 {\n margin-left: 50%;\n }\n .col-sm-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-3 {\n margin-left: 25%;\n }\n .col-sm-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n float: left;\n }\n .col-md-12 {\n width: 100%;\n }\n .col-md-11 {\n width: 91.66666667%;\n }\n .col-md-10 {\n width: 83.33333333%;\n }\n .col-md-9 {\n width: 75%;\n }\n .col-md-8 {\n width: 66.66666667%;\n }\n .col-md-7 {\n width: 58.33333333%;\n }\n .col-md-6 {\n width: 50%;\n }\n .col-md-5 {\n width: 41.66666667%;\n }\n .col-md-4 {\n width: 33.33333333%;\n }\n .col-md-3 {\n width: 25%;\n }\n .col-md-2 {\n width: 16.66666667%;\n }\n .col-md-1 {\n width: 8.33333333%;\n }\n .col-md-pull-12 {\n right: 100%;\n }\n .col-md-pull-11 {\n right: 91.66666667%;\n }\n .col-md-pull-10 {\n right: 83.33333333%;\n }\n .col-md-pull-9 {\n right: 75%;\n }\n .col-md-pull-8 {\n right: 66.66666667%;\n }\n .col-md-pull-7 {\n right: 58.33333333%;\n }\n .col-md-pull-6 {\n right: 50%;\n }\n .col-md-pull-5 {\n right: 41.66666667%;\n }\n .col-md-pull-4 {\n right: 33.33333333%;\n }\n .col-md-pull-3 {\n right: 25%;\n }\n .col-md-pull-2 {\n right: 16.66666667%;\n }\n .col-md-pull-1 {\n right: 8.33333333%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-12 {\n left: 100%;\n }\n .col-md-push-11 {\n left: 91.66666667%;\n }\n .col-md-push-10 {\n left: 83.33333333%;\n }\n .col-md-push-9 {\n left: 75%;\n }\n .col-md-push-8 {\n left: 66.66666667%;\n }\n .col-md-push-7 {\n left: 58.33333333%;\n }\n .col-md-push-6 {\n left: 50%;\n }\n .col-md-push-5 {\n left: 41.66666667%;\n }\n .col-md-push-4 {\n left: 33.33333333%;\n }\n .col-md-push-3 {\n left: 25%;\n }\n .col-md-push-2 {\n left: 16.66666667%;\n }\n .col-md-push-1 {\n left: 8.33333333%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-12 {\n margin-left: 100%;\n }\n .col-md-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-9 {\n margin-left: 75%;\n }\n .col-md-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-6 {\n margin-left: 50%;\n }\n .col-md-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-3 {\n margin-left: 25%;\n }\n .col-md-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n float: left;\n }\n .col-lg-12 {\n width: 100%;\n }\n .col-lg-11 {\n width: 91.66666667%;\n }\n .col-lg-10 {\n width: 83.33333333%;\n }\n .col-lg-9 {\n width: 75%;\n }\n .col-lg-8 {\n width: 66.66666667%;\n }\n .col-lg-7 {\n width: 58.33333333%;\n }\n .col-lg-6 {\n width: 50%;\n }\n .col-lg-5 {\n width: 41.66666667%;\n }\n .col-lg-4 {\n width: 33.33333333%;\n }\n .col-lg-3 {\n width: 25%;\n }\n .col-lg-2 {\n width: 16.66666667%;\n }\n .col-lg-1 {\n width: 8.33333333%;\n }\n .col-lg-pull-12 {\n right: 100%;\n }\n .col-lg-pull-11 {\n right: 91.66666667%;\n }\n .col-lg-pull-10 {\n right: 83.33333333%;\n }\n .col-lg-pull-9 {\n right: 75%;\n }\n .col-lg-pull-8 {\n right: 66.66666667%;\n }\n .col-lg-pull-7 {\n right: 58.33333333%;\n }\n .col-lg-pull-6 {\n right: 50%;\n }\n .col-lg-pull-5 {\n right: 41.66666667%;\n }\n .col-lg-pull-4 {\n right: 33.33333333%;\n }\n .col-lg-pull-3 {\n right: 25%;\n }\n .col-lg-pull-2 {\n right: 16.66666667%;\n }\n .col-lg-pull-1 {\n right: 8.33333333%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-12 {\n left: 100%;\n }\n .col-lg-push-11 {\n left: 91.66666667%;\n }\n .col-lg-push-10 {\n left: 83.33333333%;\n }\n .col-lg-push-9 {\n left: 75%;\n }\n .col-lg-push-8 {\n left: 66.66666667%;\n }\n .col-lg-push-7 {\n left: 58.33333333%;\n }\n .col-lg-push-6 {\n left: 50%;\n }\n .col-lg-push-5 {\n left: 41.66666667%;\n }\n .col-lg-push-4 {\n left: 33.33333333%;\n }\n .col-lg-push-3 {\n left: 25%;\n }\n .col-lg-push-2 {\n left: 16.66666667%;\n }\n .col-lg-push-1 {\n left: 8.33333333%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-12 {\n margin-left: 100%;\n }\n .col-lg-offset-11 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-10 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-9 {\n margin-left: 75%;\n }\n .col-lg-offset-8 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-7 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-6 {\n margin-left: 50%;\n }\n .col-lg-offset-5 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-4 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-3 {\n margin-left: 25%;\n }\n .col-lg-offset-2 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-1 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\ntable {\n background-color: transparent;\n}\ncaption {\n padding-top: 8px;\n padding-bottom: 8px;\n color: #777777;\n text-align: left;\n}\nth {\n text-align: left;\n}\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n padding: 8px;\n line-height: 1.42857143;\n vertical-align: top;\n border-top: 1px solid #dddddd;\n}\n.table > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid #dddddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n border-top: 0;\n}\n.table > tbody + tbody {\n border-top: 2px solid #dddddd;\n}\n.table .table {\n background-color: #ffffff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n padding: 5px;\n}\n.table-bordered {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n border: 1px solid #dddddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-column;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n position: static;\n float: none;\n display: table-cell;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n background-color: #ebcccc;\n}\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%;\n}\n@media screen and (max-width: 767px) {\n .table-responsive {\n width: 100%;\n margin-bottom: 15px;\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid #dddddd;\n }\n .table-responsive > .table {\n margin-bottom: 0;\n }\n .table-responsive > .table > thead > tr > th,\n .table-responsive > .table > tbody > tr > th,\n .table-responsive > .table > tfoot > tr > th,\n .table-responsive > .table > thead > tr > td,\n .table-responsive > .table > tbody > tr > td,\n .table-responsive > .table > tfoot > tr > td {\n white-space: nowrap;\n }\n .table-responsive > .table-bordered {\n border: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:first-child,\n .table-responsive > .table-bordered > tbody > tr > th:first-child,\n .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n .table-responsive > .table-bordered > thead > tr > td:first-child,\n .table-responsive > .table-bordered > tbody > tr > td:first-child,\n .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n }\n .table-responsive > .table-bordered > thead > tr > th:last-child,\n .table-responsive > .table-bordered > tbody > tr > th:last-child,\n .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n .table-responsive > .table-bordered > thead > tr > td:last-child,\n .table-responsive > .table-bordered > tbody > tr > td:last-child,\n .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n }\n .table-responsive > .table-bordered > tbody > tr:last-child > th,\n .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n .table-responsive > .table-bordered > tbody > tr:last-child > td,\n .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n border-bottom: 0;\n }\n}\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n min-width: 0;\n}\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: 20px;\n font-size: 21px;\n line-height: inherit;\n color: #333333;\n border: 0;\n border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n display: inline-block;\n max-width: 100%;\n margin-bottom: 5px;\n font-weight: bold;\n}\ninput[type=\"search\"] {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9;\n line-height: normal;\n}\ninput[type=\"file\"] {\n display: block;\n}\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\nselect[multiple],\nselect[size] {\n height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\noutput {\n display: block;\n padding-top: 7px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n}\n.form-control {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n color: #555555;\n background-color: #ffffff;\n background-image: none;\n border: 1px solid #cccccc;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n border-color: #66afe9;\n outline: 0;\n -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, 0.6);\n}\n.form-control::-moz-placeholder {\n color: #999999;\n opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n color: #999999;\n}\n.form-control::-webkit-input-placeholder {\n color: #999999;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n background-color: #eeeeee;\n opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n cursor: not-allowed;\n}\ntextarea.form-control {\n height: auto;\n}\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: 34px;\n }\n input[type=\"date\"].input-sm,\n input[type=\"time\"].input-sm,\n input[type=\"datetime-local\"].input-sm,\n input[type=\"month\"].input-sm,\n .input-group-sm input[type=\"date\"],\n .input-group-sm input[type=\"time\"],\n .input-group-sm input[type=\"datetime-local\"],\n .input-group-sm input[type=\"month\"] {\n line-height: 30px;\n }\n input[type=\"date\"].input-lg,\n input[type=\"time\"].input-lg,\n input[type=\"datetime-local\"].input-lg,\n input[type=\"month\"].input-lg,\n .input-group-lg input[type=\"date\"],\n .input-group-lg input[type=\"time\"],\n .input-group-lg input[type=\"datetime-local\"],\n .input-group-lg input[type=\"month\"] {\n line-height: 46px;\n }\n}\n.form-group {\n margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n min-height: 20px;\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n cursor: not-allowed;\n}\n.form-control-static {\n padding-top: 7px;\n padding-bottom: 7px;\n margin-bottom: 0;\n min-height: 34px;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n padding-left: 0;\n padding-right: 0;\n}\n.input-sm {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-sm {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n height: auto;\n}\n.form-group-sm .form-control {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.form-group-sm .form-control {\n height: 30px;\n line-height: 30px;\n}\ntextarea.form-group-sm .form-control,\nselect[multiple].form-group-sm .form-control {\n height: auto;\n}\n.form-group-sm .form-control-static {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n min-height: 32px;\n}\n.input-lg {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-lg {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n height: auto;\n}\n.form-group-lg .form-control {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.form-group-lg .form-control {\n height: 46px;\n line-height: 46px;\n}\ntextarea.form-group-lg .form-control,\nselect[multiple].form-group-lg .form-control {\n height: auto;\n}\n.form-group-lg .form-control-static {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n min-height: 38px;\n}\n.has-feedback {\n position: relative;\n}\n.has-feedback .form-control {\n padding-right: 42.5px;\n}\n.form-control-feedback {\n position: absolute;\n top: 0;\n right: 0;\n z-index: 2;\n display: block;\n width: 34px;\n height: 34px;\n line-height: 34px;\n text-align: center;\n pointer-events: none;\n}\n.input-lg + .form-control-feedback {\n width: 46px;\n height: 46px;\n line-height: 46px;\n}\n.input-sm + .form-control-feedback {\n width: 30px;\n height: 30px;\n line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n color: #3c763d;\n}\n.has-success .form-control {\n border-color: #3c763d;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-success .form-control:focus {\n border-color: #2b542c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n color: #3c763d;\n border-color: #3c763d;\n background-color: #dff0d8;\n}\n.has-success .form-control-feedback {\n color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n color: #8a6d3b;\n}\n.has-warning .form-control {\n border-color: #8a6d3b;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-warning .form-control:focus {\n border-color: #66512c;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n color: #8a6d3b;\n border-color: #8a6d3b;\n background-color: #fcf8e3;\n}\n.has-warning .form-control-feedback {\n color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n color: #a94442;\n}\n.has-error .form-control {\n border-color: #a94442;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n.has-error .form-control:focus {\n border-color: #843534;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n color: #a94442;\n border-color: #a94442;\n background-color: #f2dede;\n}\n.has-error .form-control-feedback {\n color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n top: 0;\n}\n.help-block {\n display: block;\n margin-top: 5px;\n margin-bottom: 10px;\n color: #737373;\n}\n@media (min-width: 768px) {\n .form-inline .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .form-inline .form-control-static {\n display: inline-block;\n }\n .form-inline .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .form-inline .input-group .input-group-addon,\n .form-inline .input-group .input-group-btn,\n .form-inline .input-group .form-control {\n width: auto;\n }\n .form-inline .input-group > .form-control {\n width: 100%;\n }\n .form-inline .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio,\n .form-inline .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .form-inline .radio label,\n .form-inline .checkbox label {\n padding-left: 0;\n }\n .form-inline .radio input[type=\"radio\"],\n .form-inline .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .form-inline .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n margin-top: 0;\n margin-bottom: 0;\n padding-top: 7px;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n min-height: 27px;\n}\n.form-horizontal .form-group {\n margin-left: -15px;\n margin-right: -15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .control-label {\n text-align: right;\n margin-bottom: 0;\n padding-top: 7px;\n }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n right: 15px;\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-lg .control-label {\n padding-top: 14.333333px;\n }\n}\n@media (min-width: 768px) {\n .form-horizontal .form-group-sm .control-label {\n padding-top: 6px;\n }\n}\n.btn {\n display: inline-block;\n margin-bottom: 0;\n font-weight: normal;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none;\n border: 1px solid transparent;\n white-space: nowrap;\n padding: 6px 12px;\n font-size: 14px;\n line-height: 1.42857143;\n border-radius: 4px;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n outline: thin dotted;\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n color: #333333;\n text-decoration: none;\n}\n.btn:active,\n.btn.active {\n outline: 0;\n background-image: none;\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n cursor: not-allowed;\n pointer-events: none;\n opacity: 0.65;\n filter: alpha(opacity=65);\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-default {\n color: #333333;\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default:hover,\n.btn-default:focus,\n.btn-default.focus,\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n color: #333333;\n background-color: #e6e6e6;\n border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n background-image: none;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n background-color: #ffffff;\n border-color: #cccccc;\n}\n.btn-default .badge {\n color: #ffffff;\n background-color: #333333;\n}\n.btn-primary {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary:hover,\n.btn-primary:focus,\n.btn-primary.focus,\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n color: #ffffff;\n background-color: #286090;\n border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n background-image: none;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n background-color: #337ab7;\n border-color: #2e6da4;\n}\n.btn-primary .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.btn-success {\n color: #ffffff;\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success:hover,\n.btn-success:focus,\n.btn-success.focus,\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n color: #ffffff;\n background-color: #449d44;\n border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n background-image: none;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n background-color: #5cb85c;\n border-color: #4cae4c;\n}\n.btn-success .badge {\n color: #5cb85c;\n background-color: #ffffff;\n}\n.btn-info {\n color: #ffffff;\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info:hover,\n.btn-info:focus,\n.btn-info.focus,\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n color: #ffffff;\n background-color: #31b0d5;\n border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n background-image: none;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n background-color: #5bc0de;\n border-color: #46b8da;\n}\n.btn-info .badge {\n color: #5bc0de;\n background-color: #ffffff;\n}\n.btn-warning {\n color: #ffffff;\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning:hover,\n.btn-warning:focus,\n.btn-warning.focus,\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n color: #ffffff;\n background-color: #ec971f;\n border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n background-image: none;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n background-color: #f0ad4e;\n border-color: #eea236;\n}\n.btn-warning .badge {\n color: #f0ad4e;\n background-color: #ffffff;\n}\n.btn-danger {\n color: #ffffff;\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger:hover,\n.btn-danger:focus,\n.btn-danger.focus,\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n color: #ffffff;\n background-color: #c9302c;\n border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n background-image: none;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n background-color: #d9534f;\n border-color: #d43f3a;\n}\n.btn-danger .badge {\n color: #d9534f;\n background-color: #ffffff;\n}\n.btn-link {\n color: #337ab7;\n font-weight: normal;\n border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n background-color: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n color: #23527c;\n text-decoration: underline;\n background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n color: #777777;\n text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n padding: 1px 5px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\n.btn-block {\n display: block;\n width: 100%;\n}\n.btn-block + .btn-block {\n margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n width: 100%;\n}\n.fade {\n opacity: 0;\n -webkit-transition: opacity 0.15s linear;\n -o-transition: opacity 0.15s linear;\n transition: opacity 0.15s linear;\n}\n.fade.in {\n opacity: 1;\n}\n.collapse {\n display: none;\n}\n.collapse.in {\n display: block;\n}\ntr.collapse.in {\n display: table-row;\n}\ntbody.collapse.in {\n display: table-row-group;\n}\n.collapsing {\n position: relative;\n height: 0;\n overflow: hidden;\n -webkit-transition-property: height, visibility;\n transition-property: height, visibility;\n -webkit-transition-duration: 0.35s;\n transition-duration: 0.35s;\n -webkit-transition-timing-function: ease;\n transition-timing-function: ease;\n}\n.caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n position: relative;\n}\n.dropdown-toggle:focus {\n outline: 0;\n}\n.dropdown-menu {\n position: absolute;\n top: 100%;\n left: 0;\n z-index: 1000;\n display: none;\n float: left;\n min-width: 160px;\n padding: 5px 0;\n margin: 2px 0 0;\n list-style: none;\n font-size: 14px;\n text-align: left;\n background-color: #ffffff;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.15);\n border-radius: 4px;\n -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n background-clip: padding-box;\n}\n.dropdown-menu.pull-right {\n right: 0;\n left: auto;\n}\n.dropdown-menu .divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n display: block;\n padding: 3px 20px;\n clear: both;\n font-weight: normal;\n line-height: 1.42857143;\n color: #333333;\n white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n text-decoration: none;\n color: #262626;\n background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n color: #ffffff;\n text-decoration: none;\n outline: 0;\n background-color: #337ab7;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n color: #777777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n text-decoration: none;\n background-color: transparent;\n background-image: none;\n filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n cursor: not-allowed;\n}\n.open > .dropdown-menu {\n display: block;\n}\n.open > a {\n outline: 0;\n}\n.dropdown-menu-right {\n left: auto;\n right: 0;\n}\n.dropdown-menu-left {\n left: 0;\n right: auto;\n}\n.dropdown-header {\n display: block;\n padding: 3px 20px;\n font-size: 12px;\n line-height: 1.42857143;\n color: #777777;\n white-space: nowrap;\n}\n.dropdown-backdrop {\n position: fixed;\n left: 0;\n right: 0;\n bottom: 0;\n top: 0;\n z-index: 990;\n}\n.pull-right > .dropdown-menu {\n right: 0;\n left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n border-top: 0;\n border-bottom: 4px solid;\n content: \"\";\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n top: auto;\n bottom: 100%;\n margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n .navbar-right .dropdown-menu {\n left: auto;\n right: 0;\n }\n .navbar-right .dropdown-menu-left {\n left: 0;\n right: auto;\n }\n}\n.btn-group,\n.btn-group-vertical {\n position: relative;\n display: inline-block;\n vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n position: relative;\n float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n margin-left: -1px;\n}\n.btn-toolbar {\n margin-left: -5px;\n}\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n border-radius: 0;\n}\n.btn-group > .btn:first-child {\n margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group > .btn-group {\n float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n padding-left: 8px;\n padding-right: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n padding-left: 12px;\n padding-right: 12px;\n}\n.btn-group.open .dropdown-toggle {\n -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n -webkit-box-shadow: none;\n box-shadow: none;\n}\n.btn .caret {\n margin-left: 0;\n}\n.btn-lg .caret {\n border-width: 5px 5px 0;\n border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n display: block;\n float: none;\n width: 100%;\n max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n margin-top: -1px;\n margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n border-top-right-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n border-bottom-left-radius: 4px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.btn-group-justified {\n display: table;\n width: 100%;\n table-layout: fixed;\n border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n float: none;\n display: table-cell;\n width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n position: absolute;\n clip: rect(0, 0, 0, 0);\n pointer-events: none;\n}\n.input-group {\n position: relative;\n display: table;\n border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n float: none;\n padding-left: 0;\n padding-right: 0;\n}\n.input-group .form-control {\n position: relative;\n z-index: 2;\n float: left;\n width: 100%;\n margin-bottom: 0;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n padding: 10px 16px;\n font-size: 18px;\n line-height: 1.3333333;\n border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n height: 46px;\n line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n padding: 5px 10px;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n height: 30px;\n line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n width: 1%;\n white-space: nowrap;\n vertical-align: middle;\n}\n.input-group-addon {\n padding: 6px 12px;\n font-size: 14px;\n font-weight: normal;\n line-height: 1;\n color: #555555;\n text-align: center;\n background-color: #eeeeee;\n border: 1px solid #cccccc;\n border-radius: 4px;\n}\n.input-group-addon.input-sm {\n padding: 5px 10px;\n font-size: 12px;\n border-radius: 3px;\n}\n.input-group-addon.input-lg {\n padding: 10px 16px;\n font-size: 18px;\n border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n}\n.input-group-addon:first-child {\n border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n}\n.input-group-addon:last-child {\n border-left: 0;\n}\n.input-group-btn {\n position: relative;\n font-size: 0;\n white-space: nowrap;\n}\n.input-group-btn > .btn {\n position: relative;\n}\n.input-group-btn > .btn + .btn {\n margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n margin-left: -1px;\n}\n.nav {\n margin-bottom: 0;\n padding-left: 0;\n list-style: none;\n}\n.nav > li {\n position: relative;\n display: block;\n}\n.nav > li > a {\n position: relative;\n display: block;\n padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.nav > li.disabled > a {\n color: #777777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n color: #777777;\n text-decoration: none;\n background-color: transparent;\n cursor: not-allowed;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n background-color: #eeeeee;\n border-color: #337ab7;\n}\n.nav .nav-divider {\n height: 1px;\n margin: 9px 0;\n overflow: hidden;\n background-color: #e5e5e5;\n}\n.nav > li > a > img {\n max-width: none;\n}\n.nav-tabs {\n border-bottom: 1px solid #dddddd;\n}\n.nav-tabs > li {\n float: left;\n margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n margin-right: 2px;\n line-height: 1.42857143;\n border: 1px solid transparent;\n border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n border-color: #eeeeee #eeeeee #dddddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n color: #555555;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-bottom-color: transparent;\n cursor: default;\n}\n.nav-tabs.nav-justified {\n width: 100%;\n border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n float: none;\n}\n.nav-tabs.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-tabs.nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs.nav-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs.nav-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs.nav-justified > .active > a,\n .nav-tabs.nav-justified > .active > a:hover,\n .nav-tabs.nav-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.nav-pills > li {\n float: left;\n}\n.nav-pills > li > a {\n border-radius: 4px;\n}\n.nav-pills > li + li {\n margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n color: #ffffff;\n background-color: #337ab7;\n}\n.nav-stacked > li {\n float: none;\n}\n.nav-stacked > li + li {\n margin-top: 2px;\n margin-left: 0;\n}\n.nav-justified {\n width: 100%;\n}\n.nav-justified > li {\n float: none;\n}\n.nav-justified > li > a {\n text-align: center;\n margin-bottom: 5px;\n}\n.nav-justified > .dropdown .dropdown-menu {\n top: auto;\n left: auto;\n}\n@media (min-width: 768px) {\n .nav-justified > li {\n display: table-cell;\n width: 1%;\n }\n .nav-justified > li > a {\n margin-bottom: 0;\n }\n}\n.nav-tabs-justified {\n border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n margin-right: 0;\n border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n .nav-tabs-justified > li > a {\n border-bottom: 1px solid #dddddd;\n border-radius: 4px 4px 0 0;\n }\n .nav-tabs-justified > .active > a,\n .nav-tabs-justified > .active > a:hover,\n .nav-tabs-justified > .active > a:focus {\n border-bottom-color: #ffffff;\n }\n}\n.tab-content > .tab-pane {\n display: none;\n}\n.tab-content > .active {\n display: block;\n}\n.nav-tabs .dropdown-menu {\n margin-top: -1px;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar {\n position: relative;\n min-height: 50px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n .navbar {\n border-radius: 4px;\n }\n}\n@media (min-width: 768px) {\n .navbar-header {\n float: left;\n }\n}\n.navbar-collapse {\n overflow-x: visible;\n padding-right: 15px;\n padding-left: 15px;\n border-top: 1px solid transparent;\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1);\n -webkit-overflow-scrolling: touch;\n}\n.navbar-collapse.in {\n overflow-y: auto;\n}\n@media (min-width: 768px) {\n .navbar-collapse {\n width: auto;\n border-top: 0;\n box-shadow: none;\n }\n .navbar-collapse.collapse {\n display: block !important;\n height: auto !important;\n padding-bottom: 0;\n overflow: visible !important;\n }\n .navbar-collapse.in {\n overflow-y: visible;\n }\n .navbar-fixed-top .navbar-collapse,\n .navbar-static-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n padding-left: 0;\n padding-right: 0;\n }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n .navbar-fixed-top .navbar-collapse,\n .navbar-fixed-bottom .navbar-collapse {\n max-height: 200px;\n }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n margin-right: -15px;\n margin-left: -15px;\n}\n@media (min-width: 768px) {\n .container > .navbar-header,\n .container-fluid > .navbar-header,\n .container > .navbar-collapse,\n .container-fluid > .navbar-collapse {\n margin-right: 0;\n margin-left: 0;\n }\n}\n.navbar-static-top {\n z-index: 1000;\n border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n .navbar-static-top {\n border-radius: 0;\n }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n position: fixed;\n right: 0;\n left: 0;\n z-index: 1030;\n}\n@media (min-width: 768px) {\n .navbar-fixed-top,\n .navbar-fixed-bottom {\n border-radius: 0;\n }\n}\n.navbar-fixed-top {\n top: 0;\n border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n bottom: 0;\n margin-bottom: 0;\n border-width: 1px 0 0;\n}\n.navbar-brand {\n float: left;\n padding: 15px 15px;\n font-size: 18px;\n line-height: 20px;\n height: 50px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n text-decoration: none;\n}\n.navbar-brand > img {\n display: block;\n}\n@media (min-width: 768px) {\n .navbar > .container .navbar-brand,\n .navbar > .container-fluid .navbar-brand {\n margin-left: -15px;\n }\n}\n.navbar-toggle {\n position: relative;\n float: right;\n margin-right: 15px;\n padding: 9px 10px;\n margin-top: 8px;\n margin-bottom: 8px;\n background-color: transparent;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.navbar-toggle:focus {\n outline: 0;\n}\n.navbar-toggle .icon-bar {\n display: block;\n width: 22px;\n height: 2px;\n border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n margin-top: 4px;\n}\n@media (min-width: 768px) {\n .navbar-toggle {\n display: none;\n }\n}\n.navbar-nav {\n margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n padding-top: 10px;\n padding-bottom: 10px;\n line-height: 20px;\n}\n@media (max-width: 767px) {\n .navbar-nav .open .dropdown-menu {\n position: static;\n float: none;\n width: auto;\n margin-top: 0;\n background-color: transparent;\n border: 0;\n box-shadow: none;\n }\n .navbar-nav .open .dropdown-menu > li > a,\n .navbar-nav .open .dropdown-menu .dropdown-header {\n padding: 5px 15px 5px 25px;\n }\n .navbar-nav .open .dropdown-menu > li > a {\n line-height: 20px;\n }\n .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-nav .open .dropdown-menu > li > a:focus {\n background-image: none;\n }\n}\n@media (min-width: 768px) {\n .navbar-nav {\n float: left;\n margin: 0;\n }\n .navbar-nav > li {\n float: left;\n }\n .navbar-nav > li > a {\n padding-top: 15px;\n padding-bottom: 15px;\n }\n}\n.navbar-form {\n margin-left: -15px;\n margin-right: -15px;\n padding: 10px 15px;\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent;\n -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n margin-top: 8px;\n margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n .navbar-form .form-group {\n display: inline-block;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .form-control {\n display: inline-block;\n width: auto;\n vertical-align: middle;\n }\n .navbar-form .form-control-static {\n display: inline-block;\n }\n .navbar-form .input-group {\n display: inline-table;\n vertical-align: middle;\n }\n .navbar-form .input-group .input-group-addon,\n .navbar-form .input-group .input-group-btn,\n .navbar-form .input-group .form-control {\n width: auto;\n }\n .navbar-form .input-group > .form-control {\n width: 100%;\n }\n .navbar-form .control-label {\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio,\n .navbar-form .checkbox {\n display: inline-block;\n margin-top: 0;\n margin-bottom: 0;\n vertical-align: middle;\n }\n .navbar-form .radio label,\n .navbar-form .checkbox label {\n padding-left: 0;\n }\n .navbar-form .radio input[type=\"radio\"],\n .navbar-form .checkbox input[type=\"checkbox\"] {\n position: relative;\n margin-left: 0;\n }\n .navbar-form .has-feedback .form-control-feedback {\n top: 0;\n }\n}\n@media (max-width: 767px) {\n .navbar-form .form-group {\n margin-bottom: 5px;\n }\n .navbar-form .form-group:last-child {\n margin-bottom: 0;\n }\n}\n@media (min-width: 768px) {\n .navbar-form {\n width: auto;\n border: 0;\n margin-left: 0;\n margin-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n -webkit-box-shadow: none;\n box-shadow: none;\n }\n}\n.navbar-nav > li > .dropdown-menu {\n margin-top: 0;\n border-top-right-radius: 0;\n border-top-left-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n margin-bottom: 0;\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.navbar-btn {\n margin-top: 8px;\n margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n margin-top: 10px;\n margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n margin-top: 14px;\n margin-bottom: 14px;\n}\n.navbar-text {\n margin-top: 15px;\n margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n .navbar-text {\n float: left;\n margin-left: 15px;\n margin-right: 15px;\n }\n}\n@media (min-width: 768px) {\n .navbar-left {\n float: left !important;\n }\n .navbar-right {\n float: right !important;\n margin-right: -15px;\n }\n .navbar-right ~ .navbar-right {\n margin-right: 0;\n }\n}\n.navbar-default {\n background-color: #f8f8f8;\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n color: #777777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n color: #5e5e5e;\n background-color: transparent;\n}\n.navbar-default .navbar-text {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a {\n color: #777777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n color: #333333;\n background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n border-color: #dddddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n background-color: #dddddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n background-color: #888888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n background-color: #e7e7e7;\n color: #555555;\n}\n@media (max-width: 767px) {\n .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n color: #777777;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #333333;\n background-color: transparent;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #555555;\n background-color: #e7e7e7;\n }\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #cccccc;\n background-color: transparent;\n }\n}\n.navbar-default .navbar-link {\n color: #777777;\n}\n.navbar-default .navbar-link:hover {\n color: #333333;\n}\n.navbar-default .btn-link {\n color: #777777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n color: #333333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n color: #cccccc;\n}\n.navbar-inverse {\n background-color: #222222;\n border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n border-color: #333333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n background-color: #333333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n background-color: #ffffff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n background-color: #080808;\n color: #ffffff;\n}\n@media (max-width: 767px) {\n .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n border-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n color: #9d9d9d;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n color: #ffffff;\n background-color: transparent;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n color: #ffffff;\n background-color: #080808;\n }\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n color: #444444;\n background-color: transparent;\n }\n}\n.navbar-inverse .navbar-link {\n color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n color: #ffffff;\n}\n.navbar-inverse .btn-link {\n color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n color: #ffffff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n color: #444444;\n}\n.breadcrumb {\n padding: 8px 15px;\n margin-bottom: 20px;\n list-style: none;\n background-color: #f5f5f5;\n border-radius: 4px;\n}\n.breadcrumb > li {\n display: inline-block;\n}\n.breadcrumb > li + li:before {\n content: \"/\\00a0\";\n padding: 0 5px;\n color: #cccccc;\n}\n.breadcrumb > .active {\n color: #777777;\n}\n.pagination {\n display: inline-block;\n padding-left: 0;\n margin: 20px 0;\n border-radius: 4px;\n}\n.pagination > li {\n display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n position: relative;\n float: left;\n padding: 6px 12px;\n line-height: 1.42857143;\n text-decoration: none;\n color: #337ab7;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n margin-left: -1px;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n margin-left: 0;\n border-bottom-left-radius: 4px;\n border-top-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n border-bottom-right-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n color: #23527c;\n background-color: #eeeeee;\n border-color: #dddddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n cursor: default;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n color: #777777;\n background-color: #ffffff;\n border-color: #dddddd;\n cursor: not-allowed;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n padding: 10px 16px;\n font-size: 18px;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n border-bottom-left-radius: 6px;\n border-top-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n border-bottom-right-radius: 6px;\n border-top-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n padding: 5px 10px;\n font-size: 12px;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n border-bottom-left-radius: 3px;\n border-top-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n border-bottom-right-radius: 3px;\n border-top-right-radius: 3px;\n}\n.pager {\n padding-left: 0;\n margin: 20px 0;\n list-style: none;\n text-align: center;\n}\n.pager li {\n display: inline;\n}\n.pager li > a,\n.pager li > span {\n display: inline-block;\n padding: 5px 14px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n text-decoration: none;\n background-color: #eeeeee;\n}\n.pager .next > a,\n.pager .next > span {\n float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n color: #777777;\n background-color: #ffffff;\n cursor: not-allowed;\n}\n.label {\n display: inline;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: bold;\n line-height: 1;\n color: #ffffff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.label:empty {\n display: none;\n}\n.btn .label {\n position: relative;\n top: -1px;\n}\n.label-default {\n background-color: #777777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n background-color: #5e5e5e;\n}\n.label-primary {\n background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n background-color: #286090;\n}\n.label-success {\n background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n background-color: #449d44;\n}\n.label-info {\n background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n background-color: #31b0d5;\n}\n.label-warning {\n background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n background-color: #ec971f;\n}\n.label-danger {\n background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n background-color: #c9302c;\n}\n.badge {\n display: inline-block;\n min-width: 10px;\n padding: 3px 7px;\n font-size: 12px;\n font-weight: bold;\n color: #ffffff;\n line-height: 1;\n vertical-align: baseline;\n white-space: nowrap;\n text-align: center;\n background-color: #777777;\n border-radius: 10px;\n}\n.badge:empty {\n display: none;\n}\n.btn .badge {\n position: relative;\n top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n top: 0;\n padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n color: #ffffff;\n text-decoration: none;\n cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.list-group-item > .badge {\n float: right;\n}\n.list-group-item > .badge + .badge {\n margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n margin-left: 3px;\n}\n.jumbotron {\n padding: 30px 15px;\n margin-bottom: 30px;\n color: inherit;\n background-color: #eeeeee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n color: inherit;\n}\n.jumbotron p {\n margin-bottom: 15px;\n font-size: 21px;\n font-weight: 200;\n}\n.jumbotron > hr {\n border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n border-radius: 6px;\n}\n.jumbotron .container {\n max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n .jumbotron {\n padding: 48px 0;\n }\n .container .jumbotron,\n .container-fluid .jumbotron {\n padding-left: 60px;\n padding-right: 60px;\n }\n .jumbotron h1,\n .jumbotron .h1 {\n font-size: 63px;\n }\n}\n.thumbnail {\n display: block;\n padding: 4px;\n margin-bottom: 20px;\n line-height: 1.42857143;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n border-radius: 4px;\n -webkit-transition: border 0.2s ease-in-out;\n -o-transition: border 0.2s ease-in-out;\n transition: border 0.2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n margin-left: auto;\n margin-right: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n border-color: #337ab7;\n}\n.thumbnail .caption {\n padding: 9px;\n color: #333333;\n}\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n.alert h4 {\n margin-top: 0;\n color: inherit;\n}\n.alert .alert-link {\n font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n margin-bottom: 0;\n}\n.alert > p + p {\n margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n position: relative;\n top: -2px;\n right: -21px;\n color: inherit;\n}\n.alert-success {\n background-color: #dff0d8;\n border-color: #d6e9c6;\n color: #3c763d;\n}\n.alert-success hr {\n border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n color: #2b542c;\n}\n.alert-info {\n background-color: #d9edf7;\n border-color: #bce8f1;\n color: #31708f;\n}\n.alert-info hr {\n border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n color: #245269;\n}\n.alert-warning {\n background-color: #fcf8e3;\n border-color: #faebcc;\n color: #8a6d3b;\n}\n.alert-warning hr {\n border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n color: #66512c;\n}\n.alert-danger {\n background-color: #f2dede;\n border-color: #ebccd1;\n color: #a94442;\n}\n.alert-danger hr {\n border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n@keyframes progress-bar-stripes {\n from {\n background-position: 40px 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.progress {\n overflow: hidden;\n height: 20px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.progress-bar {\n float: left;\n width: 0%;\n height: 100%;\n font-size: 12px;\n line-height: 20px;\n color: #ffffff;\n text-align: center;\n background-color: #337ab7;\n -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);\n -webkit-transition: width 0.6s ease;\n -o-transition: width 0.6s ease;\n transition: width 0.6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n -webkit-animation: progress-bar-stripes 2s linear infinite;\n -o-animation: progress-bar-stripes 2s linear infinite;\n animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.media {\n margin-top: 15px;\n}\n.media:first-child {\n margin-top: 0;\n}\n.media,\n.media-body {\n zoom: 1;\n overflow: hidden;\n}\n.media-body {\n width: 10000px;\n}\n.media-object {\n display: block;\n}\n.media-right,\n.media > .pull-right {\n padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n display: table-cell;\n vertical-align: top;\n}\n.media-middle {\n vertical-align: middle;\n}\n.media-bottom {\n vertical-align: bottom;\n}\n.media-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.media-list {\n padding-left: 0;\n list-style: none;\n}\n.list-group {\n margin-bottom: 20px;\n padding-left: 0;\n}\n.list-group-item {\n position: relative;\n display: block;\n padding: 10px 15px;\n margin-bottom: -1px;\n background-color: #ffffff;\n border: 1px solid #dddddd;\n}\n.list-group-item:first-child {\n border-top-right-radius: 4px;\n border-top-left-radius: 4px;\n}\n.list-group-item:last-child {\n margin-bottom: 0;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 4px;\n}\na.list-group-item {\n color: #555555;\n}\na.list-group-item .list-group-item-heading {\n color: #333333;\n}\na.list-group-item:hover,\na.list-group-item:focus {\n text-decoration: none;\n color: #555555;\n background-color: #f5f5f5;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n background-color: #eeeeee;\n color: #777777;\n cursor: not-allowed;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n color: #777777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n z-index: 2;\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n color: #c7ddef;\n}\n.list-group-item-success {\n color: #3c763d;\n background-color: #dff0d8;\n}\na.list-group-item-success {\n color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-success:hover,\na.list-group-item-success:focus {\n color: #3c763d;\n background-color: #d0e9c6;\n}\na.list-group-item-success.active,\na.list-group-item-success.active:hover,\na.list-group-item-success.active:focus {\n color: #fff;\n background-color: #3c763d;\n border-color: #3c763d;\n}\n.list-group-item-info {\n color: #31708f;\n background-color: #d9edf7;\n}\na.list-group-item-info {\n color: #31708f;\n}\na.list-group-item-info .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-info:hover,\na.list-group-item-info:focus {\n color: #31708f;\n background-color: #c4e3f3;\n}\na.list-group-item-info.active,\na.list-group-item-info.active:hover,\na.list-group-item-info.active:focus {\n color: #fff;\n background-color: #31708f;\n border-color: #31708f;\n}\n.list-group-item-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n}\na.list-group-item-warning {\n color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-warning:hover,\na.list-group-item-warning:focus {\n color: #8a6d3b;\n background-color: #faf2cc;\n}\na.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus {\n color: #fff;\n background-color: #8a6d3b;\n border-color: #8a6d3b;\n}\n.list-group-item-danger {\n color: #a94442;\n background-color: #f2dede;\n}\na.list-group-item-danger {\n color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading {\n color: inherit;\n}\na.list-group-item-danger:hover,\na.list-group-item-danger:focus {\n color: #a94442;\n background-color: #ebcccc;\n}\na.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus {\n color: #fff;\n background-color: #a94442;\n border-color: #a94442;\n}\n.list-group-item-heading {\n margin-top: 0;\n margin-bottom: 5px;\n}\n.list-group-item-text {\n margin-bottom: 0;\n line-height: 1.3;\n}\n.panel {\n margin-bottom: 20px;\n background-color: #ffffff;\n border: 1px solid transparent;\n border-radius: 4px;\n -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.panel-body {\n padding: 15px;\n}\n.panel-heading {\n padding: 10px 15px;\n border-bottom: 1px solid transparent;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n color: inherit;\n}\n.panel-title {\n margin-top: 0;\n margin-bottom: 0;\n font-size: 16px;\n color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n color: inherit;\n}\n.panel-footer {\n padding: 10px 15px;\n background-color: #f5f5f5;\n border-top: 1px solid #dddddd;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n border-width: 1px 0;\n border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n border-top: 0;\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n border-bottom: 0;\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n border-top-width: 0;\n}\n.list-group + .panel-footer {\n border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n padding-left: 15px;\n padding-right: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n border-top-right-radius: 3px;\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n border-top-left-radius: 3px;\n border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n border-bottom-right-radius: 3px;\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n border-bottom-left-radius: 3px;\n border-bottom-right-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n border-top: 1px solid #dddddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n border-bottom: 0;\n}\n.panel > .table-responsive {\n border: 0;\n margin-bottom: 0;\n}\n.panel-group {\n margin-bottom: 20px;\n}\n.panel-group .panel {\n margin-bottom: 0;\n border-radius: 4px;\n}\n.panel-group .panel + .panel {\n margin-top: 5px;\n}\n.panel-group .panel-heading {\n border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n border-top: 1px solid #dddddd;\n}\n.panel-group .panel-footer {\n border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n border-bottom: 1px solid #dddddd;\n}\n.panel-default {\n border-color: #dddddd;\n}\n.panel-default > .panel-heading {\n color: #333333;\n background-color: #f5f5f5;\n border-color: #dddddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #dddddd;\n}\n.panel-default > .panel-heading .badge {\n color: #f5f5f5;\n background-color: #333333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #dddddd;\n}\n.panel-primary {\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n color: #ffffff;\n background-color: #337ab7;\n border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n color: #337ab7;\n background-color: #ffffff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #337ab7;\n}\n.panel-success {\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n color: #3c763d;\n background-color: #dff0d8;\n border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n color: #dff0d8;\n background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #d6e9c6;\n}\n.panel-info {\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n color: #31708f;\n background-color: #d9edf7;\n border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n color: #d9edf7;\n background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #bce8f1;\n}\n.panel-warning {\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n color: #fcf8e3;\n background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #faebcc;\n}\n.panel-danger {\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n color: #a94442;\n background-color: #f2dede;\n border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n color: #f2dede;\n background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n position: relative;\n display: block;\n height: 0;\n padding: 0;\n overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n height: 100%;\n width: 100%;\n border: 0;\n}\n.embed-responsive-16by9 {\n padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n padding-bottom: 75%;\n}\n.well {\n min-height: 20px;\n padding: 19px;\n margin-bottom: 20px;\n background-color: #f5f5f5;\n border: 1px solid #e3e3e3;\n border-radius: 4px;\n -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);\n}\n.well blockquote {\n border-color: #ddd;\n border-color: rgba(0, 0, 0, 0.15);\n}\n.well-lg {\n padding: 24px;\n border-radius: 6px;\n}\n.well-sm {\n padding: 9px;\n border-radius: 3px;\n}\n.close {\n float: right;\n font-size: 21px;\n font-weight: bold;\n line-height: 1;\n color: #000000;\n text-shadow: 0 1px 0 #ffffff;\n opacity: 0.2;\n filter: alpha(opacity=20);\n}\n.close:hover,\n.close:focus {\n color: #000000;\n text-decoration: none;\n cursor: pointer;\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\nbutton.close {\n padding: 0;\n cursor: pointer;\n background: transparent;\n border: 0;\n -webkit-appearance: none;\n}\n.modal-open {\n overflow: hidden;\n}\n.modal {\n display: none;\n overflow: hidden;\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1050;\n -webkit-overflow-scrolling: touch;\n outline: 0;\n}\n.modal.fade .modal-dialog {\n -webkit-transform: translate(0, -25%);\n -ms-transform: translate(0, -25%);\n -o-transform: translate(0, -25%);\n transform: translate(0, -25%);\n -webkit-transition: -webkit-transform 0.3s ease-out;\n -moz-transition: -moz-transform 0.3s ease-out;\n -o-transition: -o-transform 0.3s ease-out;\n transition: transform 0.3s ease-out;\n}\n.modal.in .modal-dialog {\n -webkit-transform: translate(0, 0);\n -ms-transform: translate(0, 0);\n -o-transform: translate(0, 0);\n transform: translate(0, 0);\n}\n.modal-open .modal {\n overflow-x: hidden;\n overflow-y: auto;\n}\n.modal-dialog {\n position: relative;\n width: auto;\n margin: 10px;\n}\n.modal-content {\n position: relative;\n background-color: #ffffff;\n border: 1px solid #999999;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);\n background-clip: padding-box;\n outline: 0;\n}\n.modal-backdrop {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1040;\n background-color: #000000;\n}\n.modal-backdrop.fade {\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.modal-backdrop.in {\n opacity: 0.5;\n filter: alpha(opacity=50);\n}\n.modal-header {\n padding: 15px;\n border-bottom: 1px solid #e5e5e5;\n min-height: 16.42857143px;\n}\n.modal-header .close {\n margin-top: -2px;\n}\n.modal-title {\n margin: 0;\n line-height: 1.42857143;\n}\n.modal-body {\n position: relative;\n padding: 15px;\n}\n.modal-footer {\n padding: 15px;\n text-align: right;\n border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n margin-left: 5px;\n margin-bottom: 0;\n}\n.modal-footer .btn-group .btn + .btn {\n margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n margin-left: 0;\n}\n.modal-scrollbar-measure {\n position: absolute;\n top: -9999px;\n width: 50px;\n height: 50px;\n overflow: scroll;\n}\n@media (min-width: 768px) {\n .modal-dialog {\n width: 600px;\n margin: 30px auto;\n }\n .modal-content {\n -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);\n }\n .modal-sm {\n width: 300px;\n }\n}\n@media (min-width: 992px) {\n .modal-lg {\n width: 900px;\n }\n}\n.tooltip {\n position: absolute;\n z-index: 1070;\n display: block;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 12px;\n font-weight: normal;\n line-height: 1.4;\n opacity: 0;\n filter: alpha(opacity=0);\n}\n.tooltip.in {\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.tooltip.top {\n margin-top: -3px;\n padding: 5px 0;\n}\n.tooltip.right {\n margin-left: 3px;\n padding: 0 5px;\n}\n.tooltip.bottom {\n margin-top: 3px;\n padding: 5px 0;\n}\n.tooltip.left {\n margin-left: -3px;\n padding: 0 5px;\n}\n.tooltip-inner {\n max-width: 200px;\n padding: 3px 8px;\n color: #ffffff;\n text-align: center;\n text-decoration: none;\n background-color: #000000;\n border-radius: 4px;\n}\n.tooltip-arrow {\n position: absolute;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n bottom: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n bottom: 0;\n right: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n bottom: 0;\n left: 5px;\n margin-bottom: -5px;\n border-width: 5px 5px 0;\n border-top-color: #000000;\n}\n.tooltip.right .tooltip-arrow {\n top: 50%;\n left: 0;\n margin-top: -5px;\n border-width: 5px 5px 5px 0;\n border-right-color: #000000;\n}\n.tooltip.left .tooltip-arrow {\n top: 50%;\n right: 0;\n margin-top: -5px;\n border-width: 5px 0 5px 5px;\n border-left-color: #000000;\n}\n.tooltip.bottom .tooltip-arrow {\n top: 0;\n left: 50%;\n margin-left: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n top: 0;\n right: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n top: 0;\n left: 5px;\n margin-top: -5px;\n border-width: 0 5px 5px;\n border-bottom-color: #000000;\n}\n.popover {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1060;\n display: none;\n max-width: 276px;\n padding: 1px;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n font-weight: normal;\n line-height: 1.42857143;\n text-align: left;\n background-color: #ffffff;\n background-clip: padding-box;\n border: 1px solid #cccccc;\n border: 1px solid rgba(0, 0, 0, 0.2);\n border-radius: 6px;\n -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n white-space: normal;\n}\n.popover.top {\n margin-top: -10px;\n}\n.popover.right {\n margin-left: 10px;\n}\n.popover.bottom {\n margin-top: 10px;\n}\n.popover.left {\n margin-left: -10px;\n}\n.popover-title {\n margin: 0;\n padding: 8px 14px;\n font-size: 14px;\n background-color: #f7f7f7;\n border-bottom: 1px solid #ebebeb;\n border-radius: 5px 5px 0 0;\n}\n.popover-content {\n padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n position: absolute;\n display: block;\n width: 0;\n height: 0;\n border-color: transparent;\n border-style: solid;\n}\n.popover > .arrow {\n border-width: 11px;\n}\n.popover > .arrow:after {\n border-width: 10px;\n content: \"\";\n}\n.popover.top > .arrow {\n left: 50%;\n margin-left: -11px;\n border-bottom-width: 0;\n border-top-color: #999999;\n border-top-color: rgba(0, 0, 0, 0.25);\n bottom: -11px;\n}\n.popover.top > .arrow:after {\n content: \" \";\n bottom: 1px;\n margin-left: -10px;\n border-bottom-width: 0;\n border-top-color: #ffffff;\n}\n.popover.right > .arrow {\n top: 50%;\n left: -11px;\n margin-top: -11px;\n border-left-width: 0;\n border-right-color: #999999;\n border-right-color: rgba(0, 0, 0, 0.25);\n}\n.popover.right > .arrow:after {\n content: \" \";\n left: 1px;\n bottom: -10px;\n border-left-width: 0;\n border-right-color: #ffffff;\n}\n.popover.bottom > .arrow {\n left: 50%;\n margin-left: -11px;\n border-top-width: 0;\n border-bottom-color: #999999;\n border-bottom-color: rgba(0, 0, 0, 0.25);\n top: -11px;\n}\n.popover.bottom > .arrow:after {\n content: \" \";\n top: 1px;\n margin-left: -10px;\n border-top-width: 0;\n border-bottom-color: #ffffff;\n}\n.popover.left > .arrow {\n top: 50%;\n right: -11px;\n margin-top: -11px;\n border-right-width: 0;\n border-left-color: #999999;\n border-left-color: rgba(0, 0, 0, 0.25);\n}\n.popover.left > .arrow:after {\n content: \" \";\n right: 1px;\n border-right-width: 0;\n border-left-color: #ffffff;\n bottom: -10px;\n}\n.carousel {\n position: relative;\n}\n.carousel-inner {\n position: relative;\n overflow: hidden;\n width: 100%;\n}\n.carousel-inner > .item {\n display: none;\n position: relative;\n -webkit-transition: 0.6s ease-in-out left;\n -o-transition: 0.6s ease-in-out left;\n transition: 0.6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n .carousel-inner > .item {\n -webkit-transition: -webkit-transform 0.6s ease-in-out;\n -moz-transition: -moz-transform 0.6s ease-in-out;\n -o-transition: -o-transform 0.6s ease-in-out;\n transition: transform 0.6s ease-in-out;\n -webkit-backface-visibility: hidden;\n -moz-backface-visibility: hidden;\n backface-visibility: hidden;\n -webkit-perspective: 1000;\n -moz-perspective: 1000;\n perspective: 1000;\n }\n .carousel-inner > .item.next,\n .carousel-inner > .item.active.right {\n -webkit-transform: translate3d(100%, 0, 0);\n transform: translate3d(100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.prev,\n .carousel-inner > .item.active.left {\n -webkit-transform: translate3d(-100%, 0, 0);\n transform: translate3d(-100%, 0, 0);\n left: 0;\n }\n .carousel-inner > .item.next.left,\n .carousel-inner > .item.prev.right,\n .carousel-inner > .item.active {\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n left: 0;\n }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n display: block;\n}\n.carousel-inner > .active {\n left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n position: absolute;\n top: 0;\n width: 100%;\n}\n.carousel-inner > .next {\n left: 100%;\n}\n.carousel-inner > .prev {\n left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n left: 0;\n}\n.carousel-inner > .active.left {\n left: -100%;\n}\n.carousel-inner > .active.right {\n left: 100%;\n}\n.carousel-control {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n width: 15%;\n opacity: 0.5;\n filter: alpha(opacity=50);\n font-size: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-control.left {\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5) 0%, rgba(0, 0, 0, 0.0001) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n}\n.carousel-control.right {\n left: auto;\n right: 0;\n background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001) 0%, rgba(0, 0, 0, 0.5) 100%);\n background-repeat: repeat-x;\n filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n}\n.carousel-control:hover,\n.carousel-control:focus {\n outline: 0;\n color: #ffffff;\n text-decoration: none;\n opacity: 0.9;\n filter: alpha(opacity=90);\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n position: absolute;\n top: 50%;\n z-index: 5;\n display: inline-block;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n left: 50%;\n margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n right: 50%;\n margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n width: 20px;\n height: 20px;\n margin-top: -10px;\n line-height: 1;\n font-family: serif;\n}\n.carousel-control .icon-prev:before {\n content: '\\2039';\n}\n.carousel-control .icon-next:before {\n content: '\\203a';\n}\n.carousel-indicators {\n position: absolute;\n bottom: 10px;\n left: 50%;\n z-index: 15;\n width: 60%;\n margin-left: -30%;\n padding-left: 0;\n list-style: none;\n text-align: center;\n}\n.carousel-indicators li {\n display: inline-block;\n width: 10px;\n height: 10px;\n margin: 1px;\n text-indent: -999px;\n border: 1px solid #ffffff;\n border-radius: 10px;\n cursor: pointer;\n background-color: #000 \\9;\n background-color: rgba(0, 0, 0, 0);\n}\n.carousel-indicators .active {\n margin: 0;\n width: 12px;\n height: 12px;\n background-color: #ffffff;\n}\n.carousel-caption {\n position: absolute;\n left: 15%;\n right: 15%;\n bottom: 20px;\n z-index: 10;\n padding-top: 20px;\n padding-bottom: 20px;\n color: #ffffff;\n text-align: center;\n text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6);\n}\n.carousel-caption .btn {\n text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-prev,\n .carousel-control .icon-next {\n width: 30px;\n height: 30px;\n margin-top: -15px;\n font-size: 30px;\n }\n .carousel-control .glyphicon-chevron-left,\n .carousel-control .icon-prev {\n margin-left: -15px;\n }\n .carousel-control .glyphicon-chevron-right,\n .carousel-control .icon-next {\n margin-right: -15px;\n }\n .carousel-caption {\n left: 20%;\n right: 20%;\n padding-bottom: 30px;\n }\n .carousel-indicators {\n bottom: 20px;\n }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n content: \" \";\n display: table;\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}\n.center-block {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n.pull-right {\n float: right !important;\n}\n.pull-left {\n float: left !important;\n}\n.hide {\n display: none !important;\n}\n.show {\n display: block !important;\n}\n.invisible {\n visibility: hidden;\n}\n.text-hide {\n font: 0/0 a;\n color: transparent;\n text-shadow: none;\n background-color: transparent;\n border: 0;\n}\n.hidden {\n display: none !important;\n}\n.affix {\n position: fixed;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-block {\n display: block !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline {\n display: inline !important;\n }\n}\n@media (max-width: 767px) {\n .visible-xs-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-block {\n display: block !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline {\n display: inline !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-block {\n display: block !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline {\n display: inline !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md-inline-block {\n display: inline-block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-block {\n display: block !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline {\n display: inline !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg-inline-block {\n display: inline-block !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n.visible-print-block {\n display: none !important;\n}\n@media print {\n .visible-print-block {\n display: block !important;\n }\n}\n.visible-print-inline {\n display: none !important;\n}\n@media print {\n .visible-print-inline {\n display: inline !important;\n }\n}\n.visible-print-inline-block {\n display: none !important;\n}\n@media print {\n .visible-print-inline-block {\n display: inline-block !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n/*# sourceMappingURL=bootstrap.css.map */","/*! normalize.css v3.0.2 | MIT License | git.io/normalize */\n\n//\n// 1. Set default font family to sans-serif.\n// 2. Prevent iOS text size adjust after orientation change, without disabling\n// user zoom.\n//\n\nhtml {\n font-family: sans-serif; // 1\n -ms-text-size-adjust: 100%; // 2\n -webkit-text-size-adjust: 100%; // 2\n}\n\n//\n// Remove default margin.\n//\n\nbody {\n margin: 0;\n}\n\n// HTML5 display definitions\n// ==========================================================================\n\n//\n// Correct `block` display not defined for any HTML5 element in IE 8/9.\n// Correct `block` display not defined for `details` or `summary` in IE 10/11\n// and Firefox.\n// Correct `block` display not defined for `main` in IE 11.\n//\n\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n display: block;\n}\n\n//\n// 1. Correct `inline-block` display not defined in IE 8/9.\n// 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n//\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block; // 1\n vertical-align: baseline; // 2\n}\n\n//\n// Prevent modern browsers from displaying `audio` without controls.\n// Remove excess height in iOS 5 devices.\n//\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n//\n// Address `[hidden]` styling not present in IE 8/9/10.\n// Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.\n//\n\n[hidden],\ntemplate {\n display: none;\n}\n\n// Links\n// ==========================================================================\n\n//\n// Remove the gray background color from active links in IE 10.\n//\n\na {\n background-color: transparent;\n}\n\n//\n// Improve readability when focused and also mouse hovered in all browsers.\n//\n\na:active,\na:hover {\n outline: 0;\n}\n\n// Text-level semantics\n// ==========================================================================\n\n//\n// Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n//\n\nabbr[title] {\n border-bottom: 1px dotted;\n}\n\n//\n// Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n//\n\nb,\nstrong {\n font-weight: bold;\n}\n\n//\n// Address styling not present in Safari and Chrome.\n//\n\ndfn {\n font-style: italic;\n}\n\n//\n// Address variable `h1` font-size and margin within `section` and `article`\n// contexts in Firefox 4+, Safari, and Chrome.\n//\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n//\n// Address styling not present in IE 8/9.\n//\n\nmark {\n background: #ff0;\n color: #000;\n}\n\n//\n// Address inconsistent and variable font size in all browsers.\n//\n\nsmall {\n font-size: 80%;\n}\n\n//\n// Prevent `sub` and `sup` affecting `line-height` in all browsers.\n//\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n// Embedded content\n// ==========================================================================\n\n//\n// Remove border when inside `a` element in IE 8/9/10.\n//\n\nimg {\n border: 0;\n}\n\n//\n// Correct overflow not hidden in IE 9/10/11.\n//\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n// Grouping content\n// ==========================================================================\n\n//\n// Address margin not present in IE 8/9 and Safari.\n//\n\nfigure {\n margin: 1em 40px;\n}\n\n//\n// Address differences between Firefox and other browsers.\n//\n\nhr {\n -moz-box-sizing: content-box;\n box-sizing: content-box;\n height: 0;\n}\n\n//\n// Contain overflow in all browsers.\n//\n\npre {\n overflow: auto;\n}\n\n//\n// Address odd `em`-unit font size rendering in all browsers.\n//\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\n// Forms\n// ==========================================================================\n\n//\n// Known limitation: by default, Chrome and Safari on OS X allow very limited\n// styling of `select`, unless a `border` property is set.\n//\n\n//\n// 1. Correct color not being inherited.\n// Known issue: affects color of disabled elements.\n// 2. Correct font properties not being inherited.\n// 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n//\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n color: inherit; // 1\n font: inherit; // 2\n margin: 0; // 3\n}\n\n//\n// Address `overflow` set to `hidden` in IE 8/9/10/11.\n//\n\nbutton {\n overflow: visible;\n}\n\n//\n// Address inconsistent `text-transform` inheritance for `button` and `select`.\n// All other form control elements do not inherit `text-transform` values.\n// Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n// Correct `select` style inheritance in Firefox.\n//\n\nbutton,\nselect {\n text-transform: none;\n}\n\n//\n// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n// and `video` controls.\n// 2. Correct inability to style clickable `input` types in iOS.\n// 3. Improve usability and consistency of cursor style between image-type\n// `input` and others.\n//\n\nbutton,\nhtml input[type=\"button\"], // 1\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; // 2\n cursor: pointer; // 3\n}\n\n//\n// Re-set default cursor for disabled elements.\n//\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n//\n// Remove inner padding and border in Firefox 4+.\n//\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n//\n// Address Firefox 4+ setting `line-height` on `input` using `!important` in\n// the UA stylesheet.\n//\n\ninput {\n line-height: normal;\n}\n\n//\n// It's recommended that you don't attempt to style these elements.\n// Firefox's implementation doesn't respect box-sizing, padding, or width.\n//\n// 1. Address box sizing set to `content-box` in IE 8/9/10.\n// 2. Remove excess padding in IE 8/9/10.\n//\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; // 1\n padding: 0; // 2\n}\n\n//\n// Fix the cursor style for Chrome's increment/decrement buttons. For certain\n// `font-size` values of the `input`, it causes the cursor style of the\n// decrement button to change from `default` to `text`.\n//\n\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n//\n// 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n// 2. Address `box-sizing` set to `border-box` in Safari and Chrome\n// (include `-moz` to future-proof).\n//\n\ninput[type=\"search\"] {\n -webkit-appearance: textfield; // 1\n -moz-box-sizing: content-box;\n -webkit-box-sizing: content-box; // 2\n box-sizing: content-box;\n}\n\n//\n// Remove inner padding and search cancel button in Safari and Chrome on OS X.\n// Safari (but not Chrome) clips the cancel button when the search input has\n// padding (and `textfield` appearance).\n//\n\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n//\n// Define consistent border, margin, and padding.\n//\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n//\n// 1. Correct `color` not being inherited in IE 8/9/10/11.\n// 2. Remove padding so people aren't caught out if they zero out fieldsets.\n//\n\nlegend {\n border: 0; // 1\n padding: 0; // 2\n}\n\n//\n// Remove default vertical scrollbar in IE 8/9/10/11.\n//\n\ntextarea {\n overflow: auto;\n}\n\n//\n// Don't inherit the `font-weight` (applied by a rule above).\n// NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n//\n\noptgroup {\n font-weight: bold;\n}\n\n// Tables\n// ==========================================================================\n\n//\n// Remove most spacing between table cells.\n//\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n\n// ==========================================================================\n// Print styles.\n// Inlined to avoid the additional HTTP request: h5bp.com/r\n// ==========================================================================\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important; // Black prints faster: h5bp.com/s\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: \" (\" attr(href) \")\";\n }\n\n abbr[title]:after {\n content: \" (\" attr(title) \")\";\n }\n\n // Don't show links that are fragment identifiers,\n // or use the `javascript:` pseudo protocol\n a[href^=\"#\"]:after,\n a[href^=\"javascript:\"]:after {\n content: \"\";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group; // h5bp.com/t\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n\n // Bootstrap specific changes start\n //\n // Chrome (OSX) fix for https://github.com/twbs/bootstrap/issues/11245\n // Once fixed, we can just straight up remove this.\n select {\n background: #fff !important;\n }\n\n // Bootstrap components\n .navbar {\n display: none;\n }\n .btn,\n .dropup > .btn {\n > .caret {\n border-top-color: #000 !important;\n }\n }\n .label {\n border: 1px solid #000;\n }\n\n .table {\n border-collapse: collapse !important;\n\n td,\n th {\n background-color: #fff !important;\n }\n }\n .table-bordered {\n th,\n td {\n border: 1px solid #ddd !important;\n }\n }\n\n // Bootstrap specific changes end\n}\n","//\n// Glyphicons for Bootstrap\n//\n// Since icons are fonts, they can be placed anywhere text is placed and are\n// thus automatically sized to match the surrounding child. To use, create an\n// inline element with the appropriate classes, like so:\n//\n// Star\n\n// Import the fonts\n@font-face {\n font-family: 'Glyphicons Halflings';\n src: url('@{icon-font-path}@{icon-font-name}.eot');\n src: url('@{icon-font-path}@{icon-font-name}.eot?#iefix') format('embedded-opentype'),\n url('@{icon-font-path}@{icon-font-name}.woff2') format('woff2'),\n url('@{icon-font-path}@{icon-font-name}.woff') format('woff'),\n url('@{icon-font-path}@{icon-font-name}.ttf') format('truetype'),\n url('@{icon-font-path}@{icon-font-name}.svg#@{icon-font-svg-id}') format('svg');\n}\n\n// Catchall baseclass\n.glyphicon {\n position: relative;\n top: 1px;\n display: inline-block;\n font-family: 'Glyphicons Halflings';\n font-style: normal;\n font-weight: normal;\n line-height: 1;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n// Individual icons\n.glyphicon-asterisk { &:before { content: \"\\2a\"; } }\n.glyphicon-plus { &:before { content: \"\\2b\"; } }\n.glyphicon-euro,\n.glyphicon-eur { &:before { content: \"\\20ac\"; } }\n.glyphicon-minus { &:before { content: \"\\2212\"; } }\n.glyphicon-cloud { &:before { content: \"\\2601\"; } }\n.glyphicon-envelope { &:before { content: \"\\2709\"; } }\n.glyphicon-pencil { &:before { content: \"\\270f\"; } }\n.glyphicon-glass { &:before { content: \"\\e001\"; } }\n.glyphicon-music { &:before { content: \"\\e002\"; } }\n.glyphicon-search { &:before { content: \"\\e003\"; } }\n.glyphicon-heart { &:before { content: \"\\e005\"; } }\n.glyphicon-star { &:before { content: \"\\e006\"; } }\n.glyphicon-star-empty { &:before { content: \"\\e007\"; } }\n.glyphicon-user { &:before { content: \"\\e008\"; } }\n.glyphicon-film { &:before { content: \"\\e009\"; } }\n.glyphicon-th-large { &:before { content: \"\\e010\"; } }\n.glyphicon-th { &:before { content: \"\\e011\"; } }\n.glyphicon-th-list { &:before { content: \"\\e012\"; } }\n.glyphicon-ok { &:before { content: \"\\e013\"; } }\n.glyphicon-remove { &:before { content: \"\\e014\"; } }\n.glyphicon-zoom-in { &:before { content: \"\\e015\"; } }\n.glyphicon-zoom-out { &:before { content: \"\\e016\"; } }\n.glyphicon-off { &:before { content: \"\\e017\"; } }\n.glyphicon-signal { &:before { content: \"\\e018\"; } }\n.glyphicon-cog { &:before { content: \"\\e019\"; } }\n.glyphicon-trash { &:before { content: \"\\e020\"; } }\n.glyphicon-home { &:before { content: \"\\e021\"; } }\n.glyphicon-file { &:before { content: \"\\e022\"; } }\n.glyphicon-time { &:before { content: \"\\e023\"; } }\n.glyphicon-road { &:before { content: \"\\e024\"; } }\n.glyphicon-download-alt { &:before { content: \"\\e025\"; } }\n.glyphicon-download { &:before { content: \"\\e026\"; } }\n.glyphicon-upload { &:before { content: \"\\e027\"; } }\n.glyphicon-inbox { &:before { content: \"\\e028\"; } }\n.glyphicon-play-circle { &:before { content: \"\\e029\"; } }\n.glyphicon-repeat { &:before { content: \"\\e030\"; } }\n.glyphicon-refresh { &:before { content: \"\\e031\"; } }\n.glyphicon-list-alt { &:before { content: \"\\e032\"; } }\n.glyphicon-lock { &:before { content: \"\\e033\"; } }\n.glyphicon-flag { &:before { content: \"\\e034\"; } }\n.glyphicon-headphones { &:before { content: \"\\e035\"; } }\n.glyphicon-volume-off { &:before { content: \"\\e036\"; } }\n.glyphicon-volume-down { &:before { content: \"\\e037\"; } }\n.glyphicon-volume-up { &:before { content: \"\\e038\"; } }\n.glyphicon-qrcode { &:before { content: \"\\e039\"; } }\n.glyphicon-barcode { &:before { content: \"\\e040\"; } }\n.glyphicon-tag { &:before { content: \"\\e041\"; } }\n.glyphicon-tags { &:before { content: \"\\e042\"; } }\n.glyphicon-book { &:before { content: \"\\e043\"; } }\n.glyphicon-bookmark { &:before { content: \"\\e044\"; } }\n.glyphicon-print { &:before { content: \"\\e045\"; } }\n.glyphicon-camera { &:before { content: \"\\e046\"; } }\n.glyphicon-font { &:before { content: \"\\e047\"; } }\n.glyphicon-bold { &:before { content: \"\\e048\"; } }\n.glyphicon-italic { &:before { content: \"\\e049\"; } }\n.glyphicon-text-height { &:before { content: \"\\e050\"; } }\n.glyphicon-text-width { &:before { content: \"\\e051\"; } }\n.glyphicon-align-left { &:before { content: \"\\e052\"; } }\n.glyphicon-align-center { &:before { content: \"\\e053\"; } }\n.glyphicon-align-right { &:before { content: \"\\e054\"; } }\n.glyphicon-align-justify { &:before { content: \"\\e055\"; } }\n.glyphicon-list { &:before { content: \"\\e056\"; } }\n.glyphicon-indent-left { &:before { content: \"\\e057\"; } }\n.glyphicon-indent-right { &:before { content: \"\\e058\"; } }\n.glyphicon-facetime-video { &:before { content: \"\\e059\"; } }\n.glyphicon-picture { &:before { content: \"\\e060\"; } }\n.glyphicon-map-marker { &:before { content: \"\\e062\"; } }\n.glyphicon-adjust { &:before { content: \"\\e063\"; } }\n.glyphicon-tint { &:before { content: \"\\e064\"; } }\n.glyphicon-edit { &:before { content: \"\\e065\"; } }\n.glyphicon-share { &:before { content: \"\\e066\"; } }\n.glyphicon-check { &:before { content: \"\\e067\"; } }\n.glyphicon-move { &:before { content: \"\\e068\"; } }\n.glyphicon-step-backward { &:before { content: \"\\e069\"; } }\n.glyphicon-fast-backward { &:before { content: \"\\e070\"; } }\n.glyphicon-backward { &:before { content: \"\\e071\"; } }\n.glyphicon-play { &:before { content: \"\\e072\"; } }\n.glyphicon-pause { &:before { content: \"\\e073\"; } }\n.glyphicon-stop { &:before { content: \"\\e074\"; } }\n.glyphicon-forward { &:before { content: \"\\e075\"; } }\n.glyphicon-fast-forward { &:before { content: \"\\e076\"; } }\n.glyphicon-step-forward { &:before { content: \"\\e077\"; } }\n.glyphicon-eject { &:before { content: \"\\e078\"; } }\n.glyphicon-chevron-left { &:before { content: \"\\e079\"; } }\n.glyphicon-chevron-right { &:before { content: \"\\e080\"; } }\n.glyphicon-plus-sign { &:before { content: \"\\e081\"; } }\n.glyphicon-minus-sign { &:before { content: \"\\e082\"; } }\n.glyphicon-remove-sign { &:before { content: \"\\e083\"; } }\n.glyphicon-ok-sign { &:before { content: \"\\e084\"; } }\n.glyphicon-question-sign { &:before { content: \"\\e085\"; } }\n.glyphicon-info-sign { &:before { content: \"\\e086\"; } }\n.glyphicon-screenshot { &:before { content: \"\\e087\"; } }\n.glyphicon-remove-circle { &:before { content: \"\\e088\"; } }\n.glyphicon-ok-circle { &:before { content: \"\\e089\"; } }\n.glyphicon-ban-circle { &:before { content: \"\\e090\"; } }\n.glyphicon-arrow-left { &:before { content: \"\\e091\"; } }\n.glyphicon-arrow-right { &:before { content: \"\\e092\"; } }\n.glyphicon-arrow-up { &:before { content: \"\\e093\"; } }\n.glyphicon-arrow-down { &:before { content: \"\\e094\"; } }\n.glyphicon-share-alt { &:before { content: \"\\e095\"; } }\n.glyphicon-resize-full { &:before { content: \"\\e096\"; } }\n.glyphicon-resize-small { &:before { content: \"\\e097\"; } }\n.glyphicon-exclamation-sign { &:before { content: \"\\e101\"; } }\n.glyphicon-gift { &:before { content: \"\\e102\"; } }\n.glyphicon-leaf { &:before { content: \"\\e103\"; } }\n.glyphicon-fire { &:before { content: \"\\e104\"; } }\n.glyphicon-eye-open { &:before { content: \"\\e105\"; } }\n.glyphicon-eye-close { &:before { content: \"\\e106\"; } }\n.glyphicon-warning-sign { &:before { content: \"\\e107\"; } }\n.glyphicon-plane { &:before { content: \"\\e108\"; } }\n.glyphicon-calendar { &:before { content: \"\\e109\"; } }\n.glyphicon-random { &:before { content: \"\\e110\"; } }\n.glyphicon-comment { &:before { content: \"\\e111\"; } }\n.glyphicon-magnet { &:before { content: \"\\e112\"; } }\n.glyphicon-chevron-up { &:before { content: \"\\e113\"; } }\n.glyphicon-chevron-down { &:before { content: \"\\e114\"; } }\n.glyphicon-retweet { &:before { content: \"\\e115\"; } }\n.glyphicon-shopping-cart { &:before { content: \"\\e116\"; } }\n.glyphicon-folder-close { &:before { content: \"\\e117\"; } }\n.glyphicon-folder-open { &:before { content: \"\\e118\"; } }\n.glyphicon-resize-vertical { &:before { content: \"\\e119\"; } }\n.glyphicon-resize-horizontal { &:before { content: \"\\e120\"; } }\n.glyphicon-hdd { &:before { content: \"\\e121\"; } }\n.glyphicon-bullhorn { &:before { content: \"\\e122\"; } }\n.glyphicon-bell { &:before { content: \"\\e123\"; } }\n.glyphicon-certificate { &:before { content: \"\\e124\"; } }\n.glyphicon-thumbs-up { &:before { content: \"\\e125\"; } }\n.glyphicon-thumbs-down { &:before { content: \"\\e126\"; } }\n.glyphicon-hand-right { &:before { content: \"\\e127\"; } }\n.glyphicon-hand-left { &:before { content: \"\\e128\"; } }\n.glyphicon-hand-up { &:before { content: \"\\e129\"; } }\n.glyphicon-hand-down { &:before { content: \"\\e130\"; } }\n.glyphicon-circle-arrow-right { &:before { content: \"\\e131\"; } }\n.glyphicon-circle-arrow-left { &:before { content: \"\\e132\"; } }\n.glyphicon-circle-arrow-up { &:before { content: \"\\e133\"; } }\n.glyphicon-circle-arrow-down { &:before { content: \"\\e134\"; } }\n.glyphicon-globe { &:before { content: \"\\e135\"; } }\n.glyphicon-wrench { &:before { content: \"\\e136\"; } }\n.glyphicon-tasks { &:before { content: \"\\e137\"; } }\n.glyphicon-filter { &:before { content: \"\\e138\"; } }\n.glyphicon-briefcase { &:before { content: \"\\e139\"; } }\n.glyphicon-fullscreen { &:before { content: \"\\e140\"; } }\n.glyphicon-dashboard { &:before { content: \"\\e141\"; } }\n.glyphicon-paperclip { &:before { content: \"\\e142\"; } }\n.glyphicon-heart-empty { &:before { content: \"\\e143\"; } }\n.glyphicon-link { &:before { content: \"\\e144\"; } }\n.glyphicon-phone { &:before { content: \"\\e145\"; } }\n.glyphicon-pushpin { &:before { content: \"\\e146\"; } }\n.glyphicon-usd { &:before { content: \"\\e148\"; } }\n.glyphicon-gbp { &:before { content: \"\\e149\"; } }\n.glyphicon-sort { &:before { content: \"\\e150\"; } }\n.glyphicon-sort-by-alphabet { &:before { content: \"\\e151\"; } }\n.glyphicon-sort-by-alphabet-alt { &:before { content: \"\\e152\"; } }\n.glyphicon-sort-by-order { &:before { content: \"\\e153\"; } }\n.glyphicon-sort-by-order-alt { &:before { content: \"\\e154\"; } }\n.glyphicon-sort-by-attributes { &:before { content: \"\\e155\"; } }\n.glyphicon-sort-by-attributes-alt { &:before { content: \"\\e156\"; } }\n.glyphicon-unchecked { &:before { content: \"\\e157\"; } }\n.glyphicon-expand { &:before { content: \"\\e158\"; } }\n.glyphicon-collapse-down { &:before { content: \"\\e159\"; } }\n.glyphicon-collapse-up { &:before { content: \"\\e160\"; } }\n.glyphicon-log-in { &:before { content: \"\\e161\"; } }\n.glyphicon-flash { &:before { content: \"\\e162\"; } }\n.glyphicon-log-out { &:before { content: \"\\e163\"; } }\n.glyphicon-new-window { &:before { content: \"\\e164\"; } }\n.glyphicon-record { &:before { content: \"\\e165\"; } }\n.glyphicon-save { &:before { content: \"\\e166\"; } }\n.glyphicon-open { &:before { content: \"\\e167\"; } }\n.glyphicon-saved { &:before { content: \"\\e168\"; } }\n.glyphicon-import { &:before { content: \"\\e169\"; } }\n.glyphicon-export { &:before { content: \"\\e170\"; } }\n.glyphicon-send { &:before { content: \"\\e171\"; } }\n.glyphicon-floppy-disk { &:before { content: \"\\e172\"; } }\n.glyphicon-floppy-saved { &:before { content: \"\\e173\"; } }\n.glyphicon-floppy-remove { &:before { content: \"\\e174\"; } }\n.glyphicon-floppy-save { &:before { content: \"\\e175\"; } }\n.glyphicon-floppy-open { &:before { content: \"\\e176\"; } }\n.glyphicon-credit-card { &:before { content: \"\\e177\"; } }\n.glyphicon-transfer { &:before { content: \"\\e178\"; } }\n.glyphicon-cutlery { &:before { content: \"\\e179\"; } }\n.glyphicon-header { &:before { content: \"\\e180\"; } }\n.glyphicon-compressed { &:before { content: \"\\e181\"; } }\n.glyphicon-earphone { &:before { content: \"\\e182\"; } }\n.glyphicon-phone-alt { &:before { content: \"\\e183\"; } }\n.glyphicon-tower { &:before { content: \"\\e184\"; } }\n.glyphicon-stats { &:before { content: \"\\e185\"; } }\n.glyphicon-sd-video { &:before { content: \"\\e186\"; } }\n.glyphicon-hd-video { &:before { content: \"\\e187\"; } }\n.glyphicon-subtitles { &:before { content: \"\\e188\"; } }\n.glyphicon-sound-stereo { &:before { content: \"\\e189\"; } }\n.glyphicon-sound-dolby { &:before { content: \"\\e190\"; } }\n.glyphicon-sound-5-1 { &:before { content: \"\\e191\"; } }\n.glyphicon-sound-6-1 { &:before { content: \"\\e192\"; } }\n.glyphicon-sound-7-1 { &:before { content: \"\\e193\"; } }\n.glyphicon-copyright-mark { &:before { content: \"\\e194\"; } }\n.glyphicon-registration-mark { &:before { content: \"\\e195\"; } }\n.glyphicon-cloud-download { &:before { content: \"\\e197\"; } }\n.glyphicon-cloud-upload { &:before { content: \"\\e198\"; } }\n.glyphicon-tree-conifer { &:before { content: \"\\e199\"; } }\n.glyphicon-tree-deciduous { &:before { content: \"\\e200\"; } }\n.glyphicon-cd { &:before { content: \"\\e201\"; } }\n.glyphicon-save-file { &:before { content: \"\\e202\"; } }\n.glyphicon-open-file { &:before { content: \"\\e203\"; } }\n.glyphicon-level-up { &:before { content: \"\\e204\"; } }\n.glyphicon-copy { &:before { content: \"\\e205\"; } }\n.glyphicon-paste { &:before { content: \"\\e206\"; } }\n// The following 2 Glyphicons are omitted for the time being because\n// they currently use Unicode codepoints that are outside the\n// Basic Multilingual Plane (BMP). Older buggy versions of WebKit can't handle\n// non-BMP codepoints in CSS string escapes, and thus can't display these two icons.\n// Notably, the bug affects some older versions of the Android Browser.\n// More info: https://github.com/twbs/bootstrap/issues/10106\n// .glyphicon-door { &:before { content: \"\\1f6aa\"; } }\n// .glyphicon-key { &:before { content: \"\\1f511\"; } }\n.glyphicon-alert { &:before { content: \"\\e209\"; } }\n.glyphicon-equalizer { &:before { content: \"\\e210\"; } }\n.glyphicon-king { &:before { content: \"\\e211\"; } }\n.glyphicon-queen { &:before { content: \"\\e212\"; } }\n.glyphicon-pawn { &:before { content: \"\\e213\"; } }\n.glyphicon-bishop { &:before { content: \"\\e214\"; } }\n.glyphicon-knight { &:before { content: \"\\e215\"; } }\n.glyphicon-baby-formula { &:before { content: \"\\e216\"; } }\n.glyphicon-tent { &:before { content: \"\\26fa\"; } }\n.glyphicon-blackboard { &:before { content: \"\\e218\"; } }\n.glyphicon-bed { &:before { content: \"\\e219\"; } }\n.glyphicon-apple { &:before { content: \"\\f8ff\"; } }\n.glyphicon-erase { &:before { content: \"\\e221\"; } }\n.glyphicon-hourglass { &:before { content: \"\\231b\"; } }\n.glyphicon-lamp { &:before { content: \"\\e223\"; } }\n.glyphicon-duplicate { &:before { content: \"\\e224\"; } }\n.glyphicon-piggy-bank { &:before { content: \"\\e225\"; } }\n.glyphicon-scissors { &:before { content: \"\\e226\"; } }\n.glyphicon-bitcoin { &:before { content: \"\\e227\"; } }\n.glyphicon-btc { &:before { content: \"\\e227\"; } }\n.glyphicon-xbt { &:before { content: \"\\e227\"; } }\n.glyphicon-yen { &:before { content: \"\\00a5\"; } }\n.glyphicon-jpy { &:before { content: \"\\00a5\"; } }\n.glyphicon-ruble { &:before { content: \"\\20bd\"; } }\n.glyphicon-rub { &:before { content: \"\\20bd\"; } }\n.glyphicon-scale { &:before { content: \"\\e230\"; } }\n.glyphicon-ice-lolly { &:before { content: \"\\e231\"; } }\n.glyphicon-ice-lolly-tasted { &:before { content: \"\\e232\"; } }\n.glyphicon-education { &:before { content: \"\\e233\"; } }\n.glyphicon-option-horizontal { &:before { content: \"\\e234\"; } }\n.glyphicon-option-vertical { &:before { content: \"\\e235\"; } }\n.glyphicon-menu-hamburger { &:before { content: \"\\e236\"; } }\n.glyphicon-modal-window { &:before { content: \"\\e237\"; } }\n.glyphicon-oil { &:before { content: \"\\e238\"; } }\n.glyphicon-grain { &:before { content: \"\\e239\"; } }\n.glyphicon-sunglasses { &:before { content: \"\\e240\"; } }\n.glyphicon-text-size { &:before { content: \"\\e241\"; } }\n.glyphicon-text-color { &:before { content: \"\\e242\"; } }\n.glyphicon-text-background { &:before { content: \"\\e243\"; } }\n.glyphicon-object-align-top { &:before { content: \"\\e244\"; } }\n.glyphicon-object-align-bottom { &:before { content: \"\\e245\"; } }\n.glyphicon-object-align-horizontal{ &:before { content: \"\\e246\"; } }\n.glyphicon-object-align-left { &:before { content: \"\\e247\"; } }\n.glyphicon-object-align-vertical { &:before { content: \"\\e248\"; } }\n.glyphicon-object-align-right { &:before { content: \"\\e249\"; } }\n.glyphicon-triangle-right { &:before { content: \"\\e250\"; } }\n.glyphicon-triangle-left { &:before { content: \"\\e251\"; } }\n.glyphicon-triangle-bottom { &:before { content: \"\\e252\"; } }\n.glyphicon-triangle-top { &:before { content: \"\\e253\"; } }\n.glyphicon-console { &:before { content: \"\\e254\"; } }\n.glyphicon-superscript { &:before { content: \"\\e255\"; } }\n.glyphicon-subscript { &:before { content: \"\\e256\"; } }\n.glyphicon-menu-left { &:before { content: \"\\e257\"; } }\n.glyphicon-menu-right { &:before { content: \"\\e258\"; } }\n.glyphicon-menu-down { &:before { content: \"\\e259\"; } }\n.glyphicon-menu-up { &:before { content: \"\\e260\"; } }\n","//\n// Scaffolding\n// --------------------------------------------------\n\n\n// Reset the box-sizing\n//\n// Heads up! This reset may cause conflicts with some third-party widgets.\n// For recommendations on resolving such conflicts, see\n// http://getbootstrap.com/getting-started/#third-box-sizing\n* {\n .box-sizing(border-box);\n}\n*:before,\n*:after {\n .box-sizing(border-box);\n}\n\n\n// Body reset\n\nhtml {\n font-size: 10px;\n -webkit-tap-highlight-color: rgba(0,0,0,0);\n}\n\nbody {\n font-family: @font-family-base;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @text-color;\n background-color: @body-bg;\n}\n\n// Reset fonts for relevant elements\ninput,\nbutton,\nselect,\ntextarea {\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n\n// Links\n\na {\n color: @link-color;\n text-decoration: none;\n\n &:hover,\n &:focus {\n color: @link-hover-color;\n text-decoration: @link-hover-decoration;\n }\n\n &:focus {\n .tab-focus();\n }\n}\n\n\n// Figures\n//\n// We reset this here because previously Normalize had no `figure` margins. This\n// ensures we don't break anyone's use of the element.\n\nfigure {\n margin: 0;\n}\n\n\n// Images\n\nimg {\n vertical-align: middle;\n}\n\n// Responsive images (ensure images don't scale beyond their parents)\n.img-responsive {\n .img-responsive();\n}\n\n// Rounded corners\n.img-rounded {\n border-radius: @border-radius-large;\n}\n\n// Image thumbnails\n//\n// Heads up! This is mixin-ed into thumbnails.less for `.thumbnail`.\n.img-thumbnail {\n padding: @thumbnail-padding;\n line-height: @line-height-base;\n background-color: @thumbnail-bg;\n border: 1px solid @thumbnail-border;\n border-radius: @thumbnail-border-radius;\n .transition(all .2s ease-in-out);\n\n // Keep them at most 100% wide\n .img-responsive(inline-block);\n}\n\n// Perfect circle\n.img-circle {\n border-radius: 50%; // set radius in percents\n}\n\n\n// Horizontal rules\n\nhr {\n margin-top: @line-height-computed;\n margin-bottom: @line-height-computed;\n border: 0;\n border-top: 1px solid @hr-border;\n}\n\n\n// Only display content to screen readers\n//\n// See: http://a11yproject.com/posts/how-to-hide-content/\n\n.sr-only {\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0,0,0,0);\n border: 0;\n}\n\n// Use in conjunction with .sr-only to only display content when it's focused.\n// Useful for \"Skip to main content\" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1\n// Credit: HTML5 Boilerplate\n\n.sr-only-focusable {\n &:active,\n &:focus {\n position: static;\n width: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n clip: auto;\n }\n}\n\n\n// iOS \"clickable elements\" fix for role=\"button\"\n//\n// Fixes \"clickability\" issue (and more generally, the firing of events such as focus as well)\n// for traditionally non-focusable elements with role=\"button\"\n// see https://developer.mozilla.org/en-US/docs/Web/Events/click#Safari_Mobile\n// Upstream patch for normalize.css submitted: https://github.com/necolas/normalize.css/pull/379 - remove this fix once that is merged\n\n[role=\"button\"] {\n cursor: pointer;\n}","// Vendor Prefixes\n//\n// All vendor mixins are deprecated as of v3.2.0 due to the introduction of\n// Autoprefixer in our Gruntfile. They will be removed in v4.\n\n// - Animations\n// - Backface visibility\n// - Box shadow\n// - Box sizing\n// - Content columns\n// - Hyphens\n// - Placeholder text\n// - Transformations\n// - Transitions\n// - User Select\n\n\n// Animations\n.animation(@animation) {\n -webkit-animation: @animation;\n -o-animation: @animation;\n animation: @animation;\n}\n.animation-name(@name) {\n -webkit-animation-name: @name;\n animation-name: @name;\n}\n.animation-duration(@duration) {\n -webkit-animation-duration: @duration;\n animation-duration: @duration;\n}\n.animation-timing-function(@timing-function) {\n -webkit-animation-timing-function: @timing-function;\n animation-timing-function: @timing-function;\n}\n.animation-delay(@delay) {\n -webkit-animation-delay: @delay;\n animation-delay: @delay;\n}\n.animation-iteration-count(@iteration-count) {\n -webkit-animation-iteration-count: @iteration-count;\n animation-iteration-count: @iteration-count;\n}\n.animation-direction(@direction) {\n -webkit-animation-direction: @direction;\n animation-direction: @direction;\n}\n.animation-fill-mode(@fill-mode) {\n -webkit-animation-fill-mode: @fill-mode;\n animation-fill-mode: @fill-mode;\n}\n\n// Backface visibility\n// Prevent browsers from flickering when using CSS 3D transforms.\n// Default value is `visible`, but can be changed to `hidden`\n\n.backface-visibility(@visibility){\n -webkit-backface-visibility: @visibility;\n -moz-backface-visibility: @visibility;\n backface-visibility: @visibility;\n}\n\n// Drop shadows\n//\n// Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's\n// supported browsers that have box shadow capabilities now support it.\n\n.box-shadow(@shadow) {\n -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1\n box-shadow: @shadow;\n}\n\n// Box sizing\n.box-sizing(@boxmodel) {\n -webkit-box-sizing: @boxmodel;\n -moz-box-sizing: @boxmodel;\n box-sizing: @boxmodel;\n}\n\n// CSS3 Content Columns\n.content-columns(@column-count; @column-gap: @grid-gutter-width) {\n -webkit-column-count: @column-count;\n -moz-column-count: @column-count;\n column-count: @column-count;\n -webkit-column-gap: @column-gap;\n -moz-column-gap: @column-gap;\n column-gap: @column-gap;\n}\n\n// Optional hyphenation\n.hyphens(@mode: auto) {\n word-wrap: break-word;\n -webkit-hyphens: @mode;\n -moz-hyphens: @mode;\n -ms-hyphens: @mode; // IE10+\n -o-hyphens: @mode;\n hyphens: @mode;\n}\n\n// Placeholder text\n.placeholder(@color: @input-color-placeholder) {\n // Firefox\n &::-moz-placeholder {\n color: @color;\n opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526\n }\n &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+\n &::-webkit-input-placeholder { color: @color; } // Safari and Chrome\n}\n\n// Transformations\n.scale(@ratio) {\n -webkit-transform: scale(@ratio);\n -ms-transform: scale(@ratio); // IE9 only\n -o-transform: scale(@ratio);\n transform: scale(@ratio);\n}\n.scale(@ratioX; @ratioY) {\n -webkit-transform: scale(@ratioX, @ratioY);\n -ms-transform: scale(@ratioX, @ratioY); // IE9 only\n -o-transform: scale(@ratioX, @ratioY);\n transform: scale(@ratioX, @ratioY);\n}\n.scaleX(@ratio) {\n -webkit-transform: scaleX(@ratio);\n -ms-transform: scaleX(@ratio); // IE9 only\n -o-transform: scaleX(@ratio);\n transform: scaleX(@ratio);\n}\n.scaleY(@ratio) {\n -webkit-transform: scaleY(@ratio);\n -ms-transform: scaleY(@ratio); // IE9 only\n -o-transform: scaleY(@ratio);\n transform: scaleY(@ratio);\n}\n.skew(@x; @y) {\n -webkit-transform: skewX(@x) skewY(@y);\n -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+\n -o-transform: skewX(@x) skewY(@y);\n transform: skewX(@x) skewY(@y);\n}\n.translate(@x; @y) {\n -webkit-transform: translate(@x, @y);\n -ms-transform: translate(@x, @y); // IE9 only\n -o-transform: translate(@x, @y);\n transform: translate(@x, @y);\n}\n.translate3d(@x; @y; @z) {\n -webkit-transform: translate3d(@x, @y, @z);\n transform: translate3d(@x, @y, @z);\n}\n.rotate(@degrees) {\n -webkit-transform: rotate(@degrees);\n -ms-transform: rotate(@degrees); // IE9 only\n -o-transform: rotate(@degrees);\n transform: rotate(@degrees);\n}\n.rotateX(@degrees) {\n -webkit-transform: rotateX(@degrees);\n -ms-transform: rotateX(@degrees); // IE9 only\n -o-transform: rotateX(@degrees);\n transform: rotateX(@degrees);\n}\n.rotateY(@degrees) {\n -webkit-transform: rotateY(@degrees);\n -ms-transform: rotateY(@degrees); // IE9 only\n -o-transform: rotateY(@degrees);\n transform: rotateY(@degrees);\n}\n.perspective(@perspective) {\n -webkit-perspective: @perspective;\n -moz-perspective: @perspective;\n perspective: @perspective;\n}\n.perspective-origin(@perspective) {\n -webkit-perspective-origin: @perspective;\n -moz-perspective-origin: @perspective;\n perspective-origin: @perspective;\n}\n.transform-origin(@origin) {\n -webkit-transform-origin: @origin;\n -moz-transform-origin: @origin;\n -ms-transform-origin: @origin; // IE9 only\n transform-origin: @origin;\n}\n\n\n// Transitions\n\n.transition(@transition) {\n -webkit-transition: @transition;\n -o-transition: @transition;\n transition: @transition;\n}\n.transition-property(@transition-property) {\n -webkit-transition-property: @transition-property;\n transition-property: @transition-property;\n}\n.transition-delay(@transition-delay) {\n -webkit-transition-delay: @transition-delay;\n transition-delay: @transition-delay;\n}\n.transition-duration(@transition-duration) {\n -webkit-transition-duration: @transition-duration;\n transition-duration: @transition-duration;\n}\n.transition-timing-function(@timing-function) {\n -webkit-transition-timing-function: @timing-function;\n transition-timing-function: @timing-function;\n}\n.transition-transform(@transition) {\n -webkit-transition: -webkit-transform @transition;\n -moz-transition: -moz-transform @transition;\n -o-transition: -o-transform @transition;\n transition: transform @transition;\n}\n\n\n// User select\n// For selecting text on the page\n\n.user-select(@select) {\n -webkit-user-select: @select;\n -moz-user-select: @select;\n -ms-user-select: @select; // IE10+\n user-select: @select;\n}\n","// WebKit-style focus\n\n.tab-focus() {\n // Default\n outline: thin dotted;\n // WebKit\n outline: 5px auto -webkit-focus-ring-color;\n outline-offset: -2px;\n}\n","// Image Mixins\n// - Responsive image\n// - Retina image\n\n\n// Responsive image\n//\n// Keep images from scaling beyond the width of their parents.\n.img-responsive(@display: block) {\n display: @display;\n max-width: 100%; // Part 1: Set a maximum relative to the parent\n height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching\n}\n\n\n// Retina image\n//\n// Short retina mixin for setting background-image and -size. Note that the\n// spelling of `min--moz-device-pixel-ratio` is intentional.\n.img-retina(@file-1x; @file-2x; @width-1x; @height-1x) {\n background-image: url(\"@{file-1x}\");\n\n @media\n only screen and (-webkit-min-device-pixel-ratio: 2),\n only screen and ( min--moz-device-pixel-ratio: 2),\n only screen and ( -o-min-device-pixel-ratio: 2/1),\n only screen and ( min-device-pixel-ratio: 2),\n only screen and ( min-resolution: 192dpi),\n only screen and ( min-resolution: 2dppx) {\n background-image: url(\"@{file-2x}\");\n background-size: @width-1x @height-1x;\n }\n}\n","//\n// Typography\n// --------------------------------------------------\n\n\n// Headings\n// -------------------------\n\nh1, h2, h3, h4, h5, h6,\n.h1, .h2, .h3, .h4, .h5, .h6 {\n font-family: @headings-font-family;\n font-weight: @headings-font-weight;\n line-height: @headings-line-height;\n color: @headings-color;\n\n small,\n .small {\n font-weight: normal;\n line-height: 1;\n color: @headings-small-color;\n }\n}\n\nh1, .h1,\nh2, .h2,\nh3, .h3 {\n margin-top: @line-height-computed;\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 65%;\n }\n}\nh4, .h4,\nh5, .h5,\nh6, .h6 {\n margin-top: (@line-height-computed / 2);\n margin-bottom: (@line-height-computed / 2);\n\n small,\n .small {\n font-size: 75%;\n }\n}\n\nh1, .h1 { font-size: @font-size-h1; }\nh2, .h2 { font-size: @font-size-h2; }\nh3, .h3 { font-size: @font-size-h3; }\nh4, .h4 { font-size: @font-size-h4; }\nh5, .h5 { font-size: @font-size-h5; }\nh6, .h6 { font-size: @font-size-h6; }\n\n\n// Body text\n// -------------------------\n\np {\n margin: 0 0 (@line-height-computed / 2);\n}\n\n.lead {\n margin-bottom: @line-height-computed;\n font-size: floor((@font-size-base * 1.15));\n font-weight: 300;\n line-height: 1.4;\n\n @media (min-width: @screen-sm-min) {\n font-size: (@font-size-base * 1.5);\n }\n}\n\n\n// Emphasis & misc\n// -------------------------\n\n// Ex: (12px small font / 14px base font) * 100% = about 85%\nsmall,\n.small {\n font-size: floor((100% * @font-size-small / @font-size-base));\n}\n\nmark,\n.mark {\n background-color: @state-warning-bg;\n padding: .2em;\n}\n\n// Alignment\n.text-left { text-align: left; }\n.text-right { text-align: right; }\n.text-center { text-align: center; }\n.text-justify { text-align: justify; }\n.text-nowrap { white-space: nowrap; }\n\n// Transformation\n.text-lowercase { text-transform: lowercase; }\n.text-uppercase { text-transform: uppercase; }\n.text-capitalize { text-transform: capitalize; }\n\n// Contextual colors\n.text-muted {\n color: @text-muted;\n}\n.text-primary {\n .text-emphasis-variant(@brand-primary);\n}\n.text-success {\n .text-emphasis-variant(@state-success-text);\n}\n.text-info {\n .text-emphasis-variant(@state-info-text);\n}\n.text-warning {\n .text-emphasis-variant(@state-warning-text);\n}\n.text-danger {\n .text-emphasis-variant(@state-danger-text);\n}\n\n// Contextual backgrounds\n// For now we'll leave these alongside the text classes until v4 when we can\n// safely shift things around (per SemVer rules).\n.bg-primary {\n // Given the contrast here, this is the only class to have its color inverted\n // automatically.\n color: #fff;\n .bg-variant(@brand-primary);\n}\n.bg-success {\n .bg-variant(@state-success-bg);\n}\n.bg-info {\n .bg-variant(@state-info-bg);\n}\n.bg-warning {\n .bg-variant(@state-warning-bg);\n}\n.bg-danger {\n .bg-variant(@state-danger-bg);\n}\n\n\n// Page header\n// -------------------------\n\n.page-header {\n padding-bottom: ((@line-height-computed / 2) - 1);\n margin: (@line-height-computed * 2) 0 @line-height-computed;\n border-bottom: 1px solid @page-header-border-color;\n}\n\n\n// Lists\n// -------------------------\n\n// Unordered and Ordered lists\nul,\nol {\n margin-top: 0;\n margin-bottom: (@line-height-computed / 2);\n ul,\n ol {\n margin-bottom: 0;\n }\n}\n\n// List options\n\n// Unstyled keeps list items block level, just removes default browser padding and list-style\n.list-unstyled {\n padding-left: 0;\n list-style: none;\n}\n\n// Inline turns list items into inline-block\n.list-inline {\n .list-unstyled();\n margin-left: -5px;\n\n > li {\n display: inline-block;\n padding-left: 5px;\n padding-right: 5px;\n }\n}\n\n// Description Lists\ndl {\n margin-top: 0; // Remove browser default\n margin-bottom: @line-height-computed;\n}\ndt,\ndd {\n line-height: @line-height-base;\n}\ndt {\n font-weight: bold;\n}\ndd {\n margin-left: 0; // Undo browser default\n}\n\n// Horizontal description lists\n//\n// Defaults to being stacked without any of the below styles applied, until the\n// grid breakpoint is reached (default of ~768px).\n\n.dl-horizontal {\n dd {\n &:extend(.clearfix all); // Clear the floated `dt` if an empty `dd` is present\n }\n\n @media (min-width: @grid-float-breakpoint) {\n dt {\n float: left;\n width: (@dl-horizontal-offset - 20);\n clear: left;\n text-align: right;\n .text-overflow();\n }\n dd {\n margin-left: @dl-horizontal-offset;\n }\n }\n}\n\n\n// Misc\n// -------------------------\n\n// Abbreviations and acronyms\nabbr[title],\n// Add data-* attribute to help out our tooltip plugin, per https://github.com/twbs/bootstrap/issues/5257\nabbr[data-original-title] {\n cursor: help;\n border-bottom: 1px dotted @abbr-border-color;\n}\n.initialism {\n font-size: 90%;\n .text-uppercase();\n}\n\n// Blockquotes\nblockquote {\n padding: (@line-height-computed / 2) @line-height-computed;\n margin: 0 0 @line-height-computed;\n font-size: @blockquote-font-size;\n border-left: 5px solid @blockquote-border-color;\n\n p,\n ul,\n ol {\n &:last-child {\n margin-bottom: 0;\n }\n }\n\n // Note: Deprecated small and .small as of v3.1.0\n // Context: https://github.com/twbs/bootstrap/issues/11660\n footer,\n small,\n .small {\n display: block;\n font-size: 80%; // back to default font-size\n line-height: @line-height-base;\n color: @blockquote-small-color;\n\n &:before {\n content: '\\2014 \\00A0'; // em dash, nbsp\n }\n }\n}\n\n// Opposite alignment of blockquote\n//\n// Heads up: `blockquote.pull-right` has been deprecated as of v3.1.0.\n.blockquote-reverse,\nblockquote.pull-right {\n padding-right: 15px;\n padding-left: 0;\n border-right: 5px solid @blockquote-border-color;\n border-left: 0;\n text-align: right;\n\n // Account for citation\n footer,\n small,\n .small {\n &:before { content: ''; }\n &:after {\n content: '\\00A0 \\2014'; // nbsp, em dash\n }\n }\n}\n\n// Addresses\naddress {\n margin-bottom: @line-height-computed;\n font-style: normal;\n line-height: @line-height-base;\n}\n","// Typography\n\n.text-emphasis-variant(@color) {\n color: @color;\n a&:hover {\n color: darken(@color, 10%);\n }\n}\n","// Contextual backgrounds\n\n.bg-variant(@color) {\n background-color: @color;\n a&:hover {\n background-color: darken(@color, 10%);\n }\n}\n","// Text overflow\n// Requires inline-block or block for proper styling\n\n.text-overflow() {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n","//\n// Code (inline and block)\n// --------------------------------------------------\n\n\n// Inline and block code styles\ncode,\nkbd,\npre,\nsamp {\n font-family: @font-family-monospace;\n}\n\n// Inline code\ncode {\n padding: 2px 4px;\n font-size: 90%;\n color: @code-color;\n background-color: @code-bg;\n border-radius: @border-radius-base;\n}\n\n// User input typically entered via keyboard\nkbd {\n padding: 2px 4px;\n font-size: 90%;\n color: @kbd-color;\n background-color: @kbd-bg;\n border-radius: @border-radius-small;\n box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);\n\n kbd {\n padding: 0;\n font-size: 100%;\n font-weight: bold;\n box-shadow: none;\n }\n}\n\n// Blocks of code\npre {\n display: block;\n padding: ((@line-height-computed - 1) / 2);\n margin: 0 0 (@line-height-computed / 2);\n font-size: (@font-size-base - 1); // 14px to 13px\n line-height: @line-height-base;\n word-break: break-all;\n word-wrap: break-word;\n color: @pre-color;\n background-color: @pre-bg;\n border: 1px solid @pre-border-color;\n border-radius: @border-radius-base;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n padding: 0;\n font-size: inherit;\n color: inherit;\n white-space: pre-wrap;\n background-color: transparent;\n border-radius: 0;\n }\n}\n\n// Enable scrollable blocks of code\n.pre-scrollable {\n max-height: @pre-scrollable-max-height;\n overflow-y: scroll;\n}\n","//\n// Grid system\n// --------------------------------------------------\n\n\n// Container widths\n//\n// Set the container width, and override it for fixed navbars in media queries.\n\n.container {\n .container-fixed();\n\n @media (min-width: @screen-sm-min) {\n width: @container-sm;\n }\n @media (min-width: @screen-md-min) {\n width: @container-md;\n }\n @media (min-width: @screen-lg-min) {\n width: @container-lg;\n }\n}\n\n\n// Fluid container\n//\n// Utilizes the mixin meant for fixed width containers, but without any defined\n// width for fluid, full width layouts.\n\n.container-fluid {\n .container-fixed();\n}\n\n\n// Row\n//\n// Rows contain and clear the floats of your columns.\n\n.row {\n .make-row();\n}\n\n\n// Columns\n//\n// Common styles for small and large grid columns\n\n.make-grid-columns();\n\n\n// Extra small grid\n//\n// Columns, offsets, pushes, and pulls for extra small devices like\n// smartphones.\n\n.make-grid(xs);\n\n\n// Small grid\n//\n// Columns, offsets, pushes, and pulls for the small device range, from phones\n// to tablets.\n\n@media (min-width: @screen-sm-min) {\n .make-grid(sm);\n}\n\n\n// Medium grid\n//\n// Columns, offsets, pushes, and pulls for the desktop device range.\n\n@media (min-width: @screen-md-min) {\n .make-grid(md);\n}\n\n\n// Large grid\n//\n// Columns, offsets, pushes, and pulls for the large desktop device range.\n\n@media (min-width: @screen-lg-min) {\n .make-grid(lg);\n}\n","// Grid system\n//\n// Generate semantic grid columns with these mixins.\n\n// Centered container element\n.container-fixed(@gutter: @grid-gutter-width) {\n margin-right: auto;\n margin-left: auto;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n &:extend(.clearfix all);\n}\n\n// Creates a wrapper for a series of columns\n.make-row(@gutter: @grid-gutter-width) {\n margin-left: (@gutter / -2);\n margin-right: (@gutter / -2);\n &:extend(.clearfix all);\n}\n\n// Generate the extra small columns\n.make-xs-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n float: left;\n width: percentage((@columns / @grid-columns));\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n}\n.make-xs-column-offset(@columns) {\n margin-left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-push(@columns) {\n left: percentage((@columns / @grid-columns));\n}\n.make-xs-column-pull(@columns) {\n right: percentage((@columns / @grid-columns));\n}\n\n// Generate the small columns\n.make-sm-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-sm-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-offset(@columns) {\n @media (min-width: @screen-sm-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-push(@columns) {\n @media (min-width: @screen-sm-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-sm-column-pull(@columns) {\n @media (min-width: @screen-sm-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the medium columns\n.make-md-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-md-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-offset(@columns) {\n @media (min-width: @screen-md-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-push(@columns) {\n @media (min-width: @screen-md-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-md-column-pull(@columns) {\n @media (min-width: @screen-md-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n\n// Generate the large columns\n.make-lg-column(@columns; @gutter: @grid-gutter-width) {\n position: relative;\n min-height: 1px;\n padding-left: (@gutter / 2);\n padding-right: (@gutter / 2);\n\n @media (min-width: @screen-lg-min) {\n float: left;\n width: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-offset(@columns) {\n @media (min-width: @screen-lg-min) {\n margin-left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-push(@columns) {\n @media (min-width: @screen-lg-min) {\n left: percentage((@columns / @grid-columns));\n }\n}\n.make-lg-column-pull(@columns) {\n @media (min-width: @screen-lg-min) {\n right: percentage((@columns / @grid-columns));\n }\n}\n","// Framework grid generation\n//\n// Used only by Bootstrap to generate the correct number of grid classes given\n// any value of `@grid-columns`.\n\n.make-grid-columns() {\n // Common styles for all sizes of grid columns, widths 1-12\n .col(@index) { // initial\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general; \"=<\" isn't a typo\n @item: ~\".col-xs-@{index}, .col-sm-@{index}, .col-md-@{index}, .col-lg-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n position: relative;\n // Prevent columns from collapsing when empty\n min-height: 1px;\n // Inner gutter via padding\n padding-left: (@grid-gutter-width / 2);\n padding-right: (@grid-gutter-width / 2);\n }\n }\n .col(1); // kickstart it\n}\n\n.float-grid-columns(@class) {\n .col(@index) { // initial\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), @item);\n }\n .col(@index, @list) when (@index =< @grid-columns) { // general\n @item: ~\".col-@{class}-@{index}\";\n .col((@index + 1), ~\"@{list}, @{item}\");\n }\n .col(@index, @list) when (@index > @grid-columns) { // terminal\n @{list} {\n float: left;\n }\n }\n .col(1); // kickstart it\n}\n\n.calc-grid-column(@index, @class, @type) when (@type = width) and (@index > 0) {\n .col-@{class}-@{index} {\n width: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index > 0) {\n .col-@{class}-push-@{index} {\n left: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = push) and (@index = 0) {\n .col-@{class}-push-0 {\n left: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index > 0) {\n .col-@{class}-pull-@{index} {\n right: percentage((@index / @grid-columns));\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = pull) and (@index = 0) {\n .col-@{class}-pull-0 {\n right: auto;\n }\n}\n.calc-grid-column(@index, @class, @type) when (@type = offset) {\n .col-@{class}-offset-@{index} {\n margin-left: percentage((@index / @grid-columns));\n }\n}\n\n// Basic looping in LESS\n.loop-grid-columns(@index, @class, @type) when (@index >= 0) {\n .calc-grid-column(@index, @class, @type);\n // next iteration\n .loop-grid-columns((@index - 1), @class, @type);\n}\n\n// Create grid for specific class\n.make-grid(@class) {\n .float-grid-columns(@class);\n .loop-grid-columns(@grid-columns, @class, width);\n .loop-grid-columns(@grid-columns, @class, pull);\n .loop-grid-columns(@grid-columns, @class, push);\n .loop-grid-columns(@grid-columns, @class, offset);\n}\n","//\n// Tables\n// --------------------------------------------------\n\n\ntable {\n background-color: @table-bg;\n}\ncaption {\n padding-top: @table-cell-padding;\n padding-bottom: @table-cell-padding;\n color: @text-muted;\n text-align: left;\n}\nth {\n text-align: left;\n}\n\n\n// Baseline styles\n\n.table {\n width: 100%;\n max-width: 100%;\n margin-bottom: @line-height-computed;\n // Cells\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-cell-padding;\n line-height: @line-height-base;\n vertical-align: top;\n border-top: 1px solid @table-border-color;\n }\n }\n }\n // Bottom align for column headings\n > thead > tr > th {\n vertical-align: bottom;\n border-bottom: 2px solid @table-border-color;\n }\n // Remove top border from thead by default\n > caption + thead,\n > colgroup + thead,\n > thead:first-child {\n > tr:first-child {\n > th,\n > td {\n border-top: 0;\n }\n }\n }\n // Account for multiple tbody instances\n > tbody + tbody {\n border-top: 2px solid @table-border-color;\n }\n\n // Nesting\n .table {\n background-color: @body-bg;\n }\n}\n\n\n// Condensed table w/ half padding\n\n.table-condensed {\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n padding: @table-condensed-cell-padding;\n }\n }\n }\n}\n\n\n// Bordered version\n//\n// Add borders all around the table and between all the columns.\n\n.table-bordered {\n border: 1px solid @table-border-color;\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n border: 1px solid @table-border-color;\n }\n }\n }\n > thead > tr {\n > th,\n > td {\n border-bottom-width: 2px;\n }\n }\n}\n\n\n// Zebra-striping\n//\n// Default zebra-stripe styles (alternating gray and transparent backgrounds)\n\n.table-striped {\n > tbody > tr:nth-of-type(odd) {\n background-color: @table-bg-accent;\n }\n}\n\n\n// Hover effect\n//\n// Placed here since it has to come after the potential zebra striping\n\n.table-hover {\n > tbody > tr:hover {\n background-color: @table-bg-hover;\n }\n}\n\n\n// Table cell sizing\n//\n// Reset default table behavior\n\ntable col[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-column;\n}\ntable {\n td,\n th {\n &[class*=\"col-\"] {\n position: static; // Prevent border hiding in Firefox and IE9-11 (see https://github.com/twbs/bootstrap/issues/11623)\n float: none;\n display: table-cell;\n }\n }\n}\n\n\n// Table backgrounds\n//\n// Exact selectors below required to override `.table-striped` and prevent\n// inheritance to nested tables.\n\n// Generate the contextual variants\n.table-row-variant(active; @table-bg-active);\n.table-row-variant(success; @state-success-bg);\n.table-row-variant(info; @state-info-bg);\n.table-row-variant(warning; @state-warning-bg);\n.table-row-variant(danger; @state-danger-bg);\n\n\n// Responsive tables\n//\n// Wrap your tables in `.table-responsive` and we'll make them mobile friendly\n// by enabling horizontal scrolling. Only applies <768px. Everything above that\n// will display normally.\n\n.table-responsive {\n overflow-x: auto;\n min-height: 0.01%; // Workaround for IE9 bug (see https://github.com/twbs/bootstrap/issues/14837)\n\n @media screen and (max-width: @screen-xs-max) {\n width: 100%;\n margin-bottom: (@line-height-computed * 0.75);\n overflow-y: hidden;\n -ms-overflow-style: -ms-autohiding-scrollbar;\n border: 1px solid @table-border-color;\n\n // Tighten up spacing\n > .table {\n margin-bottom: 0;\n\n // Ensure the content doesn't wrap\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th,\n > td {\n white-space: nowrap;\n }\n }\n }\n }\n\n // Special overrides for the bordered tables\n > .table-bordered {\n border: 0;\n\n // Nuke the appropriate borders so that the parent can handle them\n > thead,\n > tbody,\n > tfoot {\n > tr {\n > th:first-child,\n > td:first-child {\n border-left: 0;\n }\n > th:last-child,\n > td:last-child {\n border-right: 0;\n }\n }\n }\n\n // Only nuke the last row's bottom-border in `tbody` and `tfoot` since\n // chances are there will be only one `tr` in a `thead` and that would\n // remove the border altogether.\n > tbody,\n > tfoot {\n > tr:last-child {\n > th,\n > td {\n border-bottom: 0;\n }\n }\n }\n\n }\n }\n}\n","// Tables\n\n.table-row-variant(@state; @background) {\n // Exact selectors below required to override `.table-striped` and prevent\n // inheritance to nested tables.\n .table > thead > tr,\n .table > tbody > tr,\n .table > tfoot > tr {\n > td.@{state},\n > th.@{state},\n &.@{state} > td,\n &.@{state} > th {\n background-color: @background;\n }\n }\n\n // Hover states for `.table-hover`\n // Note: this is not available for cells or rows within `thead` or `tfoot`.\n .table-hover > tbody > tr {\n > td.@{state}:hover,\n > th.@{state}:hover,\n &.@{state}:hover > td,\n &:hover > .@{state},\n &.@{state}:hover > th {\n background-color: darken(@background, 5%);\n }\n }\n}\n","//\n// Forms\n// --------------------------------------------------\n\n\n// Normalize non-controls\n//\n// Restyle and baseline non-control form elements.\n\nfieldset {\n padding: 0;\n margin: 0;\n border: 0;\n // Chrome and Firefox set a `min-width: min-content;` on fieldsets,\n // so we reset that to ensure it behaves more like a standard block element.\n // See https://github.com/twbs/bootstrap/issues/12359.\n min-width: 0;\n}\n\nlegend {\n display: block;\n width: 100%;\n padding: 0;\n margin-bottom: @line-height-computed;\n font-size: (@font-size-base * 1.5);\n line-height: inherit;\n color: @legend-color;\n border: 0;\n border-bottom: 1px solid @legend-border-color;\n}\n\nlabel {\n display: inline-block;\n max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)\n margin-bottom: 5px;\n font-weight: bold;\n}\n\n\n// Normalize form controls\n//\n// While most of our form styles require extra classes, some basic normalization\n// is required to ensure optimum display with or without those classes to better\n// address browser inconsistencies.\n\n// Override content-box in Normalize (* isn't specific enough)\ninput[type=\"search\"] {\n .box-sizing(border-box);\n}\n\n// Position radios and checkboxes better\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n margin: 4px 0 0;\n margin-top: 1px \\9; // IE8-9\n line-height: normal;\n}\n\n// Set the height of file controls to match text inputs\ninput[type=\"file\"] {\n display: block;\n}\n\n// Make range inputs behave like textual form controls\ninput[type=\"range\"] {\n display: block;\n width: 100%;\n}\n\n// Make multiple select elements height not fixed\nselect[multiple],\nselect[size] {\n height: auto;\n}\n\n// Focus for file, radio, and checkbox\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n .tab-focus();\n}\n\n// Adjust output element\noutput {\n display: block;\n padding-top: (@padding-base-vertical + 1);\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n}\n\n\n// Common form controls\n//\n// Shared size and type resets for form controls. Apply `.form-control` to any\n// of the following form controls:\n//\n// select\n// textarea\n// input[type=\"text\"]\n// input[type=\"password\"]\n// input[type=\"datetime\"]\n// input[type=\"datetime-local\"]\n// input[type=\"date\"]\n// input[type=\"month\"]\n// input[type=\"time\"]\n// input[type=\"week\"]\n// input[type=\"number\"]\n// input[type=\"email\"]\n// input[type=\"url\"]\n// input[type=\"search\"]\n// input[type=\"tel\"]\n// input[type=\"color\"]\n\n.form-control {\n display: block;\n width: 100%;\n height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)\n padding: @padding-base-vertical @padding-base-horizontal;\n font-size: @font-size-base;\n line-height: @line-height-base;\n color: @input-color;\n background-color: @input-bg;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid @input-border;\n border-radius: @input-border-radius; // Note: This has no effect on s in CSS.\n .box-shadow(inset 0 1px 1px rgba(0,0,0,.075));\n .transition(~\"border-color ease-in-out .15s, box-shadow ease-in-out .15s\");\n\n // Customize the `:focus` state to imitate native WebKit styles.\n .form-control-focus();\n\n // Placeholder\n .placeholder();\n\n // Disabled and read-only inputs\n //\n // HTML5 says that controls under a fieldset > legend:first-child won't be\n // disabled if the fieldset is disabled. Due to implementation difficulty, we\n // don't honor that edge case; we style them as disabled anyway.\n &[disabled],\n &[readonly],\n fieldset[disabled] & {\n background-color: @input-bg-disabled;\n opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655\n }\n\n &[disabled],\n fieldset[disabled] & {\n cursor: @cursor-disabled;\n }\n\n // Reset height for `textarea`s\n textarea& {\n height: auto;\n }\n}\n\n\n// Search inputs in iOS\n//\n// This overrides the extra rounded corners on search inputs in iOS so that our\n// `.form-control` class can properly style them. Note that this cannot simply\n// be added to `.form-control` as it's not specific enough. For details, see\n// https://github.com/twbs/bootstrap/issues/11586.\n\ninput[type=\"search\"] {\n -webkit-appearance: none;\n}\n\n\n// Special styles for iOS temporal inputs\n//\n// In Mobile Safari, setting `display: block` on temporal inputs causes the\n// text within the input to become vertically misaligned. As a workaround, we\n// set a pixel line-height that matches the given height of the input, but only\n// for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n input[type=\"date\"],\n input[type=\"time\"],\n input[type=\"datetime-local\"],\n input[type=\"month\"] {\n line-height: @input-height-base;\n\n &.input-sm,\n .input-group-sm & {\n line-height: @input-height-small;\n }\n\n &.input-lg,\n .input-group-lg & {\n line-height: @input-height-large;\n }\n }\n}\n\n\n// Form groups\n//\n// Designed to help with the organization and spacing of vertical forms. For\n// horizontal forms, use the predefined grid classes.\n\n.form-group {\n margin-bottom: @form-group-margin-bottom;\n}\n\n\n// Checkboxes and radios\n//\n// Indent the labels to position radios/checkboxes as hanging controls.\n\n.radio,\n.checkbox {\n position: relative;\n display: block;\n margin-top: 10px;\n margin-bottom: 10px;\n\n label {\n min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text\n padding-left: 20px;\n margin-bottom: 0;\n font-weight: normal;\n cursor: pointer;\n }\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n position: absolute;\n margin-left: -20px;\n margin-top: 4px \\9;\n}\n\n.radio + .radio,\n.checkbox + .checkbox {\n margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing\n}\n\n// Radios and checkboxes on same line\n.radio-inline,\n.checkbox-inline {\n position: relative;\n display: inline-block;\n padding-left: 20px;\n margin-bottom: 0;\n vertical-align: middle;\n font-weight: normal;\n cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n margin-top: 0;\n margin-left: 10px; // space out consecutive inline controls\n}\n\n// Apply same disabled cursor tweak as for inputs\n// Some special care is needed because