partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit 0045e747e0c861048775d678a92465ab77503c60
parent d369a9869347c534c2dc64b917bd6316bf69af3a
Author: Felicitus <felicitus@felicitus.org>
Date:   Sun, 18 Dec 2011 00:39:13 +0100

Removed frontend directory

Diffstat:
Dfrontend/css/PartKeepr.css | 120-------------------------------------------------------------------------------
Dfrontend/css/partkeepr-theme.css | 1-
Dfrontend/favicon.ico | 0
Dfrontend/file.php | 68--------------------------------------------------------------------
Dfrontend/image.php | 118-------------------------------------------------------------------------------
Dfrontend/index.php | 89-------------------------------------------------------------------------------
Dfrontend/js/Components/CategoryEditor/CategoryEditorForm.js | 19-------------------
Dfrontend/js/Components/CategoryEditor/CategoryEditorTree.js | 203-------------------------------------------------------------------------------
Dfrontend/js/Components/CategoryEditor/CategoryEditorWindow.js | 67-------------------------------------------------------------------
Dfrontend/js/Components/CategoryStore.js | 29-----------------------------
Dfrontend/js/Components/CategoryTree.js | 110-------------------------------------------------------------------------------
Dfrontend/js/Components/ConnectionButton.js | 17-----------------
Dfrontend/js/Components/Distributor/DistributorEditor.js | 34----------------------------------
Dfrontend/js/Components/Distributor/DistributorEditorComponent.js | 19-------------------
Dfrontend/js/Components/Distributor/DistributorGrid.js | 13-------------
Dfrontend/js/Components/Editor/Editor.js | 120-------------------------------------------------------------------------------
Dfrontend/js/Components/Editor/EditorComponent.js | 202-------------------------------------------------------------------------------
Dfrontend/js/Components/Editor/EditorGrid.js | 165-------------------------------------------------------------------------------
Dfrontend/js/Components/Footprint/FootprintAttachmentGrid.js | 7-------
Dfrontend/js/Components/Footprint/FootprintEditor.js | 66------------------------------------------------------------------
Dfrontend/js/Components/Footprint/FootprintEditorComponent.js | 40----------------------------------------
Dfrontend/js/Components/Footprint/FootprintTree.js | 187-------------------------------------------------------------------------------
Dfrontend/js/Components/Manufacturer/ManufacturerEditor.js | 130-------------------------------------------------------------------------------
Dfrontend/js/Components/Manufacturer/ManufacturerEditorComponent.js | 19-------------------
Dfrontend/js/Components/Manufacturer/ManufacturerGrid.js | 12------------
Dfrontend/js/Components/Menu.js | 7-------
Dfrontend/js/Components/MenuBar.js | 210-------------------------------------------------------------------------------
Dfrontend/js/Components/MessageLog.js | 23-----------------------
Dfrontend/js/Components/Part/Editor/PartAttachmentGrid.js | 7-------
Dfrontend/js/Components/Part/Editor/PartDistributorGrid.js | 110-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/Editor/PartEditor.js | 231-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/Editor/PartEditorWindow.js | 96-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/Editor/PartManufacturerGrid.js | 100-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/Editor/PartParameterGrid.js | 150-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/PartCategoryTree.js | 54------------------------------------------------------
Dfrontend/js/Components/Part/PartDisplay.js | 190-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/PartFilterPanel.js | 164-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/PartStockHistory.js | 137-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/PartStockWindow.js | 153-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/PartsGrid.js | 158-------------------------------------------------------------------------------
Dfrontend/js/Components/Part/PartsManager.js | 265-------------------------------------------------------------------------------
Dfrontend/js/Components/PartUnit/PartUnitEditor.js | 14--------------
Dfrontend/js/Components/PartUnit/PartUnitEditorComponent.js | 21---------------------
Dfrontend/js/Components/PartUnit/PartUnitGrid.js | 52----------------------------------------------------
Dfrontend/js/Components/Statistics/CurrentStatisticsPanel.js | 93-------------------------------------------------------------------------------
Dfrontend/js/Components/Statistics/StatisticsChart.js | 134-------------------------------------------------------------------------------
Dfrontend/js/Components/Statistics/StatisticsChartPanel.js | 66------------------------------------------------------------------
Dfrontend/js/Components/Statusbar.js | 67-------------------------------------------------------------------
Dfrontend/js/Components/StorageLocation/StorageLocationEditor.js | 80-------------------------------------------------------------------------------
Dfrontend/js/Components/StorageLocation/StorageLocationEditorComponent.js | 19-------------------
Dfrontend/js/Components/StorageLocation/StorageLocationGrid.js | 46----------------------------------------------
Dfrontend/js/Components/StorageLocation/StorageLocationMultiAddDialog.js | 207-------------------------------------------------------------------------------
Dfrontend/js/Components/StorageLocation/StorageLocationMultiAddWindow.js | 84-------------------------------------------------------------------------------
Dfrontend/js/Components/SystemInformation/SystemInformationGrid.js | 102-------------------------------------------------------------------------------
Dfrontend/js/Components/TimeDisplay.js | 29-----------------------------
Dfrontend/js/Components/TipOfTheDay/TipOfTheDayWindow.js | 319-------------------------------------------------------------------------------
Dfrontend/js/Components/Unit/UnitEditor.js | 67-------------------------------------------------------------------
Dfrontend/js/Components/Unit/UnitEditorComponent.js | 21---------------------
Dfrontend/js/Components/Unit/UnitGrid.js | 16----------------
Dfrontend/js/Components/User/TipOfTheDayPreferences.js | 49-------------------------------------------------
Dfrontend/js/Components/User/UserEditor.js | 42------------------------------------------
Dfrontend/js/Components/User/UserEditorComponent.js | 23-----------------------
Dfrontend/js/Components/User/UserGrid.js | 12------------
Dfrontend/js/Components/User/UserPasswordChangePanel.js | 76----------------------------------------------------------------------------
Dfrontend/js/Components/User/UserPreferences.js | 15---------------
Dfrontend/js/Components/Widgets/AttachmentGrid.js | 179-------------------------------------------------------------------------------
Dfrontend/js/Components/Widgets/CategoryComboBox.js | 132-------------------------------------------------------------------------------
Dfrontend/js/Components/Widgets/DistributorComboBox.js | 27---------------------------
Dfrontend/js/Components/Widgets/FootprintComboBox.js | 27---------------------------
Dfrontend/js/Components/Widgets/ManufacturerComboBox.js | 27---------------------------
Dfrontend/js/Components/Widgets/PartParameterComboBox.js | 42------------------------------------------
Dfrontend/js/Components/Widgets/PartUnitComboBox.js | 27---------------------------
Dfrontend/js/Components/Widgets/RemoteImageField.js | 113-------------------------------------------------------------------------------
Dfrontend/js/Components/Widgets/RemoteImageFieldLayout.js | 34----------------------------------
Dfrontend/js/Components/Widgets/ResistorCalculator.js | 30------------------------------
Dfrontend/js/Components/Widgets/ResistorDisplay.js | 25-------------------------
Dfrontend/js/Components/Widgets/SiUnitField.js | 391-------------------------------------------------------------------------------
Dfrontend/js/Components/Widgets/SiUnitList.js | 8--------
Dfrontend/js/Components/Widgets/StorageLocationComboBox.js | 26--------------------------
Dfrontend/js/Components/Widgets/UnitComboBox.js | 27---------------------------
Dfrontend/js/Components/Widgets/UserComboBox.js | 27---------------------------
Dfrontend/js/Components/Widgets/UserPreferenceGrid.js | 71-----------------------------------------------------------------------
Dfrontend/js/Components/Widgets/WebcamPanel.js | 63---------------------------------------------------------------
Dfrontend/js/Dialogs/Auth/LoginDialog.js | 118-------------------------------------------------------------------------------
Dfrontend/js/Dialogs/ExceptionWindow.js | 133-------------------------------------------------------------------------------
Dfrontend/js/Dialogs/FileUploadDialog.js | 141-------------------------------------------------------------------------------
Dfrontend/js/Ext.ux/ClearableComboBox.js | 29-----------------------------
Dfrontend/js/Ext.ux/Iframe.js | 120-------------------------------------------------------------------------------
Dfrontend/js/Ext.ux/SearchField.js | 66------------------------------------------------------------------
Dfrontend/js/ExtJS/Bugfixes/Ext.panel.Table-scrollDelta.js | 8--------
Dfrontend/js/ExtJS/Bugfixes/Ext.selection.Model-lateBinding.js | 39---------------------------------------
Dfrontend/js/ExtJS/Enhancements/Ext.data.Connection-sessionInjection.js | 32--------------------------------
Dfrontend/js/ExtJS/Enhancements/Ext.layout.component.field.Trigger-theme.js | 26--------------------------
Dfrontend/js/ExtJS/Enhancements/Ext.tree.View-missingMethods.js | 31-------------------------------
Dfrontend/js/Models/AbstractCategory.js | 5-----
Dfrontend/js/Models/Distributor.js | 18------------------
Dfrontend/js/Models/Footprint.js | 16----------------
Dfrontend/js/Models/FootprintAttachment.js | 15---------------
Dfrontend/js/Models/FootprintCategory.js | 14--------------
Dfrontend/js/Models/Manufacturer.js | 19-------------------
Dfrontend/js/Models/ManufacturerICLogo.js | 15---------------
Dfrontend/js/Models/Message.js | 9---------
Dfrontend/js/Models/Part.js | 55-------------------------------------------------------
Dfrontend/js/Models/PartAttachment.js | 14--------------
Dfrontend/js/Models/PartCategory.js | 14--------------
Dfrontend/js/Models/PartDistributor.js | 16----------------
Dfrontend/js/Models/PartManufacturer.js | 14--------------
Dfrontend/js/Models/PartParameter.js | 14--------------
Dfrontend/js/Models/PartUnit.js | 14--------------
Dfrontend/js/Models/SiPrefix.js | 11-----------
Dfrontend/js/Models/StatisticSample.js | 9---------
Dfrontend/js/Models/StockEntry.js | 14--------------
Dfrontend/js/Models/StorageLocation.js | 14--------------
Dfrontend/js/Models/SystemInformationRecord.js | 15---------------
Dfrontend/js/Models/TipOfTheDay.js | 11-----------
Dfrontend/js/Models/Unit.js | 14--------------
Dfrontend/js/Models/User.js | 13-------------
Dfrontend/js/Models/UserPreference.js | 10----------
Dfrontend/js/PartKeepr.js | 523-------------------------------------------------------------------------------
Dfrontend/js/Util/JsonWithAssociationsWriter.js | 21---------------------
Dfrontend/js/Util/ServiceCall.js | 187-------------------------------------------------------------------------------
Dfrontend/js/Util/i18n.js | 4----
Dfrontend/js/bugfixes.js | 214-------------------------------------------------------------------------------
Dfrontend/js/compat.js | 2--
Dfrontend/js/org.jerrymouse.util.locale/locale.js | 42------------------------------------------
Dfrontend/js/webcam.js | 198-------------------------------------------------------------------------------
Dfrontend/resources/diagona-icons/README.txt | 14--------------
Dfrontend/resources/diagona-icons/all.png | 0
Dfrontend/resources/diagona-icons/icons/10/001.png | 0
Dfrontend/resources/diagona-icons/icons/10/002.png | 0
Dfrontend/resources/diagona-icons/icons/10/003.png | 0
Dfrontend/resources/diagona-icons/icons/10/004.png | 0
Dfrontend/resources/diagona-icons/icons/10/005.png | 0
Dfrontend/resources/diagona-icons/icons/10/006.png | 0
Dfrontend/resources/diagona-icons/icons/10/007.png | 0
Dfrontend/resources/diagona-icons/icons/10/008.png | 0
Dfrontend/resources/diagona-icons/icons/10/009.png | 0
Dfrontend/resources/diagona-icons/icons/10/010.png | 0
Dfrontend/resources/diagona-icons/icons/10/011.png | 0
Dfrontend/resources/diagona-icons/icons/10/012.png | 0
Dfrontend/resources/diagona-icons/icons/10/013.png | 0
Dfrontend/resources/diagona-icons/icons/10/014.png | 0
Dfrontend/resources/diagona-icons/icons/10/015.png | 0
Dfrontend/resources/diagona-icons/icons/10/016.png | 0
Dfrontend/resources/diagona-icons/icons/10/017.png | 0
Dfrontend/resources/diagona-icons/icons/10/018.png | 0
Dfrontend/resources/diagona-icons/icons/10/019.png | 0
Dfrontend/resources/diagona-icons/icons/10/020.png | 0
Dfrontend/resources/diagona-icons/icons/10/021.png | 0
Dfrontend/resources/diagona-icons/icons/10/022.png | 0
Dfrontend/resources/diagona-icons/icons/10/023.png | 0
Dfrontend/resources/diagona-icons/icons/10/024.png | 0
Dfrontend/resources/diagona-icons/icons/10/025.png | 0
Dfrontend/resources/diagona-icons/icons/10/026.png | 0
Dfrontend/resources/diagona-icons/icons/10/027.png | 0
Dfrontend/resources/diagona-icons/icons/10/028.png | 0
Dfrontend/resources/diagona-icons/icons/10/029.png | 0
Dfrontend/resources/diagona-icons/icons/10/030.png | 0
Dfrontend/resources/diagona-icons/icons/10/031.png | 0
Dfrontend/resources/diagona-icons/icons/10/032.png | 0
Dfrontend/resources/diagona-icons/icons/10/033.png | 0
Dfrontend/resources/diagona-icons/icons/10/034.png | 0
Dfrontend/resources/diagona-icons/icons/10/035.png | 0
Dfrontend/resources/diagona-icons/icons/10/036.png | 0
Dfrontend/resources/diagona-icons/icons/10/037.png | 0
Dfrontend/resources/diagona-icons/icons/10/038.png | 0
Dfrontend/resources/diagona-icons/icons/10/039.png | 0
Dfrontend/resources/diagona-icons/icons/10/040.png | 0
Dfrontend/resources/diagona-icons/icons/10/041.png | 0
Dfrontend/resources/diagona-icons/icons/10/042.png | 0
Dfrontend/resources/diagona-icons/icons/10/043.png | 0
Dfrontend/resources/diagona-icons/icons/10/044.png | 0
Dfrontend/resources/diagona-icons/icons/10/045.png | 0
Dfrontend/resources/diagona-icons/icons/10/046.png | 0
Dfrontend/resources/diagona-icons/icons/10/047.png | 0
Dfrontend/resources/diagona-icons/icons/10/048.png | 0
Dfrontend/resources/diagona-icons/icons/10/049.png | 0
Dfrontend/resources/diagona-icons/icons/10/050.png | 0
Dfrontend/resources/diagona-icons/icons/10/051.png | 0
Dfrontend/resources/diagona-icons/icons/10/052.png | 0
Dfrontend/resources/diagona-icons/icons/10/053.png | 0
Dfrontend/resources/diagona-icons/icons/10/054.png | 0
Dfrontend/resources/diagona-icons/icons/10/055.png | 0
Dfrontend/resources/diagona-icons/icons/10/056.png | 0
Dfrontend/resources/diagona-icons/icons/10/057.png | 0
Dfrontend/resources/diagona-icons/icons/10/058.png | 0
Dfrontend/resources/diagona-icons/icons/10/059.png | 0
Dfrontend/resources/diagona-icons/icons/10/060.png | 0
Dfrontend/resources/diagona-icons/icons/10/061.png | 0
Dfrontend/resources/diagona-icons/icons/10/062.png | 0
Dfrontend/resources/diagona-icons/icons/10/063.png | 0
Dfrontend/resources/diagona-icons/icons/10/064.png | 0
Dfrontend/resources/diagona-icons/icons/10/065.png | 0
Dfrontend/resources/diagona-icons/icons/10/066.png | 0
Dfrontend/resources/diagona-icons/icons/10/067.png | 0
Dfrontend/resources/diagona-icons/icons/10/068.png | 0
Dfrontend/resources/diagona-icons/icons/10/069.png | 0
Dfrontend/resources/diagona-icons/icons/10/070.png | 0
Dfrontend/resources/diagona-icons/icons/10/071.png | 0
Dfrontend/resources/diagona-icons/icons/10/072.png | 0
Dfrontend/resources/diagona-icons/icons/10/073.png | 0
Dfrontend/resources/diagona-icons/icons/10/074.png | 0
Dfrontend/resources/diagona-icons/icons/10/075.png | 0
Dfrontend/resources/diagona-icons/icons/10/076.png | 0
Dfrontend/resources/diagona-icons/icons/10/077.png | 0
Dfrontend/resources/diagona-icons/icons/10/078.png | 0
Dfrontend/resources/diagona-icons/icons/10/079.png | 0
Dfrontend/resources/diagona-icons/icons/10/080.png | 0
Dfrontend/resources/diagona-icons/icons/10/081.png | 0
Dfrontend/resources/diagona-icons/icons/10/082.png | 0
Dfrontend/resources/diagona-icons/icons/10/083.png | 0
Dfrontend/resources/diagona-icons/icons/10/084.png | 0
Dfrontend/resources/diagona-icons/icons/10/085.png | 0
Dfrontend/resources/diagona-icons/icons/10/086.png | 0
Dfrontend/resources/diagona-icons/icons/10/087.png | 0
Dfrontend/resources/diagona-icons/icons/10/088.png | 0
Dfrontend/resources/diagona-icons/icons/10/089.png | 0
Dfrontend/resources/diagona-icons/icons/10/090.png | 0
Dfrontend/resources/diagona-icons/icons/10/091.png | 0
Dfrontend/resources/diagona-icons/icons/10/092.png | 0
Dfrontend/resources/diagona-icons/icons/10/093.png | 0
Dfrontend/resources/diagona-icons/icons/10/094.png | 0
Dfrontend/resources/diagona-icons/icons/10/095.png | 0
Dfrontend/resources/diagona-icons/icons/10/096.png | 0
Dfrontend/resources/diagona-icons/icons/10/097.png | 0
Dfrontend/resources/diagona-icons/icons/10/098.png | 0
Dfrontend/resources/diagona-icons/icons/10/099.png | 0
Dfrontend/resources/diagona-icons/icons/10/100.png | 0
Dfrontend/resources/diagona-icons/icons/10/101.png | 0
Dfrontend/resources/diagona-icons/icons/10/102.png | 0
Dfrontend/resources/diagona-icons/icons/10/103.png | 0
Dfrontend/resources/diagona-icons/icons/10/104.png | 0
Dfrontend/resources/diagona-icons/icons/10/105.png | 0
Dfrontend/resources/diagona-icons/icons/10/106.png | 0
Dfrontend/resources/diagona-icons/icons/10/107.png | 0
Dfrontend/resources/diagona-icons/icons/10/108.png | 0
Dfrontend/resources/diagona-icons/icons/10/109.png | 0
Dfrontend/resources/diagona-icons/icons/10/110.png | 0
Dfrontend/resources/diagona-icons/icons/10/111.png | 0
Dfrontend/resources/diagona-icons/icons/10/112.png | 0
Dfrontend/resources/diagona-icons/icons/10/113.png | 0
Dfrontend/resources/diagona-icons/icons/10/114.png | 0
Dfrontend/resources/diagona-icons/icons/10/115.png | 0
Dfrontend/resources/diagona-icons/icons/10/116.png | 0
Dfrontend/resources/diagona-icons/icons/10/117.png | 0
Dfrontend/resources/diagona-icons/icons/10/118.png | 0
Dfrontend/resources/diagona-icons/icons/10/119.png | 0
Dfrontend/resources/diagona-icons/icons/10/120.png | 0
Dfrontend/resources/diagona-icons/icons/10/121.png | 0
Dfrontend/resources/diagona-icons/icons/10/122.png | 0
Dfrontend/resources/diagona-icons/icons/10/123.png | 0
Dfrontend/resources/diagona-icons/icons/10/124.png | 0
Dfrontend/resources/diagona-icons/icons/10/125.png | 0
Dfrontend/resources/diagona-icons/icons/10/126.png | 0
Dfrontend/resources/diagona-icons/icons/10/127.png | 0
Dfrontend/resources/diagona-icons/icons/10/128.png | 0
Dfrontend/resources/diagona-icons/icons/10/129.png | 0
Dfrontend/resources/diagona-icons/icons/10/130.png | 0
Dfrontend/resources/diagona-icons/icons/10/131.png | 0
Dfrontend/resources/diagona-icons/icons/10/132.png | 0
Dfrontend/resources/diagona-icons/icons/10/133.png | 0
Dfrontend/resources/diagona-icons/icons/10/134.png | 0
Dfrontend/resources/diagona-icons/icons/10/135.png | 0
Dfrontend/resources/diagona-icons/icons/10/136.png | 0
Dfrontend/resources/diagona-icons/icons/10/137.png | 0
Dfrontend/resources/diagona-icons/icons/10/138.png | 0
Dfrontend/resources/diagona-icons/icons/10/139.png | 0
Dfrontend/resources/diagona-icons/icons/10/140.png | 0
Dfrontend/resources/diagona-icons/icons/10/141.png | 0
Dfrontend/resources/diagona-icons/icons/10/142.png | 0
Dfrontend/resources/diagona-icons/icons/10/143.png | 0
Dfrontend/resources/diagona-icons/icons/10/144.png | 0
Dfrontend/resources/diagona-icons/icons/10/145.png | 0
Dfrontend/resources/diagona-icons/icons/10/146.png | 0
Dfrontend/resources/diagona-icons/icons/10/147.png | 0
Dfrontend/resources/diagona-icons/icons/10/148.png | 0
Dfrontend/resources/diagona-icons/icons/10/149.png | 0
Dfrontend/resources/diagona-icons/icons/10/150.png | 0
Dfrontend/resources/diagona-icons/icons/10/151.png | 0
Dfrontend/resources/diagona-icons/icons/10/152.png | 0
Dfrontend/resources/diagona-icons/icons/10/153.png | 0
Dfrontend/resources/diagona-icons/icons/10/154.png | 0
Dfrontend/resources/diagona-icons/icons/10/155.png | 0
Dfrontend/resources/diagona-icons/icons/10/156.png | 0
Dfrontend/resources/diagona-icons/icons/10/157.png | 0
Dfrontend/resources/diagona-icons/icons/10/158.png | 0
Dfrontend/resources/diagona-icons/icons/10/159.png | 0
Dfrontend/resources/diagona-icons/icons/10/160.png | 0
Dfrontend/resources/diagona-icons/icons/10/161.png | 0
Dfrontend/resources/diagona-icons/icons/10/162.png | 0
Dfrontend/resources/diagona-icons/icons/10/163.png | 0
Dfrontend/resources/diagona-icons/icons/10/164.png | 0
Dfrontend/resources/diagona-icons/icons/10/165.png | 0
Dfrontend/resources/diagona-icons/icons/10/166.png | 0
Dfrontend/resources/diagona-icons/icons/10/167.png | 0
Dfrontend/resources/diagona-icons/icons/10/168.png | 0
Dfrontend/resources/diagona-icons/icons/10/169.png | 0
Dfrontend/resources/diagona-icons/icons/10/170.png | 0
Dfrontend/resources/diagona-icons/icons/10/171.png | 0
Dfrontend/resources/diagona-icons/icons/10/172.png | 0
Dfrontend/resources/diagona-icons/icons/10/173.png | 0
Dfrontend/resources/diagona-icons/icons/10/174.png | 0
Dfrontend/resources/diagona-icons/icons/10/175.png | 0
Dfrontend/resources/diagona-icons/icons/10/176.png | 0
Dfrontend/resources/diagona-icons/icons/10/177.png | 0
Dfrontend/resources/diagona-icons/icons/10/178.png | 0
Dfrontend/resources/diagona-icons/icons/10/179.png | 0
Dfrontend/resources/diagona-icons/icons/10/180.png | 0
Dfrontend/resources/diagona-icons/icons/10/181.png | 0
Dfrontend/resources/diagona-icons/icons/10/182.png | 0
Dfrontend/resources/diagona-icons/icons/10/183.png | 0
Dfrontend/resources/diagona-icons/icons/10/184.png | 0
Dfrontend/resources/diagona-icons/icons/10/185.png | 0
Dfrontend/resources/diagona-icons/icons/10/186.png | 0
Dfrontend/resources/diagona-icons/icons/10/187.png | 0
Dfrontend/resources/diagona-icons/icons/10/188.png | 0
Dfrontend/resources/diagona-icons/icons/10/189.png | 0
Dfrontend/resources/diagona-icons/icons/10/190.png | 0
Dfrontend/resources/diagona-icons/icons/10/191.png | 0
Dfrontend/resources/diagona-icons/icons/10/192.png | 0
Dfrontend/resources/diagona-icons/icons/10/193.png | 0
Dfrontend/resources/diagona-icons/icons/10/194.png | 0
Dfrontend/resources/diagona-icons/icons/10/195.png | 0
Dfrontend/resources/diagona-icons/icons/10/196.png | 0
Dfrontend/resources/diagona-icons/icons/10/197.png | 0
Dfrontend/resources/diagona-icons/icons/10/198.png | 0
Dfrontend/resources/diagona-icons/icons/10/199.png | 0
Dfrontend/resources/diagona-icons/icons/10/200.png | 0
Dfrontend/resources/diagona-icons/icons/16/001.png | 0
Dfrontend/resources/diagona-icons/icons/16/002.png | 0
Dfrontend/resources/diagona-icons/icons/16/003.png | 0
Dfrontend/resources/diagona-icons/icons/16/004.png | 0
Dfrontend/resources/diagona-icons/icons/16/005.png | 0
Dfrontend/resources/diagona-icons/icons/16/006.png | 0
Dfrontend/resources/diagona-icons/icons/16/007.png | 0
Dfrontend/resources/diagona-icons/icons/16/008.png | 0
Dfrontend/resources/diagona-icons/icons/16/009.png | 0
Dfrontend/resources/diagona-icons/icons/16/010.png | 0
Dfrontend/resources/diagona-icons/icons/16/011.png | 0
Dfrontend/resources/diagona-icons/icons/16/012.png | 0
Dfrontend/resources/diagona-icons/icons/16/013.png | 0
Dfrontend/resources/diagona-icons/icons/16/014.png | 0
Dfrontend/resources/diagona-icons/icons/16/015.png | 0
Dfrontend/resources/diagona-icons/icons/16/016.png | 0
Dfrontend/resources/diagona-icons/icons/16/017.png | 0
Dfrontend/resources/diagona-icons/icons/16/018.png | 0
Dfrontend/resources/diagona-icons/icons/16/019.png | 0
Dfrontend/resources/diagona-icons/icons/16/020.png | 0
Dfrontend/resources/diagona-icons/icons/16/021.png | 0
Dfrontend/resources/diagona-icons/icons/16/022.png | 0
Dfrontend/resources/diagona-icons/icons/16/023.png | 0
Dfrontend/resources/diagona-icons/icons/16/024.png | 0
Dfrontend/resources/diagona-icons/icons/16/025.png | 0
Dfrontend/resources/diagona-icons/icons/16/026.png | 0
Dfrontend/resources/diagona-icons/icons/16/027.png | 0
Dfrontend/resources/diagona-icons/icons/16/028.png | 0
Dfrontend/resources/diagona-icons/icons/16/029.png | 0
Dfrontend/resources/diagona-icons/icons/16/030.png | 0
Dfrontend/resources/diagona-icons/icons/16/031.png | 0
Dfrontend/resources/diagona-icons/icons/16/032.png | 0
Dfrontend/resources/diagona-icons/icons/16/033.png | 0
Dfrontend/resources/diagona-icons/icons/16/034.png | 0
Dfrontend/resources/diagona-icons/icons/16/035.png | 0
Dfrontend/resources/diagona-icons/icons/16/036.png | 0
Dfrontend/resources/diagona-icons/icons/16/037.png | 0
Dfrontend/resources/diagona-icons/icons/16/038.png | 0
Dfrontend/resources/diagona-icons/icons/16/039.png | 0
Dfrontend/resources/diagona-icons/icons/16/040.png | 0
Dfrontend/resources/diagona-icons/icons/16/041.png | 0
Dfrontend/resources/diagona-icons/icons/16/042.png | 0
Dfrontend/resources/diagona-icons/icons/16/043.png | 0
Dfrontend/resources/diagona-icons/icons/16/044.png | 0
Dfrontend/resources/diagona-icons/icons/16/045.png | 0
Dfrontend/resources/diagona-icons/icons/16/046.png | 0
Dfrontend/resources/diagona-icons/icons/16/047.png | 0
Dfrontend/resources/diagona-icons/icons/16/048.png | 0
Dfrontend/resources/diagona-icons/icons/16/049.png | 0
Dfrontend/resources/diagona-icons/icons/16/050.png | 0
Dfrontend/resources/diagona-icons/icons/16/051.png | 0
Dfrontend/resources/diagona-icons/icons/16/052.png | 0
Dfrontend/resources/diagona-icons/icons/16/053.png | 0
Dfrontend/resources/diagona-icons/icons/16/054.png | 0
Dfrontend/resources/diagona-icons/icons/16/055.png | 0
Dfrontend/resources/diagona-icons/icons/16/056.png | 0
Dfrontend/resources/diagona-icons/icons/16/057.png | 0
Dfrontend/resources/diagona-icons/icons/16/058.png | 0
Dfrontend/resources/diagona-icons/icons/16/059.png | 0
Dfrontend/resources/diagona-icons/icons/16/060.png | 0
Dfrontend/resources/diagona-icons/icons/16/061.png | 0
Dfrontend/resources/diagona-icons/icons/16/062.png | 0
Dfrontend/resources/diagona-icons/icons/16/063.png | 0
Dfrontend/resources/diagona-icons/icons/16/064.png | 0
Dfrontend/resources/diagona-icons/icons/16/065.png | 0
Dfrontend/resources/diagona-icons/icons/16/066.png | 0
Dfrontend/resources/diagona-icons/icons/16/067.png | 0
Dfrontend/resources/diagona-icons/icons/16/068.png | 0
Dfrontend/resources/diagona-icons/icons/16/069.png | 0
Dfrontend/resources/diagona-icons/icons/16/070.png | 0
Dfrontend/resources/diagona-icons/icons/16/071.png | 0
Dfrontend/resources/diagona-icons/icons/16/072.png | 0
Dfrontend/resources/diagona-icons/icons/16/073.png | 0
Dfrontend/resources/diagona-icons/icons/16/074.png | 0
Dfrontend/resources/diagona-icons/icons/16/075.png | 0
Dfrontend/resources/diagona-icons/icons/16/076.png | 0
Dfrontend/resources/diagona-icons/icons/16/077.png | 0
Dfrontend/resources/diagona-icons/icons/16/078.png | 0
Dfrontend/resources/diagona-icons/icons/16/079.png | 0
Dfrontend/resources/diagona-icons/icons/16/080.png | 0
Dfrontend/resources/diagona-icons/icons/16/081.png | 0
Dfrontend/resources/diagona-icons/icons/16/082.png | 0
Dfrontend/resources/diagona-icons/icons/16/083.png | 0
Dfrontend/resources/diagona-icons/icons/16/084.png | 0
Dfrontend/resources/diagona-icons/icons/16/085.png | 0
Dfrontend/resources/diagona-icons/icons/16/086.png | 0
Dfrontend/resources/diagona-icons/icons/16/087.png | 0
Dfrontend/resources/diagona-icons/icons/16/088.png | 0
Dfrontend/resources/diagona-icons/icons/16/089.png | 0
Dfrontend/resources/diagona-icons/icons/16/090.png | 0
Dfrontend/resources/diagona-icons/icons/16/091.png | 0
Dfrontend/resources/diagona-icons/icons/16/092.png | 0
Dfrontend/resources/diagona-icons/icons/16/093.png | 0
Dfrontend/resources/diagona-icons/icons/16/094.png | 0
Dfrontend/resources/diagona-icons/icons/16/095.png | 0
Dfrontend/resources/diagona-icons/icons/16/096.png | 0
Dfrontend/resources/diagona-icons/icons/16/097.png | 0
Dfrontend/resources/diagona-icons/icons/16/098.png | 0
Dfrontend/resources/diagona-icons/icons/16/099.png | 0
Dfrontend/resources/diagona-icons/icons/16/100.png | 0
Dfrontend/resources/diagona-icons/icons/16/101.png | 0
Dfrontend/resources/diagona-icons/icons/16/102.png | 0
Dfrontend/resources/diagona-icons/icons/16/103.png | 0
Dfrontend/resources/diagona-icons/icons/16/104.png | 0
Dfrontend/resources/diagona-icons/icons/16/105.png | 0
Dfrontend/resources/diagona-icons/icons/16/106.png | 0
Dfrontend/resources/diagona-icons/icons/16/107.png | 0
Dfrontend/resources/diagona-icons/icons/16/108.png | 0
Dfrontend/resources/diagona-icons/icons/16/109.png | 0
Dfrontend/resources/diagona-icons/icons/16/110.png | 0
Dfrontend/resources/diagona-icons/icons/16/111.png | 0
Dfrontend/resources/diagona-icons/icons/16/112.png | 0
Dfrontend/resources/diagona-icons/icons/16/113.png | 0
Dfrontend/resources/diagona-icons/icons/16/114.png | 0
Dfrontend/resources/diagona-icons/icons/16/115.png | 0
Dfrontend/resources/diagona-icons/icons/16/116.png | 0
Dfrontend/resources/diagona-icons/icons/16/117.png | 0
Dfrontend/resources/diagona-icons/icons/16/118.png | 0
Dfrontend/resources/diagona-icons/icons/16/119.png | 0
Dfrontend/resources/diagona-icons/icons/16/120.png | 0
Dfrontend/resources/diagona-icons/icons/16/121.png | 0
Dfrontend/resources/diagona-icons/icons/16/122.png | 0
Dfrontend/resources/diagona-icons/icons/16/123.png | 0
Dfrontend/resources/diagona-icons/icons/16/124.png | 0
Dfrontend/resources/diagona-icons/icons/16/125.png | 0
Dfrontend/resources/diagona-icons/icons/16/126.png | 0
Dfrontend/resources/diagona-icons/icons/16/127.png | 0
Dfrontend/resources/diagona-icons/icons/16/128.png | 0
Dfrontend/resources/diagona-icons/icons/16/129.png | 0
Dfrontend/resources/diagona-icons/icons/16/130.png | 0
Dfrontend/resources/diagona-icons/icons/16/131.png | 0
Dfrontend/resources/diagona-icons/icons/16/132.png | 0
Dfrontend/resources/diagona-icons/icons/16/133.png | 0
Dfrontend/resources/diagona-icons/icons/16/134.png | 0
Dfrontend/resources/diagona-icons/icons/16/135.png | 0
Dfrontend/resources/diagona-icons/icons/16/136.png | 0
Dfrontend/resources/diagona-icons/icons/16/137.png | 0
Dfrontend/resources/diagona-icons/icons/16/138.png | 0
Dfrontend/resources/diagona-icons/icons/16/139.png | 0
Dfrontend/resources/diagona-icons/icons/16/140.png | 0
Dfrontend/resources/diagona-icons/icons/16/141.png | 0
Dfrontend/resources/diagona-icons/icons/16/142.png | 0
Dfrontend/resources/diagona-icons/icons/16/143.png | 0
Dfrontend/resources/diagona-icons/icons/16/144.png | 0
Dfrontend/resources/diagona-icons/icons/16/145.png | 0
Dfrontend/resources/diagona-icons/icons/16/146.png | 0
Dfrontend/resources/diagona-icons/icons/16/147.png | 0
Dfrontend/resources/diagona-icons/icons/16/148.png | 0
Dfrontend/resources/diagona-icons/icons/16/149.png | 0
Dfrontend/resources/diagona-icons/icons/16/150.png | 0
Dfrontend/resources/diagona-icons/icons/16/151.png | 0
Dfrontend/resources/diagona-icons/icons/16/152.png | 0
Dfrontend/resources/diagona-icons/icons/16/153.png | 0
Dfrontend/resources/diagona-icons/icons/16/154.png | 0
Dfrontend/resources/diagona-icons/icons/16/155.png | 0
Dfrontend/resources/diagona-icons/icons/16/156.png | 0
Dfrontend/resources/diagona-icons/icons/16/157.png | 0
Dfrontend/resources/diagona-icons/icons/16/158.png | 0
Dfrontend/resources/diagona-icons/icons/16/159.png | 0
Dfrontend/resources/diagona-icons/icons/16/160.png | 0
Dfrontend/resources/diagona-icons/icons/16/161.png | 0
Dfrontend/resources/diagona-icons/icons/16/162.png | 0
Dfrontend/resources/diagona-icons/icons/16/163.png | 0
Dfrontend/resources/diagona-icons/icons/16/164.png | 0
Dfrontend/resources/diagona-icons/icons/16/165.png | 0
Dfrontend/resources/diagona-icons/icons/16/166.png | 0
Dfrontend/resources/diagona-icons/icons/16/167.png | 0
Dfrontend/resources/diagona-icons/icons/16/168.png | 0
Dfrontend/resources/diagona-icons/icons/16/169.png | 0
Dfrontend/resources/diagona-icons/icons/16/170.png | 0
Dfrontend/resources/diagona-icons/icons/16/171.png | 0
Dfrontend/resources/diagona-icons/icons/16/172.png | 0
Dfrontend/resources/diagona-icons/icons/16/173.png | 0
Dfrontend/resources/diagona-icons/icons/16/174.png | 0
Dfrontend/resources/diagona-icons/icons/16/175.png | 0
Dfrontend/resources/diagona-icons/icons/16/176.png | 0
Dfrontend/resources/diagona-icons/icons/16/177.png | 0
Dfrontend/resources/diagona-icons/icons/16/178.png | 0
Dfrontend/resources/diagona-icons/icons/16/179.png | 0
Dfrontend/resources/diagona-icons/icons/16/180.png | 0
Dfrontend/resources/diagona-icons/icons/16/181.png | 0
Dfrontend/resources/diagona-icons/icons/16/182.png | 0
Dfrontend/resources/diagona-icons/icons/16/183.png | 0
Dfrontend/resources/diagona-icons/icons/16/184.png | 0
Dfrontend/resources/diagona-icons/icons/16/185.png | 0
Dfrontend/resources/diagona-icons/icons/16/186.png | 0
Dfrontend/resources/diagona-icons/icons/16/187.png | 0
Dfrontend/resources/diagona-icons/icons/16/188.png | 0
Dfrontend/resources/diagona-icons/icons/16/189.png | 0
Dfrontend/resources/diagona-icons/icons/16/190.png | 0
Dfrontend/resources/diagona-icons/icons/16/191.png | 0
Dfrontend/resources/diagona-icons/icons/16/192.png | 0
Dfrontend/resources/diagona-icons/icons/16/193.png | 0
Dfrontend/resources/diagona-icons/icons/16/194.png | 0
Dfrontend/resources/diagona-icons/icons/16/195.png | 0
Dfrontend/resources/diagona-icons/icons/16/196.png | 0
Dfrontend/resources/diagona-icons/icons/16/197.png | 0
Dfrontend/resources/diagona-icons/icons/16/198.png | 0
Dfrontend/resources/diagona-icons/icons/16/199.png | 0
Dfrontend/resources/diagona-icons/icons/16/200.png | 0
Dfrontend/resources/icons/footprint_add.png | 0
Dfrontend/resources/icons/footprint_delete.png | 0
Dfrontend/resources/icons/stock_any.png | 0
Dfrontend/resources/icons/stock_below.png | 0
Dfrontend/resources/icons/stock_nonzero.png | 0
Dfrontend/resources/icons/stock_zero.png | 0
Dfrontend/resources/icons/storagelocation_multiadd.png | 0
Dfrontend/resources/icons/tip_next.png | 0
Dfrontend/resources/icons/tip_previous.png | 0
Dfrontend/resources/icons/unit.png | 0
Dfrontend/resources/icons/unit_add.png | 0
Dfrontend/resources/icons/unit_delete.png | 0
Dfrontend/resources/images/loading.gif | 0
Dfrontend/resources/images/over.gif | 0
Dfrontend/resources/images/selected.gif | 0
Dfrontend/resources/jmicons/ajax-loader.gif | 0
Dfrontend/resources/jmicons/contexthelp.png | 0
Dfrontend/resources/jmicons/menu-shade.gif | 0
Dfrontend/resources/selected.gif | 0
Dfrontend/resources/themes/images/partkeepr/boundlist/trigger-arrow.png | 0
Dfrontend/resources/themes/images/partkeepr/box/corners-blue.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/l-blue.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/l.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/r-blue.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/r.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/tb-blue.gif | 0
Dfrontend/resources/themes/images/partkeepr/box/tb.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn-group/btn-group-default-framed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn-group/btn-group-default-framed-notitle-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn-group/btn-group-default-framed-notitle-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn-group/btn-group-default-framed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-disabled-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-focus-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-focus-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-focus-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-pressed-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-pressed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-pressed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-large-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-disabled-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-focus-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-focus-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-focus-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-pressed-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-pressed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-pressed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-medium-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-disabled-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-focus-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-focus-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-focus-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-pressed-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-pressed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-pressed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-small-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-large-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/btn/btn-default-toolbar-small-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/arrow-white.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/arrow.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/btn-arrow.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/btn-sprite.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/btn.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/group-cs.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/group-lr.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/group-tb.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow-b-noline.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow-b.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow-bo.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow-light.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow-noline.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow-o.gif | 0
Dfrontend/resources/themes/images/partkeepr/button/s-arrow.gif | 0
Dfrontend/resources/themes/images/partkeepr/datepicker/datepicker-footer-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/datepicker/datepicker-footer-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/datepicker/datepicker-header-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/datepicker/datepicker-header-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/dd/drop-add.gif | 0
Dfrontend/resources/themes/images/partkeepr/dd/drop-no.gif | 0
Dfrontend/resources/themes/images/partkeepr/dd/drop-yes.gif | 0
Dfrontend/resources/themes/images/partkeepr/editor/tb-sprite.gif | 0
Dfrontend/resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-default-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-default-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/checkbox.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/checkbox.png | 0
Dfrontend/resources/themes/images/partkeepr/form/clear-trigger.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/clear-trigger.png | 0
Dfrontend/resources/themes/images/partkeepr/form/date-trigger.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/date-trigger.png | 0
Dfrontend/resources/themes/images/partkeepr/form/error-tip-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/exclamation.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/radio.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/radio.png | 0
Dfrontend/resources/themes/images/partkeepr/form/search-trigger.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/search-trigger.png | 0
Dfrontend/resources/themes/images/partkeepr/form/spinner-small.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/spinner.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/spinner.png | 0
Dfrontend/resources/themes/images/partkeepr/form/text-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/trigger-square.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/trigger-tpl.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/trigger.gif | 0
Dfrontend/resources/themes/images/partkeepr/form/trigger.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/arrow-left-white.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/arrow-right-white.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/cell-special-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/cell-special-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/cell-special-selected-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/cell-special-selected-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/checked.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/col-move-bottom.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/col-move-top.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/column-header-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/column-header-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/column-header-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/column-header-over-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/columns.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/dd-insert-arrow-left.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/dd-insert-arrow-left.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/dd-insert-arrow-right.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/dd-insert-arrow-right.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/dirty.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/done.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/drop-no.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/drop-yes.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/footer-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid-blue-hd.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid-blue-split.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid-hrow.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid-loading.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid-split.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid-vista-hd.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid3-hd-btn.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid3-hrow-over.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid3-hrow.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/grid3-rowheader.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/group-by.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/group-collapse.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/group-expand-sprite.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/group-expand.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/hd-pop.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/hmenu-asc.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/hmenu-desc.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/hmenu-lock.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/hmenu-lock.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/hmenu-unlock.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/hmenu-unlock.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/invalid_line.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/loading.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/mso-hd.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/nowait.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-first-disabled.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-first.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-last-disabled.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-last.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-next-disabled.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-next.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-prev-disabled.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/page-prev.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/pick-button.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/property-cell-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/property-cell-selected-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/refresh-disabled.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/refresh.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/row-check-sprite.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/row-expand-sprite.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/row-over.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/row-sel.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/sort-hd.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/sort_asc.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/sort_asc.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/sort_desc.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/sort_desc.png | 0
Dfrontend/resources/themes/images/partkeepr/grid/unchecked.gif | 0
Dfrontend/resources/themes/images/partkeepr/grid/wait.gif | 0
Dfrontend/resources/themes/images/partkeepr/layout/mini-bottom.gif | 0
Dfrontend/resources/themes/images/partkeepr/layout/mini-left.gif | 0
Dfrontend/resources/themes/images/partkeepr/layout/mini-right.gif | 0
Dfrontend/resources/themes/images/partkeepr/layout/mini-top.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/checked.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/group-checked.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/item-over-disabled.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/item-over.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/menu-item-active-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/menu-item-active-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/menu-item-active-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/menu-parent.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/menu.gif | 0
Dfrontend/resources/themes/images/partkeepr/menu/unchecked.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-bottom-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-left-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-left-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-left-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-right-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-right-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-right-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-top-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-top-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-top-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-left-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-right-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel-header/panel-header-default-top-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel/panel-default-framed-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/panel/panel-default-framed-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/progress/progress-default-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/blue-loading.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/calendar.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/glass-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/hd-sprite.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/icon-error.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/icon-info.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/icon-question.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/icon-warning.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/large-loading.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/left-btn.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/loading-balls.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/right-btn.gif | 0
Dfrontend/resources/themes/images/partkeepr/shared/shadow-c.png | 0
Dfrontend/resources/themes/images/partkeepr/shared/shadow-lr.png | 0
Dfrontend/resources/themes/images/partkeepr/shared/shadow.png | 0
Dfrontend/resources/themes/images/partkeepr/shared/warning.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/e-handle-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/e-handle.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/ne-handle-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/ne-handle.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/nw-handle-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/nw-handle.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/s-handle-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/s-handle.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/se-handle-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/se-handle.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/square.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/sw-handle-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/sizer/sw-handle.gif | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-thumb.gif | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-thumb.png | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-v-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-v-bg.png | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-v-thumb.gif | 0
Dfrontend/resources/themes/images/partkeepr/slider/slider-v-thumb.png | 0
Dfrontend/resources/themes/images/partkeepr/tab-bar/scroll-left.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab-bar/scroll-right.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab-bar/tab-bar-default-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-active-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-active-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-active-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-bottom-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-close.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-active-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-active-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-active-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-disabled-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-disabled-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-disabled-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-over-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-over-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-over-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tab/tab-default-top-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/tip/tip-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/tip/tip-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/toolbar/more.gif | 0
Dfrontend/resources/themes/images/partkeepr/toolbar/scroll-left.gif | 0
Dfrontend/resources/themes/images/partkeepr/toolbar/scroll-right.gif | 0
Dfrontend/resources/themes/images/partkeepr/toolbar/toolbar-default-bg.gif | 0
Dfrontend/resources/themes/images/partkeepr/tools/tool-sprite-tpl.gif | 0
Dfrontend/resources/themes/images/partkeepr/tools/tool-sprites-dark.gif | 0
Dfrontend/resources/themes/images/partkeepr/tools/tool-sprites-light.gif | 0
Dfrontend/resources/themes/images/partkeepr/tools/tool-sprites.gif | 0
Dfrontend/resources/themes/images/partkeepr/tools/tools-sprites-trans.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/arrows.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-above.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-add.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-append.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-below.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-between.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-no.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-over.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-under.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/drop-yes.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-end-minus-nl.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-end-minus.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-end-plus-nl.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-end-plus.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-end.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-line.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-minus-nl.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-minus.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-plus-nl.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow-plus.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/elbow.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/folder-open.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/folder.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/leaf.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/loading.gif | 0
Dfrontend/resources/themes/images/partkeepr/tree/s.gif | 0
Dfrontend/resources/themes/images/partkeepr/util/splitter/mini-bottom.gif | 0
Dfrontend/resources/themes/images/partkeepr/util/splitter/mini-left.gif | 0
Dfrontend/resources/themes/images/partkeepr/util/splitter/mini-right.gif | 0
Dfrontend/resources/themes/images/partkeepr/util/splitter/mini-top.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-bottom-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-bottom-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-left-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-left-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-right-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-right-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-top-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/window-header/window-header-default-top-sides.gif | 0
Dfrontend/resources/themes/images/partkeepr/window/icon-error.gif | 0
Dfrontend/resources/themes/images/partkeepr/window/icon-info.gif | 0
Dfrontend/resources/themes/images/partkeepr/window/icon-question.gif | 0
Dfrontend/resources/themes/images/partkeepr/window/icon-warning.gif | 0
Dfrontend/resources/themes/images/partkeepr/window/window-default-corners.gif | 0
Dfrontend/resources/themes/images/partkeepr/window/window-default-sides.gif | 0
Dfrontend/resources/webcam.swf | 0
Dfrontend/rest.php | 76----------------------------------------------------------------------------
Dfrontend/rss.php | 15---------------
Dfrontend/service.php | 55-------------------------------------------------------
Dfrontend/upload.php | 38--------------------------------------
933 files changed, 0 insertions(+), 9335 deletions(-)

diff --git a/frontend/css/PartKeepr.css b/frontend/css/PartKeepr.css @@ -1,119 +0,0 @@ -.manufacturer-ic-logos .thumb{ - background: #ffffff; - padding: 3px; -} - -.manufacturer-ic-logos .thumb-wrap{ - display: inline-block; - margin: 4px; - margin-right: 0; - padding: 5px; -} - -.manufacturer-ic-logos .thumb-wrap span{ - display: block; - overflow: hidden; - text-align: center; -} - -.manufacturer-ic-logos .x-view-over{ - border:1px solid #dddddd; - background: #efefef url(../resources/images/over.gif) repeat-x left top; - padding: 4px; -} - -.manufacturer-ic-logos .x-item-selected{ - background: #eff5fb url(../resources/images/selected.gif) no-repeat right bottom; - border:1px solid #99bbe8; - padding: 4px; -} -.manufacturer-ic-logos .x-view-selected .thumb{ - background:transparent; -} - -.manufacturer-ic-logos .thumb-wrap span { - cursor: default; -} - -.partdisplay h1 { - font-size: 2em; -} - -div.partdisplay td { - padding: 2px; - vertical-align: top; -} - -div.partdisplay table { - width: 100%; -} -td.e { - background-color: #eeeeee; -} - -td.e2 { - background-color: #dddddd; -} - -td.o { - background-color: #cccccc; -} - -td.o2 { - background-color: #bbbbbb; -} - -.remoteimagefield { - border: 1px solid black; -} - -#loading { position: absolute; width: 180px; margin: -70px 0 0 -90px; height: 140px; top: 50%; left: 50%; } -#loading .logo { background: url(../resources/images/loading.gif) no-repeat; position: absolute; display: block; top: 25px; left: 22px; width: 120px; height: 120px; } - -.icon-footprint { - background-image: url(../resources/fugue-icons/icons/fingerprint.png) !important; -} - -.icon-system-monitor { - background-image: url(../resources/fugue-icons/icons/system-monitor.png) !important; -} - -.icon-chart-bar { - background-image: url(../resources/silkicons/chart_bar.png) !important; -} - -.icon-wooden-box { - background-image: url(../resources/fugue-icons/icons/wooden-box.png) !important; -} - -.icon-unit { - background-image: url(../resources/icons/unit.png) !important; -} - -.icon-building { - background-image: url(../resources/silkicons/building.png) !important; -} - -.icon-lorry { - background-image: url(../resources/silkicons/lorry.png) !important; -} - -.icon-user { - background-image: url(../resources/silkicons/user.png) !important; -} - -.icon-ruler { - background-image: url(../resources/fugue-icons/icons/ruler.png) !important; -} - -.icon-gear { - background-image: url(../resources/fugue-icons/icons/gear.png) !important; -} - -.icon-drive-upload { - background-image: url(../resources/fugue-icons/icons/drive-upload.png) !important; -} - -.icon-infocard { - background-image: url(../resources/fugue-icons/icons/infocard.png) !important; -}- \ No newline at end of file diff --git a/frontend/css/partkeepr-theme.css b/frontend/css/partkeepr-theme.css @@ -1 +0,0 @@ -html,body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{margin:0;padding:0}table{border-collapse:collapse;border-spacing:0}fieldset,img{border:0}address,caption,cite,code,dfn,em,strong,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}h1,h2,h3,h4,h5,h6{font-size:100%}q:before,q:after{content:""}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}input,textarea,select{font-family:inherit;font-size:inherit;font-weight:inherit}*:focus{outline:none}.x-border-box .x-reset,.x-border-box .x-reset *{box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;-webkit-box-sizing:border-box}.x-body{color:#000;font-size:12px;font-family:tahoma,arial,verdana,sans-serif}.x-clear{overflow:hidden;clear:both;height:0;width:0;font-size:0;line-height:0}.x-layer{position:absolute;overflow:hidden;zoom:1}.x-shim{position:absolute;left:0;top:0;overflow:hidden;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0}.x-hide-display{display:none !important}.x-hide-visibility{visibility:hidden !important}.x-item-disabled{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=40);opacity:0.4}.x-ie6 .x-item-disabled{filter:none}.x-hidden,.x-hide-offsets{display:block !important;position:absolute!important;left:-10000px !important;top:-10000px !important}.x-hide-nosize{height:0!important;width:0!important}.x-masked-relative{position:relative}.x-ie6 .x-masked select,.x-ie6.x-body-masked select{visibility:hidden !important}.x-css-shadow{position:absolute;-moz-border-radius:5px 5px;-webkit-border-radius:5px 5px;-o-border-radius:5px 5px;-ms-border-radius:5px 5px;-khtml-border-radius:5px 5px;border-radius:5px 5px}.x-ie-shadow{background-color:#777;display:none;position:absolute;overflow:hidden;zoom:1}.x-frame-shadow{display:none;position:absolute;overflow:hidden}.x-frame-shadow *{overflow:hidden}.x-frame-shadow *{padding:0;border:0;margin:0;clear:none;zoom:1}.x-frame-shadow .xstc,.x-frame-shadow .xsbc{height:6px;float:left}.x-frame-shadow .xsc{width:100%}.x-frame-shadow .xsml{background:transparent repeat-y 0 0}.x-frame-shadow .xsmr{background:transparent repeat-y -6px 0}.x-frame-shadow .xstl{background:transparent no-repeat 0 0}.x-frame-shadow .xstc{background:transparent repeat-x 0 -30px}.x-frame-shadow .xstr{background:transparent repeat-x 0 -18px}.x-frame-shadow .xsbl{background:transparent no-repeat 0 -12px}.x-frame-shadow .xsbc{background:transparent repeat-x 0 -36px}.x-frame-shadow .xsbr{background:transparent repeat-x 0 -6px}.x-frame-shadow .xstl,.x-frame-shadow .xstc,.x-frame-shadow .xstr,.x-frame-shadow .xsbl,.x-frame-shadow .xsbc,.x-frame-shadow .xsbr{width:6px;height:6px;float:left;background-image:url('../resources/themes/images/partkeepr/shared/shadow.png')}.x-frame-shadow .xsml,.x-frame-shadow .xsmr{width:6px;float:left;height:100%;background-image:url('../resources/themes/images/partkeepr/shared/shadow-lr.png')}.x-frame-shadow .xsmc{float:left;height:100%;background-image:url('../resources/themes/images/partkeepr/shared/shadow-c.png')}.x-frame-shadow .xst,.x-frame-shadow .xsb{height:6px;overflow:hidden;width:100%}.x-box-tl{background:transparent no-repeat 0 0;zoom:1}.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;zoom:1}.x-box-mc{background:repeat-x 0 -16px;padding:4px 10px}.x-box-mc h3{margin:0 0 4px 0;zoom:1}.x-box-mr{background:transparent repeat-y right;padding-right:4px;overflow:hidden}.x-box-bl{background:transparent no-repeat 0 -16px;zoom:1}.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('../resources/themes/images/partkeepr/box/corners.gif')}.x-box-tc{background-image:url('../resources/themes/images/partkeepr/box/tb.gif')}.x-box-tr{background-image:url('../resources/themes/images/partkeepr/box/corners.gif')}.x-box-ml{background-image:url('../resources/themes/images/partkeepr/box/l.gif')}.x-box-mc{background-color:#eee;background-image:url('../resources/themes/images/partkeepr/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('../resources/themes/images/partkeepr/box/r.gif')}.x-box-bl{background-image:url('../resources/themes/images/partkeepr/box/corners.gif')}.x-box-bc{background-image:url('../resources/themes/images/partkeepr/box/tb.gif')}.x-box-br{background-image:url('../resources/themes/images/partkeepr/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('../resources/themes/images/partkeepr/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('../resources/themes/images/partkeepr/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('../resources/themes/images/partkeepr/box/l-blue.gif')}.x-box-blue .x-box-mr{background-image:url('../resources/themes/images/partkeepr/box/r-blue.gif')}.x-focus-element{position:absolute;top:-10px;left:-10px;width:0px;height:0px}.x-focus-frame{position:absolute;left:0px;top:0px;z-index:100000000;width:0px;height:0px}.x-focus-frame-top,.x-focus-frame-bottom,.x-focus-frame-left,.x-focus-frame-right{position:absolute;top:0px;left:0px}.x-focus-frame-top,.x-focus-frame-bottom{border-top:solid 2px #15428b;height:2px}.x-focus-frame-left,.x-focus-frame-right{border-left:solid 2px #15428b;width:2px}.x-mask{z-index:100;position:absolute;top:0;left:0;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;width:100%;height:100%;zoom:1;background:#ccc}.x-mask-msg{z-index:20001;position:absolute;top:0;left:0;padding:2px;border:1px solid;border-color:#aaa;background-image:none;background-color:#dbdbdb}.x-mask-msg div{padding:5px 10px 5px 25px;background-image:url('../resources/themes/images/partkeepr/grid/loading.gif');background-repeat:no-repeat;background-position:5px center;cursor:wait;border:1px solid #aeaeae;background-color:#eee;color:#222;font:normal 11px tahoma,arial,verdana,sans-serif}.x-boundlist{border-width:1px;border-style:solid;border-color:#c9a5a4;background:#e1e1e1}.x-boundlist .x-toolbar{border-width:1px 0 0 0}.x-boundlist-item{padding:2px;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;cursor:default;cursor:pointer;cursor:hand;position:relative;border-width:1px;border-style:dotted;border-color:#e1e1e1}.x-boundlist-selected{background:#1c6291;border-color:#206f9e}.x-boundlist-item-over{background:#2070a6;border-color:#247eb3;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #3a99d9), color-stop(100%, #1b5f8c));background-image:-webkit-linear-gradient(top, #3a99d9,#1b5f8c);background-image:-moz-linear-gradient(top, #3a99d9,#1b5f8c);background-image:-o-linear-gradient(top, #3a99d9,#1b5f8c);background-image:-ms-linear-gradient(top, #3a99d9,#1b5f8c);background-image:linear-gradient(top, #3a99d9,#1b5f8c);color:white}.x-boundlist-floating{border-top-width:0}.x-boundlist-above{border-top-width:1px;border-bottom-width:1px}.x-btn{display:inline-block;zoom:1;*display:inline;position:relative;cursor:pointer;cursor:hand;white-space:nowrap;vertical-align:middle;-moz-box-shadow:inset 0 1px 1px 0 #fff;-webkit-box-shadow:inset 0 1px 1px 0 #fff;-o-box-shadow:inset 0 1px 1px 0 #fff;box-shadow:inset 0 1px 1px 0 #fff;background-repeat:no-repeat}.x-btn *{cursor:pointer;cursor:hand}.x-btn em{background-repeat:no-repeat}.x-btn em a{text-decoration:none;display:inline-block;color:inherit}.x-btn button{margin:0;padding:0;border:0;width:auto;background:none;outline:0 none;overflow:hidden;vertical-align:bottom;-webkit-appearance:none}.x-btn button::-moz-focus-inner{border:0;padding:0}.x-btn .x-btn-inner{display:block;white-space:nowrap;text-align:center;background-color:transparent;background-repeat:no-repeat;background-position:left center}.x-btn-disabled{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1}.x-btn-disabled span{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5}.x-ie6 .x-btn-disabled span,.x-ie7 .x-btn-disabled span{filter:none}.x-ie7 .x-btn-disabled,.x-ie8 .x-btn-disabled{filter:none}.x-ie6 .x-btn-disabled .x-btn-icon,.x-ie7 .x-btn-disabled .x-btn-icon,.x-ie8 .x-btn-disabled .x-btn-icon{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=60);opacity:0.6}* html .x-ie .x-btn button{width:1px}.x-ie .x-btn button{overflow-x:visible;vertical-align:baseline}.x-strict .x-ie6 .x-btn .x-frame-mc,.x-strict .x-ie7 .x-btn .x-frame-mc{height:100%}.x-nbr .x-btn .x-frame-mc{vertical-align:middle;white-space:nowrap;text-align:center;cursor:pointer}.x-btn-icon-text-left .x-btn-icon{background-position:left center}.x-btn-icon-text-right .x-btn-icon{background-position:right center}.x-btn-icon-text-top .x-btn-icon{background-position:center top}.x-btn-icon-text-bottom .x-btn-icon{background-position:center bottom}.x-btn button,.x-btn a{position:relative}.x-btn button .x-btn-icon,.x-btn a .x-btn-icon{position:absolute;background-repeat:no-repeat}.x-btn-arrow-right{background:transparent no-repeat right center;padding-right:12px}.x-btn-arrow-right .x-btn-inner{padding-right:0 !important}.x-toolbar .x-btn-arrow-right{padding-right:12px}.x-btn-arrow-bottom{background:transparent no-repeat center bottom;padding-bottom:12px}.x-btn-arrow{background-image:url('../resources/themes/images/partkeepr/button/arrow.gif');display:block}.x-btn-split-right,.x-btn-over .x-btn-split-right{background:transparent no-repeat right center;background-image:url('../resources/themes/images/partkeepr/button/s-arrow.gif');padding-right:14px !important}.x-btn-split-bottom,.x-btn-over .x-btn-split-bottom{background:transparent no-repeat center bottom;background-image:url('../resources/themes/images/partkeepr/button/s-arrow-b.gif');padding-bottom:14px}.x-toolbar .x-btn-split-right{background-image:url('../resources/themes/images/partkeepr/button/s-arrow-noline.gif');padding-right:12px !important}.x-toolbar .x-btn-split-bottom{background-image:url('../resources/themes/images/partkeepr/button/s-arrow-b-noline.gif')}.x-btn-split{display:block}.x-item-disabled,.x-item-disabled *{cursor:default}.x-cycle-fixed-width .x-btn-inner{text-align:inherit}.x-btn-over .x-btn-split-right{background-image:url('../resources/themes/images/partkeepr/button/s-arrow-o.gif')}.x-btn-over .x-btn-split-bottom{background-image:url('../resources/themes/images/partkeepr/button/s-arrow-bo.gif')}.x-btn-default-small{border-color:#b9b9b9}.x-btn-default-small{-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#cbcbcb;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-btn-default-small-mc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-bg.gif');background-color:#cbcbcb}.x-nbr .x-btn-default-small{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100505px 1000505px}.x-nbr .x-btn-default-small-tl,.x-nbr .x-btn-default-small-bl,.x-nbr .x-btn-default-small-tr,.x-nbr .x-btn-default-small-br,.x-nbr .x-btn-default-small-tc,.x-nbr .x-btn-default-small-bc,.x-nbr .x-btn-default-small-ml,.x-nbr .x-btn-default-small-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-corners.gif')}.x-nbr .x-btn-default-small-ml,.x-nbr .x-btn-default-small-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-sides.gif');background-position:0 0}.x-nbr .x-btn-default-small-mc{padding:0 0 0 0}.x-btn-default-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;background-repeat:no-repeat;padding:0 4px}.x-btn-default-small-icon button,.x-btn-default-small-icon .x-btn-inner,.x-btn-default-small-noicon button,.x-btn-default-small-noicon .x-btn-inner{height:16px;line-height:16px}.x-btn-default-small-icon button{padding:0;width:16px !important;height:16px}.x-btn-default-small-icon .x-btn-icon{width:16px;height:16px;top:0;left:0;bottom:0;right:0}.x-btn-default-small-icon-text-left button{height:16px}.x-btn-default-small-icon-text-left .x-btn-inner{height:16px;line-height:16px;padding-left:20px}.x-btn-default-small-icon-text-left .x-btn-icon{width:16px;height:auto;top:0;left:0;bottom:0;right:auto}.x-ie6 .x-btn-default-small-icon-text-left .x-btn-icon,.x-quirks .x-btn-default-small-icon-text-left .x-btn-icon{height:16px}.x-btn-default-small-icon-text-right button{height:16px}.x-btn-default-small-icon-text-right .x-btn-inner{height:16px;line-height:16px;padding-right:20px !important}.x-btn-default-small-icon-text-right .x-btn-icon{width:16px;height:auto;top:0;left:auto;bottom:0;right:0}.x-ie6 .x-btn-default-small-icon-text-right .x-btn-icon,.x-quirks .x-btn-default-small-icon-text-right .x-btn-icon{height:16px}.x-btn-default-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-small-icon-text-top .x-btn-icon{width:auto;height:16px;top:0;left:0;bottom:auto;right:0}.x-ie6 .x-btn-default-small-icon-text-top .x-btn-icon,.x-quirks .x-btn-default-small-icon-text-top .x-btn-icon{width:16px}.x-btn-default-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-small-icon-text-bottom .x-btn-icon{width:auto;height:16px;top:auto;left:0;bottom:0;right:0}.x-ie6 .x-btn-default-small-icon-text-bottom .x-btn-icon,.x-quirks .x-btn-default-small-icon-text-bottom .x-btn-icon{width:16px}.x-btn-default-small-over{border-color:#cbb8b8;background-image:none;background-color:#efd5d8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-small-focus{border-color:#cbb8b8;background-image:none;background-color:#efd5d8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-small-menu-active,.x-btn-default-small-pressed{-moz-box-shadow:inset 0 1px 1px 0 #ddd;-webkit-box-shadow:inset 0 1px 1px 0 #ddd;-o-box-shadow:inset 0 1px 1px 0 #ddd;box-shadow:inset 0 1px 1px 0 #ddd;border-color:#b5abab;background-image:none;background-color:#bebebe;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #cccccc));background-image:-webkit-linear-gradient(top, #c7c7c7,#cccccc);background-image:-moz-linear-gradient(top, #c7c7c7,#cccccc);background-image:-o-linear-gradient(top, #c7c7c7,#cccccc);background-image:-ms-linear-gradient(top, #c7c7c7,#cccccc);background-image:linear-gradient(top, #c7c7c7,#cccccc)}.x-btn-default-small-disabled{-moz-box-shadow:inset 0 0px 0px 0 #fff;-webkit-box-shadow:inset 0 0px 0px 0 #fff;-o-box-shadow:inset 0 0px 0px 0 #fff;box-shadow:inset 0 0px 0px 0 #fff;border-color:#d2d2d2;background-image:none;background-color:#e7e7e7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7e7e7), color-stop(48%, #e1e1e1), color-stop(52%, #cacaca), color-stop(100%, #cfcfcf));background-image:-webkit-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-moz-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-o-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-ms-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf)}.x-btn-default-small-disabled .x-btn-inner{color:#333 !important}.x-ie .x-btn-default-small-disabled .x-btn-inner{color:#595959 !important}.x-ie6 .x-btn-default-small-disabled .x-btn-inner{color:#8c8c8c !important}.x-nbr .x-btn-default-small-over .x-frame-tl,.x-nbr .x-btn-default-small-over .x-frame-bl,.x-nbr .x-btn-default-small-over .x-frame-tr,.x-nbr .x-btn-default-small-over .x-frame-br,.x-nbr .x-btn-default-small-over .x-frame-tc,.x-nbr .x-btn-default-small-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-over-corners.gif')}.x-nbr .x-btn-default-small-over .x-frame-ml,.x-nbr .x-btn-default-small-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-over-sides.gif')}.x-nbr .x-btn-default-small-over .x-frame-mc{background-color:#efd5d8;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-over-bg.gif')}.x-nbr .x-btn-default-small-focus .x-frame-tl,.x-nbr .x-btn-default-small-focus .x-frame-bl,.x-nbr .x-btn-default-small-focus .x-frame-tr,.x-nbr .x-btn-default-small-focus .x-frame-br,.x-nbr .x-btn-default-small-focus .x-frame-tc,.x-nbr .x-btn-default-small-focus .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-focus-corners.gif')}.x-nbr .x-btn-default-small-focus .x-frame-ml,.x-nbr .x-btn-default-small-focus .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-focus-sides.gif')}.x-nbr .x-btn-default-small-focus .x-frame-mc{background-color:#efd5d8;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-focus-bg.gif')}.x-nbr .x-btn-default-small-menu-active .x-frame-tl,.x-nbr .x-btn-default-small-menu-active .x-frame-bl,.x-nbr .x-btn-default-small-menu-active .x-frame-tr,.x-nbr .x-btn-default-small-menu-active .x-frame-br,.x-nbr .x-btn-default-small-menu-active .x-frame-tc,.x-nbr .x-btn-default-small-menu-active .x-frame-bc,.x-nbr .x-btn-default-small-pressed .x-frame-tl,.x-nbr .x-btn-default-small-pressed .x-frame-bl,.x-nbr .x-btn-default-small-pressed .x-frame-tr,.x-nbr .x-btn-default-small-pressed .x-frame-br,.x-nbr .x-btn-default-small-pressed .x-frame-tc,.x-nbr .x-btn-default-small-pressed .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-pressed-corners.gif')}.x-nbr .x-btn-default-small-menu-active .x-frame-ml,.x-nbr .x-btn-default-small-menu-active .x-frame-mr,.x-nbr .x-btn-default-small-pressed .x-frame-ml,.x-nbr .x-btn-default-small-pressed .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-pressed-sides.gif')}.x-nbr .x-btn-default-small-menu-active .x-frame-mc,.x-nbr .x-btn-default-small-pressed .x-frame-mc{background-color:#bebebe;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-pressed-bg.gif')}.x-nbr .x-btn-default-small-disabled .x-frame-tl,.x-nbr .x-btn-default-small-disabled .x-frame-bl,.x-nbr .x-btn-default-small-disabled .x-frame-tr,.x-nbr .x-btn-default-small-disabled .x-frame-br,.x-nbr .x-btn-default-small-disabled .x-frame-tc,.x-nbr .x-btn-default-small-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-disabled-corners.gif')}.x-nbr .x-btn-default-small-disabled .x-frame-ml,.x-nbr .x-btn-default-small-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-disabled-sides.gif')}.x-nbr .x-btn-default-small-disabled .x-frame-mc{background-color:#e7e7e7;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-disabled-bg.gif')}.x-nlg .x-btn-default-small{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-bg.gif')}.x-nlg .x-btn-default-small-over{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-over-bg.gif')}.x-nlg .x-btn-default-small-focus{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-focus-bg.gif')}.x-nlg .x-btn-default-small-menu-active,.x-nlg .x-btn-default-small-pressed{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-pressed-bg.gif')}.x-nlg .x-btn-default-small-disabled{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-small-disabled-bg.gif')}.x-btn-default-medium{border-color:#b9b9b9}.x-btn-default-medium{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#cbcbcb;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-btn-default-medium-mc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-bg.gif');background-color:#cbcbcb}.x-nbr .x-btn-default-medium{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100303px 1000303px}.x-nbr .x-btn-default-medium-tl,.x-nbr .x-btn-default-medium-bl,.x-nbr .x-btn-default-medium-tr,.x-nbr .x-btn-default-medium-br,.x-nbr .x-btn-default-medium-tc,.x-nbr .x-btn-default-medium-bc,.x-nbr .x-btn-default-medium-ml,.x-nbr .x-btn-default-medium-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-corners.gif')}.x-nbr .x-btn-default-medium-ml,.x-nbr .x-btn-default-medium-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-sides.gif');background-position:0 0}.x-nbr .x-btn-default-medium-mc{padding:0px 0px 0px 0px}.x-btn-default-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;background-repeat:no-repeat;padding:0 3px}.x-btn-default-medium-icon button,.x-btn-default-medium-icon .x-btn-inner,.x-btn-default-medium-noicon button,.x-btn-default-medium-noicon .x-btn-inner{height:24px;line-height:24px}.x-btn-default-medium-icon button{padding:0;width:24px !important;height:24px}.x-btn-default-medium-icon .x-btn-icon{width:24px;height:24px;top:0;left:0;bottom:0;right:0}.x-btn-default-medium-icon-text-left button{height:24px}.x-btn-default-medium-icon-text-left .x-btn-inner{height:24px;line-height:24px;padding-left:28px}.x-btn-default-medium-icon-text-left .x-btn-icon{width:24px;height:auto;top:0;left:0;bottom:0;right:auto}.x-ie6 .x-btn-default-medium-icon-text-left .x-btn-icon,.x-quirks .x-btn-default-medium-icon-text-left .x-btn-icon{height:24px}.x-btn-default-medium-icon-text-right button{height:24px}.x-btn-default-medium-icon-text-right .x-btn-inner{height:24px;line-height:24px;padding-right:28px !important}.x-btn-default-medium-icon-text-right .x-btn-icon{width:24px;height:auto;top:0;left:auto;bottom:0;right:0}.x-ie6 .x-btn-default-medium-icon-text-right .x-btn-icon,.x-quirks .x-btn-default-medium-icon-text-right .x-btn-icon{height:24px}.x-btn-default-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-medium-icon-text-top .x-btn-icon{width:auto;height:24px;top:0;left:0;bottom:auto;right:0}.x-ie6 .x-btn-default-medium-icon-text-top .x-btn-icon,.x-quirks .x-btn-default-medium-icon-text-top .x-btn-icon{width:24px}.x-btn-default-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-medium-icon-text-bottom .x-btn-icon{width:auto;height:24px;top:auto;left:0;bottom:0;right:0}.x-ie6 .x-btn-default-medium-icon-text-bottom .x-btn-icon,.x-quirks .x-btn-default-medium-icon-text-bottom .x-btn-icon{width:24px}.x-btn-default-medium-over{border-color:#cbb8b8;background-image:none;background-color:#efd5d8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-medium-focus{border-color:#cbb8b8;background-image:none;background-color:#efd5d8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-medium-menu-active,.x-btn-default-medium-pressed{-moz-box-shadow:inset 0 1px 1px 0 #ddd;-webkit-box-shadow:inset 0 1px 1px 0 #ddd;-o-box-shadow:inset 0 1px 1px 0 #ddd;box-shadow:inset 0 1px 1px 0 #ddd;border-color:#b5abab;background-image:none;background-color:#bebebe;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #cccccc));background-image:-webkit-linear-gradient(top, #c7c7c7,#cccccc);background-image:-moz-linear-gradient(top, #c7c7c7,#cccccc);background-image:-o-linear-gradient(top, #c7c7c7,#cccccc);background-image:-ms-linear-gradient(top, #c7c7c7,#cccccc);background-image:linear-gradient(top, #c7c7c7,#cccccc)}.x-btn-default-medium-disabled{-moz-box-shadow:inset 0 0px 0px 0 #fff;-webkit-box-shadow:inset 0 0px 0px 0 #fff;-o-box-shadow:inset 0 0px 0px 0 #fff;box-shadow:inset 0 0px 0px 0 #fff;border-color:#d2d2d2;background-image:none;background-color:#e7e7e7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7e7e7), color-stop(48%, #e1e1e1), color-stop(52%, #cacaca), color-stop(100%, #cfcfcf));background-image:-webkit-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-moz-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-o-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-ms-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf)}.x-btn-default-medium-disabled .x-btn-inner{color:#333 !important}.x-ie .x-btn-default-medium-disabled .x-btn-inner{color:#595959 !important}.x-ie6 .x-btn-default-medium-disabled .x-btn-inner{color:#8c8c8c !important}.x-nbr .x-btn-default-medium-over .x-frame-tl,.x-nbr .x-btn-default-medium-over .x-frame-bl,.x-nbr .x-btn-default-medium-over .x-frame-tr,.x-nbr .x-btn-default-medium-over .x-frame-br,.x-nbr .x-btn-default-medium-over .x-frame-tc,.x-nbr .x-btn-default-medium-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-over-corners.gif')}.x-nbr .x-btn-default-medium-over .x-frame-ml,.x-nbr .x-btn-default-medium-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-over-sides.gif')}.x-nbr .x-btn-default-medium-over .x-frame-mc{background-color:#efd5d8;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-over-bg.gif')}.x-nbr .x-btn-default-medium-focus .x-frame-tl,.x-nbr .x-btn-default-medium-focus .x-frame-bl,.x-nbr .x-btn-default-medium-focus .x-frame-tr,.x-nbr .x-btn-default-medium-focus .x-frame-br,.x-nbr .x-btn-default-medium-focus .x-frame-tc,.x-nbr .x-btn-default-medium-focus .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-focus-corners.gif')}.x-nbr .x-btn-default-medium-focus .x-frame-ml,.x-nbr .x-btn-default-medium-focus .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-focus-sides.gif')}.x-nbr .x-btn-default-medium-focus .x-frame-mc{background-color:#efd5d8;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-focus-bg.gif')}.x-nbr .x-btn-default-medium-menu-active .x-frame-tl,.x-nbr .x-btn-default-medium-menu-active .x-frame-bl,.x-nbr .x-btn-default-medium-menu-active .x-frame-tr,.x-nbr .x-btn-default-medium-menu-active .x-frame-br,.x-nbr .x-btn-default-medium-menu-active .x-frame-tc,.x-nbr .x-btn-default-medium-menu-active .x-frame-bc,.x-nbr .x-btn-default-medium-pressed .x-frame-tl,.x-nbr .x-btn-default-medium-pressed .x-frame-bl,.x-nbr .x-btn-default-medium-pressed .x-frame-tr,.x-nbr .x-btn-default-medium-pressed .x-frame-br,.x-nbr .x-btn-default-medium-pressed .x-frame-tc,.x-nbr .x-btn-default-medium-pressed .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-pressed-corners.gif')}.x-nbr .x-btn-default-medium-menu-active .x-frame-ml,.x-nbr .x-btn-default-medium-menu-active .x-frame-mr,.x-nbr .x-btn-default-medium-pressed .x-frame-ml,.x-nbr .x-btn-default-medium-pressed .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-pressed-sides.gif')}.x-nbr .x-btn-default-medium-menu-active .x-frame-mc,.x-nbr .x-btn-default-medium-pressed .x-frame-mc{background-color:#bebebe;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-pressed-bg.gif')}.x-nbr .x-btn-default-medium-disabled .x-frame-tl,.x-nbr .x-btn-default-medium-disabled .x-frame-bl,.x-nbr .x-btn-default-medium-disabled .x-frame-tr,.x-nbr .x-btn-default-medium-disabled .x-frame-br,.x-nbr .x-btn-default-medium-disabled .x-frame-tc,.x-nbr .x-btn-default-medium-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-disabled-corners.gif')}.x-nbr .x-btn-default-medium-disabled .x-frame-ml,.x-nbr .x-btn-default-medium-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-disabled-sides.gif')}.x-nbr .x-btn-default-medium-disabled .x-frame-mc{background-color:#e7e7e7;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-disabled-bg.gif')}.x-nlg .x-btn-default-medium{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-bg.gif')}.x-nlg .x-btn-default-medium-over{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-over-bg.gif')}.x-nlg .x-btn-default-medium-focus{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-focus-bg.gif')}.x-nlg .x-btn-default-medium-menu-active,.x-nlg .x-btn-default-medium-pressed{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-pressed-bg.gif')}.x-nlg .x-btn-default-medium-disabled{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-medium-disabled-bg.gif')}.x-btn-default-large{border-color:#b9b9b9}.x-btn-default-large{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#cbcbcb;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-btn-default-large-mc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-bg.gif');background-color:#cbcbcb}.x-nbr .x-btn-default-large{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100303px 1000303px}.x-nbr .x-btn-default-large-tl,.x-nbr .x-btn-default-large-bl,.x-nbr .x-btn-default-large-tr,.x-nbr .x-btn-default-large-br,.x-nbr .x-btn-default-large-tc,.x-nbr .x-btn-default-large-bc,.x-nbr .x-btn-default-large-ml,.x-nbr .x-btn-default-large-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-corners.gif')}.x-nbr .x-btn-default-large-ml,.x-nbr .x-btn-default-large-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-sides.gif');background-position:0 0}.x-nbr .x-btn-default-large-mc{padding:0px 0px 0px 0px}.x-btn-default-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;background-repeat:no-repeat;padding:0 3px}.x-btn-default-large-icon button,.x-btn-default-large-icon .x-btn-inner,.x-btn-default-large-noicon button,.x-btn-default-large-noicon .x-btn-inner{height:32px;line-height:32px}.x-btn-default-large-icon button{padding:0;width:32px !important;height:32px}.x-btn-default-large-icon .x-btn-icon{width:32px;height:32px;top:0;left:0;bottom:0;right:0}.x-btn-default-large-icon-text-left button{height:32px}.x-btn-default-large-icon-text-left .x-btn-inner{height:32px;line-height:32px;padding-left:36px}.x-btn-default-large-icon-text-left .x-btn-icon{width:32px;height:auto;top:0;left:0;bottom:0;right:auto}.x-ie6 .x-btn-default-large-icon-text-left .x-btn-icon,.x-quirks .x-btn-default-large-icon-text-left .x-btn-icon{height:32px}.x-btn-default-large-icon-text-right button{height:32px}.x-btn-default-large-icon-text-right .x-btn-inner{height:32px;line-height:32px;padding-right:36px !important}.x-btn-default-large-icon-text-right .x-btn-icon{width:32px;height:auto;top:0;left:auto;bottom:0;right:0}.x-ie6 .x-btn-default-large-icon-text-right .x-btn-icon,.x-quirks .x-btn-default-large-icon-text-right .x-btn-icon{height:32px}.x-btn-default-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-large-icon-text-top .x-btn-icon{width:auto;height:32px;top:0;left:0;bottom:auto;right:0}.x-ie6 .x-btn-default-large-icon-text-top .x-btn-icon,.x-quirks .x-btn-default-large-icon-text-top .x-btn-icon{width:32px}.x-btn-default-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-large-icon-text-bottom .x-btn-icon{width:auto;height:32px;top:auto;left:0;bottom:0;right:0}.x-ie6 .x-btn-default-large-icon-text-bottom .x-btn-icon,.x-quirks .x-btn-default-large-icon-text-bottom .x-btn-icon{width:32px}.x-btn-default-large-over{border-color:#cbb8b8;background-image:none;background-color:#efd5d8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-large-focus{border-color:#cbb8b8;background-image:none;background-color:#efd5d8;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-large-menu-active,.x-btn-default-large-pressed{-moz-box-shadow:inset 0 1px 1px 0 #ddd;-webkit-box-shadow:inset 0 1px 1px 0 #ddd;-o-box-shadow:inset 0 1px 1px 0 #ddd;box-shadow:inset 0 1px 1px 0 #ddd;border-color:#b5abab;background-image:none;background-color:#bebebe;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #cccccc));background-image:-webkit-linear-gradient(top, #c7c7c7,#cccccc);background-image:-moz-linear-gradient(top, #c7c7c7,#cccccc);background-image:-o-linear-gradient(top, #c7c7c7,#cccccc);background-image:-ms-linear-gradient(top, #c7c7c7,#cccccc);background-image:linear-gradient(top, #c7c7c7,#cccccc)}.x-btn-default-large-disabled{-moz-box-shadow:inset 0 0px 0px 0 #fff;-webkit-box-shadow:inset 0 0px 0px 0 #fff;-o-box-shadow:inset 0 0px 0px 0 #fff;box-shadow:inset 0 0px 0px 0 #fff;border-color:#d2d2d2;background-image:none;background-color:#e7e7e7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7e7e7), color-stop(48%, #e1e1e1), color-stop(52%, #cacaca), color-stop(100%, #cfcfcf));background-image:-webkit-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-moz-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-o-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:-ms-linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf);background-image:linear-gradient(top, #e7e7e7,#e1e1e1 48%,#cacaca 52%,#cfcfcf)}.x-btn-default-large-disabled .x-btn-inner{color:#333 !important}.x-ie .x-btn-default-large-disabled .x-btn-inner{color:#595959 !important}.x-ie6 .x-btn-default-large-disabled .x-btn-inner{color:#8c8c8c !important}.x-nbr .x-btn-default-large-over .x-frame-tl,.x-nbr .x-btn-default-large-over .x-frame-bl,.x-nbr .x-btn-default-large-over .x-frame-tr,.x-nbr .x-btn-default-large-over .x-frame-br,.x-nbr .x-btn-default-large-over .x-frame-tc,.x-nbr .x-btn-default-large-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-over-corners.gif')}.x-nbr .x-btn-default-large-over .x-frame-ml,.x-nbr .x-btn-default-large-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-over-sides.gif')}.x-nbr .x-btn-default-large-over .x-frame-mc{background-color:#efd5d8;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-over-bg.gif')}.x-nbr .x-btn-default-large-focus .x-frame-tl,.x-nbr .x-btn-default-large-focus .x-frame-bl,.x-nbr .x-btn-default-large-focus .x-frame-tr,.x-nbr .x-btn-default-large-focus .x-frame-br,.x-nbr .x-btn-default-large-focus .x-frame-tc,.x-nbr .x-btn-default-large-focus .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-focus-corners.gif')}.x-nbr .x-btn-default-large-focus .x-frame-ml,.x-nbr .x-btn-default-large-focus .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-focus-sides.gif')}.x-nbr .x-btn-default-large-focus .x-frame-mc{background-color:#efd5d8;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-focus-bg.gif')}.x-nbr .x-btn-default-large-menu-active .x-frame-tl,.x-nbr .x-btn-default-large-menu-active .x-frame-bl,.x-nbr .x-btn-default-large-menu-active .x-frame-tr,.x-nbr .x-btn-default-large-menu-active .x-frame-br,.x-nbr .x-btn-default-large-menu-active .x-frame-tc,.x-nbr .x-btn-default-large-menu-active .x-frame-bc,.x-nbr .x-btn-default-large-pressed .x-frame-tl,.x-nbr .x-btn-default-large-pressed .x-frame-bl,.x-nbr .x-btn-default-large-pressed .x-frame-tr,.x-nbr .x-btn-default-large-pressed .x-frame-br,.x-nbr .x-btn-default-large-pressed .x-frame-tc,.x-nbr .x-btn-default-large-pressed .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-pressed-corners.gif')}.x-nbr .x-btn-default-large-menu-active .x-frame-ml,.x-nbr .x-btn-default-large-menu-active .x-frame-mr,.x-nbr .x-btn-default-large-pressed .x-frame-ml,.x-nbr .x-btn-default-large-pressed .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-pressed-sides.gif')}.x-nbr .x-btn-default-large-menu-active .x-frame-mc,.x-nbr .x-btn-default-large-pressed .x-frame-mc{background-color:#bebebe;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-pressed-bg.gif')}.x-nbr .x-btn-default-large-disabled .x-frame-tl,.x-nbr .x-btn-default-large-disabled .x-frame-bl,.x-nbr .x-btn-default-large-disabled .x-frame-tr,.x-nbr .x-btn-default-large-disabled .x-frame-br,.x-nbr .x-btn-default-large-disabled .x-frame-tc,.x-nbr .x-btn-default-large-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-disabled-corners.gif')}.x-nbr .x-btn-default-large-disabled .x-frame-ml,.x-nbr .x-btn-default-large-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-disabled-sides.gif')}.x-nbr .x-btn-default-large-disabled .x-frame-mc{background-color:#e7e7e7;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-disabled-bg.gif')}.x-nlg .x-btn-default-large{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-bg.gif')}.x-nlg .x-btn-default-large-over{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-over-bg.gif')}.x-nlg .x-btn-default-large-focus{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-focus-bg.gif')}.x-nlg .x-btn-default-large-menu-active,.x-nlg .x-btn-default-large-pressed{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-pressed-bg.gif')}.x-nlg .x-btn-default-large-disabled{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-large-disabled-bg.gif')}.x-btn-default-toolbar-small{border-color:#b9b9b9}.x-btn-default-toolbar-small{-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#c7c7c7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-btn-default-toolbar-small-mc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-bg.gif');background-color:#c7c7c7}.x-nbr .x-btn-default-toolbar-small{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100505px 1000505px}.x-nbr .x-btn-default-toolbar-small-tl,.x-nbr .x-btn-default-toolbar-small-bl,.x-nbr .x-btn-default-toolbar-small-tr,.x-nbr .x-btn-default-toolbar-small-br,.x-nbr .x-btn-default-toolbar-small-tc,.x-nbr .x-btn-default-toolbar-small-bc,.x-nbr .x-btn-default-toolbar-small-ml,.x-nbr .x-btn-default-toolbar-small-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-corners.gif')}.x-nbr .x-btn-default-toolbar-small-ml,.x-nbr .x-btn-default-toolbar-small-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-sides.gif');background-position:0 0}.x-nbr .x-btn-default-toolbar-small-mc{padding:0 0 0 0}.x-btn-default-toolbar-small .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;background-repeat:no-repeat;padding:0 4px}.x-btn-default-toolbar-small-icon button,.x-btn-default-toolbar-small-icon .x-btn-inner,.x-btn-default-toolbar-small-noicon button,.x-btn-default-toolbar-small-noicon .x-btn-inner{height:16px;line-height:16px}.x-btn-default-toolbar-small-icon button{padding:0;width:16px !important;height:16px}.x-btn-default-toolbar-small-icon .x-btn-icon{width:16px;height:16px;top:0;left:0;bottom:0;right:0}.x-btn-default-toolbar-small-icon-text-left button{height:16px}.x-btn-default-toolbar-small-icon-text-left .x-btn-inner{height:16px;line-height:16px;padding-left:20px}.x-btn-default-toolbar-small-icon-text-left .x-btn-icon{width:16px;height:auto;top:0;left:0;bottom:0;right:auto}.x-ie6 .x-btn-default-toolbar-small-icon-text-left .x-btn-icon,.x-quirks .x-btn-default-toolbar-small-icon-text-left .x-btn-icon{height:16px}.x-btn-default-toolbar-small-icon-text-right button{height:16px}.x-btn-default-toolbar-small-icon-text-right .x-btn-inner{height:16px;line-height:16px;padding-right:20px !important}.x-btn-default-toolbar-small-icon-text-right .x-btn-icon{width:16px;height:auto;top:0;left:auto;bottom:0;right:0}.x-ie6 .x-btn-default-toolbar-small-icon-text-right .x-btn-icon,.x-quirks .x-btn-default-toolbar-small-icon-text-right .x-btn-icon{height:16px}.x-btn-default-toolbar-small-icon-text-top .x-btn-inner{padding-top:20px}.x-btn-default-toolbar-small-icon-text-top .x-btn-icon{width:auto;height:16px;top:0;left:0;bottom:auto;right:0}.x-ie6 .x-btn-default-toolbar-small-icon-text-top .x-btn-icon,.x-quirks .x-btn-default-toolbar-small-icon-text-top .x-btn-icon{width:16px}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-inner{padding-bottom:20px}.x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon{width:auto;height:16px;top:auto;left:0;bottom:0;right:0}.x-ie6 .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon,.x-quirks .x-btn-default-toolbar-small-icon-text-bottom .x-btn-icon{width:16px}.x-btn-default-toolbar-small-over{border-color:#999;background-image:none;background-color:#eccfd1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-toolbar-small-focus{border-color:#999;background-image:none;background-color:#eccfd1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-toolbar-small-menu-active,.x-btn-default-toolbar-small-pressed{-moz-box-shadow:inset 0 1px 1px 0 #ddd;-webkit-box-shadow:inset 0 1px 1px 0 #ddd;-o-box-shadow:inset 0 1px 1px 0 #ddd;box-shadow:inset 0 1px 1px 0 #ddd;border-color:#8f8f8f;background-image:none;background-color:#c1c1c1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #cccccc));background-image:-webkit-linear-gradient(top, #c7c7c7,#cccccc);background-image:-moz-linear-gradient(top, #c7c7c7,#cccccc);background-image:-o-linear-gradient(top, #c7c7c7,#cccccc);background-image:-ms-linear-gradient(top, #c7c7c7,#cccccc);background-image:linear-gradient(top, #c7c7c7,#cccccc)}.x-btn-default-toolbar-small-disabled{-moz-box-shadow:inset 0 0px 0px 0 #fff;-webkit-box-shadow:inset 0 0px 0px 0 #fff;-o-box-shadow:inset 0 0px 0px 0 #fff;box-shadow:inset 0 0px 0px 0 #fff;border-color:transparent;background-image:none;background-color:transparent}.x-btn-default-toolbar-small-disabled .x-btn-inner{color:#333 !important}.x-ie .x-btn-default-toolbar-small-disabled .x-btn-inner{color:#595959 !important}.x-ie6 .x-btn-default-toolbar-small-disabled .x-btn-inner{color:#8c8c8c !important}.x-nbr .x-btn-default-toolbar-small-over .x-frame-tl,.x-nbr .x-btn-default-toolbar-small-over .x-frame-bl,.x-nbr .x-btn-default-toolbar-small-over .x-frame-tr,.x-nbr .x-btn-default-toolbar-small-over .x-frame-br,.x-nbr .x-btn-default-toolbar-small-over .x-frame-tc,.x-nbr .x-btn-default-toolbar-small-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-corners.gif')}.x-nbr .x-btn-default-toolbar-small-over .x-frame-ml,.x-nbr .x-btn-default-toolbar-small-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-sides.gif')}.x-nbr .x-btn-default-toolbar-small-over .x-frame-mc{background-color:#eccfd1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-bg.gif')}.x-nbr .x-btn-default-toolbar-small-focus .x-frame-tl,.x-nbr .x-btn-default-toolbar-small-focus .x-frame-bl,.x-nbr .x-btn-default-toolbar-small-focus .x-frame-tr,.x-nbr .x-btn-default-toolbar-small-focus .x-frame-br,.x-nbr .x-btn-default-toolbar-small-focus .x-frame-tc,.x-nbr .x-btn-default-toolbar-small-focus .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-corners.gif')}.x-nbr .x-btn-default-toolbar-small-focus .x-frame-ml,.x-nbr .x-btn-default-toolbar-small-focus .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-sides.gif')}.x-nbr .x-btn-default-toolbar-small-focus .x-frame-mc{background-color:#eccfd1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-bg.gif')}.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-tl,.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-bl,.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-tr,.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-br,.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-tc,.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-bc,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-tl,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-bl,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-tr,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-br,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-tc,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-corners.gif')}.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-ml,.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-mr,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-ml,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-sides.gif')}.x-nbr .x-btn-default-toolbar-small-menu-active .x-frame-mc,.x-nbr .x-btn-default-toolbar-small-pressed .x-frame-mc{background-color:#c1c1c1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-bg.gif')}.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-tl,.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-bl,.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-tr,.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-br,.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-tc,.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-disabled-corners.gif')}.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-ml,.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-disabled-sides.gif')}.x-nbr .x-btn-default-toolbar-small-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-small{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-bg.gif')}.x-nlg .x-btn-default-toolbar-small-over{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-over-bg.gif')}.x-nlg .x-btn-default-toolbar-small-focus{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-focus-bg.gif')}.x-nlg .x-btn-default-toolbar-small-menu-active,.x-nlg .x-btn-default-toolbar-small-pressed{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-small-pressed-bg.gif')}.x-btn-default-toolbar-medium{border-color:#b9b9b9}.x-btn-default-toolbar-medium{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#c7c7c7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-btn-default-toolbar-medium-mc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-bg.gif');background-color:#c7c7c7}.x-nbr .x-btn-default-toolbar-medium{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100303px 1000303px}.x-nbr .x-btn-default-toolbar-medium-tl,.x-nbr .x-btn-default-toolbar-medium-bl,.x-nbr .x-btn-default-toolbar-medium-tr,.x-nbr .x-btn-default-toolbar-medium-br,.x-nbr .x-btn-default-toolbar-medium-tc,.x-nbr .x-btn-default-toolbar-medium-bc,.x-nbr .x-btn-default-toolbar-medium-ml,.x-nbr .x-btn-default-toolbar-medium-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-corners.gif')}.x-nbr .x-btn-default-toolbar-medium-ml,.x-nbr .x-btn-default-toolbar-medium-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-sides.gif');background-position:0 0}.x-nbr .x-btn-default-toolbar-medium-mc{padding:0px 0px 0px 0px}.x-btn-default-toolbar-medium .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;background-repeat:no-repeat;padding:0 3px}.x-btn-default-toolbar-medium-icon button,.x-btn-default-toolbar-medium-icon .x-btn-inner,.x-btn-default-toolbar-medium-noicon button,.x-btn-default-toolbar-medium-noicon .x-btn-inner{height:24px;line-height:24px}.x-btn-default-toolbar-medium-icon button{padding:0;width:24px !important;height:24px}.x-btn-default-toolbar-medium-icon .x-btn-icon{width:24px;height:24px;top:0;left:0;bottom:0;right:0}.x-btn-default-toolbar-medium-icon-text-left button{height:24px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-inner{height:24px;line-height:24px;padding-left:28px}.x-btn-default-toolbar-medium-icon-text-left .x-btn-icon{width:24px;height:auto;top:0;left:0;bottom:0;right:auto}.x-ie6 .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon,.x-quirks .x-btn-default-toolbar-medium-icon-text-left .x-btn-icon{height:24px}.x-btn-default-toolbar-medium-icon-text-right button{height:24px}.x-btn-default-toolbar-medium-icon-text-right .x-btn-inner{height:24px;line-height:24px;padding-right:28px !important}.x-btn-default-toolbar-medium-icon-text-right .x-btn-icon{width:24px;height:auto;top:0;left:auto;bottom:0;right:0}.x-ie6 .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon,.x-quirks .x-btn-default-toolbar-medium-icon-text-right .x-btn-icon{height:24px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-inner{padding-top:28px}.x-btn-default-toolbar-medium-icon-text-top .x-btn-icon{width:auto;height:24px;top:0;left:0;bottom:auto;right:0}.x-ie6 .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon,.x-quirks .x-btn-default-toolbar-medium-icon-text-top .x-btn-icon{width:24px}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-inner{padding-bottom:28px}.x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon{width:auto;height:24px;top:auto;left:0;bottom:0;right:0}.x-ie6 .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon,.x-quirks .x-btn-default-toolbar-medium-icon-text-bottom .x-btn-icon{width:24px}.x-btn-default-toolbar-medium-over{border-color:#999;background-image:none;background-color:#eccfd1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-toolbar-medium-focus{border-color:#999;background-image:none;background-color:#eccfd1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-toolbar-medium-menu-active,.x-btn-default-toolbar-medium-pressed{-moz-box-shadow:inset 0 1px 1px 0 #ddd;-webkit-box-shadow:inset 0 1px 1px 0 #ddd;-o-box-shadow:inset 0 1px 1px 0 #ddd;box-shadow:inset 0 1px 1px 0 #ddd;border-color:#8f8f8f;background-image:none;background-color:#c1c1c1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #cccccc));background-image:-webkit-linear-gradient(top, #c7c7c7,#cccccc);background-image:-moz-linear-gradient(top, #c7c7c7,#cccccc);background-image:-o-linear-gradient(top, #c7c7c7,#cccccc);background-image:-ms-linear-gradient(top, #c7c7c7,#cccccc);background-image:linear-gradient(top, #c7c7c7,#cccccc)}.x-btn-default-toolbar-medium-disabled{-moz-box-shadow:inset 0 0px 0px 0 #fff;-webkit-box-shadow:inset 0 0px 0px 0 #fff;-o-box-shadow:inset 0 0px 0px 0 #fff;box-shadow:inset 0 0px 0px 0 #fff;border-color:transparent;background-image:none;background-color:transparent}.x-btn-default-toolbar-medium-disabled .x-btn-inner{color:#333 !important}.x-ie .x-btn-default-toolbar-medium-disabled .x-btn-inner{color:#595959 !important}.x-ie6 .x-btn-default-toolbar-medium-disabled .x-btn-inner{color:#8c8c8c !important}.x-nbr .x-btn-default-toolbar-medium-over .x-frame-tl,.x-nbr .x-btn-default-toolbar-medium-over .x-frame-bl,.x-nbr .x-btn-default-toolbar-medium-over .x-frame-tr,.x-nbr .x-btn-default-toolbar-medium-over .x-frame-br,.x-nbr .x-btn-default-toolbar-medium-over .x-frame-tc,.x-nbr .x-btn-default-toolbar-medium-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-corners.gif')}.x-nbr .x-btn-default-toolbar-medium-over .x-frame-ml,.x-nbr .x-btn-default-toolbar-medium-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-sides.gif')}.x-nbr .x-btn-default-toolbar-medium-over .x-frame-mc{background-color:#eccfd1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-bg.gif')}.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-tl,.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-bl,.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-tr,.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-br,.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-tc,.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-corners.gif')}.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-ml,.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-sides.gif')}.x-nbr .x-btn-default-toolbar-medium-focus .x-frame-mc{background-color:#eccfd1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-bg.gif')}.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-tl,.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-bl,.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-tr,.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-br,.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-tc,.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-bc,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-tl,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-bl,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-tr,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-br,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-tc,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-corners.gif')}.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-ml,.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-mr,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-ml,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-sides.gif')}.x-nbr .x-btn-default-toolbar-medium-menu-active .x-frame-mc,.x-nbr .x-btn-default-toolbar-medium-pressed .x-frame-mc{background-color:#c1c1c1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-bg.gif')}.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-tl,.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-bl,.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-tr,.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-br,.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-tc,.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-disabled-corners.gif')}.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-ml,.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-disabled-sides.gif')}.x-nbr .x-btn-default-toolbar-medium-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-medium{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-bg.gif')}.x-nlg .x-btn-default-toolbar-medium-over{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-over-bg.gif')}.x-nlg .x-btn-default-toolbar-medium-focus{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-focus-bg.gif')}.x-nlg .x-btn-default-toolbar-medium-menu-active,.x-nlg .x-btn-default-toolbar-medium-pressed{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-medium-pressed-bg.gif')}.x-btn-default-toolbar-large{border-color:#b9b9b9}.x-btn-default-toolbar-large{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;padding:3px 3px 3px 3px;border-width:1px;border-style:solid;background-image:none;background-color:#c7c7c7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-btn-default-toolbar-large-mc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-bg.gif');background-color:#c7c7c7}.x-nbr .x-btn-default-toolbar-large{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100303px 1000303px}.x-nbr .x-btn-default-toolbar-large-tl,.x-nbr .x-btn-default-toolbar-large-bl,.x-nbr .x-btn-default-toolbar-large-tr,.x-nbr .x-btn-default-toolbar-large-br,.x-nbr .x-btn-default-toolbar-large-tc,.x-nbr .x-btn-default-toolbar-large-bc,.x-nbr .x-btn-default-toolbar-large-ml,.x-nbr .x-btn-default-toolbar-large-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-corners.gif')}.x-nbr .x-btn-default-toolbar-large-ml,.x-nbr .x-btn-default-toolbar-large-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-sides.gif');background-position:0 0}.x-nbr .x-btn-default-toolbar-large-mc{padding:0px 0px 0px 0px}.x-btn-default-toolbar-large .x-btn-inner{font-size:11px;font-weight:normal;font-family:tahoma,arial,verdana,sans-serif;color:#333;background-repeat:no-repeat;padding:0 3px}.x-btn-default-toolbar-large-icon button,.x-btn-default-toolbar-large-icon .x-btn-inner,.x-btn-default-toolbar-large-noicon button,.x-btn-default-toolbar-large-noicon .x-btn-inner{height:32px;line-height:32px}.x-btn-default-toolbar-large-icon button{padding:0;width:32px !important;height:32px}.x-btn-default-toolbar-large-icon .x-btn-icon{width:32px;height:32px;top:0;left:0;bottom:0;right:0}.x-btn-default-toolbar-large-icon-text-left button{height:32px}.x-btn-default-toolbar-large-icon-text-left .x-btn-inner{height:32px;line-height:32px;padding-left:36px}.x-btn-default-toolbar-large-icon-text-left .x-btn-icon{width:32px;height:auto;top:0;left:0;bottom:0;right:auto}.x-ie6 .x-btn-default-toolbar-large-icon-text-left .x-btn-icon,.x-quirks .x-btn-default-toolbar-large-icon-text-left .x-btn-icon{height:32px}.x-btn-default-toolbar-large-icon-text-right button{height:32px}.x-btn-default-toolbar-large-icon-text-right .x-btn-inner{height:32px;line-height:32px;padding-right:36px !important}.x-btn-default-toolbar-large-icon-text-right .x-btn-icon{width:32px;height:auto;top:0;left:auto;bottom:0;right:0}.x-ie6 .x-btn-default-toolbar-large-icon-text-right .x-btn-icon,.x-quirks .x-btn-default-toolbar-large-icon-text-right .x-btn-icon{height:32px}.x-btn-default-toolbar-large-icon-text-top .x-btn-inner{padding-top:36px}.x-btn-default-toolbar-large-icon-text-top .x-btn-icon{width:auto;height:32px;top:0;left:0;bottom:auto;right:0}.x-ie6 .x-btn-default-toolbar-large-icon-text-top .x-btn-icon,.x-quirks .x-btn-default-toolbar-large-icon-text-top .x-btn-icon{width:32px}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-inner{padding-bottom:36px}.x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon{width:auto;height:32px;top:auto;left:0;bottom:0;right:0}.x-ie6 .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon,.x-quirks .x-btn-default-toolbar-large-icon-text-bottom .x-btn-icon{width:32px}.x-btn-default-toolbar-large-over{border-color:#999;background-image:none;background-color:#eccfd1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-toolbar-large-focus{border-color:#999;background-image:none;background-color:#eccfd1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #fafafa), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #fafafa,#c7c7c7);background-image:-moz-linear-gradient(top, #fafafa,#c7c7c7);background-image:-o-linear-gradient(top, #fafafa,#c7c7c7);background-image:-ms-linear-gradient(top, #fafafa,#c7c7c7);background-image:linear-gradient(top, #fafafa,#c7c7c7)}.x-btn-default-toolbar-large-menu-active,.x-btn-default-toolbar-large-pressed{-moz-box-shadow:inset 0 1px 1px 0 #ddd;-webkit-box-shadow:inset 0 1px 1px 0 #ddd;-o-box-shadow:inset 0 1px 1px 0 #ddd;box-shadow:inset 0 1px 1px 0 #ddd;border-color:#8f8f8f;background-image:none;background-color:#c1c1c1;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c7c7c7), color-stop(100%, #cccccc));background-image:-webkit-linear-gradient(top, #c7c7c7,#cccccc);background-image:-moz-linear-gradient(top, #c7c7c7,#cccccc);background-image:-o-linear-gradient(top, #c7c7c7,#cccccc);background-image:-ms-linear-gradient(top, #c7c7c7,#cccccc);background-image:linear-gradient(top, #c7c7c7,#cccccc)}.x-btn-default-toolbar-large-disabled{-moz-box-shadow:inset 0 0px 0px 0 #fff;-webkit-box-shadow:inset 0 0px 0px 0 #fff;-o-box-shadow:inset 0 0px 0px 0 #fff;box-shadow:inset 0 0px 0px 0 #fff;border-color:transparent;background-image:none;background-color:transparent}.x-btn-default-toolbar-large-disabled .x-btn-inner{color:#333 !important}.x-ie .x-btn-default-toolbar-large-disabled .x-btn-inner{color:#595959 !important}.x-ie6 .x-btn-default-toolbar-large-disabled .x-btn-inner{color:#8c8c8c !important}.x-nbr .x-btn-default-toolbar-large-over .x-frame-tl,.x-nbr .x-btn-default-toolbar-large-over .x-frame-bl,.x-nbr .x-btn-default-toolbar-large-over .x-frame-tr,.x-nbr .x-btn-default-toolbar-large-over .x-frame-br,.x-nbr .x-btn-default-toolbar-large-over .x-frame-tc,.x-nbr .x-btn-default-toolbar-large-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-corners.gif')}.x-nbr .x-btn-default-toolbar-large-over .x-frame-ml,.x-nbr .x-btn-default-toolbar-large-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-sides.gif')}.x-nbr .x-btn-default-toolbar-large-over .x-frame-mc{background-color:#eccfd1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-bg.gif')}.x-nbr .x-btn-default-toolbar-large-focus .x-frame-tl,.x-nbr .x-btn-default-toolbar-large-focus .x-frame-bl,.x-nbr .x-btn-default-toolbar-large-focus .x-frame-tr,.x-nbr .x-btn-default-toolbar-large-focus .x-frame-br,.x-nbr .x-btn-default-toolbar-large-focus .x-frame-tc,.x-nbr .x-btn-default-toolbar-large-focus .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-corners.gif')}.x-nbr .x-btn-default-toolbar-large-focus .x-frame-ml,.x-nbr .x-btn-default-toolbar-large-focus .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-sides.gif')}.x-nbr .x-btn-default-toolbar-large-focus .x-frame-mc{background-color:#eccfd1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-bg.gif')}.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-tl,.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-bl,.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-tr,.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-br,.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-tc,.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-bc,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-tl,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-bl,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-tr,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-br,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-tc,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-corners.gif')}.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-ml,.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-mr,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-ml,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-sides.gif')}.x-nbr .x-btn-default-toolbar-large-menu-active .x-frame-mc,.x-nbr .x-btn-default-toolbar-large-pressed .x-frame-mc{background-color:#c1c1c1;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-bg.gif')}.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-tl,.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-bl,.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-tr,.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-br,.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-tc,.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-disabled-corners.gif')}.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-ml,.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-disabled-sides.gif')}.x-nbr .x-btn-default-toolbar-large-disabled .x-frame-mc{background-color:transparent}.x-nlg .x-btn-default-toolbar-large{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-bg.gif')}.x-nlg .x-btn-default-toolbar-large-over{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-over-bg.gif')}.x-nlg .x-btn-default-toolbar-large-focus{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-focus-bg.gif')}.x-nlg .x-btn-default-toolbar-large-menu-active,.x-nlg .x-btn-default-toolbar-large-pressed{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/btn/btn-default-toolbar-large-pressed-bg.gif')}.x-btn-default-toolbar-small-disabled,.x-btn-default-toolbar-medium-disabled,.x-btn-default-toolbar-large-disabled{border-color:transparent;background-image:none;background:transparent}.x-btn-group{position:relative;overflow:hidden}.x-btn-group-body{position:relative;zoom:1;padding:0 1px}.x-btn-group-body .x-table-layout-cell{vertical-align:top}.x-btn-group-header-text{white-space:nowrap}.x-btn-group-default-framed{-moz-border-radius:2px;-webkit-border-radius:2px;-o-border-radius:2px;-ms-border-radius:2px;-khtml-border-radius:2px;border-radius:2px;padding:1px 1px 1px 1px;border-width:1px;border-style:solid;background-color:#d0def0}.x-nlg .x-btn-group-default-framed-mc{background-color:#d0def0}.x-nbr .x-btn-group-default-framed{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000202px 1000202px}.x-nbr .x-btn-group-default-framed-tl,.x-nbr .x-btn-group-default-framed-bl,.x-nbr .x-btn-group-default-framed-tr,.x-nbr .x-btn-group-default-framed-br,.x-nbr .x-btn-group-default-framed-tc,.x-nbr .x-btn-group-default-framed-bc,.x-nbr .x-btn-group-default-framed-ml,.x-nbr .x-btn-group-default-framed-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn-group/btn-group-default-framed-corners.gif')}.x-nbr .x-btn-group-default-framed-ml,.x-nbr .x-btn-group-default-framed-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/btn-group/btn-group-default-framed-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-btn-group-default-framed-mc{padding:0 0 0 0}.x-btn-group-default-framed{border-color:#b7c8d7;-moz-box-shadow:#e3ebf5 0 1px 0px 0 inset,#e3ebf5 0 -1px 0px 0 inset,#e3ebf5 -1px 0 0px 0 inset,#e3ebf5 1px 0 0px 0 inset;-webkit-box-shadow:#e3ebf5 0 1px 0px 0 inset,#e3ebf5 0 -1px 0px 0 inset,#e3ebf5 -1px 0 0px 0 inset,#e3ebf5 1px 0 0px 0 inset;-o-box-shadow:#e3ebf5 0 1px 0px 0 inset,#e3ebf5 0 -1px 0px 0 inset,#e3ebf5 -1px 0 0px 0 inset,#e3ebf5 1px 0 0px 0 inset;box-shadow:#e3ebf5 0 1px 0px 0 inset,#e3ebf5 0 -1px 0px 0 inset,#e3ebf5 -1px 0 0px 0 inset,#e3ebf5 1px 0 0px 0 inset}.x-btn-group-header-default-framed{margin:2px 2px 0 2px}.x-btn-group-header-body-default-framed{padding:1px 0;background:#c2d8f0;-moz-border-radius-topleft:2px;-webkit-border-top-left-radius:2px;-o-border-top-left-radius:2px;-ms-border-top-left-radius:2px;-khtml-border-top-left-radius:2px;border-top-left-radius:2px;-moz-border-radius-topright:2px;-webkit-border-top-right-radius:2px;-o-border-top-right-radius:2px;-ms-border-top-right-radius:2px;-khtml-border-top-right-radius:2px;border-top-right-radius:2px}.x-btn-group-header-text-default-framed{font:normal 11px tahoma,arial,verdana,sans-serif;color:#3e6aaa}.x-datepicker{border:1px solid #363232;background-color:#fff;position:relative}.x-datepicker a{-moz-outline:0 none;outline:0 none;color:#4c3635;text-decoration:none;border-width:0}.x-datepicker-inner,.x-datepicker-inner td,.x-datepicker-inner th{border-collapse:separate}.x-datepicker-header{position:relative;height:26px;background-image:none;background-color:#404040;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #484747), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #484747,#363636);background-image:-moz-linear-gradient(top, #484747,#363636);background-image:-o-linear-gradient(top, #484747,#363636);background-image:-ms-linear-gradient(top, #484747,#363636);background-image:linear-gradient(top, #484747,#363636)}.x-datepicker-prev,.x-datepicker-next{position:absolute;top:5px;width:18px}.x-datepicker-prev a,.x-datepicker-next a{display:block;width:16px;height:16px;background-position:top;background-repeat:no-repeat;cursor:pointer;text-decoration:none !important;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=70);opacity:0.7}.x-datepicker-prev a:hover,.x-datepicker-next a:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1}.x-datepicker-next{right:5px}.x-datepicker-next a{background-image:url('../resources/themes/images/partkeepr/shared/right-btn.gif')}.x-datepicker-prev{left:5px}.x-datepicker-prev a{background-image:url('../resources/themes/images/partkeepr/shared/left-btn.gif')}.x-item-disabled .x-datepicker-prev a:hover,.x-item-disabled .x-datepicker-next a:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=60);opacity:0.6}.x-datepicker-month{padding-top:3px}.x-datepicker-month .x-btn,.x-datepicker-month button,.x-datepicker-month .x-btn-tc,.x-datepicker-month .x-btn-tl,.x-datepicker-month .x-btn-tr,.x-datepicker-month .x-btn-mc,.x-datepicker-month .x-btn-ml,.x-datepicker-month .x-btn-mr,.x-datepicker-month .x-btn-bc,.x-datepicker-month .x-btn-bl,.x-datepicker-month .x-btn-br{background:transparent !important;border-width:0 !important}.x-datepicker-month span{color:#fff !important}.x-datepicker-month .x-btn-split-right{background:no-repeat right center !important;background-image:url('../resources/themes/images/partkeepr/button/s-arrow-light.gif');padding-right:12px}.x-datepicker-next{text-align:right}.x-datepicker-month{text-align:center}.x-datepicker-month button{color:#fff !important}table.x-datepicker-inner{width:100%;table-layout:fixed}table.x-datepicker-inner th{width:25px;height:19px;padding:0;color:#fff;font:normal 10px tahoma,arial,verdana,sans-serif;text-align:right;border-bottom:1px solid #d1b7b7;border-collapse:separate;background-image:none;background-color:#e5d6d6;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2aaad3), color-stop(100%, #2067a3));background-image:-webkit-linear-gradient(top, #2aaad3,#2067a3);background-image:-moz-linear-gradient(top, #2aaad3,#2067a3);background-image:-o-linear-gradient(top, #2aaad3,#2067a3);background-image:-ms-linear-gradient(top, #2aaad3,#2067a3);background-image:linear-gradient(top, #2aaad3,#2067a3);cursor:default}table.x-datepicker-inner th span{display:block;padding-right:7px}table.x-datepicker-inner tr{height:20px}table.x-datepicker-inner td{border:1px solid;height:17px;border-color:#fff;text-align:right;padding:0}table.x-datepicker-inner a{padding-right:4px;display:block;zoom:1;font:normal 11px tahoma,arial,verdana,sans-serif;color:#000;text-decoration:none;text-align:right}table.x-datepicker-inner .x-datepicker-active{cursor:pointer;color:black}table.x-datepicker-inner .x-datepicker-selected a{background:repeat-x left top;background-color:#2aaad3;border:1px solid #2067a3;color:white}table.x-datepicker-inner .x-datepicker-selected span{font-weight:bold}table.x-datepicker-inner .x-datepicker-today a{border:1px solid;border-color:darkred}table.x-datepicker-inner .x-datepicker-prevday a,table.x-datepicker-inner .x-datepicker-nextday a{text-decoration:none !important;color:#aaa}table.x-datepicker-inner a:hover,table.x-datepicker-inner .x-datepicker-disabled a:hover{text-decoration:none !important;color:white;background-color:#2aaad3}table.x-datepicker-inner .x-datepicker-disabled a{cursor:default;background-color:#eee;color:#bbb}.x-datepicker-footer,.x-monthpicker-buttons{position:relative;border-top:1px solid #d1b7b7;background-image:none;background-color:#e5d6d6;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dadada), color-stop(49%, #d1d1d1), color-stop(51%, #cbcbcb), color-stop(100%, #cdcdcd));background-image:-webkit-linear-gradient(top, #dadada,#d1d1d1 49%,#cbcbcb 51%,#cdcdcd);background-image:-moz-linear-gradient(top, #dadada,#d1d1d1 49%,#cbcbcb 51%,#cdcdcd);background-image:-o-linear-gradient(top, #dadada,#d1d1d1 49%,#cbcbcb 51%,#cdcdcd);background-image:-ms-linear-gradient(top, #dadada,#d1d1d1 49%,#cbcbcb 51%,#cdcdcd);background-image:linear-gradient(top, #dadada,#d1d1d1 49%,#cbcbcb 51%,#cdcdcd);text-align:center}.x-datepicker-footer .x-btn,.x-monthpicker-buttons .x-btn{position:relative;margin:4px}.x-item-disabled .x-datepicker-inner a:hover{background:none}.x-datepicker .x-monthpicker{position:absolute;left:0;top:0}.x-monthpicker{border:1px solid #363232;background-color:#fff}.x-monthpicker-months,.x-monthpicker-years{float:left;height:167px;width:88px}.x-monthpicker-item{float:left;margin:4px 0 5px 0;font:normal 11px tahoma,arial,verdana,sans-serif;text-align:center;vertical-align:middle;height:18px;width:43px;border:0 none}.x-monthpicker-item a{display:block;margin:0 5px 0 5px;text-decoration:none;color:#4c3635;border:1px solid #fff;line-height:17px}.x-monthpicker-item a:hover{background-color:#2aaad3}.x-monthpicker-item a.x-monthpicker-selected{background-color:#e5d6d6;border:1px solid #2067a3}.x-monthpicker-months{border-right:1px solid #363232;width:87px}.x-monthpicker-years .x-monthpicker-item{width:44px}.x-monthpicker-yearnav{height:28px}.x-monthpicker-yearnav button{background-image:url('../resources/themes/images/partkeepr/tools/tool-sprites.gif');height:15px;width:15px;padding:0;margin:6px 12px 5px 15px;border:none;outline:0 none}.x-monthpicker-yearnav button::-moz-focus-inner{border:0;padding:0}.x-monthpicker-yearnav-next{background-position:0 -120px}.x-monthpicker-yearnav-next-over{cursor:pointer;cursor:hand;background-position:-15px -120px}.x-monthpicker-yearnav-prev{background-position:0 -105px}.x-monthpicker-yearnav-prev-over{cursor:pointer;cursor:hand;background-position:-15px -105px}.x-monthpicker-small .x-monthpicker-item{margin:2px 0 2px 0}.x-monthpicker-small .x-monthpicker-yearnav{height:23px}.x-monthpicker-small .x-monthpicker-months,.x-monthpicker-small .x-monthpicker-years{height:136px}.x-quirks .x-ie7 .x-monthpicker-buttons .x-btn,.x-quirks .x-ie8 .x-monthpicker-buttons .x-btn{margin-top:2px}.x-quirks .x-monthpicker-small .x-monthpicker-yearnav button{margin-top:3px;margin-bottom:3px}.x-ie6 .x-monthpicker-small .x-monthpicker-yearnav button{margin-top:3px;margin-bottom:3px}.x-nlg .x-datepicker-header{background-image:url('../resources/themes/images/partkeepr/datepicker/datepicker-header-bg.gif');background-repeat:repeat-x;background-position:top left}.x-nlg .x-datepicker-footer,.x-nlg .x-monthpicker-buttons{background-image:url('../resources/themes/images/partkeepr/datepicker/datepicker-footer-bg.gif');background-repeat:repeat-x;background-position:top left}.x-color-picker{width:144px;height:90px;cursor:pointer}.x-color-picker a{border:1px solid #fff;float:left;padding:2px;text-decoration:none;-moz-outline:0 none;outline:0 none;cursor:pointer}.x-color-picker a:hover,.x-color-picker a.x-color-picker-selected{border-color:#8bb8f3;background-color:#deecfd}.x-color-picker em{display:block;border:1px solid #aca899}.x-color-picker em span{cursor:pointer;display:block;height:10px;width:10px;line-height:10px}.x-menu-body{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;cursor:default;background:#f0f0f0 !important;padding:2px}.x-menu-icon-separator{position:absolute;top:0px;left:27px;z-index:0;border-left:solid 1px #e0e0e0;background-color:#fff;width:2px;height:100%;overflow:hidden}.x-menu-plain .x-menu-icon-separator{display:none}.x-menu-focus{display:block;position:absolute;top:-10px;left:-10px;width:0px;height:0px}.x-menu-item{white-space:nowrap;overflow:hidden;z-index:1}.x-menu-item-cmp{margin-bottom:1px}.x-menu-item-link{display:block;padding:0px 2px;margin:1px;text-decoration:none !important;line-height:16px;cursor:default}.x-opera .x-menu-item-link{position:relative}.x-menu-item-icon{width:16px;height:16px;margin:4px 11px 0px 2px;background:no-repeat center center}.x-menu-item-text{position:relative;font-size:11px;color:#222;top:-4px}.x-menu-item-checked .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/menu/checked.gif')}.x-menu-item-checked .x-menu-group-icon{background-image:url('../resources/themes/images/partkeepr/menu/group-checked.gif')}.x-menu-item-unchecked .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/menu/unchecked.gif')}.x-menu-item-unchecked .x-menu-group-icon{background-image:none}.x-menu-item-separator{height:2px;border-top:solid 1px #e0e0e0;background-color:#fff;margin:2px 0px;overflow:hidden}.x-menu-item-arrow{position:absolute;width:12px;height:9px;top:9px;right:0px;background:url('../resources/themes/images/partkeepr/menu/menu-parent.gif') no-repeat center center}.x-menu-item-indent{margin-left:31px}.x-menu-item-active{cursor:pointer}.x-menu-item-active .x-menu-item-link{background-image:none;background-color:#eff1f3;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eff1f3), color-stop(100%, #b0bcc5));background-image:-webkit-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-moz-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-o-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-ms-linear-gradient(top, #eff1f3,#b0bcc5);background-image:linear-gradient(top, #eff1f3,#b0bcc5);margin:0px;border:1px solid #a9cbf5;cursor:pointer;-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px}.x-menu-item-disabled{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5}.x-ie .x-menu-item-link{line-height:17px;padding-bottom:1px}.x-ie .x-menu-item-disabled .x-menu-item-icon{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5}.x-ie .x-menu-item-disabled .x-menu-item-text{background-color:#f0f0f0}.x-strict .x-ie .x-menu-icon-separator{width:1px}.x-strict .x-ie .x-menu-item-separator{height:1px}.x-ie6 .x-menu-item-link,.x-ie7 .x-menu-item-link,.x-quirks .x-ie8 .x-menu-item-link{padding-bottom:2px}.x-nlg .x-menu-item-active .x-menu-item-link{background:#eff1f3 url('../resources/themes/images/partkeepr/menu/menu-item-active-bg.gif') repeat-x left top}.x-menu-date-item{border-color:#99BBE8}.x-panel .x-grid-body{background:#fff;border-color:#aaa;border-style:solid;border-width:1px;border-top-color:#c5c5c5}.x-panel .x-grid-header-ct-hidden{border-top-width:0 !important}.x-grid-header-hidden .x-grid-body{border-top-color:#aaa !important}.x-grid-view{overflow:hidden;position:relative}.x-grid-table{table-layout:fixed;border-collapse:separate}.x-grid-row .x-grid-table{border-collapse:collapse}.x-grid-locked .x-grid-inner-locked{border-width:0 1px 0 0 !important;border-style:solid}.x-grid-header-ct{cursor:default;zoom:1;padding:0;border:1px solid #aaa;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-border-box .x-ie9 .x-grid-header-ct{padding-left:1px}.x-ie6 .x-grid-header-ct,.x-ie7 .x-grid-header-ct{padding-left:1px}.x-column-header{padding:0;position:absolute;overflow:hidden;border-right:1px solid #b9b9b9;border-left:0 none;border-top:0 none;border-bottom:0 none;text-shadow:0 1px 0 rgba(255,255,255,0.3);font:normal 11px/15px tahoma,arial,verdana,sans-serif;color:null;font:normal 11px tahoma,arial,verdana,sans-serif;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-header{padding:0;border-left-width:0}.x-group-sub-header{background:transparent;border-top:1px solid #c5c5c5;border-left-width:0}.x-column-header-inner{zoom:1;position:relative;white-space:nowrap;line-height:22px;padding:0px 6px}.x-column-header-inner .x-column-header-text{white-space:nowrap}.x-column-header-over,.x-column-header-sort-ASC,.x-column-header-sort-DESC{border-left-color:#b9b9b9;border-right-color:#b9b9b9;text-shadow:0 1px 0 rgba(255,255,255,0.3);background-image:none;background-color:#2373af;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eff1f3), color-stop(100%, #b0bcc5));background-image:-webkit-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-moz-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-o-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-ms-linear-gradient(top, #eff1f3,#b0bcc5);background-image:linear-gradient(top, #eff1f3,#b0bcc5)}.x-nlg .x-grid-header-ct,.x-nlg .x-column-header{background:repeat-x 0 top;background-image:url('../resources/themes/images/partkeepr/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:#ebf3fd repeat-x 0 top;background-image:url('../resources/themes/images/partkeepr/grid/column-header-over-bg.gif')}.x-column-header-trigger{display:none;height:100%;width:17px;background:no-repeat left center;background-image:none;background-color:#2373af;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eff1f3), color-stop(100%, #b0bcc5));background-image:-webkit-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-moz-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-o-linear-gradient(top, #eff1f3,#b0bcc5);background-image:-ms-linear-gradient(top, #eff1f3,#b0bcc5);background-image:linear-gradient(top, #eff1f3,#b0bcc5);background-image:url('../resources/themes/images/partkeepr/grid/grid3-hd-btn.gif');position:absolute;right:0;top:0;z-index:2;cursor:pointer}.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-right .x-column-header-text{padding-right:0.5ex;margin-right:6px}.x-column-header-align-center{text-align:center}.x-column-header-align-left{text-align:left}.x-column-header-sort-ASC .x-column-header-text{padding-right:16px;background:no-repeat right 2px;background-image:url('../resources/themes/images/partkeepr/grid/sort_asc.png')}.x-column-header-sort-DESC .x-column-header-text{padding-right:16px;background:no-repeat right 2px;background-image:url('../resources/themes/images/partkeepr/grid/sort_desc.png')}.x-grid-row{line-height:13px;vertical-align:top;padding:0 1px;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore}.x-grid-row .x-grid-cell{color:null;font:normal 11px tahoma,arial,verdana,sans-serif;border-color:#ededed;border-style:solid;border-width:1px 0;border-top-color:#fafafa}.x-grid-rowwrap-div{border-width:1px 0;border-color:#ededed;border-style:solid;border-top-color:#fafafa;overflow:hidden}.x-grid-row-alt .x-grid-cell,.x-grid-row-alt .x-grid-rowwrap-div{background-color:#fff}.x-grid-row-over .x-grid-cell,.x-grid-row-over .x-grid-rowwrap-div{border-color:#ddd;background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ececec), color-stop(100%, #d5d5d5));background-image:-webkit-linear-gradient(top, #ececec,#d5d5d5);background-image:-moz-linear-gradient(top, #ececec,#d5d5d5);background-image:-o-linear-gradient(top, #ececec,#d5d5d5);background-image:-ms-linear-gradient(top, #ececec,#d5d5d5);background-image:linear-gradient(top, #ececec,#d5d5d5);background-color:#ececec}.x-grid-row-focused .x-grid-cell,.x-grid-row-focused .x-grid-rowwrap-div{border-color:#ddd;background-color:#efefef}.x-grid-row-selected .x-grid-cell,.x-grid-row-selected .x-grid-rowwrap-div{border-style:dotted;border-color:#bbb3b2;color:white;background-color:#2aaad3 !important;background-image:none;background-color:#2aaad3;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2aaad3), color-stop(100%, #2067a3));background-image:-webkit-linear-gradient(top, #2aaad3,#2067a3);background-image:-moz-linear-gradient(top, #2aaad3,#2067a3);background-image:-o-linear-gradient(top, #2aaad3,#2067a3);background-image:-ms-linear-gradient(top, #2aaad3,#2067a3);background-image:linear-gradient(top, #2aaad3,#2067a3)}.x-grid-rowwrap-div .x-grid-cell,.x-grid-rowwrap-div .x-grid-cell-inner{border-width:0;background:transparent}.x-grid-row-body-hidden{display:none}.x-grid-rowbody{font:normal 11px/13px tahoma,arial,verdana,sans-serif;padding:4px}.x-grid-rowbody p{margin:5px 5px 10px 5px}.x-grid-cell{overflow:hidden;font:normal 13px tahoma,arial,verdana,sans-serif;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore}.x-grid-cell-inner{overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;padding:3px 6px;white-space:nowrap}.x-action-col-cell .x-grid-cell-inner{padding:1px 2px 0 2px}.x-ie6 .x-action-col-cell .x-grid-cell-inner,.x-ie7 .x-action-col-cell .x-grid-cell-inner,.x-quirks .x-ie9 .x-action-col-cell .x-grid-cell-inner,.x-quirks .x-ie8 .x-action-col-cell .x-grid-cell-inner,.x-strict .x-ie8 .x-action-col-cell .x-grid-cell-inner{padding:2px 2px 1px 2px}.x-grid-row .x-grid-cell-special{padding:0;border-right:1px solid #c1c1c1;background-image:none;background-color:#f6f6f6;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #f6f6f6), color-stop(100%, #e9e9e9));background-image:-webkit-linear-gradient(left, #f6f6f6,#e9e9e9);background-image:-moz-linear-gradient(left, #f6f6f6,#e9e9e9);background-image:-o-linear-gradient(left, #f6f6f6,#e9e9e9);background-image:-ms-linear-gradient(left, #f6f6f6,#e9e9e9);background-image:linear-gradient(left, #f6f6f6,#e9e9e9)}.x-ie6 .x-grid-header-row,.x-ie7 .x-grid-header-row,.x-quirks .x-ie8 .x-grid-header-row,.x-strict .x-ie8 .x-grid-header-row{position:absolute}.x-grid-row-selected .x-grid-cell-special{border-right:1px solid #d0b1b1;background-image:none;background-color:#2aaad3;background-image:-webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #2aaad3), color-stop(100%, #2699be));background-image:-webkit-linear-gradient(left, #2aaad3,#2699be);background-image:-moz-linear-gradient(left, #2aaad3,#2699be);background-image:-o-linear-gradient(left, #2aaad3,#2699be);background-image:-ms-linear-gradient(left, #2aaad3,#2699be);background-image:linear-gradient(left, #2aaad3,#2699be)}.x-grid-dirty-cell{background-image:url('../resources/themes/images/partkeepr/grid/dirty.gif');background-position:0 0;background-repeat:no-repeat}.x-grid-cell-selected{background-color:#B8CFEE !important}.x-nlg .x-grid-cell-special{background-repeat:repeat-y;background-position:top right}.x-nlg .x-grid-row .x-grid-cell-special,.x-nlg .x-grid-row-over .x-grid-cell-special{background-image:url('../resources/themes/images/partkeepr/grid/cell-special-bg.gif')}.x-nlg .x-grid-row-focused .x-grid-cell-special,.x-nlg .x-grid-row-selected .x-grid-cell-special{background-image:url('../resources/themes/images/partkeepr/grid/cell-special-selected-bg.gif')}.x-panel-with-col-lines .x-grid-row .x-grid-cell{padding-right:0;border-right:1px solid #c1c1c1}.x-ie .x-grid-cell-special{border-right-width:0 !important}.x-property-grid .x-grid-row .x-grid-cell-inner{padding:3px 6px 5px}.x-property-grid .x-grid-row .x-grid-property-name .x-grid-cell-inner,.x-property-grid .x-grid-row-over .x-grid-property-name .x-grid-cell-inner{padding-left:12px;background-image:url('../resources/themes/images/partkeepr/grid/property-cell-bg.gif');background-repeat:no-repeat;background-position:-16px 1px}.x-quirks .x-ie .x-grid-row .x-grid-property-name .x-grid-cell-inner{background-position:-16px 2px}.x-unselectable{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore}.x-grid-row-body-hidden{display:none}.x-grid-group-collapsed{display:none}.x-grid-view .x-grid-td-expander{vertical-align:top}.x-grid-td-expander{background:repeat-y right transparent}.x-grid-view .x-grid-td-expander .x-grid-cell-inner{padding:0 !important}.x-grid-row-expander{background-image:url('../resources/themes/images/partkeepr/grid/group-collapse.gif');background-color:transparent;width:9px;height:13px;margin-left:3px;background-repeat:no-repeat;background-position:0 -2px}.x-grid-row-collapsed .x-grid-row-expander{background-image:url('../resources/themes/images/partkeepr/grid/group-expand.gif')}.x-grid-resize-marker{position:absolute;z-index:5;top:0;width:1px;background-color:#0f0f0f}.col-move-top,.col-move-bottom{width:9px;height:9px;position:absolute;top:0;line-height:0;font-size:0;overflow:hidden;z-index:20000;background:no-repeat left top transparent}.col-move-top{background-image:url('../resources/themes/images/partkeepr/grid/col-move-top.gif')}.col-move-bottom{background-image:url('../resources/themes/images/partkeepr/grid/col-move-bottom.gif')}.x-tbar-page-number{width:30px}.x-grid-group,.x-grid-group-body,.x-grid-group-hd{zoom:1}.x-grid-group-hd{padding-top:6px}.x-grid-group-hd .x-grid-cell-inner{padding:10px 4px 4px 4px;background:#fff;border-width:0 0 2px 0;border-style:solid;border-color:#b7abab;cursor:pointer}.x-grid-group-title{background:transparent no-repeat 0 -1px;background-image:url('../resources/themes/images/partkeepr/grid/group-collapse.gif');color:#5c5c5c;font:bold 11px tahoma,arial,verdana,sans-serif;padding:0 0 0 14px}.x-grid-group-hd-collapsed .x-grid-group-title{background-image:url('../resources/themes/images/partkeepr/grid/group-expand.gif')}.x-grid-group-collapsed .x-grid-group-body{display:none}.x-grid-group-collapsed .x-grid-group-title{background-image:url('../resources/themes/images/partkeepr/grid/group-expand.gif')}.x-group-by-icon{background-image:url('../resources/themes/images/partkeepr/grid/group-by.gif')}.x-show-groups-icon{background-image:url('../resources/themes/images/partkeepr/grid/group-by.gif')}.x-column-header-checkbox .x-column-header-inner{padding:1px}.x-grid-cell-special .x-grid-cell-inner{padding:4px}.x-grid-row-checker,.x-column-header-checkbox .x-column-header-text{height:14px;width:14px;background-image:url('../resources/themes/images/partkeepr/grid/unchecked.gif');background-position:-1px -1px;background-repeat:no-repeat;background-color:transparent}.x-column-header-checkbox .x-column-header-text{display:block;margin-top:4px;margin-left:4px}.x-quirks .x-ie .x-column-header-checkbox .x-column-header-inner,.x-ie6 .x-column-header-checkbox .x-column-header-inner{line-height:18px}.x-ie6 .x-column-header-checkbox .x-column-header-text,.x-ie7 .x-column-header-checkbox .x-column-header-text,.x-ie9 .x-column-header-checkbox .x-column-header-text{margin-left:3px}.x-grid-hd-checker-on .x-column-header-text{background-image:url('../resources/themes/images/partkeepr/grid/checked.gif')}.x-grid-row-checker{margin-left:1px;background-position:50% -2px}.x-grid-row-selected .x-grid-row-checker,.x-grid-row-checked .x-grid-row-checker{background-image:url('../resources/themes/images/partkeepr/grid/checked.gif')}.x-tbar-page-first{background-image:url('../resources/themes/images/partkeepr/grid/page-first.gif') !important}.x-tbar-loading{background-image:url('../resources/themes/images/partkeepr/grid/refresh.gif') !important}.x-tbar-page-last{background-image:url('../resources/themes/images/partkeepr/grid/page-last.gif') !important}.x-tbar-page-next{background-image:url('../resources/themes/images/partkeepr/grid/page-next.gif') !important}.x-tbar-page-prev{background-image:url('../resources/themes/images/partkeepr/grid/page-prev.gif') !important}.x-item-disabled .x-tbar-loading{background-image:url('../resources/themes/images/partkeepr/grid/refresh-disabled.gif') !important}.x-item-disabled .x-tbar-page-first{background-image:url('../resources/themes/images/partkeepr/grid/page-first-disabled.gif') !important}.x-item-disabled .x-tbar-page-last{background-image:url('../resources/themes/images/partkeepr/grid/page-last-disabled.gif') !important}.x-item-disabled .x-tbar-page-next{background-image:url('../resources/themes/images/partkeepr/grid/page-next-disabled.gif') !important}.x-item-disabled .x-tbar-page-prev{background-image:url('../resources/themes/images/partkeepr/grid/page-prev-disabled.gif') !important}.xg-hmenu-sort-asc .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/grid/hmenu-asc.gif')}.xg-hmenu-sort-desc .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/grid/hmenu-desc.gif')}.xg-hmenu-lock .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/grid/hmenu-lock.gif')}.xg-hmenu-unlock .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/grid/hmenu-unlock.gif')}.x-group-by-icon{background-image:url('../resources/themes/images/partkeepr/grid/group-by.gif')}.x-cols-icon .x-menu-item-icon{background-image:url('../resources/themes/images/partkeepr/grid/columns.gif')}.x-show-groups-icon{background-image:url('../resources/themes/images/partkeepr/grid/group-by.gif')}.x-grid-drop-indicator{position:absolute;height:1px;line-height:0px;background-color:#77BC71;overflow:visible}.x-grid-drop-indicator .x-grid-drop-indicator-left{position:absolute;top:-8px;left:-12px;background-image:url('../resources/themes/images/partkeepr/grid/dd-insert-arrow-right.png');height:16px;width:16px}.x-grid-drop-indicator .x-grid-drop-indicator-right{position:absolute;top:-8px;right:-11px;background-image:url('../resources/themes/images/partkeepr/grid/dd-insert-arrow-left.png');height:16px;width:16px}.x-ie6 .x-grid-drop-indicator-left{background-image:url('../resources/themes/images/partkeepr/grid/dd-insert-arrow-right.gif')}.x-ie6 .x-grid-drop-indicator-right{background-image:url('../resources/themes/images/partkeepr/grid/dd-insert-arrow-left.gif')}.x-grid-row-editor{position:absolute !important;z-index:1;zoom:1;overflow:visible !important}.x-grid-row-editor .x-form-field{font:normal 11px tahoma,arial,verdana,sans-serif !important}.x-grid-row-editor .x-form-display-field{font:normal 11px tahoma,arial,verdana,sans-serif !important;padding-top:0}.x-grid-row-editor .x-panel-body{background-color:#e6e0e0;border-top:1px solid #aaa !important;border-bottom:1px solid #aaa !important}.x-grid-row-editor .x-form-text{padding-left:2px}.x-grid-editor .x-form-cb-wrap{text-align:center}.x-grid-row-editor-buttons{background-color:#e6e0e0;position:absolute;bottom:-31px;padding:4px;width:200px;height:32px}.x-strict .x-grid-row-editor-buttons{width:192px;height:24px}.x-grid-row-editor-buttons-ml,.x-grid-row-editor-buttons-mr,.x-grid-row-editor-buttons-bl,.x-grid-row-editor-buttons-br,.x-grid-row-editor-buttons-bc{position:absolute;overflow:hidden}.x-grid-row-editor-buttons-bl,.x-grid-row-editor-buttons-br{width:4px;height:4px;bottom:0px;background-image:url('../resources/themes/images/partkeepr/panel/panel-default-framed-corners.gif')}.x-grid-row-editor-buttons-bl{left:0px;background-position:0px -16px}.x-grid-row-editor-buttons-br{right:0px;background-position:0px -20px}.x-grid-row-editor-buttons-bc{position:absolute;left:4px;bottom:0px;width:192px;height:1px;background-color:#aaa}.x-grid-row-editor-buttons-ml,.x-grid-row-editor-buttons-mr{height:27px;width:1px;top:1px;background-color:#aaa}.x-grid-row-editor-buttons-ml{left:0px}.x-grid-row-editor-buttons-mr{background-position:0px -20px;right:0px}.x-grid-row-editor-errors ul{margin-left:5px}.x-grid-row-editor-errors li{list-style:disc;margin-left:15px}.x-webkit *:focus{outline:none !important}.x-form-item{display:block;zoom:1;position:relative;margin-bottom:5px}.x-form-item-label{float:left;padding:3px 0 0;z-index:2;position:relative;font-size:12px;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;cursor:default}.x-form-item-label-top{float:none;clear:none;padding:0;display:block}.x-form-item-label-right{float:left;text-align:right}.x-form-item-body{position:relative;float:left}.x-form-invalid-under{padding:2px 2px 2px 18px;clear:left;color:#c0272b;font:normal 11px tahoma,arial,verdana,sans-serif;line-height:16px;background:url('../resources/themes/images/partkeepr/form/exclamation.gif') no-repeat 0 2px}.x-form-invalid-icon{width:18px;height:18px;overflow:hidden;text-indent:-9999px;position:absolute;left:0;top:0;background:url('../resources/themes/images/partkeepr/form/exclamation.gif') no-repeat 2px 3px}.x-form-invalid-icon ul{display:none}.x-form-field,.x-form-display-field{float:left;margin:0 0 0 0;font:normal 12px tahoma,arial,verdana,sans-serif;color:#000}.x-form-text,textarea.x-form-field{padding:1px 3px;background:repeat-x 0 0;border:1px solid;background-color:#fff;background-image:url('../resources/themes/images/partkeepr/form/text-bg.gif');border-color:#b5b8c8}.x-form-text{height:18px;line-height:18px;vertical-align:middle;border-radius:5px}.x-ie6 .x-form-text,.x-ie7 .x-form-text,.x-ie8 .x-form-text{line-height:15px}.x-border-box .x-form-text{height:22px}textarea.x-form-field{color:#000;overflow:auto;height:auto;line-height:normal;background:repeat-x 0 0;background-color:#fff;background-image:url('../resources/themes/images/partkeepr/form/text-bg.gif');resize:none}.x-border-box textarea.x-form-field{height:auto}.x-safari.x-mac textarea.x-form-field{margin-bottom:-2px}.x-form-focus,textarea.x-form-focus{border-color:#9c9c9c}.x-form-invalid-field,textarea.x-form-invalid-field{background-color:#fff;background-image:url('../resources/themes/images/partkeepr/grid/invalid_line.gif');background-repeat:repeat-x;background-position:bottom;border-color:#c30}.x-form-item{font:normal 12px tahoma,arial,verdana,sans-serif}.x-form-empty-field,textarea.x-form-empty-field{color:gray}.x-webkit .x-form-empty-field{line-height:15px}.x-form-display-field{padding-top:3px}.x-ie .x-form-file{height:23px;line-height:18px;vertical-align:middle}.x-field-default-toolbar .x-form-text{height:18px}.x-border-box .x-field-default-toolbar .x-form-text{height:22px}.x-field-default-toolbar .x-form-item-label-left{padding-left:4px}.x-fieldset{border:1px solid #a0a0a0;border-radius:4px;box-shadow:0px 0px 2px #fff,inset 0px 0px 2px #fff;padding:10px;margin-bottom:10px;display:block}.x-ie .x-fieldset{padding-top:0;padding-bottom:10px}.x-fieldset-header{font:11px bold tahoma,arial,verdana,sans-serif;color:#4c3635;padding:0 3px;line-height:16px}.x-fieldset-header .x-fieldset-header-text{float:left}.x-fieldset-header .x-form-item,.x-fieldset-header .x-tool{float:left;margin:0 3px 0 0}.x-fieldset-header .x-form-cb-wrap{padding:0}.x-webkit .x-fieldset-header{padding-top:1px}.x-quirks .x-ie .x-fieldset-header,.x-ie6 .x-fieldset-header,.x-ie7 .x-fieldset-header,.x-ie8 .x-fieldset-header{padding:0}.x-ie .x-fieldset-header{margin-bottom:10px}.x-ie9 .x-fieldset-header{padding-top:1px}.x-fieldset-collapsed .x-fieldset-body{display:none}.x-fieldset-collapsed{padding-bottom:0 !important;border-width:1px 1px 0 1px !important;border-left-color:transparent !important;border-right-color:transparent !important}.x-ie6 .x-fieldset-collapsed{border-width:1px 0 0 0 !important;padding-bottom:0 !important;margin-left:1px;margin-right:1px}.x-ie .x-fieldset-bwrap{zoom:1}.x-ie .x-fieldset-noborder legend{position:relative;margin-bottom:23px}.x-ie .x-fieldset-noborder legend span{position:absolute;left:16px}.x-fieldset{overflow:hidden}.x-fieldset-bwrap{overflow:hidden;zoom:1}.x-fieldset-body{overflow:hidden}.x-form-file-wrap .x-form-text{color:#777}.x-form-file-wrap .x-form-file-btn{overflow:hidden;float:left}.x-form-file-wrap .x-form-file-input{position:absolute;top:-4px;right:-2px;height:30px;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0;font-size:100px}.x-form-cb-wrap{padding-top:3px}.x-form-checkbox,.x-form-radio{float:none;vertical-align:-1px;width:13px;height:13px;background:url('../resources/themes/images/partkeepr/form/checkbox.png') no-repeat;overflow:hidden;padding:0;border:0}.x-form-checkbox::-moz-focus-inner,.x-form-radio::-moz-focus-inner{padding:0;border:0}.x-nbr.x-ie .x-form-checkbox,.x-nbr.x-ie .x-form-radio{font-size:0}.x-form-cb-checked .x-form-checkbox,.x-form-cb-checked .x-form-radio{background-position:0 -13px}.x-form-cb-focus{background-position:-13px 0}.x-form-cb-checked .x-form-cb-focus{background-position:-13px -13px}.x-form-radio{background-image:url('../resources/themes/images/partkeepr/form/radio.png')}.x-form-cb-label-before{margin-right:4px}.x-form-cb-label-after{margin-left:4px}.x-form-checkboxgroup-body{padding:3px 4px}.x-form-invalid .x-form-checkboxgroup-body{border:1px solid #c30;background:#fff url('../resources/themes/images/partkeepr/grid/invalid_line.gif') repeat-x bottom;padding:2px 3px}.x-check-group-alt{background:#d0d0d0;border-top:1px dotted #afafaf;border-bottom:1px dotted #afafaf}.x-form-check-group-label{color:#333;border-bottom:1px solid #333;margin:0 30px 5px 0;padding:2px}.x-form-trigger-wrap{float:left}.x-form-trigger{background-image:url('../resources/themes/images/partkeepr/form/trigger.png');background-position:0 0;width:17px;height:22px;float:left;position:relative;border:0;cursor:pointer;cursor:hand}.x-field-default-toolbar .x-form-trigger{height:21px}.x-border-box .x-field-default-toolbar .x-form-trigger{height:22px}.x-form-trigger-over{background-position:-17px 0;border-bottom-color:#9c9c9c}.x-form-trigger-wrap-focus .x-form-trigger{background-position:-51px 0;border-bottom-color:#9c9c9c}.x-form-trigger-wrap-focus .x-form-trigger-over{background-position:-68px 0;border-bottom-color:null}.x-form-trigger-click,.x-form-trigger-wrap-focus .x-form-trigger-click{background-position:-34px 0;border-bottom-color:null}.x-form-trigger-icon{height:16px;background-repeat:no-repeat;background-position:7px 6px}.x-pickerfield-open .x-form-field{-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0}.x-pickerfield-open-above .x-form-field{-moz-border-radius-bottomleft:3px;-webkit-border-bottom-left-radius:3px;-o-border-bottom-left-radius:3px;-ms-border-bottom-left-radius:3px;-khtml-border-bottom-left-radius:3px;border-bottom-left-radius:3px;-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-o-border-top-left-radius:0;-ms-border-top-left-radius:0;-khtml-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;-o-border-top-right-radius:0;-ms-border-top-right-radius:0;-khtml-border-top-right-radius:0;border-top-right-radius:0}.x-form-arrow-trigger .x-form-trigger-icon{background-image:url('../resources/themes/images/partkeepr/boundlist/trigger-arrow.png')}.x-form-date-trigger{background-image:url('../resources/themes/images/partkeepr/form/date-trigger.png')}.x-form-trigger-wrap{height:22px;position:absolute;right:2px}.x-form-trigger-wrap .x-form-spinner-up,.x-form-trigger-wrap .x-form-spinner-down{background-image:url('../resources/themes/images/partkeepr/form/spinner.png');width:17px;height:11px;font-size:0}.x-form-trigger-wrap .x-form-spinner-down{background-position:0 -11px}.x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -11px}.x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -11px}.x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -11px}.x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -11px}.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-up,.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down{background-image:url('../resources/themes/images/partkeepr/form/spinner-small.gif');height:11px}.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down{background-position:0 -11px}.x-field-default-toolbar .x-form-trigger-wrap-focus .x-form-spinner-down{background-position:-51px -11px}.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down-over{background-position:-17px -11px}.x-field-default-toolbar .x-form-trigger-wrap-focus .x-form-spinner-down-over{background-position:-68px -11px}.x-field-default-toolbar .x-form-trigger-wrap .x-form-spinner-down-click{background-position:-34px -11px}.x-trigger-noedit{cursor:pointer;cursor:hand}.x-form-clear-trigger{background-image:url('../resources/themes/images/partkeepr/form/clear-trigger.png')}.x-form-search-trigger{background-image:url('../resources/themes/images/partkeepr/form/search-trigger.png')}.x-html-editor-wrap{border:1px solid #b5b8c8}.x-html-editor-wrap .x-toolbar{border-top-width:0;border-left-width:0;border-right-width:0}.x-html-editor-wrap textarea{background-color:#fff}.x-html-editor-tb .x-btn-text{background:transparent url('../resources/themes/images/partkeepr/editor/tb-sprite.gif') no-repeat}.x-html-editor-tb .x-edit-bold,.x-menu-item img.x-edit-bold{background-position:0 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-italic,.x-menu-item img.x-edit-italic{background-position:-16px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-underline,.x-menu-item img.x-edit-underline{background-position:-32px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-forecolor,.x-menu-item img.x-edit-forecolor{background-position:-160px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-backcolor,.x-menu-item img.x-edit-backcolor{background-position:-176px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-justifyleft,.x-menu-item img.x-edit-justifyleft{background-position:-112px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-justifycenter,.x-menu-item img.x-edit-justifycenter{background-position:-128px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-justifyright,.x-menu-item img.x-edit-justifyright{background-position:-144px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-insertorderedlist,.x-menu-item img.x-edit-insertorderedlist{background-position:-80px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-insertunorderedlist,.x-menu-item img.x-edit-insertunorderedlist{background-position:-96px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-increasefontsize,.x-menu-item img.x-edit-increasefontsize{background-position:-48px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-decreasefontsize,.x-menu-item img.x-edit-decreasefontsize{background-position:-64px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-sourceedit,.x-menu-item img.x-edit-sourceedit{background-position:-192px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tb .x-edit-createlink,.x-menu-item img.x-edit-createlink{background-position:-208px 0;background-image:url('../resources/themes/images/partkeepr/editor/tb-sprite.gif')}.x-html-editor-tip .x-tip-bd .x-tip-bd-inner{padding:5px;padding-bottom:1px}.x-html-editor-tb .x-toolbar{position:static !important}.x-html-editor-tb .x-font-select{font-size:11px}.x-html-editor-wrap textarea{border:0;padding:3px 2px;overflow:auto}.x-panel,.x-plain{overflow:hidden;position:relative}.x-ie .x-panel-header,.x-ie .x-panel-header-tl,.x-ie .x-panel-header-tc,.x-ie .x-panel-header-tr,.x-ie .x-panel-header-ml,.x-ie .x-panel-header-mc,.x-ie .x-panel-header-mr,.x-ie .x-panel-header-bl,.x-ie .x-panel-header-bc,.x-ie .x-panel-header-br{zoom:1}.x-ie8 td.x-frame-mc{vertical-align:top}.x-panel-header{padding:5px 4px 4px 5px}.x-panel-header-icon,.x-window-header-icon{width:16px;height:16px;background-repeat:no-repeat;background-position:0 0;vertical-align:middle;margin-right:4px;margin-top:-1px;margin-bottom:-1px}.x-panel-header-draggable,.x-panel-header-draggable .x-panel-header-text,.x-window-header-draggable,.x-window-header-draggable .x-window-header-text{cursor:move}.x-panel-ghost,.x-window-ghost{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=65);opacity:0.65;cursor:move}.x-panel-header-horizontal .x-panel-header-body,.x-panel-header-horizontal .x-window-header-body,.x-panel-header-horizontal .x-btn-group-header-body,.x-window-header-horizontal .x-panel-header-body,.x-window-header-horizontal .x-window-header-body,.x-window-header-horizontal .x-btn-group-header-body,.x-btn-group-header-horizontal .x-panel-header-body,.x-btn-group-header-horizontal .x-window-header-body,.x-btn-group-header-horizontal .x-btn-group-header-body{width:100%}.x-panel-header-vertical .x-panel-header-body,.x-panel-header-vertical .x-window-header-body,.x-panel-header-vertical .x-btn-group-header-body,.x-window-header-vertical .x-panel-header-body,.x-window-header-vertical .x-window-header-body,.x-window-header-vertical .x-btn-group-header-body,.x-btn-group-header-vertical .x-panel-header-body,.x-btn-group-header-vertical .x-window-header-body,.x-btn-group-header-vertical .x-btn-group-header-body{height:100%}.x-panel-header-vertical,.x-panel-header-vertical .x-panel-header-body,.x-btn-group-header-vertical,.x-btn-group-header-vertical .x-btn-group-header-body,.x-window-header-vertical,.x-window-header-vertical .x-window-header-body{display:-moz-inline-stack;display:inline-block}.x-panel-header-text{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;cursor:default;white-space:nowrap}.x-panel-header-left .x-vml-base,.x-panel-header-right .x-vml-base{left:-3px !important}.x-panel-body{overflow:hidden;position:relative;font-size:12px}.x-panel-header-vertical .x-surface{margin-top:2px}.x-panel-header-plain-vertical .x-surface{margin-top:0}.x-panel-collapsed .x-panel-header-collapsed-border-top{border-bottom-width:1px !important}.x-panel-collapsed .x-panel-header-collapsed-border-right{border-left-width:1px !important}.x-panel-collapsed .x-panel-header-collapsed-border-bottom{border-top-width:1px !important}.x-panel-collapsed .x-panel-header-collapsed-border-left{border-right-width:1px !important}.x-nlg .x-panel-header-vertical .x-frame-mc{background-repeat:repeat-y}.x-panel-default{border-color:#aaa}.x-panel-header-default{font-size:11px;line-height:15px;border-color:#aaa;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #535353,#363636);background-image:-moz-linear-gradient(top, #535353,#363636);background-image:-o-linear-gradient(top, #535353,#363636);background-image:-ms-linear-gradient(top, #535353,#363636);background-image:linear-gradient(top, #535353,#363636);-moz-box-shadow:0;-webkit-box-shadow:0;-o-box-shadow:0;box-shadow:0}.x-nlg .x-panel-header-default-top{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-top-bg.gif')}.x-nlg .x-panel-header-default-bottom{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-bottom-bg.gif')}.x-nlg .x-panel-header-default-left{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-left-bg.gif')}.x-nlg .x-panel-header-default-right{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-right-bg.gif')}.x-panel-header-text-default{color:#eee;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif}.x-panel-body-default{background:#fff;border-color:#aaa;color:#000;border-width:1px;border-style:solid}.x-panel-collapsed .x-window-header-default,.x-panel-collapsed .x-panel-header-default{border-color:#aaa}.x-panel-header-default-vertical{border-color:#aaa}.x-panel-header-default-left,.x-panel-header-default-right{background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(right, #535353,#363636);background-image:-moz-linear-gradient(right, #535353,#363636);background-image:-o-linear-gradient(right, #535353,#363636);background-image:-ms-linear-gradient(right, #535353,#363636);background-image:linear-gradient(right, #535353,#363636)}.x-panel-collapsed .x-panel-header-default-top{-moz-border-radius-bottomleft:null;-webkit-border-bottom-left-radius:null;-o-border-bottom-left-radius:null;-ms-border-bottom-left-radius:null;-khtml-border-bottom-left-radius:null;border-bottom-left-radius:null;-moz-border-radius-bottomright:null;-webkit-border-bottom-right-radius:null;-o-border-bottom-right-radius:null;-ms-border-bottom-right-radius:null;-khtml-border-bottom-right-radius:null;border-bottom-right-radius:null}.x-panel-collapsed .x-panel-header-default-right{-moz-border-radius-topleft:null;-webkit-border-top-left-radius:null;-o-border-top-left-radius:null;-ms-border-top-left-radius:null;-khtml-border-top-left-radius:null;border-top-left-radius:null;-moz-border-radius-bottomleft:null;-webkit-border-bottom-left-radius:null;-o-border-bottom-left-radius:null;-ms-border-bottom-left-radius:null;-khtml-border-bottom-left-radius:null;border-bottom-left-radius:null}.x-panel-collapsed .x-panel-header-default-bottom{-moz-border-radius-topleft:null;-webkit-border-top-left-radius:null;-o-border-top-left-radius:null;-ms-border-top-left-radius:null;-khtml-border-top-left-radius:null;border-top-left-radius:null;-moz-border-radius-topright:null;-webkit-border-top-right-radius:null;-o-border-top-right-radius:null;-ms-border-top-right-radius:null;-khtml-border-top-right-radius:null;border-top-right-radius:null}.x-panel-collapsed .x-panel-header-default-left{-moz-border-radius-topright:null;-webkit-border-top-right-radius:null;-o-border-top-right-radius:null;-ms-border-top-right-radius:null;-khtml-border-top-right-radius:null;border-top-right-radius:null;-moz-border-radius-bottomright:null;-webkit-border-bottom-right-radius:null;-o-border-bottom-right-radius:null;-ms-border-bottom-right-radius:null;-khtml-border-bottom-right-radius:null;border-bottom-right-radius:null}.x-nlg .x-panel-header-default-right{background-position:top right}.x-panel-header-default-top{-moz-box-shadow:#eae8e8 0 1px 0px 0 inset;-webkit-box-shadow:#eae8e8 0 1px 0px 0 inset;-o-box-shadow:#eae8e8 0 1px 0px 0 inset;box-shadow:#eae8e8 0 1px 0px 0 inset}.x-panel-header-default-right{-moz-box-shadow:0,#eae8e8 -1px 0 0px 0 inset;-webkit-box-shadow:0,#eae8e8 -1px 0 0px 0 inset;-o-box-shadow:0,#eae8e8 -1px 0 0px 0 inset;box-shadow:0,#eae8e8 -1px 0 0px 0 inset}.x-panel-header-default-bottom{-moz-box-shadow:0,#eae8e8 0 -1px 0px 0 inset;-webkit-box-shadow:0,#eae8e8 0 -1px 0px 0 inset;-o-box-shadow:0,#eae8e8 0 -1px 0px 0 inset;box-shadow:0,#eae8e8 0 -1px 0px 0 inset}.x-panel-header-default-left{-moz-box-shadow:0,#eae8e8 1px 0 0px 0 inset;-webkit-box-shadow:0,#eae8e8 1px 0 0px 0 inset;-o-box-shadow:0,#eae8e8 1px 0 0px 0 inset;box-shadow:0,#eae8e8 1px 0 0px 0 inset}.x-nlg .x-panel-header-default-bottom{background-position:bottom left}.x-panel-header-default-right-tc,.x-panel-header-default-right-mc,.x-panel-header-default-right-bc{background-position:right 0}.x-panel-header-default-bottom-tc,.x-panel-header-default-bottom-mc,.x-panel-header-default-bottom-bc{background-position:0 bottom}.x-panel-default-framed{border-color:#aaa}.x-panel-header-default-framed{font-size:11px;line-height:15px;border-color:#aaa;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #535353,#363636);background-image:-moz-linear-gradient(top, #535353,#363636);background-image:-o-linear-gradient(top, #535353,#363636);background-image:-ms-linear-gradient(top, #535353,#363636);background-image:linear-gradient(top, #535353,#363636);-moz-box-shadow:0;-webkit-box-shadow:0;-o-box-shadow:0;box-shadow:0}.x-nlg .x-panel-header-default-framed-top{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-bg.gif')}.x-nlg .x-panel-header-default-framed-bottom{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-bg.gif')}.x-nlg .x-panel-header-default-framed-left{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-bg.gif')}.x-nlg .x-panel-header-default-framed-right{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-bg.gif')}.x-panel-header-text-default-framed{color:#eee;font-size:11px;font-weight:bold;font-family:tahoma,arial,verdana,sans-serif}.x-panel-body-default-framed{background:#dbdbdb;border-color:#aaa;color:#000;border-width:0;border-style:solid}.x-panel-collapsed .x-window-header-default-framed,.x-panel-collapsed .x-panel-header-default-framed{border-color:#aaa}.x-panel-header-default-framed-vertical{border-color:#aaa}.x-panel-header-default-framed-left,.x-panel-header-default-framed-right{background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(right, #535353,#363636);background-image:-moz-linear-gradient(right, #535353,#363636);background-image:-o-linear-gradient(right, #535353,#363636);background-image:-ms-linear-gradient(right, #535353,#363636);background-image:linear-gradient(right, #535353,#363636)}.x-panel-default-framed{-moz-border-radius:4px;-webkit-border-radius:4px;-o-border-radius:4px;-ms-border-radius:4px;-khtml-border-radius:4px;border-radius:4px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#dbdbdb}.x-nlg .x-panel-default-framed-mc{background-color:#dbdbdb}.x-nbr .x-panel-default-framed{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000404px 1000404px}.x-nbr .x-panel-default-framed-tl,.x-nbr .x-panel-default-framed-bl,.x-nbr .x-panel-default-framed-tr,.x-nbr .x-panel-default-framed-br,.x-nbr .x-panel-default-framed-tc,.x-nbr .x-panel-default-framed-bc,.x-nbr .x-panel-default-framed-ml,.x-nbr .x-panel-default-framed-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel/panel-default-framed-corners.gif')}.x-nbr .x-panel-default-framed-ml,.x-nbr .x-panel-default-framed-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel/panel-default-framed-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-panel-default-framed-mc{padding:0px 0px 0px 0px}.x-panel-header-default-framed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #535353,#363636);background-image:-moz-linear-gradient(top, #535353,#363636);background-image:-o-linear-gradient(top, #535353,#363636);background-image:-ms-linear-gradient(top, #535353,#363636);background-image:linear-gradient(top, #535353,#363636)}.x-nlg .x-panel-header-default-framed-top-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-top{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000404px 1000000px}.x-nbr .x-panel-header-default-framed-top-tl,.x-nbr .x-panel-header-default-framed-top-bl,.x-nbr .x-panel-header-default-framed-top-tr,.x-nbr .x-panel-header-default-framed-top-br,.x-nbr .x-panel-header-default-framed-top-tc,.x-nbr .x-panel-header-default-framed-top-bc,.x-nbr .x-panel-header-default-framed-top-ml,.x-nbr .x-panel-header-default-framed-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-corners.gif')}.x-nbr .x-panel-header-default-framed-top-ml,.x-nbr .x-panel-header-default-framed-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-top-sides.gif');background-position:0 0}.x-nbr .x-panel-header-default-framed-top-mc{padding:0px 1px 4px 1px}.x-panel-header-default-framed-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-o-border-top-left-radius:0;-ms-border-top-left-radius:0;-khtml-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(right, #535353,#363636);background-image:-moz-linear-gradient(right, #535353,#363636);background-image:-o-linear-gradient(right, #535353,#363636);background-image:-ms-linear-gradient(right, #535353,#363636);background-image:linear-gradient(right, #535353,#363636)}.x-nlg .x-panel-header-default-framed-right-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-right{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000004px 1100400px}.x-nbr .x-panel-header-default-framed-right-tl,.x-nbr .x-panel-header-default-framed-right-bl,.x-nbr .x-panel-header-default-framed-right-tr,.x-nbr .x-panel-header-default-framed-right-br,.x-nbr .x-panel-header-default-framed-right-tc,.x-nbr .x-panel-header-default-framed-right-bc,.x-nbr .x-panel-header-default-framed-right-ml,.x-nbr .x-panel-header-default-framed-right-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-corners.gif')}.x-nbr .x-panel-header-default-framed-right-tc,.x-nbr .x-panel-header-default-framed-right-bc{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-right-sides.gif');background-position:0 0;background-repeat:repeat-x}.x-nbr .x-panel-header-default-framed-right-mc{padding:0px 1px 0px 5px}.x-panel-header-default-framed-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-o-border-top-left-radius:0;-ms-border-top-left-radius:0;-khtml-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;-o-border-top-right-radius:0;-ms-border-top-right-radius:0;-khtml-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #535353,#363636);background-image:-moz-linear-gradient(top, #535353,#363636);background-image:-o-linear-gradient(top, #535353,#363636);background-image:-ms-linear-gradient(top, #535353,#363636);background-image:linear-gradient(top, #535353,#363636)}.x-nlg .x-panel-header-default-framed-bottom-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-bottom{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000000px 1000404px}.x-nbr .x-panel-header-default-framed-bottom-tl,.x-nbr .x-panel-header-default-framed-bottom-bl,.x-nbr .x-panel-header-default-framed-bottom-tr,.x-nbr .x-panel-header-default-framed-bottom-br,.x-nbr .x-panel-header-default-framed-bottom-tc,.x-nbr .x-panel-header-default-framed-bottom-bc,.x-nbr .x-panel-header-default-framed-bottom-ml,.x-nbr .x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-corners.gif')}.x-nbr .x-panel-header-default-framed-bottom-ml,.x-nbr .x-panel-header-default-framed-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-bottom-sides.gif');background-position:0 0}.x-nbr .x-panel-header-default-framed-bottom-mc{padding:4px 1px 0px 1px}.x-panel-header-default-framed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;-o-border-top-right-radius:0;-ms-border-top-right-radius:0;-khtml-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(right, #535353,#363636);background-image:-moz-linear-gradient(right, #535353,#363636);background-image:-o-linear-gradient(right, #535353,#363636);background-image:-ms-linear-gradient(right, #535353,#363636);background-image:linear-gradient(right, #535353,#363636)}.x-nlg .x-panel-header-default-framed-left-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-left{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000400px 1100004px}.x-nbr .x-panel-header-default-framed-left-tl,.x-nbr .x-panel-header-default-framed-left-bl,.x-nbr .x-panel-header-default-framed-left-tr,.x-nbr .x-panel-header-default-framed-left-br,.x-nbr .x-panel-header-default-framed-left-tc,.x-nbr .x-panel-header-default-framed-left-bc,.x-nbr .x-panel-header-default-framed-left-ml,.x-nbr .x-panel-header-default-framed-left-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-corners.gif')}.x-nbr .x-panel-header-default-framed-left-tc,.x-nbr .x-panel-header-default-framed-left-bc{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-left-sides.gif');background-position:0 0;background-repeat:repeat-x}.x-nbr .x-panel-header-default-framed-left-mc{padding:0px 5px 0px 1px}.x-panel-header-default-framed-top{-moz-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset;-webkit-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset;-o-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset;box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset}.x-panel-header-default-framed-right{-moz-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset;-webkit-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset;-o-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset;box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset}.x-panel-header-default-framed-bottom{-moz-box-shadow:0,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset;-webkit-box-shadow:0,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset;-o-box-shadow:0,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset;box-shadow:0,#eae8e8 0 -1px 0px 0 inset,#eae8e8 -1px 0 0px 0 inset,#eae8e8 1px 0 0px 0 inset}.x-panel-header-default-framed-left{-moz-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 1px 0 0px 0 inset;-webkit-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 1px 0 0px 0 inset;-o-box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 1px 0 0px 0 inset;box-shadow:#eae8e8 0 1px 0px 0 inset,#eae8e8 0 -1px 0px 0 inset,#eae8e8 1px 0 0px 0 inset}.x-nlg .x-panel-header-default-framed-bottom{background-position:bottom left}.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-panel-header-default-framed-collapsed{-moz-border-radius:4px;-webkit-border-radius:4px;-o-border-radius:4px;-ms-border-radius:4px;-khtml-border-radius:4px;border-radius:4px}.x-panel-header-default-framed-collapsed-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #535353,#363636);background-image:-moz-linear-gradient(top, #535353,#363636);background-image:-o-linear-gradient(top, #535353,#363636);background-image:-ms-linear-gradient(top, #535353,#363636);background-image:linear-gradient(top, #535353,#363636)}.x-nlg .x-panel-header-default-framed-collapsed-top-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-top-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-collapsed-top{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000404px 1000404px}.x-nbr .x-panel-header-default-framed-collapsed-top-tl,.x-nbr .x-panel-header-default-framed-collapsed-top-bl,.x-nbr .x-panel-header-default-framed-collapsed-top-tr,.x-nbr .x-panel-header-default-framed-collapsed-top-br,.x-nbr .x-panel-header-default-framed-collapsed-top-tc,.x-nbr .x-panel-header-default-framed-collapsed-top-bc,.x-nbr .x-panel-header-default-framed-collapsed-top-ml,.x-nbr .x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-top-corners.gif')}.x-nbr .x-panel-header-default-framed-collapsed-top-ml,.x-nbr .x-panel-header-default-framed-collapsed-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-top-sides.gif');background-position:0 0}.x-nbr .x-panel-header-default-framed-collapsed-top-mc{padding:0px 1px 0px 1px}.x-panel-header-default-framed-collapsed-right{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(right, #535353,#363636);background-image:-moz-linear-gradient(right, #535353,#363636);background-image:-o-linear-gradient(right, #535353,#363636);background-image:-ms-linear-gradient(right, #535353,#363636);background-image:linear-gradient(right, #535353,#363636)}.x-nlg .x-panel-header-default-framed-collapsed-right-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-right-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-collapsed-right{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000404px 1100404px}.x-nbr .x-panel-header-default-framed-collapsed-right-tl,.x-nbr .x-panel-header-default-framed-collapsed-right-bl,.x-nbr .x-panel-header-default-framed-collapsed-right-tr,.x-nbr .x-panel-header-default-framed-collapsed-right-br,.x-nbr .x-panel-header-default-framed-collapsed-right-tc,.x-nbr .x-panel-header-default-framed-collapsed-right-bc,.x-nbr .x-panel-header-default-framed-collapsed-right-ml,.x-nbr .x-panel-header-default-framed-collapsed-right-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-right-corners.gif')}.x-nbr .x-panel-header-default-framed-collapsed-right-tc,.x-nbr .x-panel-header-default-framed-collapsed-right-bc{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-right-sides.gif');background-position:0 0;background-repeat:repeat-x}.x-nbr .x-panel-header-default-framed-collapsed-right-mc{padding:0px 1px 0px 1px}.x-panel-header-default-framed-collapsed-bottom{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(top, #535353,#363636);background-image:-moz-linear-gradient(top, #535353,#363636);background-image:-o-linear-gradient(top, #535353,#363636);background-image:-ms-linear-gradient(top, #535353,#363636);background-image:linear-gradient(top, #535353,#363636)}.x-nlg .x-panel-header-default-framed-collapsed-bottom-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-collapsed-bottom{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000404px 1000404px}.x-nbr .x-panel-header-default-framed-collapsed-bottom-tl,.x-nbr .x-panel-header-default-framed-collapsed-bottom-bl,.x-nbr .x-panel-header-default-framed-collapsed-bottom-tr,.x-nbr .x-panel-header-default-framed-collapsed-bottom-br,.x-nbr .x-panel-header-default-framed-collapsed-bottom-tc,.x-nbr .x-panel-header-default-framed-collapsed-bottom-bc,.x-nbr .x-panel-header-default-framed-collapsed-bottom-ml,.x-nbr .x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif')}.x-nbr .x-panel-header-default-framed-collapsed-bottom-ml,.x-nbr .x-panel-header-default-framed-collapsed-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif');background-position:0 0}.x-nbr .x-panel-header-default-framed-collapsed-bottom-mc{padding:0px 1px 0px 1px}.x-panel-header-default-framed-collapsed-left{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:4px 5px 4px 5px;border-width:1px;border-style:solid;background-image:none;background-color:#d3cccc;background-image:-webkit-gradient(linear, 100% 50%, 0% 50%, color-stop(0%, #535353), color-stop(100%, #363636));background-image:-webkit-linear-gradient(right, #535353,#363636);background-image:-moz-linear-gradient(right, #535353,#363636);background-image:-o-linear-gradient(right, #535353,#363636);background-image:-ms-linear-gradient(right, #535353,#363636);background-image:linear-gradient(right, #535353,#363636)}.x-nlg .x-panel-header-default-framed-collapsed-left-mc{background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-left-bg.gif');background-color:#d3cccc}.x-nbr .x-panel-header-default-framed-collapsed-left{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000404px 1100404px}.x-nbr .x-panel-header-default-framed-collapsed-left-tl,.x-nbr .x-panel-header-default-framed-collapsed-left-bl,.x-nbr .x-panel-header-default-framed-collapsed-left-tr,.x-nbr .x-panel-header-default-framed-collapsed-left-br,.x-nbr .x-panel-header-default-framed-collapsed-left-tc,.x-nbr .x-panel-header-default-framed-collapsed-left-bc,.x-nbr .x-panel-header-default-framed-collapsed-left-ml,.x-nbr .x-panel-header-default-framed-collapsed-left-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-left-corners.gif')}.x-nbr .x-panel-header-default-framed-collapsed-left-tc,.x-nbr .x-panel-header-default-framed-collapsed-left-bc{zoom:1;background-image:url('../resources/themes/images/partkeepr/panel-header/panel-header-default-framed-collapsed-left-sides.gif');background-position:0 0;background-repeat:repeat-x}.x-nbr .x-panel-header-default-framed-collapsed-left-mc{padding:0px 1px 0px 1px}.x-panel-header-default-framed-right-tc,.x-panel-header-default-framed-right-mc,.x-panel-header-default-framed-right-bc{background-position:right 0}.x-panel-header-default-framed-bottom-tc,.x-panel-header-default-framed-bottom-mc,.x-panel-header-default-framed-bottom-bc{background-position:0 bottom}.x-panel-header-plain,.x-panel-body-plain{border:0;padding:0}.x-tip{position:absolute;overflow:visible;border-color:#818181}.x-tip .x-tip-header .x-box-item{padding:3px 3px 0}.x-tip .x-tip-header .x-tool{padding:0px 1px 0 0 !important}.x-tip{-moz-border-radius:3px;-webkit-border-radius:3px;-o-border-radius:3px;-ms-border-radius:3px;-khtml-border-radius:3px;border-radius:3px;padding:2px 2px 2px 2px;border-width:1px;border-style:solid;background-image:none;background-color:#c7c7c7;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-tip-mc{background-image:url('../resources/themes/images/partkeepr/tip/tip-bg.gif');background-color:#c7c7c7}.x-nbr .x-tip{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100303px 1000303px}.x-nbr .x-tip-tl,.x-nbr .x-tip-bl,.x-nbr .x-tip-tr,.x-nbr .x-tip-br,.x-nbr .x-tip-tc,.x-nbr .x-tip-bc,.x-nbr .x-tip-ml,.x-nbr .x-tip-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/tip/tip-corners.gif')}.x-nbr .x-tip-ml,.x-nbr .x-tip-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/tip/tip-sides.gif');background-position:0 0}.x-nbr .x-tip-mc{padding:0 0 0 0}.x-tip-header-text{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;cursor:default;color:#444;font-size:11px;font-weight:bold}.x-tip-header-draggable .x-tip-header-text{cursor:move}.x-tip-body,.x-form-invalid-tip-body{overflow:hidden;position:relative;padding:3px}.x-tip-header,.x-tip-body,.x-form-invalid-tip-body{color:#444;font-size:11px;font-weight:normal}.x-tip-header a,.x-tip-body a,.x-form-invalid-tip-body a{color:#2a2a2a}.x-tip-anchor{position:absolute;overflow:hidden;height:0;width:0;border-style:solid;border-width:5px;border-color:#818181;zoom:1}.x-border-box .x-tip-anchor{width:10px;height:10px}.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-form-invalid-tip{border-color:#a1311f;-moz-box-shadow:#d87166 0 1px 0px 0 inset,#d87166 0 -1px 0px 0 inset,#d87166 -1px 0 0px 0 inset,#d87166 1px 0 0px 0 inset;-webkit-box-shadow:#d87166 0 1px 0px 0 inset,#d87166 0 -1px 0px 0 inset,#d87166 -1px 0 0px 0 inset,#d87166 1px 0 0px 0 inset;-o-box-shadow:#d87166 0 1px 0px 0 inset,#d87166 0 -1px 0px 0 inset,#d87166 -1px 0 0px 0 inset,#d87166 1px 0 0px 0 inset;box-shadow:#d87166 0 1px 0px 0 inset,#d87166 0 -1px 0px 0 inset,#d87166 -1px 0 0px 0 inset,#d87166 1px 0 0px 0 inset}.x-form-invalid-tip-body{background:1px 1px no-repeat;background-image:url('../resources/themes/images/partkeepr/form/exclamation.gif');padding-left:22px}.x-form-invalid-tip-body li{margin-bottom:4px}.x-form-invalid-tip-body li.last{margin-bottom:0}.x-form-invalid-tip-default{-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-khtml-border-radius:5px;border-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-image:none;background-color:#fff;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ededed), color-stop(100%, #c7c7c7));background-image:-webkit-linear-gradient(top, #ededed,#c7c7c7);background-image:-moz-linear-gradient(top, #ededed,#c7c7c7);background-image:-o-linear-gradient(top, #ededed,#c7c7c7);background-image:-ms-linear-gradient(top, #ededed,#c7c7c7);background-image:linear-gradient(top, #ededed,#c7c7c7)}.x-nlg .x-form-invalid-tip-default-mc{background-image:url('../resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-default-bg.gif');background-color:#fff}.x-nbr .x-form-invalid-tip-default{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100505px 1000505px}.x-nbr .x-form-invalid-tip-default-tl,.x-nbr .x-form-invalid-tip-default-bl,.x-nbr .x-form-invalid-tip-default-tr,.x-nbr .x-form-invalid-tip-default-br,.x-nbr .x-form-invalid-tip-default-tc,.x-nbr .x-form-invalid-tip-default-bc,.x-nbr .x-form-invalid-tip-default-ml,.x-nbr .x-form-invalid-tip-default-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-default-corners.gif')}.x-nbr .x-form-invalid-tip-default-ml,.x-nbr .x-form-invalid-tip-default-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/form-invalid-tip/form-invalid-tip-default-sides.gif');background-position:0 0}.x-nbr .x-form-invalid-tip-default-mc{padding:0 0 0 0}.x-slider{zoom:1}.x-slider-inner{position:relative;left:0;top:0;overflow:visible;zoom:1}.x-slider-focus{position:absolute;left:0;top:0;width:1px;height:1px;line-height:1px;font-size:1px;-moz-outline:0 none;outline:0 none;-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;display:block;overflow:hidden}.x-slider-horz{padding-left:7px;background:transparent no-repeat 0 -24px}.x-slider-horz .x-slider-end{padding-right:7px;zoom:1;background:transparent no-repeat right -46px}.x-slider-horz .x-slider-inner{background:transparent repeat-x 0 -2px;height:18px}.x-slider-horz .x-slider-thumb{width:14px;height:15px;position:absolute;left:0;top:1px;background:transparent no-repeat 0 0}.x-slider-horz .x-slider-thumb-over{background-position:-14px -15px}.x-slider-horz .x-slider-thumb-drag{background-position:-28px -30px}.x-slider-vert{padding-top:7px;background:transparent no-repeat -44px 0}.x-slider-vert .x-slider-end{padding-bottom:7px;zoom:1;background:transparent no-repeat -22px bottom;width:22px}.x-slider-vert .x-slider-inner{background:transparent repeat-y 0 0;width:22px}.x-slider-vert .x-slider-thumb{width:15px;height:14px;position:absolute;left:3px;bottom:0;background:transparent no-repeat 0 0}.x-slider-vert .x-slider-thumb-over{background-position:-15px -14px}.x-slider-vert .x-slider-thumb-drag{background-position:-30px -28px}.x-slider-horz,.x-slider-horz .x-slider-end,.x-slider-horz .x-slider-inner{background-image:url('../resources/themes/images/partkeepr/slider/slider-bg.png')}.x-slider-horz .x-slider-thumb{background-image:url('../resources/themes/images/partkeepr/slider/slider-thumb.png')}.x-slider-vert,.x-slider-vert .x-slider-end,.x-slider-vert .x-slider-inner{background-image:url('../resources/themes/images/partkeepr/slider/slider-v-bg.png')}.x-slider-vert .x-slider-thumb{background-image:url('../resources/themes/images/partkeepr/slider/slider-v-thumb.png')}.x-ie6 .x-slider-horz,.x-ie6 .x-slider-horz .x-slider-end,.x-ie6 .x-slider-horz .x-slider-inner{background-image:url('../resources/themes/images/partkeepr/slider/slider-bg.gif')}.x-ie6 .x-slider-horz .x-slider-thumb{background-image:url('../resources/themes/images/partkeepr/slider/slider-thumb.gif')}.x-ie6 .x-slider-vert,.x-ie6 .x-slider-vert .x-slider-end,.x-ie6 .x-slider-vert .x-slider-inner{background-image:url('../resources/themes/images/partkeepr/slider/slider-v-bg.gif')}.x-ie6 .x-slider-vert .x-slider-thumb{background-image:url('../resources/themes/images/partkeepr/slider/slider-v-thumb.gif')}.x-progress{border-width:1px;border-style:solid;-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;-ms-border-radius:0;-khtml-border-radius:0;border-radius:0;overflow:hidden;height:20px}.x-progress-bar{height:18px;overflow:hidden;position:absolute;width:0;-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;-ms-border-radius:0;-khtml-border-radius:0;border-radius:0;border-right:1px solid;border-top:1px solid}.x-progress-text{overflow:hidden;position:absolute;padding:0 5px;height:18px;font-weight:bold;font-size:11px;line-height:16px;text-align:center}.x-progress-text-back{padding-top:1px}.x-strict .x-progress{height:18px}.x-progress-default{border-color:#8b8b8b}.x-progress-default .x-progress-bar{border-right-color:#8b8b8b;border-top-color:#cacaca;background-image:none;background-color:#a29292;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #c5bbbb), color-stop(50%, #aea0a0), color-stop(51%, #a29292), color-stop(100%, #978484));background-image:-webkit-linear-gradient(top, #c5bbbb,#aea0a0 50%,#a29292 51%,#978484);background-image:-moz-linear-gradient(top, #c5bbbb,#aea0a0 50%,#a29292 51%,#978484);background-image:-o-linear-gradient(top, #c5bbbb,#aea0a0 50%,#a29292 51%,#978484);background-image:-ms-linear-gradient(top, #c5bbbb,#aea0a0 50%,#a29292 51%,#978484);background-image:linear-gradient(top, #c5bbbb,#aea0a0 50%,#a29292 51%,#978484)}.x-progress-default .x-progress-text{color:#fff}.x-progress-default .x-progress-text-back{color:#585858}.x-nlg .x-progress-default .x-progress-bar{background:url('../resources/themes/images/partkeepr/progress/progress-default-bg.gif') repeat-x}.x-toolbar{font-size:11px;border:1px solid;padding:2px 0 2px 2px}.x-toolbar .x-form-item-label{font-size:11px;line-height:15px}.x-toolbar .x-toolbar-item{margin:0 2px 0 0}.x-toolbar .x-toolbar-text{margin-left:4px;margin-right:6px;white-space:nowrap;color:#4c4c4c !important;line-height:16px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px;font-weight:normal}.x-toolbar .x-toolbar-separator{display:block;font-size:1px;overflow:hidden;cursor:default;border:0}.x-toolbar .x-toolbar-separator-horizontal{margin:0 3px 0 2px;height:14px;width:0px;border-left:1px solid #98c8ff;border-right:1px solid #fff}.x-quirks .x-ie .x-toolbar .x-toolbar-separator-horizontal{width:2px}.x-toolbar-footer{background:transparent;border:0px none;margin-top:3px;padding:2px 0 2px 6px}.x-toolbar-footer .x-box-inner{border-width:0}.x-toolbar-footer .x-toolbar-item{margin:0 6px 0 0}.x-toolbar-vertical{padding:2px 2px 0 2px}.x-toolbar-vertical .x-toolbar-item{margin:0 0 2px 0}.x-toolbar-vertical .x-toolbar-text{margin-top:4px;margin-bottom:6px}.x-toolbar-vertical .x-toolbar-separator-vertical{margin:2px 5px 3px 5px;height:0px;width:10px;line-height:0px;border-top:1px solid #98c8ff;border-bottom:1px solid #fff}.x-toolbar-scroller{padding-left:0}.x-toolbar-spacer{width:2px}.x-toolbar-more-icon{background-image:url('../resources/themes/images/partkeepr/toolbar/more.gif') !important;background-position:2px center !important;background-repeat:no-repeat}.x-toolbar-default{border-color:#aaa;background-image:none;background-color:#ddd;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eaeaea), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eaeaea,#dddddd);background-image:-moz-linear-gradient(top, #eaeaea,#dddddd);background-image:-o-linear-gradient(top, #eaeaea,#dddddd);background-image:-ms-linear-gradient(top, #eaeaea,#dddddd);background-image:linear-gradient(top, #eaeaea,#dddddd)}.x-nlg .x-toolbar-default{background-image:url('../resources/themes/images/partkeepr/toolbar/toolbar-default-bg.gif') !important;background-repeat:repeat-x}.x-toolbar-plain{border:0}.x-window{outline:none}.x-window .x-window-wrap{position:relative}.x-window .x-window-wrap .x-window-body{overflow:hidden}.x-window-body{position:relative;border-style:solid}.x-window-maximized .x-window-wrap .x-window-header{-moz-border-radius:0 !important;-webkit-border-radius:0 !important;-o-border-radius:0 !important;-ms-border-radius:0 !important;-khtml-border-radius:0 !important;border-radius:0 !important}.x-window-collapsed .x-window-header-vertical{-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-khtml-border-radius:5px;border-radius:5px}.x-window-collapsed .x-window-header-horizontal{-moz-border-radius:5px;-webkit-border-radius:5px;-o-border-radius:5px;-ms-border-radius:5px;-khtml-border-radius:5px;border-radius:5px}.x-window-collapsed .x-window-header-left{padding-right:5px !important}.x-window-collapsed .x-window-header-right{padding-left:5px !important}.x-window-collapsed .x-window-header-top{padding-bottom:5px !important}.x-window-collapsed .x-window-header-bottom{padding-top:5px !important}.x-window-header-left .x-vml-base,.x-window-header-right .x-vml-base{left:-3px !important}.x-window-header-text{-moz-user-select:none;-khtml-user-select:none;-webkit-user-select:ignore;cursor:default;white-space:nowrap;display:block}.x-window-default{border-color:#a4a4a4;-moz-border-radius:5px 5px;-webkit-border-radius:5px 5px;-o-border-radius:5px 5px;-ms-border-radius:5px 5px;-khtml-border-radius:5px 5px;border-radius:5px 5px;-moz-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-webkit-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-o-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset}.x-window-default{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-o-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-khtml-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-o-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-khtml-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;-o-border-bottom-right-radius:5px;-ms-border-bottom-right-radius:5px;-khtml-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;-o-border-bottom-left-radius:5px;-ms-border-bottom-left-radius:5px;-khtml-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:4px 4px 4px 4px;border-width:1px;border-style:solid;background-color:#cbcbcb}.x-nlg .x-window-default-mc{background-color:#cbcbcb}.x-nbr .x-window-default{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000505px 1000505px}.x-nbr .x-window-default-tl,.x-nbr .x-window-default-bl,.x-nbr .x-window-default-tr,.x-nbr .x-window-default-br,.x-nbr .x-window-default-tc,.x-nbr .x-window-default-bc,.x-nbr .x-window-default-ml,.x-nbr .x-window-default-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window/window-default-corners.gif')}.x-nbr .x-window-default-ml,.x-nbr .x-window-default-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window/window-default-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-window-default-mc{padding:0 0 0 0}.x-window-body-default{border-color:#b7abab;border-width:1px;background:#dbdbdb;color:#000}.x-window-header-default{border-color:#a4a4a4;zoom:1}.x-window-header-text-default{font-weight:bold;line-height:16px;font-family:tahoma,arial,verdana,sans-serif;font-size:11px}.x-window-header-default-top{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-o-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-khtml-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-o-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-khtml-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 0 5px;border-width:1px;border-style:solid;background-color:#cbcbcb}.x-nlg .x-window-header-default-top-mc{background-color:#cbcbcb}.x-nbr .x-window-header-default-top{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000505px 1000000px}.x-nbr .x-window-header-default-top-tl,.x-nbr .x-window-header-default-top-bl,.x-nbr .x-window-header-default-top-tr,.x-nbr .x-window-header-default-top-br,.x-nbr .x-window-header-default-top-tc,.x-nbr .x-window-header-default-top-bc,.x-nbr .x-window-header-default-top-ml,.x-nbr .x-window-header-default-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-top-corners.gif')}.x-nbr .x-window-header-default-top-ml,.x-nbr .x-window-header-default-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-top-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-window-header-default-top-mc{padding:0px 0px 0 0px}.x-window-header-default-right{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-o-border-top-left-radius:0;-ms-border-top-left-radius:0;-khtml-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:5px;-webkit-border-top-right-radius:5px;-o-border-top-right-radius:5px;-ms-border-top-right-radius:5px;-khtml-border-top-right-radius:5px;border-top-right-radius:5px;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;-o-border-bottom-right-radius:5px;-ms-border-bottom-right-radius:5px;-khtml-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:5px 5px 5px 0;border-width:1px;border-style:solid;background-color:#cbcbcb}.x-nlg .x-window-header-default-right-mc{background-color:#cbcbcb}.x-nbr .x-window-header-default-right{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000005px 1000500px}.x-nbr .x-window-header-default-right-tl,.x-nbr .x-window-header-default-right-bl,.x-nbr .x-window-header-default-right-tr,.x-nbr .x-window-header-default-right-br,.x-nbr .x-window-header-default-right-tc,.x-nbr .x-window-header-default-right-bc,.x-nbr .x-window-header-default-right-ml,.x-nbr .x-window-header-default-right-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-right-corners.gif')}.x-nbr .x-window-header-default-right-ml,.x-nbr .x-window-header-default-right-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-right-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-window-header-default-right-mc{padding:0px 0px 0px 0}.x-window-header-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-o-border-top-left-radius:0;-ms-border-top-left-radius:0;-khtml-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;-o-border-top-right-radius:0;-ms-border-top-right-radius:0;-khtml-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:5px;-webkit-border-bottom-right-radius:5px;-o-border-bottom-right-radius:5px;-ms-border-bottom-right-radius:5px;-khtml-border-bottom-right-radius:5px;border-bottom-right-radius:5px;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;-o-border-bottom-left-radius:5px;-ms-border-bottom-left-radius:5px;-khtml-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:0 5px 5px 5px;border-width:1px;border-style:solid;background-color:#cbcbcb}.x-nlg .x-window-header-default-bottom-mc{background-color:#cbcbcb}.x-nbr .x-window-header-default-bottom{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000000px 1000505px}.x-nbr .x-window-header-default-bottom-tl,.x-nbr .x-window-header-default-bottom-bl,.x-nbr .x-window-header-default-bottom-tr,.x-nbr .x-window-header-default-bottom-br,.x-nbr .x-window-header-default-bottom-tc,.x-nbr .x-window-header-default-bottom-bc,.x-nbr .x-window-header-default-bottom-ml,.x-nbr .x-window-header-default-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-bottom-corners.gif')}.x-nbr .x-window-header-default-bottom-ml,.x-nbr .x-window-header-default-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-bottom-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-window-header-default-bottom-mc{padding:0 0px 0px 0px}.x-window-header-default-left{-moz-border-radius-topleft:5px;-webkit-border-top-left-radius:5px;-o-border-top-left-radius:5px;-ms-border-top-left-radius:5px;-khtml-border-top-left-radius:5px;border-top-left-radius:5px;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;-o-border-top-right-radius:0;-ms-border-top-right-radius:0;-khtml-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:5px;-webkit-border-bottom-left-radius:5px;-o-border-bottom-left-radius:5px;-ms-border-bottom-left-radius:5px;-khtml-border-bottom-left-radius:5px;border-bottom-left-radius:5px;padding:5px 0px 5px 5px;border-width:1px;border-style:solid;background-color:#cbcbcb}.x-nlg .x-window-header-default-left-mc{background-color:#cbcbcb}.x-nbr .x-window-header-default-left{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1000500px 1000005px}.x-nbr .x-window-header-default-left-tl,.x-nbr .x-window-header-default-left-bl,.x-nbr .x-window-header-default-left-tr,.x-nbr .x-window-header-default-left-br,.x-nbr .x-window-header-default-left-tc,.x-nbr .x-window-header-default-left-bc,.x-nbr .x-window-header-default-left-ml,.x-nbr .x-window-header-default-left-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-left-corners.gif')}.x-nbr .x-window-header-default-left-ml,.x-nbr .x-window-header-default-left-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/window-header/window-header-default-left-sides.gif');background-position:0 0;background-repeat:repeat-y}.x-nbr .x-window-header-default-left-mc{padding:0px 0px 0px 0px}.x-window-header-default-top{-moz-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-webkit-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-o-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset}.x-window-header-default-right{-moz-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset;-webkit-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset;-o-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset;box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset}.x-window-header-default-bottom{-moz-box-shadow:0,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-webkit-box-shadow:0,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-o-box-shadow:0,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;box-shadow:0,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 -1px 0 0px 0 inset,#e7e2e1 1px 0 0px 0 inset}.x-window-header-default-left{-moz-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-webkit-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;-o-box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 1px 0 0px 0 inset;box-shadow:#e7e2e1 0 1px 0px 0 inset,#e7e2e1 0 -1px 0px 0 inset,#e7e2e1 1px 0 0px 0 inset}.x-window-body-plain{background:transparent}.x-message-box .x-window-body{background-color:#cbcbcb;border:none}.x-message-box .ext-mb-textarea{margin-top:4px}.x-message-box .x-progress-wrap{margin-top:4px}.x-message-box .ext-mb-icon{width:47px;height:32px}.x-message-box .ext-mb-info,.x-message-box .ext-mb-warning,.x-message-box .ext-mb-question,.x-message-box .ext-mb-error{background:transparent no-repeat top left}.ext-gecko2 .ext-mb-fix-cursor{overflow:auto}.x-message-box .x-msg-box-wait{background-image:url('../resources/themes/images/partkeepr/shared/blue-loading.gif')}.x-message-box .ext-mb-info{background-image:url('../resources/themes/images/partkeepr/shared/icon-info.gif')}.x-message-box .ext-mb-warning{background-image:url('../resources/themes/images/partkeepr/shared/icon-warning.gif')}.x-message-box .ext-mb-question{background-image:url('../resources/themes/images/partkeepr/shared/icon-question.gif')}.x-message-box .ext-mb-error{background-image:url('../resources/themes/images/partkeepr/shared/icon-error.gif')}.x-tab-bar{position:relative;background-color:transparent;background-image:none;background-color:#cecece;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dad9d9), color-stop(100%, #cecece));background-image:-webkit-linear-gradient(top, #dad9d9,#cecece);background-image:-moz-linear-gradient(top, #dad9d9,#cecece);background-image:-o-linear-gradient(top, #dad9d9,#cecece);background-image:-ms-linear-gradient(top, #dad9d9,#cecece);background-image:linear-gradient(top, #dad9d9,#cecece);font-size:11px}.x-nlg .x-tab-bar{background-image:url('../resources/themes/images/partkeepr/tab-bar/tab-bar-bg.gif')}.x-tab-bar-default-plain,.x-nlg .x-tab-bar-default-plain{background:transparent none}.x-tab-bar-body{border-style:solid;border-color:#aaa;position:relative;z-index:2;zoom:1}.x-tab-bar-top .x-tab-bar-body{height:23;border-width:1px 1px 0;padding:1px 0 3px}.x-tab-bar-top .x-tab-bar-strip{top:25px;border-width:1px 1px 0;height:2px}.x-border-box .x-tab-bar-top .x-tab-bar-body{height:28px}.x-border-box .x-tab-bar-top .x-tab-bar-strip{height:3px}.x-tab-bar-top .x-tab-bar-body-default-plain{height:23;border-width:0;padding:0 0 3px}.x-tab-bar-top .x-tab-bar-strip-default-plain{top:23;border-width:1px 1px 0 1px;height:2px}.x-border-box .x-tab-bar-top .x-tab-bar-body-default-plain{height:26px}.x-border-box .x-tab-bar-top .x-tab-bar-strip-default-plain{height:3px}.x-tab-bar-bottom .x-tab-bar-body{height:23;border-width:0 1px 1px;padding:3px 0 1px}.x-tab-bar-bottom .x-tab-bar-body .x-box-inner{position:relative;top:-1px}.x-tab-bar-bottom .x-tab-bar-body .x-box-scroller,.x-tab-bar-bottom .x-tab-bar-body .x-box-scroller-left,.x-tab-bar-bottom .x-tab-bar-body .x-box-scroller-right{height:25px}.x-tab-bar-bottom .x-tab-bar-strip{top:0;border-width:0 1px 1px 1px;height:2px}.x-border-box .x-tab-bar-bottom .x-tab-bar-body{height:28px}.x-border-box .x-tab-bar-bottom .x-tab-bar-strip{height:3px}.x-tab-bar-bottom .x-tab-bar-body-default-plain{height:23;border-width:0;padding:3px 0 0}.x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-inner{position:relative;top:-1px}.x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-scroller,.x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-scroller-left,.x-tab-bar-bottom .x-tab-bar-body-default-plain .x-box-scroller-right{height:24px}.x-tab-bar-bottom .x-tab-bar-strip-default-plain{top:0;border-width:0 1px 1px 1px;height:2px}.x-border-box .x-tab-bar-bottom .x-tab-bar-body-default-plain{height:26px}.x-border-box .x-tab-bar-bottom .x-tab-bar-strip-default-plain{height:3px}.x-tab-bar-strip-default,.x-tab-bar-strip-default-plain{font-size:0;line-height:0;position:absolute;z-index:1;border-style:solid;overflow:hidden;border-color:#aaa;background-color:#c7c7c7;zoom:1}.x-tab-default-top{-moz-border-radius-topleft:4px;-webkit-border-top-left-radius:4px;-o-border-top-left-radius:4px;-ms-border-top-left-radius:4px;-khtml-border-top-left-radius:4px;border-top-left-radius:4px;-moz-border-radius-topright:4px;-webkit-border-top-right-radius:4px;-o-border-top-right-radius:4px;-ms-border-top-right-radius:4px;-khtml-border-top-right-radius:4px;border-top-right-radius:4px;-moz-border-radius-bottomright:0;-webkit-border-bottom-right-radius:0;-o-border-bottom-right-radius:0;-ms-border-bottom-right-radius:0;-khtml-border-bottom-right-radius:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;-webkit-border-bottom-left-radius:0;-o-border-bottom-left-radius:0;-ms-border-bottom-left-radius:0;-khtml-border-bottom-left-radius:0;border-bottom-left-radius:0;padding:3px 3px 0 3px;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%, #dddddd), color-stop(25%, #e4e4e4), color-stop(45%, #eaeaea));background-image:-webkit-linear-gradient(top, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:-moz-linear-gradient(top, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:-o-linear-gradient(top, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:-ms-linear-gradient(top, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:linear-gradient(top, #dddddd,#e4e4e4 25%,#eaeaea 45%)}.x-nlg .x-tab-default-top-mc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-bg.gif');background-color:#eaeaea}.x-nbr .x-tab-default-top{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100404px 1000000px}.x-nbr .x-tab-default-top-tl,.x-nbr .x-tab-default-top-bl,.x-nbr .x-tab-default-top-tr,.x-nbr .x-tab-default-top-br,.x-nbr .x-tab-default-top-tc,.x-nbr .x-tab-default-top-bc,.x-nbr .x-tab-default-top-ml,.x-nbr .x-tab-default-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-corners.gif')}.x-nbr .x-tab-default-top-ml,.x-nbr .x-tab-default-top-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-sides.gif');background-position:0 0}.x-nbr .x-tab-default-top-mc{padding:0 0 0 0}.x-tab-default-bottom{-moz-border-radius-topleft:0;-webkit-border-top-left-radius:0;-o-border-top-left-radius:0;-ms-border-top-left-radius:0;-khtml-border-top-left-radius:0;border-top-left-radius:0;-moz-border-radius-topright:0;-webkit-border-top-right-radius:0;-o-border-top-right-radius:0;-ms-border-top-right-radius:0;-khtml-border-top-right-radius:0;border-top-right-radius:0;-moz-border-radius-bottomright:4px;-webkit-border-bottom-right-radius:4px;-o-border-bottom-right-radius:4px;-ms-border-bottom-right-radius:4px;-khtml-border-bottom-right-radius:4px;border-bottom-right-radius:4px;-moz-border-radius-bottomleft:4px;-webkit-border-bottom-left-radius:4px;-o-border-bottom-left-radius:4px;-ms-border-bottom-left-radius:4px;-khtml-border-bottom-left-radius:4px;border-bottom-left-radius:4px;padding:0 3px 3px 3px;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%, #dddddd), color-stop(25%, #e4e4e4), color-stop(45%, #eaeaea));background-image:-webkit-linear-gradient(bottom, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:-moz-linear-gradient(bottom, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:-o-linear-gradient(bottom, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:-ms-linear-gradient(bottom, #dddddd,#e4e4e4 25%,#eaeaea 45%);background-image:linear-gradient(bottom, #dddddd,#e4e4e4 25%,#eaeaea 45%)}.x-nlg .x-tab-default-bottom-mc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-bg.gif');background-color:#eaeaea}.x-nbr .x-tab-default-bottom{padding:0 !important;border-width:0 !important;-moz-border-radius:0px;-webkit-border-radius:0px;-o-border-radius:0px;-ms-border-radius:0px;-khtml-border-radius:0px;border-radius:0px;background-color:transparent;background-position:1100000px 1000404px}.x-nbr .x-tab-default-bottom-tl,.x-nbr .x-tab-default-bottom-bl,.x-nbr .x-tab-default-bottom-tr,.x-nbr .x-tab-default-bottom-br,.x-nbr .x-tab-default-bottom-tc,.x-nbr .x-tab-default-bottom-bc,.x-nbr .x-tab-default-bottom-ml,.x-nbr .x-tab-default-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-corners.gif')}.x-nbr .x-tab-default-bottom-ml,.x-nbr .x-tab-default-bottom-mr{zoom:1;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-sides.gif');background-position:0 0}.x-nbr .x-tab-default-bottom-mc{padding:0 0 0 0}.x-tab{z-index:1;margin:0 0 0 2px;display:inline-block;zoom:1;*display:inline;white-space:nowrap;height:23;border-color:#b5b5b5;cursor:pointer;cursor:hand}.x-tab *{cursor:pointer;cursor:hand}.x-tab em{display:block;padding:0 6px;line-height:1px}.x-tab button{background:none;border:0;padding:0;margin:0;-webkit-appearance:none;font-size:11px;font-weight:bold;color:#6f6f6f;outline:0 none;overflow:hidden;overflow-x:visible;-o-text-overflow:ellipsis;text-overflow:ellipsis}.x-tab button::-moz-focus-inner{border:0;padding:0}.x-tab button .x-tab-inner{background-color:transparent;background-repeat:no-repeat;background-position:0 -2px;display:block;text-align:center;white-space:nowrap}.x-tab img{display:none}.x-border-box .x-tab-default-top{height:24px}.x-border-box .x-tab-default-bottom{height:24px}* html .x-ie .x-tab button{width:1px}.x-strict .x-ie6 .x-tab .x-frame-mc,.x-strict .x-ie7 .x-tab .x-frame-mc{height:100%}.x-ie .x-tab-active button:active{position:relative;top:-1px;left:-1px}.x-tab-default-top{-moz-box-shadow:#fff 0 1px 0px 0 inset,#fff -1px 0 0px 0 inset,#fff 1px 0 0px 0 inset;-webkit-box-shadow:#fff 0 1px 0px 0 inset,#fff -1px 0 0px 0 inset,#fff 1px 0 0px 0 inset;-o-box-shadow:#fff 0 1px 0px 0 inset,#fff -1px 0 0px 0 inset,#fff 1px 0 0px 0 inset;box-shadow:#fff 0 1px 0px 0 inset,#fff -1px 0 0px 0 inset,#fff 1px 0 0px 0 inset;border-bottom:1px solid #aaa !important}.x-tab-default-top em{padding-bottom:3px}.x-tab-default-top button,.x-tab-default-top .x-tab-inner{height:16px;line-height:16px}.x-nbr .x-tab-default-top{border-bottom-width:1px !important}.x-tab-default-top-active{border-bottom-color:#c7c7c7 !important}.x-tab-default-bottom{-moz-box-shadow:0 -1px 0 0 #fff inset,-1px 0 0 0 #fff inset,1px 0 0 0 #fff inset;-webkit-box-shadow:0 -1px 0 0 #fff inset,-1px 0 0 0 #fff inset,1px 0 0 0 #fff inset;-o-box-shadow:0 -1px 0 0 #fff inset,-1px 0 0 0 #fff inset,1px 0 0 0 #fff inset;box-shadow:0 -1px 0 0 #fff inset,-1px 0 0 0 #fff inset,1px 0 0 0 #fff inset;border-top:1px solid #aaa !important}.x-tab-default-bottom em{padding-top:3px}.x-tab-default-bottom button,.x-tab-default-bottom .x-tab-inner{height:16px;line-height:16px}.x-nbr .x-tab-default-bottom{border-top-width:1px !important}.x-tab-default-bottom-active{border-top-color:#c7c7c7 !important}.x-tab-default-disabled{cursor:default;border-color:#c9c2c2;background-image:none;background-color:#e3d9d9;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e3d9d9), color-stop(100%, #eedddd));background-image:-webkit-linear-gradient(top, #e3d9d9,#eedddd);background-image:-moz-linear-gradient(top, #e3d9d9,#eedddd);background-image:-o-linear-gradient(top, #e3d9d9,#eedddd);background-image:-ms-linear-gradient(top, #e3d9d9,#eedddd);background-image:linear-gradient(top, #e3d9d9,#eedddd)}.x-tab-default-disabled *{cursor:default}.x-tab-default-disabled button{color:#c3b3b3 !important}.x-tab-icon-text-left .x-tab-inner{padding-left:20px}.x-tab button,.x-tab a{position:relative}.x-tab button .x-tab-icon,.x-tab a .x-tab-icon{position:absolute;background-repeat:no-repeat;top:0;left:0;right:auto;bottom:0;width:18px;height:18px}.x-tab-top-over{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7e6e6), color-stop(25%, #eeeaea), color-stop(45%, #f2eeee));background-image:-webkit-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:-moz-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:-o-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:-ms-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%)}.x-tab-bottom-over{background-image:none;background-color:#f2eeee;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e7e6e6), color-stop(25%, #eeeaea), color-stop(45%, #f2eeee));background-image:-webkit-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:-moz-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:-o-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:-ms-linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%);background-image:linear-gradient(top, #e7e6e6,#eeeaea 25%,#f2eeee 45%)}.x-tab-active{z-index:3;background-image:none;background-color:red}.x-tab-active button{color:#333;color:white;text-shadow:0 0 1px #000}.x-tab-top-active{background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2aaad3), color-stop(100%, #2067a3));background-image:-webkit-linear-gradient(top, #2aaad3,#2067a3);background-image:-moz-linear-gradient(top, #2aaad3,#2067a3);background-image:-o-linear-gradient(top, #2aaad3,#2067a3);background-image:-ms-linear-gradient(top, #2aaad3,#2067a3);background-image:linear-gradient(top, #2aaad3,#2067a3)}.x-tab-bottom-active{background-image:none;background-color:#eaeaea;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2aaad3), color-stop(100%, #2067a3));background-image:-webkit-linear-gradient(top, #2aaad3,#2067a3);background-image:-moz-linear-gradient(top, #2aaad3,#2067a3);background-image:-o-linear-gradient(top, #2aaad3,#2067a3);background-image:-ms-linear-gradient(top, #2aaad3,#2067a3);background-image:linear-gradient(top, #2aaad3,#2067a3)}.x-tab-disabled{border-color:#c9c2c2}.x-tab-disabled button{color:#c3b3b3}.x-tab-top-disabled{background-image:none;background:transparent;background-image:none;background-color:#e3d9d9;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #e3d9d9), color-stop(100%, #eedddd));background-image:-webkit-linear-gradient(top, #e3d9d9,#eedddd);background-image:-moz-linear-gradient(top, #e3d9d9,#eedddd);background-image:-o-linear-gradient(top, #e3d9d9,#eedddd);background-image:-ms-linear-gradient(top, #e3d9d9,#eedddd);background-image:linear-gradient(top, #e3d9d9,#eedddd)}.x-tab-bottom-disabled{background-image:none;background:transparent;background-image:none;background-color:#e3d9d9;background-image:-webkit-gradient(linear, 50% 100%, 50% 0%, color-stop(0%, #e3d9d9), color-stop(100%, #eedddd));background-image:-webkit-linear-gradient(bottom, #e3d9d9,#eedddd);background-image:-moz-linear-gradient(bottom, #e3d9d9,#eedddd);background-image:-o-linear-gradient(bottom, #e3d9d9,#eedddd);background-image:-ms-linear-gradient(bottom, #e3d9d9,#eedddd);background-image:linear-gradient(bottom, #e3d9d9,#eedddd)}.x-nlg .x-tab-top{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-bg.gif')}.x-nlg .x-tab-bottom{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-bg.gif')}.x-nlg .x-tab-top-over{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-over-bg.gif')}.x-nlg .x-tab-bottom-over{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-over-bg.gif')}.x-nlg .x-tab-top-active{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-active-bg.gif')}.x-nlg .x-tab-bottom-active{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-active-bg.gif')}.x-nlg .x-tab-top-disabled{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-disabled-bg.gif') !important}.x-nlg .x-tab-bottom-disabled{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-bg.gif') !important}.x-tab-closable em{padding-right:14px}.x-tab-close-btn{position:absolute !important;top:3px;right:3px;width:11px;height:11px;font-size:0;line-height:0;text-indent:-999px;background:url('../resources/themes/images/partkeepr/tab/tab-default-close.gif') no-repeat;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=60);opacity:0.6}.x-tab-close-btn:hover{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1}.x-nbr .x-tab-top-over .x-frame-tl,.x-nbr .x-tab-top-over .x-frame-bl,.x-nbr .x-tab-top-over .x-frame-tr,.x-nbr .x-tab-top-over .x-frame-br,.x-nbr .x-tab-top-over .x-frame-tc,.x-nbr .x-tab-top-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-over-corners.gif')}.x-nbr .x-tab-top-over .x-frame-ml,.x-nbr .x-tab-top-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-over-sides.gif')}.x-nbr .x-tab-top-over .x-frame-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-over-bg.gif')}.x-nbr .x-tab-bottom-over .x-frame-tl,.x-nbr .x-tab-bottom-over .x-frame-bl,.x-nbr .x-tab-bottom-over .x-frame-tr,.x-nbr .x-tab-bottom-over .x-frame-br,.x-nbr .x-tab-bottom-over .x-frame-tc,.x-nbr .x-tab-bottom-over .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-over-corners.gif')}.x-nbr .x-tab-bottom-over .x-frame-ml,.x-nbr .x-tab-bottom-over .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-over-sides.gif')}.x-nbr .x-tab-bottom-over .x-frame-mc{background-color:#f2eeee;background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-over-bg.gif')}.x-nbr .x-tab-top-active .x-frame-tl,.x-nbr .x-tab-top-active .x-frame-bl,.x-nbr .x-tab-top-active .x-frame-tr,.x-nbr .x-tab-top-active .x-frame-br,.x-nbr .x-tab-top-active .x-frame-tc,.x-nbr .x-tab-top-active .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-active-corners.gif')}.x-nbr .x-tab-top-active .x-frame-ml,.x-nbr .x-tab-top-active .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-active-sides.gif')}.x-nbr .x-tab-top-active .x-frame-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-active-bg.gif')}.x-nbr .x-tab-bottom-active .x-frame-tl,.x-nbr .x-tab-bottom-active .x-frame-bl,.x-nbr .x-tab-bottom-active .x-frame-tr,.x-nbr .x-tab-bottom-active .x-frame-br,.x-nbr .x-tab-bottom-active .x-frame-tc,.x-nbr .x-tab-bottom-active .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-active-corners.gif')}.x-nbr .x-tab-bottom-active .x-frame-ml,.x-nbr .x-tab-bottom-active .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-active-sides.gif')}.x-nbr .x-tab-bottom-active .x-frame-mc{background-color:#eaeaea;background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-active-bg.gif')}.x-nbr .x-tab-top-disabled .x-frame-tl,.x-nbr .x-tab-top-disabled .x-frame-bl,.x-nbr .x-tab-top-disabled .x-frame-tr,.x-nbr .x-tab-top-disabled .x-frame-br,.x-nbr .x-tab-top-disabled .x-frame-tc,.x-nbr .x-tab-top-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-disabled-corners.gif')}.x-nbr .x-tab-top-disabled .x-frame-ml,.x-nbr .x-tab-top-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-disabled-sides.gif')}.x-nbr .x-tab-top-disabled .x-frame-mc{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-top-disabled-bg.gif')}.x-nbr .x-tab-bottom-disabled .x-frame-tl,.x-nbr .x-tab-bottom-disabled .x-frame-bl,.x-nbr .x-tab-bottom-disabled .x-frame-tr,.x-nbr .x-tab-bottom-disabled .x-frame-br,.x-nbr .x-tab-bottom-disabled .x-frame-tc,.x-nbr .x-tab-bottom-disabled .x-frame-bc{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-corners.gif')}.x-nbr .x-tab-bottom-disabled .x-frame-ml,.x-nbr .x-tab-bottom-disabled .x-frame-mr{background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-sides.gif')}.x-nbr .x-tab-bottom-disabled .x-frame-mc{background-repeat:repeat-x;background-image:url('../resources/themes/images/partkeepr/tab/tab-default-bottom-disabled-bg.gif')}.x-tree-no-lines .x-tree-elbow{background-color:transparent}.x-tree-no-lines .x-tree-elbow-end{background-color:transparent}.x-tree-no-lines .x-tree-elbow-line{background-color:transparent}.x-tree-arrows .x-tree-elbow-plus{background:transparent no-repeat 0 0}.x-tree-arrows .x-tree-elbow-end-plus{background:transparent no-repeat 0 0}.x-tree-arrows .x-tree-elbow-end-minus{background:transparent no-repeat -16px 0}.x-tree-arrows .x-tree-elbow-minus{background:transparent no-repeat -16px 0}.x-tree-arrows .x-tree-elbow{background-color:transparent !important}.x-tree-arrows .x-tree-elbow-end{background-color:transparent !important}.x-tree-arrows .x-tree-elbow-line{background-color:transparent !important}.x-tree-arrows .x-tree-expander-over .x-tree-elbow-plus,.x-tree-arrows .x-tree-expander-over .x-tree-elbow-end-plus{background-position:-32px 0}.x-tree-arrows .x-tree-expander-over .x-tree-elbow-minus,.x-tree-arrows .x-tree-expander-over .x-tree-elbow-end-minus{background-position:-48px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-elbow-plus,.x-tree-arrows .x-grid-tree-node-expanded .x-tree-elbow-end-plus{background-position:-16px 0}.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-elbow-plus,.x-tree-arrows .x-grid-tree-node-expanded .x-tree-expander-over .x-tree-elbow-end-plus{background-position:-48px 0}.x-tree-elbow-plus,.x-tree-elbow-minus,.x-tree-elbow-end-plus,.x-tree-elbow-end-minus{cursor:pointer}.x-tree-lines .x-tree-elbow{background-image:url('../resources/themes/images/partkeepr/tree/elbow.gif')}.x-tree-lines .x-tree-elbow-end{background-image:url('../resources/themes/images/partkeepr/tree/elbow-end.gif')}.x-tree-lines .x-tree-elbow-plus{background-image:url('../resources/themes/images/partkeepr/tree/elbow-plus.gif')}.x-tree-lines .x-tree-elbow-end-plus{background-image:url('../resources/themes/images/partkeepr/tree/elbow-end-plus.gif')}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-plus{background-image:url('../resources/themes/images/partkeepr/tree/elbow-minus.gif')}.x-tree-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus{background-image:url('../resources/themes/images/partkeepr/tree/elbow-end-minus.gif')}.x-tree-lines .x-tree-elbow-line{background-image:url('../resources/themes/images/partkeepr/tree/elbow-line.gif')}.x-tree-no-lines .x-tree-elbow-plus,.x-tree-no-lines .x-tree-elbow-end-plus{background-image:url('../resources/themes/images/partkeepr/tree/elbow-plus-nl.gif')}.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-elbow-plus,.x-tree-no-lines .x-grid-tree-node-expanded .x-tree-elbow-end-plus{background-image:url('../resources/themes/images/partkeepr/tree/elbow-end-minus-nl.gif')}.x-tree-arrows .x-tree-elbow-plus,.x-tree-arrows .x-tree-elbow-minus,.x-tree-arrows .x-tree-elbow-end-plus,.x-tree-arrows .x-tree-elbow-end-minus{background-image:url('../resources/themes/images/partkeepr/tree/arrows.gif')}.x-tree-icon{margin-right:3px}.x-tree-elbow,.x-tree-elbow-end,.x-tree-elbow-plus,.x-tree-elbow-end-plus,.x-tree-elbow-empty,.x-tree-elbow-line{height:18px;width:16px}.x-tree-icon-leaf{width:16px;background-image:url('../resources/themes/images/partkeepr/tree/leaf.gif')}.x-tree-icon-parent{width:16px;background-image:url('../resources/themes/images/partkeepr/tree/folder.gif')}.x-grid-tree-node-expanded .x-tree-icon-parent{background-image:url('../resources/themes/images/partkeepr/tree/folder-open.gif')}.x-grid-rowbody{padding:0}.x-tree-panel .x-grid-cell-inner{padding:0px}.x-tree-panel .x-grid-row .x-grid-cell{border:none}.x-tree-panel .x-grid-row .x-grid-cell-inner{height:18px;line-height:18px;vertical-align:middle;cursor:pointer}.x-tree-panel .x-grid-row .x-grid-cell-inner img{float:left}.x-ie .x-tree-panel .x-grid-row .x-grid-cell-inner{white-space:normal}.x-tree-checkbox{float:left;margin:2px 3px 0 0;display:block;width:13px;height:13px;background:url('../resources/themes/images/partkeepr/form/checkbox.png') no-repeat;overflow:hidden;padding:0;border:0}.x-tree-checkbox::-moz-focus-inner{padding:0;border:0}.x-nbr.x-ie .x-tree-checkbox{font-size:0}.x-tree-checkbox-checked{background-position:0 -13px}.x-tree-panel .x-grid-cell-inner{border-width:0 !important}.x-gecko .x-tree-panel .x-grid-row .x-grid-cell-inner{line-height:16px}.x-tree-drop-ok-append .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/tree/drop-append.gif')}.x-tree-drop-ok-above .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/tree/drop-above.gif')}.x-tree-drop-ok-below .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/tree/drop-below.gif')}.x-tree-drop-ok-between .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/tree/drop-between.gif')}.x-grid-tree-loading .x-tree-icon{background-image:url('../resources/themes/images/partkeepr/tree/loading.gif')}.x-tree-ddindicator{height:1px;border-width:1px 0px 0px;border-style:dotted;border-color:green}.x-grid-tree-loading span{font-style:italic;color:#444444}.x-tree-animator-wrap{overflow:hidden}.x-surface{display:-moz-inline-box;-moz-box-orient:vertical;display:inline-block;vertical-align:middle;*vertical-align:auto}.x-surface{*display:inline}.rvml{behavior:url(#default#VML)}.x-surface tspan{user-select:none;-o-user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none}.x-vml-sprite{position:absolute;left:0;top:0;width:1px;height:1px}.x-vml-group{position:absolute;left:0;top:0;width:1000px;height:1000px}.x-vml-measure-span{position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;display:inline}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}.x-vml-base{position:relative;top:0;left:0;overflow:hidden;display:inline-block}.x-viewport,.x-viewport body{margin:0;padding:0;border:0 none;overflow:hidden;height:100%}.x-dd-drag-repair .x-dd-drag-ghost{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=60);opacity:0.6}.x-dd-drag-repair .x-dd-drop-icon{display:none}.x-dd-drag-ghost{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=85);opacity:0.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-view-selector{position:absolute;left:0;top:0;width:0;background-color:#c3daf9;border:1px dotted #3399bb;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;zoom:1}.x-dd-drop-nodrop .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/dd/drop-no.gif')}.x-dd-drop-ok .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/dd/drop-yes.gif')}.x-dd-drop-ok-add .x-dd-drop-icon{background-image:url('../resources/themes/images/partkeepr/dd/drop-add.gif')}.x-resizable-handle{position:absolute;z-index:100;font-size:1px;line-height:6px;overflow:hidden;zoom:1;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0;background-color:#fff}.x-resizable-handle-east{width:6px;height:100%;right:0;top:0}.x-resizable-over .x-resizable-handle-east{cursor:e-resize}.x-resizable-handle-south{width:100%;height:6px;left:0;bottom:0}.x-resizable-over .x-resizable-handle-south{cursor:s-resize}.x-resizable-handle-west{width:6px;height:100%;left:0;top:0}.x-resizable-over .x-resizable-handle-west{cursor:w-resize}.x-resizable-handle-north{width:100%;height:6px;left:0;top:0}.x-resizable-over .x-resizable-handle-north{cursor:n-resize}.x-resizable-handle-southeast{width:6px;height:6px;right:0;bottom:0;z-index:101}.x-resizable-over .x-resizable-handle-southeast{cursor:se-resize}.x-resizable-handle-northwest{width:6px;height:6px;left:0;top:0;z-index:101}.x-resizable-over .x-resizable-handle-northwest{cursor:nw-resize}.x-resizable-handle-northeast{width:6px;height:6px;right:0;top:0;z-index:101}.x-resizable-over .x-resizable-handle-northeast{cursor:ne-resize}.x-resizable-handle-southwest{width:6px;height:6px;left:0;bottom:0;z-index:101}.x-resizable-over .x-resizable-handle-southwest{cursor:sw-resize}.x-ie .x-resizable-handle-east{margin-right:-1px}.x-ie .x-resizable-handle-south{margin-bottom:-1px}.x-resizable-over .x-resizable-handle,.x-resizable-pinned .x-resizable-handle{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);opacity:1}.x-window .x-window-handle{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0}.x-window-collapsed .x-window-handle{display:none}.x-resizable-proxy{border:1px dashed #3b5a82;position:absolute;left:0;top:0;overflow:hidden;z-index:50000}.x-resizable-overlay{position:absolute;left:0;top:0;width:100%;height:100%;display:none;z-index:200000;background-color:#fff;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=0);opacity:0}.x-resizable-over .x-resizable-handle-east,.x-resizable-over .x-resizable-handle-west,.x-resizable-pinned .x-resizable-handle-east,.x-resizable-pinned .x-resizable-handle-west{background-position:left;background-image:url('../resources/themes/images/partkeepr/sizer/e-handle.gif')}.x-resizable-over .x-resizable-handle-south,.x-resizable-over .x-resizable-handle-north,.x-resizable-pinned .x-resizable-handle-south,.x-resizable-pinned .x-resizable-handle-north{background-position:top;background-image:url('../resources/themes/images/partkeepr/sizer/s-handle.gif')}.x-resizable-over .x-resizable-handle-southeast,.x-resizable-pinned .x-resizable-handle-southeast{background-position:top left;background-image:url('../resources/themes/images/partkeepr/sizer/se-handle.gif')}.x-resizable-over .x-resizable-handle-northwest,.x-resizable-pinned .x-resizable-handle-northwest{background-position:bottom right;background-image:url('../resources/themes/images/partkeepr/sizer/nw-handle.gif')}.x-resizable-over .x-resizable-handle-northeast,.x-resizable-pinned .x-resizable-handle-northeast{background-position:bottom left;background-image:url('../resources/themes/images/partkeepr/sizer/ne-handle.gif')}.x-resizable-over .x-resizable-handle-southwest,.x-resizable-pinned .x-resizable-handle-southwest{background-position:top right;background-image:url('../resources/themes/images/partkeepr/sizer/sw-handle.gif')}.x-splitter .x-collapse-el{position:absolute;cursor:pointer;background-color:transparent;background-repeat:no-repeat !important}.x-layout-split-left,.x-layout-split-right{top:50%;margin-top:-17px;width:5px;height:35px}.x-layout-split-top,.x-layout-split-bottom{left:50%;width:35px;height:5px;margin-left:-17px}.x-layout-split-left{background:no-repeat top right;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-left.gif')}.x-layout-split-right{background:no-repeat top left;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-right.gif')}.x-layout-split-top{background:no-repeat top left;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-top.gif')}.x-layout-split-bottom{background:no-repeat top left;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-bottom.gif')}.x-splitter-collapsed .x-layout-split-left{background:no-repeat top left;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-right.gif')}.x-splitter-collapsed .x-layout-split-right{background:no-repeat top right;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-left.gif')}.x-splitter-collapsed .x-layout-split-top{background:no-repeat top left;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-bottom.gif')}.x-splitter-collapsed .x-layout-split-bottom{background:no-repeat top left;background-image:url('../resources/themes/images/partkeepr/util/splitter/mini-top.gif')}.x-splitter-horizontal{cursor:e-resize;cursor:row-resize;font-size:1px}.x-splitter-vertical{cursor:e-resize;cursor:col-resize;font-size:1px}.x-splitter-collapsed{cursor:default}.x-splitter-active{z-index:4;font-size:1px;background-color:#b4b4b4;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8}.x-splitter-active .x-collapse-el{filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=30);opacity:0.3}.x-proxy-el{position:absolute;background:#b4b4b4;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=80);opacity:0.8}.x-docked{position:absolute;z-index:1}.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-box-inner{overflow:hidden;zoom:1;position:relative;left:0;top:0}.x-box-item{position:absolute !important;left:0;top:0}.x-box-layout-ct,.x-border-layout-ct{overflow:hidden;zoom:1}.x-overflow-hidden{overflow:hidden !important}.x-inline-children > *{display:inline-block !important}.x-abs-layout-item{position:absolute}.x-border-layout-ct{background-color:#dbdbdb}.x-border-region-slide-in{z-index:5}.x-region-collapsed-placeholder{z-index:4}.x-accordion-hd .x-panel-header-text{color:#000;font-weight:normal}.x-accordion-hd{background:#d9e7f8 !important;-moz-box-shadow:inset 0 0 0 0 #d9e7f8;-webkit-box-shadow:inset 0 0 0 0 #d9e7f8;-o-box-shadow:inset 0 0 0 0 #d9e7f8;box-shadow:inset 0 0 0 0 #d9e7f8}.x-accordion-hd .x-tool-collapse-top,.x-accordion-hd .x-tool-collapse-right,.x-accordion-hd .x-tool-collapse-bottom,.x-accordion-hd .x-tool-collapse-left{background-position:0 -255px}.x-accordion-hd .x-tool-expand-top,.x-accordion-hd .x-tool-expand-right,.x-accordion-hd .x-tool-expand-bottom,.x-accordion-hd .x-tool-expand-left{background-position:0 -240px}.x-accordion-hd .x-tool-over .x-tool-collapse-top,.x-accordion-hd .x-tool-over .x-tool-collapse-right,.x-accordion-hd .x-tool-over .x-tool-collapse-bottom,.x-accordion-hd .x-tool-over .x-tool-collapse-left{background-position:-15px -255px}.x-accordion-hd .x-tool-over .x-tool-expand-top,.x-accordion-hd .x-tool-over .x-tool-expand-right,.x-accordion-hd .x-tool-over .x-tool-expand-bottom,.x-accordion-hd .x-tool-over .x-tool-expand-left{background-position:-15px -240px}.x-accordion-hd{border-width:1px 0 1px 0 !important;padding:4px 5px 5px 5px;border-top-color:#e8e8e8 !important}.x-accordion-body{border-width:0 !important}.x-accordion-hd-sibling-expanded{border-top-color:#aaa !important;-moz-box-shadow:inset 0 1px 0 0 #e8e8e8;-webkit-box-shadow:inset 0 1px 0 0 #e8e8e8;-o-box-shadow:inset 0 1px 0 0 #e8e8e8;box-shadow:inset 0 1px 0 0 #e8e8e8}.x-accordion-hd-last-collapsed{border-bottom-color:#d9e7f8 !important}.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}.x-frame-mc{position:relative;background-repeat:repeat-x;overflow:hidden}.x-box-scroller-left{float:left;height:100%;z-index:5}.x-box-scroller-left .x-toolbar-scroll-left,.x-box-scroller-left .x-tabbar-scroll-left{width:18px;position:relative;cursor:pointer;height:23;background:transparent no-repeat -18px 0;background-image:url('../resources/themes/images/partkeepr/tab-bar/scroll-left.gif')}.x-box-scroller-left .x-toolbar-scroll-left-hover{background-position:0 0}.x-box-scroller-left .x-toolbar-scroll-left-disabled,.x-box-scroller-left .x-tabbar-scroll-left-disabled{background-position:-18px 0;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;cursor:default}.x-box-scroller-left .x-toolbar-scroll-left{background-image:url('../resources/themes/images/partkeepr/toolbar/scroll-left.gif');background-position:-14px 0}.x-box-scroller-left .x-toolbar-scroll-left-hover{background-position:0 0}.x-box-scroller-left .x-toolbar-scroll-left-disabled{background-position:-14px 0}.x-box-scroller-left .x-toolbar-scroll-left{width:14px;height:22px;border-bottom:1px solid #8db2e3}.x-horizontal-box-overflow-body{float:left}.x-box-scroller-right{float:right;height:100%;z-index:5}.x-box-scroller-right .x-toolbar-scroll-right,.x-box-scroller-right .x-tabbar-scroll-right{width:18px;position:relative;cursor:pointer;height:23;background:transparent no-repeat 0 0;background-image:url('../resources/themes/images/partkeepr/tab-bar/scroll-right.gif')}.x-box-scroller-right .x-toolbar-scroll-right-hover{background-position:-18px 0}.x-box-scroller-right .x-toolbar-scroll-right-disabled,.x-box-scroller-right .x-tabbar-scroll-right-disabled{background-position:0 0;filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:0.5;cursor:default}.x-box-scroller-right .x-toolbar-scroll-right{background-image:url('../resources/themes/images/partkeepr/toolbar/scroll-right.gif')}.x-box-scroller-right .x-toolbar-scroll-right-hover{background-position:-14px 0}.x-box-scroller-right .x-toolbar-scroll-right-disabled{background-position:0 0}.x-box-scroller-right .x-toolbar-scroll-right{width:14px;height:22px;border-bottom:1px solid #8db2e3}.x-box-scroller-top .x-box-scroller{line-height:0;font-size:0}.x-box-scroller-top .x-menu-scroll-top{background:transparent no-repeat center center;background-image:url('../resources/themes/images/partkeepr/layout/mini-top.gif');height:8px;cursor:pointer}.x-box-scroller-bottom .x-box-scroller{line-height:0;font-size:0}.x-box-scroller-bottom .x-menu-scroll-bottom{background:transparent no-repeat center center;background-image:url('../resources/themes/images/partkeepr/layout/mini-bottom.gif');height:8px;cursor:pointer}.x-box-menu-right{float:right;padding-right:2px}.x-column{float:left}.x-ie6 .x-column{display:inline}.x-tool{height:15px}.x-tool img{overflow:hidden;width:15px;height:15px;cursor:pointer;background-color:transparent;background-repeat:no-repeat;background-image:url('../resources/themes/images/partkeepr/tools/tool-sprites.gif');margin:0}.x-panel-header-horizontal .x-tool,.x-window-header-horizontal .x-tool{margin-left:2px}.x-panel-header-vertical .x-tool,.x-window-header-vertical .x-tool{margin-bottom:2px}.x-tool-placeholder{visibility:hidden}.x-tool-toggle{background-position:0 -60px}.x-tool-over .x-tool-toggle{background-position:-15px -60px}.x-panel-collapsed .x-tool-toggle,.x-fieldset-collapsed .x-tool-toggle{background-position:0 -75px}.x-panel-collapsed .x-tool-over .x-tool-toggle,.x-fieldset-collapsed .x-tool-over .x-tool-toggle{background-position:-15px -75px}.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-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-help{background-position:0 -300px}.x-tool-save{background-position:0 -285px}.x-tool-search{background-position:0 -270px}.x-tool-minus{background-position:0 -255px}.x-tool-plus{background-position:0 -240px}.x-tool-refresh{background-position:0 -225px}.x-tool-up{background-position:0 -210px}.x-tool-down{background-position:0 -195px}.x-tool-move{background-position:0 -375px}.x-tool-resize{background-position:0 -360px}.x-tool-collapse{background-position:0 -345px}.x-tool-expand{background-position:0 -330px}.x-tool-print{background-position:0 -315px}.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-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-horizontal-scroller-present .x-grid-body{border-bottom-width:0px}.x-vertical-scroller-present .x-grid-body{border-right-width:0px}.x-scroller{overflow:hidden}.x-scroller-vertical{border:1px solid #aaa;border-top-color:#c5c5c5}.x-scroller-horizontal{border:1px solid #aaa}.x-vertical-scroller-present .x-scroller-horizontal{border-right-width:0px}.x-scroller-ct{overflow:hidden;position:absolute;margin:0;padding:0;border:none;left:0px;top:0px;box-sizing:content-box !important;-ms-box-sizing:content-box !important;-moz-box-sizing:content-box !important;-webkit-box-sizing:content-box !important}.x-scroller-vertical .x-scroller-ct{overflow-y:scroll}.x-scroller-horizontal .x-scroller-ct{overflow-x:scroll}.x-html html,.x-html address,.x-html blockquote,.x-html body,.x-html dd,.x-html div,.x-html dl,.x-html dt,.x-html fieldset,.x-html form,.x-html frame,.x-html frameset,.x-html h1,.x-html h2,.x-html h3,.x-html h4,.x-html h5,.x-html h6,.x-html noframes,.x-html ol,.x-html p,.x-html ul,.x-html center,.x-html dir,.x-html hr,.x-html menu,.x-html pre{display:block}.x-html li{display:list-item;list-style:disc}.x-html head{display:none}.x-html table{display:table}.x-html tr{display:table-row}.x-html thead{display:table-header-group}.x-html tbody{display:table-row-group}.x-html tfoot{display:table-footer-group}.x-html col{display:table-column}.x-html colgroup{display:table-column-group}.x-html td,.x-html th{display:table-cell}.x-html caption{display:table-caption}.x-html th{font-weight:bolder;text-align:center}.x-html caption{text-align:center}.x-html body{margin:8px}.x-html h1{font-size:2em;margin:.67em 0}.x-html h2{font-size:1.5em;margin:.75em 0}.x-html h3{font-size:1.17em;margin:.83em 0}.x-html h4,.x-html p,.x-html blockquote,.x-html ul,.x-html fieldset,.x-html form,.x-html ol,.x-html dl,.x-html dir,.x-html menu{margin:1.12em 0}.x-html h5{font-size:.83em;margin:1.5em 0}.x-html h6{font-size:.75em;margin:1.67em 0}.x-html h1,.x-html h2,.x-html h3,.x-html h4,.x-html h5,.x-html h6,.x-html b,.x-html strong{font-weight:bolder}.x-html blockquote{margin-left:40px;margin-right:40px}.x-html i,.x-html cite,.x-html em,.x-html var,.x-html address{font-style:italic}.x-html pre,.x-html tt,.x-html code,.x-html kbd,.x-html samp{font-family:monospace}.x-html pre{white-space:pre}.x-html button,.x-html textarea,.x-html input,.x-html select{display:inline-block}.x-html big{font-size:1.17em}.x-html small,.x-html sub,.x-html sup{font-size:.83em}.x-html sub{vertical-align:sub}.x-html sup{vertical-align:super}.x-html table{border-spacing:2px}.x-html thead,.x-html tbody,.x-html tfoot{vertical-align:middle}.x-html td,.x-html th{vertical-align:inherit}.x-html s,.x-html strike,.x-html del{text-decoration:line-through}.x-html hr{border:1px inset}.x-html ol,.x-html ul,.x-html dir,.x-html menu,.x-html dd{margin-left:40px}.x-html ul,.x-html menu,.x-html dir{list-style-type:disc}.x-html ol{list-style-type:decimal}.x-html ol ul,.x-html ul ol,.x-html ul ul,.x-html ol ol{margin-top:0;margin-bottom:0}.x-html u,.x-html ins{text-decoration:underline}.x-html br:before{content:"\A"}.x-html :before,.x-html :after{white-space:pre-line}.x-html center{text-align:center}.x-html :link,.x-html :visited{text-decoration:underline}.x-html :focus{outline:invert dotted thin}.x-html BDO[DIR="ltr"]{direction:ltr;unicode-bidi:bidi-override}.x-html BDO[DIR="rtl"]{direction:rtl;unicode-bidi:bidi-override}.x-toolbar-mainmenu{background-image:none;background-color:#ececec;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #2aaad3), color-stop(100%, #2067a3));background-image:-webkit-linear-gradient(top, #2aaad3,#2067a3);background-image:-moz-linear-gradient(top, #2aaad3,#2067a3);background-image:-o-linear-gradient(top, #2aaad3,#2067a3);background-image:-ms-linear-gradient(top, #2aaad3,#2067a3);background-image:linear-gradient(top, #2aaad3,#2067a3)}.x-toolbar-mainmenu .x-btn-default-toolbar-small{border:0 !important;background:none;box-shadow:none}.x-toolbar-mainmenu .x-btn-default-toolbar-small .x-btn-inner{color:white;font-weight:bold;text-shadow:0 0 1px #000}.x-toolbar-mainmenu .x-btn-over{background-image:none;background-color:#2aaad3;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #68c4e1), color-stop(100%, #388ed8));background-image:-webkit-linear-gradient(top, #68c4e1,#388ed8);background-image:-moz-linear-gradient(top, #68c4e1,#388ed8);background-image:-o-linear-gradient(top, #68c4e1,#388ed8);background-image:-ms-linear-gradient(top, #68c4e1,#388ed8);background-image:linear-gradient(top, #68c4e1,#388ed8)}.x-toolbar-mainmenu .x-btn-menu-active{background-image:none;background-color:#2aaad3;background-image:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #68c4e1), color-stop(100%, #388ed8));background-image:-webkit-linear-gradient(top, #68c4e1,#388ed8);background-image:-moz-linear-gradient(top, #68c4e1,#388ed8);background-image:-o-linear-gradient(top, #68c4e1,#388ed8);background-image:-ms-linear-gradient(top, #68c4e1,#388ed8);background-image:linear-gradient(top, #68c4e1,#388ed8)}.x-toolbar-mainmenu .x-btn-default-toolbar-small .x-btn-arrow{background-image:url(../resources/themes/images/partkeepr/button/arrow-white.gif)}.x-btn-default-toolbar-small{padding:3px}.x-panel-header-default .x-panel-header-text{text-shadow:1px 1px 0px black}.x-accordion-hd{text-shadow:clear}.x-panel-header-default{box-shadow:none}.x-panel-header-default-top{box-shadow:none;-webkit-box-shadow:none}.x-panel-header-default-framed-top{box-shadow:none;-webkit-box-shadow:none}.partkeepr-logo{color:white !important;font-weight:bold;font-style:italic;font-family:'Ubuntu', sans-serif !important;text-shadow:0px -1px 0px #374683;font-size:24px !important}.partkeepr-logo-align{margin-right:1px;text-align:right}.x-tab-default-icon-text-left em{margin-left:-4px} diff --git a/frontend/favicon.ico b/frontend/favicon.ico Binary files differ. diff --git a/frontend/file.php b/frontend/file.php @@ -1,67 +0,0 @@ -<?php -namespace de\RaumZeitLabor\PartKeepr\Frontend; -use de\RaumZeitLabor\PartKeepr\Footprint\FootprintAttachment; - -use de\RaumZeitLabor\PartKeepr\Part\PartAttachment; - -use de\RaumZeitLabor\PartKeepr\UploadedFile\TempUploadedFile; - -declare(encoding = 'UTF-8'); - -use de\RaumZeitLabor\PartKeepr\PartKeepr; -use de\RaumZeitLabor\PartKeepr\Image\Image; -use de\RaumZeitLabor\PartKeepr\Manufacturer\ManufacturerICLogo; - -include("../src/de/RaumZeitLabor/PartKeepr/PartKeepr.php"); - -PartKeepr::initialize(""); - -$type = $_REQUEST["type"]; -$id = $_REQUEST["id"]; - -if (substr($id, 0, 4) === "TMP:") { - $tmpFileId = str_replace("TMP:", "", $id); - $file = TempUploadedFile::loadById($tmpFileId); -} else { - try { - switch ($type) { - case "PartKeepr.PartAttachment": - case "PartAttachment": - $file = PartAttachment::loadById($id); - break; - case "FootprintAttachment": - case "PartKeepr.FootprintAttachment": - $file = FootprintAttachment::loadById($id); - break; - default: - $file = null; - // Add default image? - } - - } catch (\Exception $e) { - $file = null; - // Something bad happened - } -} - -if ($file == null) { - - // Could not find the image, but maybe we want a temporary image? - if (array_key_exists("tmpId", $_REQUEST)) { - $file = TempUploadedFile::loadById($_REQUEST["tmpId"]); - } -} - -if (is_object($file)) { - header("Content-Type: ".$file->getMimeType()); - header('Content-Disposition: attachment; filename="'.basename($file->getOriginalFilename()).'"'); - - $fp = fopen($file->getFilename(), "rb"); - fpassthru($fp); - fclose($fp); -} else { - echo "404 not found"; -} - -PartKeepr::getEM()->flush(); -exit();- \ No newline at end of file diff --git a/frontend/image.php b/frontend/image.php @@ -1,117 +0,0 @@ -<?php -namespace de\RaumZeitLabor\PartKeepr\Frontend; -use de\RaumZeitLabor\PartKeepr\Part\PartImage; -use de\RaumZeitLabor\PartKeepr\StorageLocation\StorageLocationImage; - -use de\RaumZeitLabor\PartKeepr\Footprint\FootprintImage; - -use de\RaumZeitLabor\PartKeepr\TempImage\TempImage; - -declare(encoding = 'UTF-8'); - -use de\RaumZeitLabor\PartKeepr\PartKeepr; -use de\RaumZeitLabor\PartKeepr\Image\Image; -use de\RaumZeitLabor\PartKeepr\Image\CachedImage; -use de\RaumZeitLabor\PartKeepr\Manufacturer\ManufacturerICLogo; - -include("../src/de/RaumZeitLabor/PartKeepr/PartKeepr.php"); - -PartKeepr::initialize(""); - -$type = $_REQUEST["type"]; -$id = $_REQUEST["id"]; - -if (substr($id, 0, 4) === "TMP:") { - $tmpImageId = str_replace("TMP:", "", $id); - $image = TempImage::loadById($tmpImageId); -} else { - try { - switch ($type) { - case Image::IMAGE_ICLOGO: - $image = ManufacturerICLogo::loadById($id); - break; - case Image::IMAGE_FOOTPRINT: - $image = FootprintImage::loadById($id); - break; - case Image::IMAGE_STORAGELOCATION: - $image = StorageLocationImage::loadById($id); - break; - case Image::IMAGE_PART: - $image = PartImage::loadById($id); - break; - default: - $image = null; - // Add default image? - } - - } catch (\Exception $e) { - $image = null; - // Something bad happened - } -} - -if ($image == null) { - // Could not find the image, but maybe we want a temporary image? - if (array_key_exists("tmpId", $_REQUEST)) { - $image = TempImage::loadById($_REQUEST["tmpId"]); - } - - if ($image === null) { - /* The image is still null - output an "image not found" image. */ - $image = imagecreate($_REQUEST["w"], $_REQUEST["h"]); - $white = imagecolorallocate($image, 255,255,255); - $black = imagecolorallocate($image, 0,0,0); - - header("Content-Type: image/png"); - - $w = $_REQUEST["w"]-1; - $h = $_REQUEST["h"]-1; - imagefill($image, 0,0, $white); - - /* Draw the X */ - imageline($image, 0,0,$w,$h, $black); - imageline($image, $w,0,0,$h, $black); - imagepng($image); - exit(); - - } -} - -$mode = "fit"; - -if (array_key_exists("m", $_REQUEST)) { - $mode = $_REQUEST["m"]; -} - -if (array_key_exists("cache", $_REQUEST)) { - if ($_REQUEST["cache"] == "false") { - CachedImage::invalidate($image); - } -} - -switch ($mode) { - case "fitpadding": - $file = $image->fitWithinPadding($_REQUEST["w"],$_REQUEST["h"]); - break; - case "fitexact": - $file = $image->fitWithinExact($_REQUEST["w"],$_REQUEST["h"]); - break; - case "scale": - $file = $image->scaleTo($_REQUEST["w"],$_REQUEST["h"]); - break; - case "fit": - default: - $file = $image->fitWithin($_REQUEST["w"],$_REQUEST["h"]); - break; - -} - - -header("Content-Type: image/png"); - -$fp = fopen($file, "rb"); -fpassthru($fp); -fclose($fp); - -PartKeepr::getEM()->flush(); -exit();- \ No newline at end of file diff --git a/frontend/index.php b/frontend/index.php @@ -1,88 +0,0 @@ -<?php -namespace de\RaumZeitLabor\PartKeepr\Frontend; -declare(encoding = 'UTF-8'); - -use de\RaumZeitLabor\PartKeepr\Service\ServiceManager; -use de\RaumZeitLabor\PartKeepr\PartKeepr; -use de\RaumZeitLabor\PartKeepr\Util\Configuration; - -include("../src/de/RaumZeitLabor/PartKeepr/PartKeepr.php"); - -PartKeepr::initialize(""); -?> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" - "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> -<html> - <head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> - <title>PartKeepr</title> - - <link href='http://fonts.googleapis.com/css?family=Ubuntu:400,700italic' rel='stylesheet' type='text/css'> - - <!-- Include the ExtJS CSS Theme --> - <link rel="stylesheet" type="text/css" href="css/partkeepr-theme.css"/> - - <link rel="stylesheet" type="text/css" href="js/Ext.ux/statusbar/css/statusbar.css"/> - - <link rel="stylesheet" type="text/css" href="css/PartKeepr.css"/> - - <link rel="icon" href="favicon.ico"/> - - <!-- Include the ExtJS JavaScript Library --> - <script type="text/javascript" src="extjs/bootstrap.js"></script> - - <?php - // @todo This is ugly, but how to fix? - if (Configuration::getOption("partkeepr.frontend.debug", false) === true) { - ?> - <script type="text/javascript" src="extjs/ext-all-debug.js"></script> - <script type="text/javascript" src="js/partkeepr-debug.js"></script> - <?php - } else { - ?> - <script type="text/javascript" src="extjs/ext-all.js"></script> - <script type="text/javascript" src="js/partkeepr.js"></script> - <?php - } - ?> - <script type="text/javascript" src="js/org.phpjs.lib/php.default.min.js"></script> - <script type="text/javascript" src="js/webcam.js"></script> - - </head> -<body> -<div id="loading"><span class="logo"></span></div> -<?php -// @todo put that somewhere else. This is only a stupid hack. -function return_bytes ($size_str) -{ - switch (substr ($size_str, -1)) - { - case 'M': case 'm': return (int)$size_str * 1048576; - case 'K': case 'k': return (int)$size_str * 1024; - case 'G': case 'g': return (int)$size_str * 1073741824; - default: return $size_str; - } -} - -$maxPostSize = return_bytes(ini_get("post_max_size")); -$maxFilesize = return_bytes(ini_get("upload_max_filesize")); - -$maxUploadSize = ($maxPostSize < $maxFilesize) ? $maxPostSize : $maxFilesize; - -$imagick = new \Imagick(); -?> -<script type="text/javascript"> -window.maxUploadSize = <?php echo $maxUploadSize; ?>; -window.availableImageFormats = <?php echo json_encode($imagick->queryFormats()); ?>; - -<?php -if (Configuration::getOption("partkeepr.frontend.autologin.enabled", false) === true) { -?> -window.autoLoginUsername = "<?php echo Configuration::getOption("partkeepr.frontend.autologin.username"); ?>"; -window.autoLoginPassword = "<?php echo Configuration::getOption("partkeepr.frontend.autologin.password"); ?>"; -<?php -} -?> -</script> -</body> -</html>- \ No newline at end of file diff --git a/frontend/js/Components/CategoryEditor/CategoryEditorForm.js b/frontend/js/Components/CategoryEditor/CategoryEditorForm.js @@ -1,18 +0,0 @@ -Ext.define('PartKeepr.CategoryEditorForm', { - extend: 'Ext.form.Panel', - layout: 'anchor', - border: false, - frame: false, - bodyStyle: 'background:#DBDBDB;padding: 10px;', - items: [{ - xtype: 'textfield', - name: 'name', - anchor: '100%', - fieldLabel: i18n("Name") - },{ - xtype: 'textarea', - name: 'description', - anchor: '100%', - fieldLabel: i18n("Description") - }] -});- \ No newline at end of file diff --git a/frontend/js/Components/CategoryEditor/CategoryEditorTree.js b/frontend/js/Components/CategoryEditor/CategoryEditorTree.js @@ -1,202 +0,0 @@ -Ext.define("PartKeepr.CategoryEditorTree", { - alias: 'widget.CategoryEditorTree', - extend: 'PartKeepr.CategoryTree', - ddGroup: null, - categoryModel: null, - categoryService: null, - initComponent: function () { - if (this.ddGroup !== null) { - Ext.apply(this, { - viewConfig: { - animate: false, - plugins: { - ptype: 'treeviewdragdrop', - ddGroup: this.ddGroup - } - }}); - } - - this.createToolbar(); - - this.callParent(); - - this.getView().on("drop", Ext.bind(this.onCategoryDrop, this)); - this.getView().on("beforedrop", this.onBeforeDrop, this); - this.getView().on("itemcontextmenu", Ext.bind(this.onItemContextMenu, this)); - - this.createMenu(); - - }, - onBeforeDrop: function () { - - }, - onCategoryDrop: function (node, data, model, pos) { - var draggedRecord = data.records[0]; - var droppedOn = this.getView().getRecord(node); - - if (!draggedRecord.isCategory) { - return; - } else { - /* Must be a category */ - - var targetRecord; - - if (pos == "after" || pos == "before") { - targetRecord = droppedOn.parentNode; - } else { - targetRecord = droppedOn; - } - - this.getStore().sort("name", "ASC"); - - var call = new PartKeepr.ServiceCall(this.categoryService, "moveCategory"); - call.setLoadMessage(sprintf(i18n("Moving category %s..."), draggedRecord.get("name"))); - call.setParameter("category", draggedRecord.get("id")); - call.setParameter("target", targetRecord.get("id")); - call.doCall(); - } - - }, - - onItemContextMenu: function (view, record, item, index, event) { - if (!record.isCategory) { return; } - var menu = this.menu; - event.stopEvent(); - - menu.record = record; - - this.menuCategoryDelete.enable(); - - if (record.get("id") == 1) { - this.menuCategoryDelete.disable(); - } - - if (record.hasChildNodes()) { - this.menuCategoryDelete.disable(); - } - - menu.showAt(event.getXY()); - }, - createMenu: function () { - this.menuCategoryDelete = Ext.create("Ext.menu.Item", { - text: i18n("Delete Category"), - handler: Ext.bind(this.confirmCategoryDelete, this), - icon: 'resources/silkicons/folder_delete.png' - }); - - this.menuCategoryAdd = Ext.create("Ext.menu.Item", { - text: i18n("Add Category"), - handler: Ext.bind(this.showCategoryAddDialog, this), - icon: 'resources/silkicons/folder_add.png' - }); - - this.menuCategoryEdit = Ext.create("Ext.menu.Item", { - text: i18n("Edit Category"), - handler: Ext.bind(this.showCategoryEditDialog, this), - icon: 'resources/silkicons/folder_edit.png' - }); - - this.menu = Ext.create('widget.menu', { - items: [ - this.menuCategoryAdd, - this.menuCategoryEdit, - this.menuCategoryDelete - ] - }); - }, - createToolbar: function () { - this.toolbarExpandButton = Ext.create("Ext.button.Button", { - icon: 'resources/fugue-icons/icons/toggle-expand.png', - tooltip: i18n("Expand All"), - handler: this._onExpandClick, - scope: this - }); - - this.toolbarCollapseButton = Ext.create("Ext.button.Button", { - icon: 'resources/fugue-icons/icons/toggle.png', - tooltip: i18n("Collapse All"), - handler: this._onCollapseClick, - scope: this - }); - - this.toolbarReloadButton = Ext.create("Ext.button.Button", { - icon: 'extjs/resources/themes/images/default/grid/refresh.gif', - tooltip: i18n("Reload"), - handler: this._onReloadClick, - scope: this - }); - - this.toolbar = Ext.create("Ext.toolbar.Toolbar", { - enableOverflow: true, - dock: 'top', - items: [ this.toolbarExpandButton, this.toolbarCollapseButton, this.toolbarReloadButton ] - }); - - Ext.apply(this, { - dockedItems: [ this.toolbar ] - }); - }, - _onReloadClick: function () { - this.loadCategories(); - }, - _onExpandClick: function () { - this.getRootNode().firstChild.expand(true); - }, - _onCollapseClick: function () { - this.getRootNode().firstChild.collapse(true); - }, - confirmCategoryDelete: function () { - Ext.Msg.confirm(i18n("Confirm Category Delete"), sprintf(i18n("Do you really wish to delete the category %s?"), this.menu.record.get("name")), this.onCategoryDelete, this); - }, - showCategoryAddDialog: function () { - var j = Ext.create("PartKeepr.CategoryEditorWindow", { - record: null, - categoryModel: this.categoryModel, - parent: this.menu.record.get("id"), - listeners: { - save: Ext.bind(this.onUpdateRecord, this) - } - }); - - j.show(); - }, - showCategoryEditDialog: function () { - var j = Ext.create("PartKeepr.CategoryEditorWindow", { - record: this.menu.record, - parent: null, - categoryModel: this.categoryModel, - listeners: { - save: Ext.bind(this.onUpdateRecord, this) - } - }); - - j.show(); - }, - onUpdateRecord: function (record) { - var currentRecord = this.getStore().getRootNode().findChild("id", record.get("id"), true); - - if (currentRecord === null) { - var parentRecord = this.getStore().getRootNode().findChild("id", record.get("parent"), true); - - var nodeData = { - id : record.get("id"), - name : record.get("name"), - tooltip : record.get("description") - }; - - parentRecord.appendChild(nodeData); - - } else { - currentRecord.set("name", record.get("name")); - currentRecord.set("description", record.get("description")); - currentRecord.commit(); - } - - }, - onCategoryDelete: function (btn) { - if (btn == "yes") { - var del = this.getStore().getRootNode().findChild("id", this.menu.record.get("id"), true); - del.destroy(); - } - } -});- \ No newline at end of file diff --git a/frontend/js/Components/CategoryEditor/CategoryEditorWindow.js b/frontend/js/Components/CategoryEditor/CategoryEditorWindow.js @@ -1,67 +0,0 @@ -Ext.define('PartKeepr.CategoryEditorWindow', { - extend: 'Ext.window.Window', - border: false, - width: 400, - categoryModel: null, - initComponent: function () { - - this.form = Ext.create("PartKeepr.CategoryEditorForm"); - - this.keys = [{ - key: Ext.EventObject.ENTER, - handler: this.onEnter, - scope: this - }]; - - this.buttons = [{ - text: i18n("Save"), - handler: Ext.bind(this.onSave, this) - },{ - text: i18n("Cancel"), - handler: Ext.bind(this.onCancel, this) - }]; - - this.items = this.form; - - this.addEvents("save"); - - this.callParent(); - - this.proxyRecord = Ext.create(this.categoryModel); - - if (this.record) { - this.proxyRecord.set("name", this.record.get("name")); - this.proxyRecord.set("description", this.record.get("description")); - this.proxyRecord.set("id", this.record.get("id")); - this.proxyRecord.phantom = false; - - this.setTitle(i18n("Edit Category")); - } else { - this.proxyRecord.set("parent", this.parent); - this.setTitle(i18n("Add Category")); - } - - this.form.getForm().loadRecord(this.proxyRecord); - - this.on("show", Ext.bind(this.onShow, this)); - - }, - onEnter: function () { - this.onSave(); - }, - onShow: function () { - this.form.items.first().focus(); - }, - onSave: function () { - this.form.getForm().updateRecord(this.proxyRecord); - this.proxyRecord.save({ - success: Ext.bind(function (response) { - this.fireEvent("save", response); - this.destroy(); - }, this) - }); - }, - onCancel: function () { - this.destroy(); - } -}); diff --git a/frontend/js/Components/CategoryStore.js b/frontend/js/Components/CategoryStore.js @@ -1,28 +0,0 @@ -PartKeepr.CategoryTreeStore = Ext.define("CategoryTreeStore", -{ - extend: "Ext.data.TreeStore", - model: 'PartKeepr.Category', - proxy: { - type: 'ajax', - url: PartKeepr.getBasePath()+'/Category', - method: 'POST', - extraParams: { - call: 'getCategories' - }, - reader: { - type: 'json', - root: 'response' - } - }, - root: { - text: 'Ext JS', - id: 'src', - expanded: true - }, - constructor: function () { - this.proxy.extraParams.session = PartKeepr.getSession(); - - this.callParent(); - }, - folderSort: true -});- \ No newline at end of file diff --git a/frontend/js/Components/CategoryTree.js b/frontend/js/Components/CategoryTree.js @@ -1,109 +0,0 @@ -Ext.define("PartKeepr.CategoryTree", { - alias: 'widget.CategoryTree', - extend: 'Ext.tree.Panel', - categoryService: null, - categoryModel: null, - displayField: 'name', - sorters: [{ - property: 'name', - direction: 'ASC' - }], - viewConfig: { - animate: false - }, - loaded: false, - rootVisible: false, - initComponent: function () { - this.store = new Ext.data.TreeStore({ - root: { - id: "src", - name: "Foo" - }, - remoteSort: false, - folderSort: true - }); - - this.callParent(); - - this.addEvents("categoriesLoaded"); - - this.loadCategories(); - }, - loadCategories: function () { - var call = new PartKeepr.ServiceCall(this.categoryService, "getAllCategories"); - call.setLoadMessage(i18n("Loading categories...")); - call.setHandler(Ext.bind(this._onCategoriesLoaded, this)); - call.doCall(); - }, - _onCategoriesLoaded: function (result) { - /* Store expand/collapse state for all nodes */ - var expandedNodes = this.getExpandedNodes(this.getRootNode()); - - this.getRootNode().removeAll(); - - this.buildCategoryTree(this.getRootNode(), result, expandedNodes); - - this.loaded = true; - - this.getRootNode().expandChildren(); - - this.getStore().sort("name", "ASC"); - - this.fireEvent("categoriesLoaded"); - }, - getExpandedNodes: function (node) { - var ret = []; - if (node.get("expanded") === true) { - ret.push(node.get("id")); - } - - for (var i=0;i<node.childNodes.length;i++) { - ret = ret.concat(this.getExpandedNodes(node.childNodes[i])); - } - return ret; - }, - buildCategoryTree : function(root, data, expandedNodes) { - var nodeData = { - id : data.id, - name : data.name, - tooltip : data.description - }; - - if (Ext.Array.contains(expandedNodes, data.id)) { - Ext.apply(nodeData, { - expanded: true - }); - } - - // Hack to prevent our virtual root node from being dragged - if (data.id == 1) { - nodeData.allowDrag = false; - } - - /* We'd like to set leaf here. For some reason, the tree - * is stupid. - * - * If the node is a leaf, it's not possible to append children. I would - * have expected that the "leaf" flag is cleared when a child is appended. - * - * If the node is not a leaf, the node should (in theory) use the children - * count. However, it doesn't do that in our case and always shows the "expand" - * button unless clicked once. - */ - - /*if (data.children.length === 0) { - nodeData.leaf = true; - } else { - nodeData.leaf = false; - }*/ - - nodeData.leaf = false; - nodeData.loaded = true; - - var node = root.appendChild(Ext.create(this.categoryModel, nodeData)); - - for ( var i = 0; i < data.children.length; i++) { - this.buildCategoryTree(node, data.children[i], expandedNodes); - } - } -});- \ No newline at end of file diff --git a/frontend/js/Components/ConnectionButton.js b/frontend/js/Components/ConnectionButton.js @@ -1,17 +0,0 @@ -Ext.define('PartKeepr.ConnectionButton', { - extend: 'Ext.Button', - connectedIcon: 'resources/silkicons/connect.png', - disconnectedIcon: 'resources/silkicons/disconnect.png', - cls: 'x-btn-icon', - icon: 'resources/silkicons/disconnect.png', - //tooltip: i18n("Disconnected"), - setConnected: function () { - this.setIcon(this.connectedIcon); - //this.setTooltip(i18n("Connected")); - }, - setDisconnected: function () { - this.setIcon(this.disconnectedIcon); - //this.setTooltip(i18n("Disconnected")); - } -}); - diff --git a/frontend/js/Components/Distributor/DistributorEditor.js b/frontend/js/Components/Distributor/DistributorEditor.js @@ -1,34 +0,0 @@ -Ext.define('PartKeepr.DistributorEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.DistributorEditor', - items: [{ - xtype: 'textfield', - name: 'name', - fieldLabel: i18n("Distributor") - },{ - xtype: 'textarea', - name: 'address', - fieldLabel: i18n("Address") - },{ - xtype: 'textfield', - name: 'url', - fieldLabel: i18n("Website") - },{ - xtype: 'textfield', - name: 'email', - fieldLabel: i18n("Email") - },{ - xtype: 'textfield', - name: 'phone', - fieldLabel: i18n("Phone") - },{ - xtype: 'textfield', - name: 'fax', - fieldLabel: i18n("Fax") - },{ - xtype: 'textarea', - name: 'comment', - fieldLabel: i18n("Comment") - }], - saveText: i18n("Save Distributor") -}); diff --git a/frontend/js/Components/Distributor/DistributorEditorComponent.js b/frontend/js/Components/Distributor/DistributorEditorComponent.js @@ -1,18 +0,0 @@ -Ext.define('PartKeepr.DistributorEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.DistributorEditorComponent', - navigationClass: 'PartKeepr.DistributorGrid', - editorClass: 'PartKeepr.DistributorEditor', - newItemText: i18n("New Distributor"), - model: 'PartKeepr.Distributor', - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Distributor/DistributorGrid.js b/frontend/js/Components/Distributor/DistributorGrid.js @@ -1,12 +0,0 @@ -Ext.define('PartKeepr.DistributorGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.DistributorGrid', - columns: [ - {header: i18n("Distributor"), dataIndex: 'name', flex: 1} - ], - addButtonText: i18n("Add Distributor"), - addButtonIcon: 'resources/silkicons/lorry_add.png', - deleteButtonText: i18n("Delete Distributor"), - deleteButtonIcon: 'resources/silkicons/lorry_delete.png' - -});- \ No newline at end of file diff --git a/frontend/js/Components/Editor/Editor.js b/frontend/js/Components/Editor/Editor.js @@ -1,120 +0,0 @@ -Ext.define('PartKeepr.Editor', { - extend: 'Ext.form.Panel', - alias: 'widget.Editor', - trackResetOnLoad: true, - bodyStyle: 'background:#DBDBDB;padding: 10px;', - record: null, // The record which is currently edited - saveText: i18n("Save"), - cancelText: i18n("Cancel"), - model: null, - layout: 'anchor', - change: false, - autoScroll: true, - defaults: { - anchor: '100%', - labelWidth: 150 - }, - enableButtons: true, - - // If false, determinates if we should sync via the store or the record itself. - // If true, always syncs the record via it's own proxy. - syncDirect: false, - - onFieldChange: function () { - return; - - // @todo Finish implementing the dirty flag later - /*if (this.change == false) { - this.setTitle(this.record.getRecordName() + "*"); - } - - this.change = true;*/ - }, - initComponent: function () { - if (this.enableButtons) { - this.saveButton = Ext.create("Ext.button.Button", { - text: this.saveText, - cls: 'x-btn-text-icon', - icon: 'resources/fugue-icons/icons/disk.png', - handler: Ext.bind(this.onItemSave, this) - }); - - this.cancelButton = Ext.create("Ext.button.Button", { - text: this.cancelText, - cls: 'x-btn-text-icon', - icon: 'resources/silkicons/cancel.png', - handler: Ext.bind(this.onCancelEdit, this) - }); - - this.bottomToolbar = Ext.create("Ext.toolbar.Toolbar", { - enableOverflow: true, - margin: '10px', - defaults: {minWidth: 100}, - dock: 'bottom', - ui: 'footer', - items: [ this.saveButton, this.cancelButton ] - }); - - Ext.apply(this, { - dockedItems: [ this.bottomToolbar ]}); - } - - - - - this.on("dirtychange", function (form, dirty) { - // @todo Check dirty flag - // Waiting for reply on http://www.sencha.com/forum/showthread.php?135142-Ext.form.Basic.loadRecord-causes-form-to-be-dirty&p=607588#post607588 - }); - - this.addEvents("editorClose", "startEdit", "itemSaved"); - - this.defaults.listeners = { - "change": Ext.bind(this.onFieldChange, this) - }; - - this.callParent(); - }, - onCancelEdit: function () { - this.fireEvent("editorClose", this); - }, - newItem: function (defaults) { - Ext.apply(defaults, {}); - var j = Ext.create(this.model, defaults); - this.editItem(j); - }, - editItem: function (record) { - this.record = record; - this.getForm().loadRecord(this.record); - this.show(); - if (this.record.getRecordName() !== "") { - this._setTitle(this.record.getRecordName()); - } - - this.change = false; - this.fireEvent("startEdit", this); - }, - getRecordId: function () { - if (this.record) { - return this.record.get("id"); - } else { - return null; - } - }, - onItemSave: function () { - this.getForm().updateRecord(this.record); - this.record.save({ - callback: this._onSave, - scope: this - }); - }, - _onSave: function (record, response) { - if (response.success === true) { - this.record = record; - this.fireEvent("itemSaved", this.record); - } - }, - _setTitle: function (title) { - this.setTitle(title); - } -}); diff --git a/frontend/js/Components/Editor/EditorComponent.js b/frontend/js/Components/Editor/EditorComponent.js @@ -1,201 +0,0 @@ -/** - * @class PartKeepr.EditorComponent - - * <p>The EditorComponent encapsulates an editing workflow. In general, we have four actions - * for each object: create, update, delete, view. These actions stay exactly the same for each - * distinct object.</p> - * <p>The EditorComponent is a border layout, which has a navigation and an editor area.</p> - * @todo Document the editor system a bit better - */ -Ext.define('PartKeepr.EditorComponent', { - extend: 'Ext.panel.Panel', - alias: 'widget.EditorComponent', - - /** - * Misc layout settings - */ - layout: 'border', - padding: 5, - border: false, - - /** - * Specifies the class name of the navigation. The navigation is placed in the "west" region - * and needs to fire the event "itemSelect". The component listens on that event and - * creates an editor based on the selected record. - */ - navigationClass: null, - - /** - * Specifies the class name of the editor. - */ - editorClass: null, - - /** - * Contains the store for the item overview. - */ - store: null, - - /** - * Contains the associated model to load a record for. - */ - model: null, - - /** - * Some default text messages. Can be overridden by sub classes. - */ - deleteMessage: i18n("Do you really wish to delete the item %s?"), - deleteTitle: i18n("Delete Item"), - newItemText: i18n("New Item"), - - initComponent: function () { - - /** - * Create the navigation panel - */ - this.navigation = Ext.create(this.navigationClass, { - region: 'west', - width: 265, - split: true, - store: this.store - }); - - this.navigation.on("itemAdd", this.newRecord, this); - this.navigation.on("itemDelete", this.confirmDelete, this); - this.navigation.on("itemEdit", this.startEdit, this); - - /** - * Create the editor panel - */ - this.editorTabPanel = Ext.create("Ext.tab.Panel", { - region: "center", - layout: 'fit', - plugins: Ext.create('Ext.ux.TabCloseMenu') - }); - - this.items = [ this.navigation, this.editorTabPanel ]; - - this.callParent(); - }, - /** - * Creates a new record. Creates a new instance of the editor. - */ - newRecord: function (defaults) { - Ext.apply(defaults, {}); - - var editor = this.createEditor(this.newItemText); - editor.newItem(defaults); - this.editorTabPanel.add(editor).show(); - }, - /** - * Instructs the component to edit a new record. - * @param {Record} record The record to edit - */ - startEdit: function (id) { - /* Search for an open editor for the current record. If we - * already have an editor, show the editor instead of loading - * a new record. - */ - var editor = this.findEditor(id); - - if (editor !== null) { - editor.show(); - return; - } - - // Still here? OK, we don't have an editor open. Create a new one - var model = Ext.ModelManager.getModel(this.model); - - model.load(id, { - scope: this, - success: function(record, operation) { - editor = this.createEditor(record.getRecordName()); - editor.editItem(record); - this.editorTabPanel.add(editor).show(); - } - }); - }, - findEditor: function (id) { - for (var i=0;i<this.editorTabPanel.items.getCount();i++) { - if (this.editorTabPanel.items.getAt(i).getRecordId() == id) { - return this.editorTabPanel.items.getAt(i); - } - } - - return null; - }, - createEditor: function (title) { - var editor = Ext.create(this.editorClass, { - store: this.store, - title: title, - model: this.model, - closable: true, - listeners: { - editorClose: Ext.bind(function (m) { - this.editorTabPanel.remove(m); - }, this) - } - }); - - editor.on("itemSaved", this.onItemSaved, this); - return editor; - }, - confirmDelete: function () { - var r = this.navigation.getSelectionModel().getLastSelected(); - var recordName; - - if (r.getRecordName) { - recordName = r.getRecordName(); - } else { - recordName = r.get("name"); - } - - Ext.Msg.confirm( - this.deleteTitle, - sprintf(this.deleteMessage, recordName), - function (but) { - if (but == "yes") { - this.deleteRecord(r); - } - },this); - }, - deleteRecord: function (r) { - var editor = this.findEditor(r.get("id")); - - if (editor !== null) { - this.editorTabPanel.remove(editor); - } - - r.destroy(); - this.store.load(); - }, - // Creates a store. To be called from child's initComponent - createStore: function (config) { - Ext.Object.merge(config, { - autoLoad: true, - model: this.model, - autoSync: false, // Do not change. If true, new (empty) records would be immediately commited to the database. - remoteFilter: true, - remoteSort: true, - pageSize: 15}); - - this.store = Ext.create('Ext.data.Store', config); - - // Workaround for bug http://www.sencha.com/forum/showthread.php?133767-Store.sync()-does-not-update-dirty-flag&p=607093#post607093 - this.store.on('write', function(store, operation) { - var success=operation.wasSuccessful(); - if (success) { - Ext.each(operation.records, function(record){ - if (record.dirty) { - record.commit(); - } - }); - } - }); - }, - getStore: function () { - return this.store; - }, - onItemSaved: function (record) { - this.navigation.syncChanges(record); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Editor/EditorGrid.js b/frontend/js/Components/Editor/EditorGrid.js @@ -1,164 +0,0 @@ -/** - * This class extends a regular GridPanel with the following features: - * - * - Buttons to add/delete items - * - Enable/Disable the delete button if an item is selected - * - Search field - * - Paging Toolbar - */ -Ext.define('PartKeepr.EditorGrid', { - extend: 'Ext.grid.Panel', - alias: 'widget.EditorGrid', - - /** - * @cfg {String} text The text for the "delete" button - */ - deleteButtonText: i18n("Delete Item"), - - /** - * @cfg {String} text The path to the 'delete' icon - */ - deleteButtonIcon: 'resources/silkicons/delete.png', - - /** - * @cfg {String} text The text for the "add" button - */ - addButtonText: i18n("Add Item"), - - /** - * @cfg {String} text The path to the 'add' icon - */ - addButtonIcon: 'resources/silkicons/add.png', - - /** - * @cfg {String} text Defines if the "add"/"delete" buttons should show their text or icon only. If "hide", the - * button text is hidden, anything else shows the text. - */ - buttonTextMode: 'hide', - - initComponent: function () { - - this.addEvents( - /** - * @event itemSelect - * Fires if a record was selected within the grid. - * @param {Object} record The selected record - */ - "itemSelect", - - /** - * @event itemDeselect - * Fires if a record was deselected within the grid. - * @param {Object} record The deselected record - */ - "itemDeselect", - - /** - * @event itemEdit - * Fires if a record should be edited. - * @param {Object} record The record to edit - */ - "itemEdit", - - /** - * @event itemDelete - * Fires if the delete button was clicked. - */ - "itemDelete", - - /** - * @event itemDelete - * Fires if the add button was clicked. - */ - "itemAdd"); - - - this.getSelectionModel().on("select", this._onItemSelect, this); - this.getSelectionModel().on("deselect", this._onItemDeselect, this); - - this.on("itemclick", this._onItemEdit, this); - - this.deleteButton = Ext.create("Ext.button.Button", { - text: (this.buttonTextMode !== "hide") ? this.deleteButtonText : '', - tooltip: this.deleteButtonText, - icon: this.deleteButtonIcon, - handler: Ext.bind(function () { - this.fireEvent("itemDelete"); - }, this), - disabled: true - }); - - this.searchField = Ext.create("Ext.ux.form.SearchField",{ - store: this.store - }); - - this.topToolbar = Ext.create("Ext.toolbar.Toolbar",{ - dock: 'top', - enableOverflow: true, - items: [ - { - text: (this.buttonTextMode !== "hide") ? this.addButtonText : '', - tooltip: this.addButtonText, - icon: this.addButtonIcon, - handler: Ext.bind(function () { - this.fireEvent("itemAdd"); - }, this) - }, - this.deleteButton, - { xtype: 'tbfill' }, - this.searchField] - }); - - this.bottomToolbar = Ext.create("Ext.toolbar.Paging", { - store: this.store, - enableOverflow: true, - dock: 'bottom', - displayInfo: false - }); - - Ext.apply(this, { - dockedItems: [ - this.topToolbar, - this.bottomToolbar - ] - }); - - this.callParent(); - }, - syncChanges: function (record) { - // Simply reload the store for now - this.store.load(); - }, - /** - * Called when an item was selected. Enables/disables the delete button. - */ - _updateDeleteButton: function (selectionModel, record) { - /* Right now, we support delete on a single record only */ - if (this.getSelectionModel().getCount() == 1) { - this.deleteButton.enable(); - } else { - this.deleteButton.disable(); - } - }, - - /** - * Called when an item should be edited - */ - _onItemEdit: function (view, record) { - this.fireEvent("itemEdit", record.get("id")); - }, - /** - * Called when an item was selected - */ - _onItemSelect: function (selectionModel, record) { - this._updateDeleteButton(selectionModel, record); - this.fireEvent("itemSelect", record); - }, - /** - * Called when an item was deselected - */ - _onItemDeselect: function (selectionModel, record) { - this._updateDeleteButton(selectionModel, record); - this.fireEvent("itemDeselect", record); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Footprint/FootprintAttachmentGrid.js b/frontend/js/Components/Footprint/FootprintAttachmentGrid.js @@ -1,6 +0,0 @@ -Ext.define('PartKeepr.FootprintAttachmentGrid', { - extend: 'PartKeepr.AttachmentGrid', - alias: 'widget.FootprintAttachmentGrid', - - model: "PartKeepr.FootprintAttachment" -});- \ No newline at end of file diff --git a/frontend/js/Components/Footprint/FootprintEditor.js b/frontend/js/Components/Footprint/FootprintEditor.js @@ -1,66 +0,0 @@ -Ext.define('PartKeepr.FootprintEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.FootprintEditor', - saveText: i18n("Save Footprint"), - layout: 'column', - syncDirect: true, - labelWidth: 75, - initComponent: function () { - this.on("startEdit", this.onEditStart, this, { delay: 50 }); - - this.attachmentGrid = Ext.create("PartKeepr.FootprintAttachmentGrid", { - height: 200, - width: '100%', - border: true - }); - - this.items = [{ - columnWidth: 1, - minWidth: 500, - layout: 'anchor', - xtype: 'container', - margin: '0 5 0 0', - items: [ - { - xtype: 'textfield', - name: 'name', - labelWidth: 75, - anchor: '100%', - fieldLabel: i18n("Name") - },{ - labelWidth: 75, - xtype: 'textarea', - name: 'description', - anchor: '100%', - fieldLabel: i18n("Description") - },{ - labelWidth: 75, - xtype: 'fieldcontainer', - anchor: '100%', - fieldLabel: i18n("Attachments"), - items: this.attachmentGrid - } - ] - },{ - width: 370, - height: 250, - xtype: 'remoteimagefield', - name: 'image_id', - imageType: 'footprint', - imageWidth: 256, - imageHeight: 256, - labelWidth: 75, - fieldLabel: i18n("Image") - }]; - - this.on("itemSaved", this._onItemSaved, this); - this.callParent(); - }, - _onItemSaved: function (record) { - this.attachmentGrid.bindStore(record.attachments()); - }, - onEditStart: function () { - var store = this.record.attachments(); - this.attachmentGrid.bindStore(store); - } -}); diff --git a/frontend/js/Components/Footprint/FootprintEditorComponent.js b/frontend/js/Components/Footprint/FootprintEditorComponent.js @@ -1,39 +0,0 @@ -Ext.define('PartKeepr.FootprintEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.FootprintEditorComponent', - navigationClass: 'PartKeepr.FootprintTree', - editorClass: 'PartKeepr.FootprintEditor', - newItemText: i18n("New Footprint"), - model: 'PartKeepr.Footprint', - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - this.callParent(); - - }, - deleteRecord: function (r) { - var editor = this.findEditor(r.get("footprintId")); - - if (editor !== null) { - this.editorTabPanel.remove(editor); - } - - var call = new PartKeepr.ServiceCall("Footprint", "destroy"); - call.setParameter("id", r.get("footprintId")); - call.setHandler(Ext.bind(function () { - var oldRecordIndex = PartKeepr.getApplication().getFootprintStore().find("id", r.get("footprintId")); - - PartKeepr.getApplication().getFootprintStore().removeAt(oldRecordIndex); - this.navigation.loadCategories(); - }, this)); - - call.doCall(); - - - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Footprint/FootprintTree.js b/frontend/js/Components/Footprint/FootprintTree.js @@ -1,186 +0,0 @@ -Ext.define("PartKeepr.FootprintTree", { - extend: 'PartKeepr.CategoryEditorTree', - alias: 'widget.FootprintTree', - - ddGroup: 'FootprintTree', - categoryModel: 'PartKeepr.FootprintCategory', - categoryService: 'FootprintCategory', - folderSort: true, - - /** - * @cfg {String} text The path to the 'add' icon - */ - addButtonIcon: 'resources/icons/footprint_add.png', - - /** - * @cfg {String} text The path to the 'delete' icon - */ - deleteButtonIcon: 'resources/icons/footprint_delete.png', - - /** - * Initializes the component - */ - initComponent: function () { - this.callParent(); - - this.addEvents("itemEdit"); - - this.on("itemclick", Ext.bind(function (t,record) { - if (record.get("footprintId")) { - this.fireEvent("itemEdit", record.get("footprintId")); - } - }, this)); - - this.addButton = Ext.create("Ext.button.Button", - { - tooltip: i18n("Add Footprint"), - icon: this.addButtonIcon, - handler: this._onAddFootprint, - scope: this - }); - - this.deleteButton = Ext.create("Ext.button.Button", { - tooltip: i18n("Delete Footprint"), - icon: this.deleteButtonIcon, - handler: Ext.bind(function () { - this.fireEvent("itemDelete"); - }, this), - disabled: true - }); - - this.toolbar.add(['-', this.addButton, this.deleteButton]); - - this.getSelectionModel().on("select", this._onItemSelect, this); - this.getSelectionModel().on("deselect", this._onItemDeselect, this); - }, - /** - * Called when a footprint is about to be added - */ - _onAddFootprint: function () { - var r = this.getSelectionModel().getLastSelected(); - - if (r && !r.get("footprintId")) { - this.fireEvent("itemAdd", { category: r.get("id") }); - } else { - if (!r) { - this.fireEvent("itemAdd", this.getRootNode().get("id")); - } else { - /* Try to find the category's parent id */ - if (r.parentNode && !r.parentNode.get("footprintId")) { - this.fireEvent("itemAdd", { category: r.parentNode.get("id") }); - } else { - this.fireEvent("itemAdd", this.getRootNode().get("id")); - } - } - - } - }, - /** - * Called when an item was selected - */ - _onItemSelect: function (selectionModel, record) { - this._updateDeleteButton(selectionModel, record); - this.fireEvent("itemSelect", record); - }, - /** - * Called when an item was deselected - */ - _onItemDeselect: function (selectionModel, record) { - this._updateDeleteButton(selectionModel, record); - this.fireEvent("itemDeselect", record); - }, - /** - * Called when an item was selected. Enables/disables the delete button. - */ - _updateDeleteButton: function (selectionModel, record) { - /* Right now, we support delete on a single record only */ - if (this.getSelectionModel().getCount() == 1 && record.get("footprintId")) { - this.deleteButton.enable(); - } else { - this.deleteButton.disable(); - } - }, - syncChanges: function (record) { - var oldRecordIndex = PartKeepr.getApplication().getFootprintStore().find("id", record.get("id")); - - if (oldRecordIndex === -1) { - /* Record doesn't exist yet; add it */ - PartKeepr.getApplication().getFootprintStore().add(record); - } else { - var oldRecord = PartKeepr.getApplication().getFootprintStore().getAt(oldRecordIndex); - oldRecord.set("name", record.get("name")); - } - - this.loadCategories(); - }, - _onCategoriesLoaded: function () { - this.callParent(arguments); - var store = PartKeepr.getApplication().getFootprintStore(); - var category_id; - var nodeData, record; - - for (var i=0;i<store.getCount();i++) { - record = store.getAt(i); - - nodeData = { - name: record.getRecordName(), - footprintId: record.get("id"), - leaf: true, - iconCls:'icon-footprint' - }; - - - if (record.get("category") === 0) { - this.getRootNode().firstChild.appendChild(nodeData); - } else { - var node = this.getRootNode().findChild("id", record.get("category"), true); - - if (node) { - node.appendChild(nodeData); - } else { - this.getRootNode().firstChild.appendChild(nodeData); - } - } - - } - - }, - onBeforeDrop: function (node, data, overModel, dropPosition, dropFunction, options) { - var draggedRecord = data.records[0]; - var droppedOn = this.getView().getRecord(node); - - if (droppedOn.get("footprintId")) { - // Target record is a footprint, we don't allow moving categories onto footprints - return false; - } - - if (draggedRecord.get("footprintId")) { - /* Move Footprint */ - var call = new PartKeepr.ServiceCall("Footprint", "moveFootprint"); - - call.setParameter("id", draggedRecord.get("footprintId")); - call.setParameter("targetCategory", droppedOn.get("id")); - call.setHandler(Ext.bind(function () { - var node = this.getRootNode().findChild("footprintId", draggedRecord.get("footprintId"), true); - - var targetNode = this.getRootNode().findChild("id", droppedOn.get("id"), true); - targetNode.expand(); - - node.remove(); - - targetNode.appendChild(node); - - var oldRecordIndex = PartKeepr.getApplication().getFootprintStore().find("id", draggedRecord.get("footprintId")); - var oldRecord = PartKeepr.getApplication().getFootprintStore().getAt(oldRecordIndex); - - oldRecord.set("category", droppedOn.get("id")); - - }, this)); - call.doCall(); - - return false; - } - - } - -});- \ No newline at end of file diff --git a/frontend/js/Components/Manufacturer/ManufacturerEditor.js b/frontend/js/Components/Manufacturer/ManufacturerEditor.js @@ -1,129 +0,0 @@ -Ext.define('PartKeepr.ManufacturerEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.ManufacturerEditor', - saveText: i18n("Save Manufacturer"), - labelWidth: 150, - initComponent: function () { - this.on("startEdit", Ext.bind(this.onEditStart, this)); - - this.tpl = [ - '<tpl for=".">', - '<div class="thumb-wrap" id="{id}">', - '<div class="thumb"><img src="image.php?type=iclogo&id={id}&w=64&h=64&tmpId={tmp_id}"></div>', - '</div>', - '</tpl>', - '</tpl>', - '<div class="x-clear"></div>' - ]; - - this.addLogoButton = Ext.create("Ext.button.Button", { - cls:'x-btn-text-icon', - icon: "resources/silkicons/add.png", - text: i18n("Add Logo"), - handler: Ext.bind(this.uploadImage, this) - }); - - this.deleteLogoButton = Ext.create("Ext.button.Button", { - cls:'x-btn-text-icon', - icon: "resources/silkicons/delete.png", - text: i18n("Delete Logo"), - disabled: true, - handler: Ext.bind(this.deleteImage, this) - }); - - this.iclogoGrid = Ext.create("Ext.view.View", { - store: null, - border: true, - frame: true, - style: 'background-color: white', - emptyText: 'No images to display', - height: 200, - fieldLabel: i18n("Logos"), - overItemCls: 'x-view-over', - componentCls: 'manufacturer-ic-logos', - itemSelector: 'div.thumb-wrap', - singleSelect: true, - anchor: '100%', - tpl: this.tpl, - listeners: { - selectionchange: Ext.bind(function (view, selections) { - if (selections.length > 0) { - this.deleteLogoButton.enable(); - } else { - this.deleteLogoButton.disable(); - } - }, this) - //this.onLogoSelectionChange.createDelegate(this) - } - }); - - this.items = [{ - xtype: 'textfield', - name: 'name', - fieldLabel: i18n("Manufacturer Name") - },{ - xtype: 'textarea', - name: 'address', - fieldLabel: i18n("Address") - },{ - xtype: 'textfield', - name: 'url', - fieldLabel: i18n("Website") - },{ - xtype: 'textfield', - name: 'email', - fieldLabel: i18n("Email") - },{ - xtype: 'textfield', - name: 'phone', - fieldLabel: i18n("Phone") - },{ - xtype: 'textfield', - name: 'fax', - fieldLabel: i18n("Fax") - },{ - xtype: 'textarea', - name: 'comment', - fieldLabel: i18n("Comment") - },{ - xtype: 'fieldcontainer', - fieldLabel: i18n("Manufacturer Logos"), - items: [{ - xtype: 'panel', - dockedItems: [{ - xtype: 'toolbar', - dock: 'bottom', - items: [ this.addLogoButton, this.deleteLogoButton ] - }], - items: this.iclogoGrid - }] - - }]; - - - this.on("itemSaved", this._onItemSaved, this); - this.callParent(); - - }, - _onItemSaved: function (record) { - this.iclogoGrid.bindStore(record.iclogos()); - }, - onFileUploaded: function (response) { - this.iclogoGrid.getStore().add({ - id: "TMP:"+response.id, - manufacturer_id: this.record.get("id") - }); - }, - uploadImage: function () { - var j = Ext.create("PartKeepr.FileUploadDialog", { imageUpload: true }); - j.on("fileUploaded", Ext.bind(this.onFileUploaded, this)); - j.show(); - }, - deleteImage: function () { - this.iclogoGrid.store.remove(this.iclogoGrid.getSelectionModel().getLastSelected()); - }, - onEditStart: function () { - var store = this.record.iclogos(); - this.iclogoGrid.bindStore(store); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Manufacturer/ManufacturerEditorComponent.js b/frontend/js/Components/Manufacturer/ManufacturerEditorComponent.js @@ -1,18 +0,0 @@ -Ext.define('PartKeepr.ManufacturerEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.ManufacturerEditorComponent', - navigationClass: 'PartKeepr.ManufacturerGrid', - editorClass: 'PartKeepr.ManufacturerEditor', - newItemText: i18n("New Manufacturer"), - model: 'PartKeepr.Manufacturer', - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Manufacturer/ManufacturerGrid.js b/frontend/js/Components/Manufacturer/ManufacturerGrid.js @@ -1,11 +0,0 @@ -Ext.define('PartKeepr.ManufacturerGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.ManufacturerGrid', - columns: [ - {header: i18n("Manufacturer"), dataIndex: 'name', flex: 1} - ], - addButtonText: i18n("Add Manufacturer"), - addButtonIcon: 'resources/silkicons/building_add.png', - deleteButtonText: i18n("Delete Manufacturer"), - deleteButtonIcon: 'resources/silkicons/building_delete.png' -});- \ No newline at end of file diff --git a/frontend/js/Components/Menu.js b/frontend/js/Components/Menu.js @@ -1,6 +0,0 @@ -Ext.define('PartKeepr.Menu', { - extend: 'Ext.toolbar.Toolbar', - items: [{ - - }] -});- \ No newline at end of file diff --git a/frontend/js/Components/MenuBar.js b/frontend/js/Components/MenuBar.js @@ -1,209 +0,0 @@ -Ext.define('PartKeepr.MenuBar', { - extend: 'Ext.toolbar.Toolbar', - initComponent: function () { - //this.cls = "partkeepr-mainmenu"; - this.ui = "mainmenu"; - - this.menu = Ext.create('Ext.menu.Menu', { - items: [ - { - text: i18n('Footprints'), - icon: 'resources/fugue-icons/icons/fingerprint.png', - handler: this.editFootprints - },{ - text: i18n('Manufacturers'), - icon: 'resources/silkicons/building.png', - handler: this.editManufacturers - },{ - text: i18n('Storage Locations'), - icon: 'resources/fugue-icons/icons/wooden-box.png', - handler: this.editStorageLocations - },{ - text: i18n('Distributors'), - icon: 'resources/silkicons/lorry.png', - handler: this.editDistributors - },{ - text: i18n('Users'), - id: 'edit-users', - handler: this.editUsers, - icon: "resources/silkicons/user.png" - },{ - text: i18n('Part Measure Units'), - handler: this.editPartUnits, - icon: "resources/fugue-icons/icons/ruler.png" - },{ - text: i18n("Statistics"), - icon: 'resources/silkicons/chart_bar.png', - menu: [ - { - text: i18n("Summary"), - handler: this.showStatisticsSummary, - icon: 'resources/silkicons/chart_bar.png' - },{ - text: i18n("Chart"), - handler: this.showStatisticsChart, - icon: 'resources/silkicons/chart_bar.png' - }] - },{ - text: i18n("Units"), - handler: this.editUnits, - icon: 'resources/icons/unit.png' - },{ - text: i18n("System Information"), - handler: this.showSystemInformation, - icon: 'resources/fugue-icons/icons/system-monitor.png' - }] - }); - - this.systemMenu = Ext.create('Ext.menu.Menu', { - items: [ - { - text: i18n('Disconnect'), - icon: 'resources/silkicons/disconnect.png', - handler: this.disconnect - },{ - text: i18n("User Preferences"), - icon: 'resources/fugue-icons/icons/gear.png', - handler: this.showUserPreferences - } - ] - }); - - this.items = [{ - text: i18n("System"), - menu: this.systemMenu - },{ - text: i18n('Menu'), - menu: this.menu - }, - '->', - { - xtype: 'tbtext', - cls: 'partkeepr-logo-align', - text: '<div class="partkeepr-logo">PartKeepr</div>', - width: 200 - }]; - - - - this.callParent(); - }, - showUserPreferences: function () { - var j = new PartKeepr.UserPreferencePanel({ - iconCls: 'icon-gear', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - disconnect: function () { - PartKeepr.getApplication().logout(); - }, - /** - * Shows the system information window - */ - showSystemInformation: function () { - var j = Ext.create("PartKeepr.SystemInformationGrid", { - title: i18n("System Information"), - iconCls: 'icon-system-monitor', - closable: true, - padding: "5 5 5 5" - }); - - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - showStatisticsSummary: function () { - var j = Ext.create("PartKeepr.CurrentStatisticsPanel", { - iconCls: 'icon-chart-bar', - closable: true - }); - - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - showStatisticsChart: function () { - var j = Ext.create("PartKeepr.StatisticsChartPanel", { - iconCls: 'icon-chart-bar', - closable: true - }); - - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editStorageLocations: function () { - var j = Ext.create("PartKeepr.StorageLocationEditorComponent", { - title: i18n("Storage Locations"), - iconCls: 'icon-wooden-box', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editUnits: function () { - var j = Ext.create("PartKeepr.UnitEditorComponent", { - title: i18n("Units"), - iconCls: 'icon-unit', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editManufacturers: function () { - var j = Ext.create("PartKeepr.ManufacturerEditorComponent", { - title: i18n("Manufacturers"), - iconCls: 'icon-building', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editFootprints: function () { - var j = Ext.create("PartKeepr.FootprintEditorComponent", { - title: i18n("Footprints"), - iconCls: 'icon-footprint', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editDistributors: function () { - var j = Ext.create("PartKeepr.DistributorEditorComponent", { - title: i18n("Distributors"), - iconCls: 'icon-lorry', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editUsers: function () { - var j = Ext.create("PartKeepr.UserEditorComponent", { - title: i18n("Users"), - iconCls: 'icon-user', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - }, - editPartUnits: function () { - var j = Ext.create("PartKeepr.PartUnitEditorComponent", { - title: i18n("Part Measurement Units"), - iconCls: 'icon-ruler', - closable: true - }); - - PartKeepr.getApplication().addItem(j); - j.show(); - } -}); - - \ No newline at end of file diff --git a/frontend/js/Components/MessageLog.js b/frontend/js/Components/MessageLog.js @@ -1,22 +0,0 @@ -Ext.define('PartKeepr.MessageLog', { - extend: 'Ext.grid.Panel', - store: { - model: "PartKeepr.Message" - }, - columns: [ - {header: i18n("Message"), dataIndex: 'message', flex: 1}, - {header: i18n("Date"), dataIndex: 'date', width: 300}, - {header: i18n("Severity"), dataIndex: 'severity'} - ], - proxy: { - type: 'memory', - reader: { - type: 'json', - root: 'items' - } - }, - sorters: [{ - property: 'date', - direction:'DESC' - }] -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/Editor/PartAttachmentGrid.js b/frontend/js/Components/Part/Editor/PartAttachmentGrid.js @@ -1,6 +0,0 @@ -Ext.define('PartKeepr.PartAttachmentGrid', { - extend: 'PartKeepr.AttachmentGrid', - alias: 'widget.PartAttachmentGrid', - - model: "PartKeepr.PartAttachment" -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/Editor/PartDistributorGrid.js b/frontend/js/Components/Part/Editor/PartDistributorGrid.js @@ -1,109 +0,0 @@ -Ext.define('PartKeepr.PartDistributorGrid', { - extend: 'Ext.grid.Panel', - alias: 'widget.PartDistributorGrid', - border: false, - initComponent: function () { - this.store = Ext.create("Ext.data.Store", { - model: 'PartKeepr.PartDistributor', - proxy: { - type: 'memory', - reader: { - type: 'json' - } - } - - }); - - this.editing = Ext.create('Ext.grid.plugin.RowEditing', { - clicksToEdit: 1 - }); - - this.plugins = [ this.editing ]; - - this.deleteButton = Ext.create("Ext.button.Button", { - text: 'Delete', - disabled: true, - itemId: 'delete', - scope: this, - icon: 'resources/silkicons/lorry_delete.png', - handler: this.onDeleteClick - }); - - this.dockedItems = [{ - xtype: 'toolbar', - items: [{ - text: 'Add', - scope: this, - icon: 'resources/silkicons/lorry_add.png', - handler: this.onAddClick - }, this.deleteButton] - }]; - - this.columns = [ - { - header: i18n("Distributor"), - dataIndex: 'distributor_id', - xtype: 'templatecolumn', - tpl: '{distributor_name}', - flex: 0.4, - editor: { - xtype:'DistributorComboBox', - allowBlank:true - } - }, - { - header: i18n("Order Number"), - dataIndex: 'orderNumber', - flex: 0.4, - editor: { - xtype:'textfield', - allowBlank:true - } - },{ - header: i18n("Packaging Unit"), - dataIndex: 'packagingUnit', - flex: 0.2, - editor: { - xtype:'numberfield', - allowDecimals: false, - allowBlank:false, - minValue: 1 - } - } - ]; - - this.callParent(); - - this.getSelectionModel().on('selectionchange', this.onSelectChange, this); - this.on("edit", this.onEdit, this); - }, - onEdit: function (data) { - var id = data.record.get("distributor_id"); - - var rec = PartKeepr.getApplication().getDistributorStore().findRecord("id", id); - - if (rec) { - data.record.set("distributor_name", rec.get("name")); - } - }, - onAddClick: function () { - this.editing.cancelEdit(); - - var rec = new PartKeepr.PartDistributor({ - packagingUnit: 1 - }); - - this.store.insert(0, rec); - - this.editing.startEdit(0,0); - }, - onDeleteClick: function () { - var selection = this.getView().getSelectionModel().getSelection()[0]; - if (selection) { - this.store.remove(selection); - } - }, - onSelectChange: function(selModel, selections){ - this.deleteButton.setDisabled(selections.length === 0); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/Editor/PartEditor.js b/frontend/js/Components/Part/Editor/PartEditor.js @@ -1,231 +0,0 @@ -/** - * @class PartKeepr.PartEditor - - * <p>The PartEditor provides an editing form for a part. It contains multiple tabs, one for each nested record.</p> - */ -Ext.define('PartKeepr.PartEditor', { - extend: 'PartKeepr.Editor', - - // Assigned model - model: 'PartKeepr.Part', - - // Layout stuff - border: false, - layout: 'fit', - bodyStyle: 'background:#DBDBDB;', - - /** - * Initializes the editor fields - */ - initComponent: function () { - - // Defines the basic editor fields - var basicEditorFields = [{ - xtype: 'textfield', - name: 'name', - fieldLabel: i18n("Name"), - allowBlank: false - }, - { - layout: 'column', - bodyStyle: 'background:#DBDBDB', - border: false, - items: [{ - xtype: 'numberfield', - fieldLabel: i18n('Minimum Stock'), - allowDecimals: false, - allowBlank: false, - labelWidth: 150, - name: 'minStockLevel', - value: 0, - columnWidth: 0.5, - minValue: 0 - },{ - xtype: 'PartUnitComboBox', - fieldLabel: i18n("Part Unit"), - columnWidth: 0.5, - margin: "0 0 0 5", - name: 'partUnit', - value: PartKeepr.getApplication().getDefaultPartUnit().get("id") - }] - },{ - xtype: 'CategoryComboBox', - fieldLabel: i18n("Category"), - name: 'category' - },{ - xtype: 'StorageLocationComboBox', - fieldLabel: i18n("Storage Location"), - name: 'storageLocation', - allowBlank: false - },{ - xtype: 'FootprintComboBox', - fieldLabel: i18n("Footprint"), - name: 'footprint' - },{ - xtype: 'textarea', - fieldLabel: i18n("Comment"), - name: 'comment' - },{ - xtype: 'textfield', - fieldLabel: i18n("Status"), - name: 'status' - },{ - xtype: 'checkbox', - hideEmptyLabel: false, - fieldLabel: '', - boxLabel: i18n("Needs Review"), - name: 'needsReview' - }]; - - // Creates the distributor grid - this.partDistributorGrid = Ext.create("PartKeepr.PartDistributorGrid", { - title: i18n("Distributors"), - layout: 'fit' - }); - - // Creates the manufacturer grid - this.partManufacturerGrid = Ext.create("PartKeepr.PartManufacturerGrid", { - title: i18n("Manufacturers"), - layout: 'fit' - }); - - // Creates the parameter grid - this.partParameterGrid = Ext.create("PartKeepr.PartParameterGrid", { - title: i18n("Parameters"), - layout: 'fit' - }); - - // Creates the attachment grid - this.partAttachmentGrid = Ext.create("PartKeepr.PartAttachmentGrid", { - title: i18n("Attachments"), - layout: 'fit' - }); - - // Adds stock level fields for new items - if (this.partMode && this.partMode == "create") { - this.initialStockLevel = Ext.create("Ext.form.field.Number", { - fieldLabel: i18n("Initial Stock Level"), - name: "initialStockLevel", - labelWidth: 150, - columnWidth: 0.5 - }); - - this.initialStockLevelUser = Ext.create("PartKeepr.UserComboBox", { - fieldLabel: i18n("Stock User"), - name: 'initialStockLevelUser', - columnWidth: 0.5, - margin: "0 0 0 5" - }); - - basicEditorFields.push({ - layout: 'column', - bodyStyle: 'background:#DBDBDB', - border: false, - items: [ - this.initialStockLevel, - this.initialStockLevelUser - ] - }); - - this.initialStockLevelPrice = Ext.create("Ext.form.field.Number", { - fieldLabel: i18n('Price'), - labelWidth: 150, - columnWidth: 0.5, - name: 'initialStockLevelPrice' - }); - - this.initialStockLevelPricePerItem = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Per Item"), - columnWidth: 0.5, - margin: "0 0 0 5", - name: 'initialStockLevelPricePerItem' - }); - - basicEditorFields.push({ - layout: 'column', - bodyStyle: 'background:#DBDBDB', - border: false, - items: [ - this.initialStockLevelPrice, - this.initialStockLevelPricePerItem - ] - }); - - - } - - // Create a tab panel of all fields - this.items = { - xtype: 'tabpanel', - border: false, - plain: true, - items: [{ - xtype: 'panel', - border: false, - autoScroll: true, - layout: 'anchor', - defaults: { - anchor: '100%', - labelWidth: 150 - }, - bodyStyle: 'background:#DBDBDB;padding: 10px;', - title: i18n("Basic Data"), - items: basicEditorFields - }, - this.partDistributorGrid, - this.partManufacturerGrid, - this.partParameterGrid, - this.partAttachmentGrid - ] - }; - - this.on("startEdit", this.onEditStart, this, { delay: 200 }); - this.on("itemSaved", this._onItemSaved, this); - - this.addEvents("partSaved", "titleChange"); - - this.callParent(); - - }, - onEditStart: function () { - this.bindChildStores(); - }, - _onItemSaved: function () { - this.fireEvent("partSaved", this.record); - - if (this.keepOpenCheckbox.getValue() !== true) { - this.fireEvent("editorClose"); - } else { - var newItem = Ext.create("PartKeepr.Part", this.partDefaults); - this.editItem(newItem); - } - }, - bindChildStores: function () { - this.partDistributorGrid.bindStore(this.record.distributors()); - this.partManufacturerGrid.bindStore(this.record.manufacturers()); - this.partParameterGrid.bindStore(this.record.parameters()); - this.partAttachmentGrid.bindStore(this.record.attachments()); - }, - onItemSave: function () { - if (!this.getForm().isValid()) { - return; - } - - this.callParent(); - }, - _setTitle: function (title) { - var tmpTitle; - - if (this.record.phantom) { - tmpTitle = i18n("Add Part"); - } else { - tmpTitle = i18n("Edit Part"); - } - - if (title !== "") { - tmpTitle = tmpTitle + ": " + title; - } - - this.fireEvent("titleChange", tmpTitle); - } -}); diff --git a/frontend/js/Components/Part/Editor/PartEditorWindow.js b/frontend/js/Components/Part/Editor/PartEditorWindow.js @@ -1,96 +0,0 @@ -/** - * @class PartKeepr.PartEditorWindow - - * <p>The PartEditorWindow encapsulates the PartKeepr.PartEditor within a window.</p> - */ -Ext.define('PartKeepr.PartEditorWindow', { - extend: 'Ext.window.Window', - - /* Constrain the window to fit the viewport */ - constrainHeader: true, - - /* Fit the editor within the window */ - layout: 'fit', - - /* Width and height settings */ - width: 600, - minWidth: 600, - minHeight: 390, - height: 390, - - saveText: i18n("Save"), - cancelText: i18n("Cancel"), - - /* Default edit mode. If mode = "create", we show additional fields */ - partMode: 'edit', - title: i18n("Add Part"), - - /** - * Creates the part editor and put it into the window. - */ - initComponent: function () { - this.editor = Ext.create("PartKeepr.PartEditor", { - border: false, - partMode: this.partMode, - enableButtons: false - }); - - /* If the edit mode is "create", we need to enlarge the window a bit to fit the fields without scrolling */ - if (this.partMode && this.partMode == "create") { - this.height = 445; - } - - this.items = [ this.editor ]; - - /** - * We need a delay, since if others are listening for "editorClose", the dialog plus the record could be destroyed - * before any following listeners have a chance to receive the record, resulting in strange problems. - */ - this.editor.on("editorClose", function (record) { this.close();}, this, { delay: 200 }); - - this.editor.on("titleChange", function (val) { this.setTitle(val); }, this); - - this.saveButton = Ext.create("Ext.button.Button", { - text: this.saveText, - cls: 'x-btn-text-icon', - icon: 'resources/fugue-icons/icons/disk.png', - handler: Ext.bind(this.onItemSave, this) - }); - - this.cancelButton = Ext.create("Ext.button.Button", { - text: this.cancelText, - cls: 'x-btn-text-icon', - icon: 'resources/silkicons/cancel.png', - handler: Ext.bind(this.onCancelEdit, this) - }); - - this.bottomToolbar = Ext.create("Ext.toolbar.Toolbar", { - enableOverflow: true, - defaults: {minWidth: 100}, - dock: 'bottom', - ui: 'footer', - pack: 'start', - items: [ this.saveButton, this.cancelButton ] - }); - - this.dockedItems = [ this.bottomToolbar ]; - - this.keepOpenCheckbox = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Create blank item after save") - }); - - if (this.partMode == "create") { - this.bottomToolbar.add(this.keepOpenCheckbox); - } - - this.editor.keepOpenCheckbox = this.keepOpenCheckbox; - - this.callParent(); - }, - onCancelEdit: function () { - this.editor.onCancelEdit(); - }, - onItemSave: function () { - this.editor.onItemSave(); - } -}); diff --git a/frontend/js/Components/Part/Editor/PartManufacturerGrid.js b/frontend/js/Components/Part/Editor/PartManufacturerGrid.js @@ -1,99 +0,0 @@ -Ext.define('PartKeepr.PartManufacturerGrid', { - extend: 'Ext.grid.Panel', - alias: 'widget.PartManufacturerGrid', - border: false, - initComponent: function () { - this.store = Ext.create("Ext.data.Store", { - model: 'PartKeepr.PartManufacturer', - proxy: { - type: 'memory', - reader: { - type: 'json' - } - } - - }); - - this.editing = Ext.create('Ext.grid.plugin.RowEditing', { - clicksToEdit: 1 - }); - - this.plugins = [ this.editing ]; - - this.deleteButton = Ext.create("Ext.button.Button", { - text: 'Delete', - disabled: true, - itemId: 'delete', - scope: this, - icon: 'resources/silkicons/building_delete.png', - handler: this.onDeleteClick - }); - - this.dockedItems = [{ - xtype: 'toolbar', - items: [{ - text: 'Add', - scope: this, - icon: 'resources/silkicons/building_add.png', - handler: this.onAddClick - }, this.deleteButton] - }]; - - this.columns = [ - { - header: i18n("Manufacturer"), - dataIndex: 'manufacturer_id', - xtype: 'templatecolumn', - tpl: '{manufacturer_name}', - flex: 0.4, - editor: { - xtype:'ManufacturerComboBox', - allowBlank:true - } - }, - { - header: i18n("Part Number"), - dataIndex: 'partNumber', - flex: 0.4, - editor: { - xtype:'textfield', - allowBlank:true - } - } - ]; - - this.callParent(); - - this.getSelectionModel().on('selectionchange', this.onSelectChange, this); - this.on("edit", this.onEdit, this); - }, - onEdit: function (data) { - var id = data.record.get("manufacturer_id"); - - var rec = PartKeepr.getApplication().getManufacturerStore().findRecord("id", id); - - if (rec) { - data.record.set("manufacturer_name", rec.get("name")); - } - }, - onAddClick: function () { - this.editing.cancelEdit(); - - var rec = new PartKeepr.PartManufacturer({ - packagingUnit: 1 - }); - - this.store.insert(0, rec); - - this.editing.startEdit(0,0); - }, - onDeleteClick: function () { - var selection = this.getView().getSelectionModel().getSelection()[0]; - if (selection) { - this.store.remove(selection); - } - }, - onSelectChange: function(selModel, selections){ - this.deleteButton.setDisabled(selections.length === 0); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/Editor/PartParameterGrid.js b/frontend/js/Components/Part/Editor/PartParameterGrid.js @@ -1,149 +0,0 @@ -Ext.define('PartKeepr.PartParameterGrid', { - extend: 'Ext.grid.Panel', - alias: 'widget.PartParameterGrid', - border: false, - initComponent: function () { - this.store = Ext.create("Ext.data.Store", { - model: 'PartKeepr.PartParameter', - proxy: { - type: 'memory', - reader: { - type: 'json' - } - } - }); - - this.editing = Ext.create('Ext.grid.plugin.CellEditing', { - clicksToEdit: 1, - listeners: { - scope: this, - beforeedit: this.onBeforeEdit, - edit: this.onAfterEdit - } - }); - - this.plugins = [ this.editing ]; - - this.deleteButton = Ext.create("Ext.button.Button", { - text: 'Delete', - disabled: true, - itemId: 'delete', - scope: this, - icon: 'resources/silkicons/building_delete.png', - handler: this.onDeleteClick - }); - - this.dockedItems = [{ - xtype: 'toolbar', - items: [{ - text: 'Add', - scope: this, - icon: 'resources/silkicons/building_add.png', - handler: this.onAddClick - }, this.deleteButton] - }]; - - this.columns = [ - { - header: i18n("Parameter"), - dataIndex: 'name', - flex: 0.2, - editor: { - xtype:'PartParameterComboBox', - allowBlank:false, - lazyRender: true, - listClass: 'x-combo-list-small', - selectOnTab: true - } - }, - { - header: i18n("Value"), - flex: 0.2, - dataIndex: "prefixedValue", - renderer: function (val,p,rec) { - if (!Ext.isObject(val)) { return ""; } - - var foundRec = PartKeepr.getApplication().getUnitStore().findRecord("id", rec.get("unit_id")); - - if (foundRec) { - return val.value + " "+val.symbol + foundRec.get("symbol"); - } else { - return val.value + " "+val.symbol; - } - - }, - editor: { - xtype: 'SiUnitField', - decimalPrecision: 20 - } - }, - { - header: i18n("Unit"), - flex: 0.2, - dataIndex: 'unit_id', - renderer: function (val,p,rec) { - var foundRec = PartKeepr.getApplication().getUnitStore().findRecord("id", val); - - if (foundRec) { - return foundRec.get("name"); - } else { - return ""; - } - }, - editor: { - xtype:'UnitComboBox', - allowBlank:true - } - }, - { - header: i18n("Description"), - dataIndex: 'description', - flex: 0.3, - editor: { - xtype:'textfield', - allowBlank:true - } - } - ]; - - this.callParent(); - - this.getSelectionModel().on('selectionchange', this.onSelectChange, this); - }, - onAddClick: function () { - this.editing.cancelEdit(); - - var rec = new PartKeepr.PartParameter({ - - }); - - this.store.insert(0, rec); - - this.editing.startEditByPosition({ row: 0, column: 0}); - }, - onDeleteClick: function () { - var selection = this.getView().getSelectionModel().getSelection()[0]; - if (selection) { - this.store.remove(selection); - } - }, - onSelectChange: function(selModel, selections){ - this.deleteButton.setDisabled(selections.length === 0); - }, - onBeforeEdit: function (editor, e, o) { - var header = this.headerCt.getHeaderAtIndex(editor.colIdx); - var edit = this.editing.getEditor(editor.record, header); - - if (editor.field == "prefixedValue") { - var unit = PartKeepr.getApplication().getUnitStore().getById(editor.record.get("unit_id")); - if (unit) { - edit.field.setStore(unit.prefixes()); - } - } - }, - onAfterEdit: function (editor, e) { - var f = e.record.get("prefixedValue"); - e.record.set("siprefix_id", f.siprefix_id); - e.record.set("value", f.value); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/PartCategoryTree.js b/frontend/js/Components/Part/PartCategoryTree.js @@ -1,53 +0,0 @@ -Ext.define("PartKeepr.PartCategoryTree", { - extend: 'PartKeepr.CategoryEditorTree', - alias: 'widget.PartCategoryTree', - - ddGroup: 'PartTree', - categoryModel: 'PartKeepr.PartCategory', - categoryService: 'PartCategory', - initComponent: function () { - this.addEvents("syncCategory"); - this.callParent(); - - this.syncButton = Ext.create("Ext.button.Button", { - tooltip: i18n("Reveal Category"), - icon: 'resources/fugue-icons/icons/arrow-split-180.png', - handler: Ext.bind(function () { - this.fireEvent("syncCategory"); - }, this), - disabled: true - }); - this.toolbar.add(['->', this.syncButton]); - }, - - onBeforeDrop: function (node, data, overModel, dropPosition, dropFunction, options) { - var draggedRecord = data.records[0]; - var droppedOn = this.getView().getRecord(node); - - if (draggedRecord.modelName == "PartKeepr.Part") { - /* Move Part */ - var call = new PartKeepr.ServiceCall("Part", "movePart"); - - if (data.records.length > 1) { - var sources = []; - - for (var i=0;i<data.records.length;i++) { - sources.push(data.records[i].get("id")); - } - - call.setParameter("parts", sources); - } else { - call.setParameter("part", draggedRecord.get("id")); - } - - call.setParameter("targetCategory", droppedOn.get("id")); - call.setHandler(function () { - data.view.store.load(); - }); - call.doCall(); - - return false; - } - - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/PartDisplay.js b/frontend/js/Components/Part/PartDisplay.js @@ -1,189 +0,0 @@ -/** - * @class PartKeepr.PartDisplay - * <p>This component displays information about a specific part.</p> - */ -Ext.define('PartKeepr.PartDisplay', { - extend: 'Ext.panel.Panel', - bodyCls: 'partdisplay', - - /** - * Initializes the component and adds a template as well as the add/remove stock and edit part buttons. - */ - initComponent: function () { - /** - * Create the template - */ - this.tpl = new Ext.XTemplate( - '<h1>{name}</h1>', - '<table>', - '<tr>', - '<td class="o">'+i18n("Category")+':</td>', - '<td style="width: 100%;" class="o">{categoryName}</td>', - '</tr>', - '<tr>', - '<td class="e">'+i18n("Stock Level")+':</td>', - '<td class="e">{stockLevel}</td>', - '</tr>', - '<tr>', - '<td class="o">'+i18n("Minimum Stock Level")+':</td>', - '<td class="o">{minStockLevel}</td>', - '</tr>', - '<tr>', - '<td class="e">'+i18n("Footprint")+':</td>', - '<td class="e">{footprintName}</td>', - '</tr>', - '<tr>', - '<td style="white-space: nowrap;" class="o">'+i18n("Storage Location")+':</td>', - '<td class="o">{storageLocationName}</td>', - '</tr>', - '<tr>', - '<td class="e">'+i18n("Comment")+':</td>', - '<td class="e">{comment}</td>', - '</tr>', - '<tr>', - '<td class="o">'+i18n("Create Date")+':</td>', - '<td class="o">{createDate}</td>', - '</tr>', - '<tr>', - '<td class="e">'+i18n("Status")+':</td>', - '<td class="e">{status}</td>', - '</tr>', - '<tr>', - '<td class="o">'+i18n("Needs Review")+':</td>', - '<td class="o">{needsReview}</td>', - '</tr>', - '</table>'); - - /** - * Create the "add stock" button - */ - this.addButton = new Ext.Button({ - text: i18n("Add Stock"), - cls:'x-btn-text-icon', - icon: 'resources/silkicons/brick_add.png', - handler: Ext.bind(this.addPartPrompt, this) - }); - - /** - * Create the "remove stock" button - */ - this.deleteButton = new Ext.Button({ - text: i18n("Remove Stock"), - cls:'x-btn-text-icon', - icon: 'resources/silkicons/brick_delete.png', - handler: Ext.bind(this.deletePartPrompt, this) - }); - - /** - * Create the "edit part" button - */ - this.editButton = new Ext.Button({ - text: i18n("Edit Part"), - icon: 'resources/silkicons/brick_edit.png', - handler: Ext.bind(function () { this.fireEvent("editPart", this.record.get("id"));}, this) - }); - - /** - * Create the toolbar which holds our buttons - */ - this.tbar = Ext.create("Ext.toolbar.Toolbar", { - enableOverflow: true, - items: [ - this.addButton, - this.deleteButton, - this.editButton - ] - }); - - /** - * Add the event "editPart". This event is fired as soon as the "edit" button is clicked. - * - * @todo Add the events "addStock" and "removeStock" and manage these events from the PartManager. - */ - this.addEvents("editPart"); - - this.callParent(); - }, - /** - * Sets the values for the template. - * - * Note that the data of the record is applied with htmlentities(), i.e. <b>Test</b> will be - * displayed as such and not in bold. - */ - setValues: function (r) { - this.record = r; - - var values = {}; - for (var i in r.data) { - if (r.data[i] !== null) { - values[i] = htmlentities(r.data[i]); - } else { - values[i] = r.data[i]; - } - } - - this.tpl.overwrite(this.getTargetEl(), values); - }, - /** - * Prompt the user for the stock level he wishes to add. - */ - addPartPrompt: function () { - var j = new PartKeepr.PartStockWindow({ partUnitName: this.record.get("partUnitName") }); - j.addStock(this.addPartHandler, this); - }, - /** - * Callback after the "add stock" dialog is complete. - */ - addPartHandler: function (quantity, price) { - var call = new PartKeepr.ServiceCall( - "Part", - "addStock"); - call.setParameter("stock", quantity); - call.setParameter("price", price); - call.setParameter("part", this.record.get("id")); - call.setHandler(Ext.bind(this.reloadPart, this)); - call.doCall(); - }, - /** - * Prompts the user for the stock level to decrease for the item. - */ - deletePartPrompt: function () { - var j = new PartKeepr.PartStockWindow({ partUnitName: this.record.get("partUnitName") }); - j.removeStock(this.deletePartHandler, this); - }, - /** - * Callback after the "delete stock" dialog is complete. - */ - deletePartHandler: function (quantity) { - var call = new PartKeepr.ServiceCall( - "Part", - "deleteStock"); - call.setParameter("stock", quantity); - call.setParameter("part", this.record.get("id")); - call.setHandler(Ext.bind(this.reloadPart, this)); - call.doCall(); - }, - /** - * Reloads the current part - */ - reloadPart: function () { - this.loadPart(this.record.get("id")); - }, - /** - * Load the part from the database. - */ - loadPart: function (id) { - PartKeepr.Part.load(id, { - scope: this, - success: this.onPartLoaded - }); - }, - /** - * Callback after the part is loaded - */ - onPartLoaded: function (record) { - this.record = record; - this.setValues(this.record); - this.record.commit(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/PartFilterPanel.js b/frontend/js/Components/Part/PartFilterPanel.js @@ -1,163 +0,0 @@ -Ext.define('PartKeepr.PartFilterPanel', { - extend: 'Ext.form.Panel', - alias: 'widget.PartFilterPanel', - bodyPadding: '10px', - layout: 'column', - bodyStyle: 'background:#DBDBDB;', - initComponent: function () { - - // Create the filter fields - this.createFilterFields(); - - - // Creates the left column of the filter panel - this.leftColumn = { - xtype: 'container', - anchor: '100%', - layout: 'anchor', - columnWidth: 0.5, - items: [ - this.storageLocationFilter, - this.categoryFilter, - this.partsWithoutPrice - ] - }; - - // Creates the right column of the filter panel - this.rightColumn = { - xtype: 'container', - anchor: '100%', - columnWidth: 0.5, - layout: 'anchor', - items: [ - this.stockFilter - ] - }; - - // Apply both columns to this panel - this.items = [ this.leftColumn, this.rightColumn ]; - - // Create the reset button - this.resetButton = Ext.create("Ext.button.Button", { - text: i18n("Reset"), - handler: this.onReset, - cls: 'x-btn-text-icon', - icon: 'resources/diagona-icons/icons/16/101.png', - scope: this - }); - - // Create the apply button - this.applyButton = Ext.create("Ext.button.Button", { - text: i18n("Apply"), - cls: 'x-btn-text-icon', - icon: 'resources/diagona-icons/icons/16/102.png', - handler: this.onApply, - scope: this - }); - - // Append both buttons to a toolbar - this.dockedItems = [{ - xtype: 'toolbar', - enableOverflow: true, - dock: 'bottom', - defaults: {minWidth: 100}, - items: [ this.applyButton, this.resetButton ] - }]; - - this.callParent(); - }, - /** - * Applies the parameters from the filter panel to the proxy, then - * reload the store to refresh the grid. - */ - onApply: function () { - this.applyFilterParameters(this.store.getProxy().extraParams); - this.store.getProxy().extraParams.start = 0; - this.store.currentPage = 1; - this.store.load({ start: 0}); - }, - /** - * Resets the fields to their original values, then call onApply() - * to reload the store. - */ - onReset: function () { - this.storageLocationFilter.setValue(""); - this.categoryFilter.setValue({ category: 'all'}); - this.stockFilter.setValue({ stock: 'any'}); - - this.onApply(); - }, - /** - * Creates the filter fields required for this filter panel - */ - createFilterFields: function () { - - // Create the storage location filter field - this.storageLocationFilter = Ext.create("PartKeepr.StorageLocationComboBox", { - fieldLabel: i18n("Storage Location"), - forceSelection: true - }); - - // Create the category scope field - this.categoryFilter = Ext.create("Ext.form.RadioGroup", { - fieldLabel: i18n("Category Scope"), - columns: 1, - items: [{ - boxLabel: i18n("All Subcategories"), - name: 'category', - inputValue: "all", - checked: true - }, - { - boxLabel: i18n("Selected Category"), - name: 'category', - inputValue: "selected" - }] - }); - - // Create the stock level filter field - this.stockFilter = Ext.create("Ext.form.RadioGroup", { - fieldLabel: i18n("Stock Mode"), - columns: 1, - items: [{ - boxLabel: i18n("Any Stock Level"), - name: 'stock', - inputValue: "any", - checked: true - },{ - boxLabel: i18n("Stock Level = 0"), - name: 'stock', - inputValue: "zero" - },{ - boxLabel: i18n("Stock Level > 0"), - name: 'stock', - inputValue: "nonzero" - },{ - boxLabel: i18n("Stock Level < Minimum Stock Level"), - name: 'stock', - inputValue: "below" - }] - }); - - this.partsWithoutPrice = Ext.create("Ext.form.field.Checkbox", { - fieldLabel: i18n("Item Price"), - boxLabel: i18n("Show Parts without Price only") - }); - }, - /** - * Applies the filter parameters to the passed extraParams object. - * @param extraParams An object containing the extraParams from a proxy. - */ - applyFilterParameters: function (extraParams) { - extraParams.withoutPrice = this.partsWithoutPrice.getValue(); - extraParams.categoryScope = this.categoryFilter.getValue().category; - extraParams.stockMode = this.stockFilter.getValue().stock; - - /** - * Get the raw (=text) value. I really wish that ExtJS would handle selected values (from a store) - * distinct than entered values. - */ - extraParams.storageLocation = this.storageLocationFilter.getRawValue(); - } - -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/PartStockHistory.js b/frontend/js/Components/Part/PartStockHistory.js @@ -1,137 +0,0 @@ -Ext.define('PartKeepr.PartStockHistory', { - extend: 'Ext.grid.Panel', - alias: 'widget.PartStockHistory', - - columns: [ - { - header: "", - xtype:'actioncolumn', - dataIndex: 'direction', - renderer: function (val) { - if (val == "out") - { - return '<img title="'+i18n("Parts removed")+'" src="resources/silkicons/brick_delete.png"/>'; - } else { - return '<img title="'+i18n("Parts added")+'" src="resources/silkicons/brick_add.png"/>'; - } - }, - width: 20 - }, - { - header: i18n("User"), - dataIndex: 'user_id', - flex: 0.4, - minWidth: 80, - renderer: function (val) { - var rec = PartKeepr.getApplication().getUserStore().getById(val); - - if (rec) { - return rec.get("username"); - } else { - return i18n("Unknown user"); - } - - }, - editor: { - xtype: 'UserComboBox' - } - }, - {header: i18n("Amount"), dataIndex: 'amount', width: 50, - editor: { - xtype:'numberfield', - allowBlank:false - }}, - {header: i18n("Date"), dataIndex: 'datetime', width: 120}, - { - header: i18n("Price"), - editor: { - xtype:'numberfield', - allowBlank:false - }, - dataIndex: 'price', - width: 60, - renderer: function (val, p, rec) { - if (rec.get("dir") == "out") { - return "-"; - } else { - return val; - } - } - } - ], - model: 'PartKeepr.StockEntry', - /** - * Initializes the stock history grid. - */ - initComponent: function () { - var config = { - autoLoad: false, - autoSync: true, - remoteFilter: false, - remoteSort: false, - model: 'PartKeepr.StockEntry', - pageSize: -1}; - - this.store = Ext.create('Ext.data.Store', config); - - this.editing = Ext.create('Ext.grid.plugin.CellEditing', { - clicksToEdit: 1 - }); - - this.plugins = [ this.editing ]; - - this.editing.on("beforeedit", this.onBeforeEdit, this); - - this.on("activate", this.onActivate, this); - this.callParent(); - }, - /** - * Called before editing a cell. Checks if the user may actually make the requested changes. - * - * @param e Passed from ExtJS - * @returns {Boolean} - */ - onBeforeEdit: function (e) { - - // Checks if the usernames match - var sameUser = e.record.get("username") == PartKeepr.getApplication().getUsername(); - - switch (e.field) { - case "price": - // Check the direction is "out". If yes, editing the price field is not allowed - if (e.record.get("direction") == "out") { - return false; - } - - // If it's not the same user or an admin, editing is not allowed - if ( !sameUser && !PartKeepr.getApplication().isAdmin()) { - return false; - } - break; - case "amount": - // Only an admin may edit the amount. Regular users must put the stock back in manually. - if (!PartKeepr.getApplication().isAdmin()) { - return false; - } - break; - case "user": - if (!PartKeepr.getApplication().isAdmin()) { - return false; - } - break; - default: - return true; - } - - return true; - }, - /** - * Called when the view is activated. - */ - onActivate: function () { - var proxy = this.store.getProxy(); - proxy.extraParams.item = this.part; - - this.store.load(); - } -}); diff --git a/frontend/js/Components/Part/PartStockWindow.js b/frontend/js/Components/Part/PartStockWindow.js @@ -1,152 +0,0 @@ -/** - * This class defines a window which is used to in- or decrease the stock level - * for a specific part. Logic and service calls are not contained in this window, - * and need to be implemented from the caller. - */ -Ext.define('PartKeepr.PartStockWindow', { - extend: 'Ext.window.Window', - - // Configurations - constrainHeader: true, - width: 300, - height: 150, - - resizable: false, - layout: 'fit', - - // We set the title later - title: "", - - // Window title texts - removePartText: i18n("Remove Part(s)"), - addPartText: i18n("Add Part(s)"), - - layout: 'anchor', - bodyStyle: { - padding: "5px" - }, - - /* - * Initializes the window with the quantity and price fields. - * The price field is hidden when a stock decrease happens. - */ - initComponent: function () { - - this.quantityField = Ext.create("Ext.form.field.Number", { - value: 0, // The initial value is 0, to indicate that this is a number field - minValue: 1, // The minimum value is 1. That way we force the user to enter a value - width: 100, - listeners: { - specialkey: { - fn: function(field, e){ - if (e.getKey() == e.ENTER) { - this.onOKClick(); - } - }, - scope: this - } - } - }); - - this.priceField = Ext.create("Ext.form.field.Number", { - hideTrigger: true, - keyNavEnabled: false, - mouseWheelEnabled: false, - anchor: '100%', - value: 0, - fieldLabel: i18n("Price"), - listeners: { - specialkey: { - fn: function(field, e){ - if (e.getKey() == e.ENTER) { - this.onOKClick(); - } - }, - scope: this - } - } - }); - - this.priceCheckbox = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Price per item"), - hideEmptyLabel: false, - checked: true - }); - - this.form = Ext.create("Ext.form.Panel", { - bodyStyle: 'background:#DBDBDB;', - border: false, - items: [{ - xtype: 'fieldcontainer', - fieldLabel: i18n("Quantity"), - layout: 'hbox', - items: [ this.quantityField, { width: 75, xtype: 'displayfield', margin: "0 0 0 5", value: this.partUnitName }] - }, this.priceField, this.priceCheckbox ] - }); - - this.items = this.form; - - this.buttons = [ - { - text: i18n("Close"), - handler: this.onCloseClick, - scope: this - },{ - text: i18n("OK"), - handler: this.onOKClick, - scope: this - }]; - this.on("show", function () { this.quantityField.focus(); }, this); - this.callParent(); - }, - /** - * Closes the window - */ - onCloseClick: function () { - this.close(); - }, - /** - * Checks if the form is valid. If yes, execute the callback. - */ - onOKClick: function () { - if (this.form.getForm().isValid()) { - var price; - if (this.priceCheckbox.getValue()) { - price = this.priceField.getValue(); - } else { - price = this.priceField.getValue() / this.quantityField.getValue(); - } - - Ext.callback(this.callbackFn, this.callbackScope, [ this.quantityField.getValue(), price ]); - this.close(); - } - }, - /** - * Opens the window in "add stock" mode. The target callback receives two parameters: - * the value of the quantity field and the value of the price field. - * - * @param fn The callback - * @param scope The scope in which to execute the callback - */ - addStock: function (fn, scope) { - this.callbackFn = fn; - this.callbackScope = scope; - this.setTitle(this.addPartText); - this.show(); - }, - /** - * Opens the window in "remove stock" mode. The target callback receives one parameters: - * the value of the quantity field - * - * @param fn The callback - * @param scope The scope in which to execute the callback - */ - removeStock: function (fn, scope) { - this.callbackFn = fn; - this.callbackScope = scope; - this.setTitle(this.removePartText); - this.priceField.hide(); - this.priceCheckbox.hide(); - this.show(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/PartsGrid.js b/frontend/js/Components/Part/PartsGrid.js @@ -1,157 +0,0 @@ -/** - * This class is the main part list grid. - * - */ -Ext.define('PartKeepr.PartsGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.PartsGrid', - - // We want to display the texts for the add/delete buttons - buttonTextMode: 'show', - - addButtonText: i18n("Add Part"), - addButtonIcon: 'resources/silkicons/brick_add.png', - deleteButtonText: i18n("Delete Part"), - deleteButtonIcon: 'resources/silkicons/brick_delete.png', - - viewConfig: { - plugins: { - ddGroup: 'CategoryTree', - ptype: 'gridviewdragdrop', - enableDrop: false - } - }, - enableDragDrop : true, - stripeRows : true, - multiSelect : true, - autoScroll: false, - invalidateScrollerOnRefresh: true, - initComponent: function () { - - var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{ - //enableGroupingMenu: false, - groupHeaderTpl: '{name} ({rows.length} ' + i18n("Part(s)")+")" - }); - - // Create the columns - this.defineColumns(); - - - this.features = [groupingFeature]; - - this.on("itemdblclick", this.onDoubleClick, this); - - this.addEvents("editPart"); - - // Bugfix for scroller becoming detached. - // @todo Remove with ExtJS 4.1 - this.on('scrollershow', function(scroller) { - if (scroller && scroller.scrollEl) { - scroller.clearManagedListeners(); - scroller.mon(scroller.scrollEl, 'scroll', scroller.onElScroll, scroller); - } - }); - - // Initialize the panel - this.callParent(); - - }, - /** - * Called when the record was double-clicked - */ - onDoubleClick: function (view, record) { - if (record) { - this.fireEvent("editPart", record.get("id")); - } - }, - /** - * Defines the columns used in this grid. - */ - defineColumns: function () { - this.columns = [ - { - header: "", - dataIndex: "", - width: 30, - renderer: this.iconRenderer - }, - { - header: i18n("Name"), - dataIndex: 'name', - flex: 1, - minWidth: 200, - renderer: Ext.util.Format.htmlEncode - },{ - header: i18n("Storage Location"), - dataIndex: 'storageLocationName' - },{ - header: i18n("Status"), - dataIndex: "status" - },{ - header: i18n("Stock"), - dataIndex: 'stockLevel', - renderer: this.stockLevelRenderer - },{ - header: i18n("Min. Stock"), - dataIndex: 'minStockLevel', - renderer: this.stockLevelRenderer - },{ - header: i18n("Avg. Price"), - dataIndex: 'averagePrice' - },{ - header: i18n("Footprint"), - dataIndex: 'footprintName' - },{ - header: i18n("Category"), - dataIndex: 'categoryPath', - hidden: true - },{ - header: i18n("Create Date"), - dataIndex: 'createDate', - hidden: true - } - - ]; - }, - /** - * Used as renderer for the stock level columns. - * - * If a part contains a non-default unit, we display it. - * Otherwise we hide it. - */ - stockLevelRenderer: function (val,q,rec) - { - if (rec.get("partUnitDefault") !== true) { - return val + " " + rec.get("partUnitName"); - } else { - return val; - } - }, - /** - * Used as renderer for the icon column. - */ - iconRenderer: function (val,q,rec) - { - var ret = ""; - if (rec.get("attachmentCount") > 0) { - ret += '<img src="resources/silkicons/attach.png" alt="'+i18n("Has attachments")+'" title="'+i18n("Has attachments")+'"/>'; - } - - return ret; - }, - /** - * Sets the category. Triggers a store reload with a category filter. - */ - setCategory: function (category) { - this.currentCategory = category; - - var proxy = this.store.getProxy(); - - proxy.extraParams.category = category; - this.searchField.onTrigger1Click(); - - proxy.extraParams.start = 0; - this.store.currentPage = 1; - this.store.load({ start: 0}); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Part/PartsManager.js b/frontend/js/Components/Part/PartsManager.js @@ -1,264 +0,0 @@ -/** - * @class PartKeepr.PartManager - * @todo Document the editor system a bit better - * - * The part manager encapsulates the category tree, the part display grid and the part detail view. - */ -Ext.define('PartKeepr.PartManager', { - extend: 'Ext.panel.Panel', - alias: 'widget.PartManager', - layout: 'border', - border: false, - padding: 5, - initComponent: function () { - - /** - * Create the store with the default sorter "name ASC" - */ - this.createStore({ - model: 'PartKeepr.Part', - groupField: 'categoryPath', - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - // Create the tree - this.tree = Ext.create("PartKeepr.PartCategoryTree", { - region: 'west', - categoryModel: 'PartKeepr.PartCategory', - categoryService: 'PartCategory', - split: true, - title: i18n("Categories"), - ddGroup: 'CategoryTree', - width: 300, // @todo Make this configurable - collapsible: true // We want to collapse the tree panel on small screens - }); - - // Trigger a grid reload on category change - this.tree.on("selectionchange", Ext.bind(function (t,s) { - if (s.length > 0) { - this.grid.setCategory(s[0].get("id")); - } - }, this)); - - // Create the detail panel - this.detail = Ext.create("PartKeepr.PartDisplay", { title: i18n("Part Details") }); - this.detail.on("editPart", this.onEditPart, this); - - // Create the grid - this.grid = Ext.create("PartKeepr.PartsGrid", { title: i18n("Parts List"), region: 'center', layout: 'fit', store: this.getStore()}); - this.grid.on("editPart", this.onEditPart, this); - - // Create the grid listeners - this.grid.on("itemSelect", this.onItemSelect, this); - this.grid.on("itemDeselect", this.onItemSelect, this); - this.grid.on("itemAdd", this.onItemAdd, this); - this.grid.on("itemDelete", this.onItemDelete, this); - this.tree.on("syncCategory", this.onSyncCategory, this); - - // Listen on the partChanged event, which is fired when the users edits the part - this.detail.on("partChanged", function () { this.grid.getStore().load(); }, this); - - // Create the stock level panel - this.stockLevel = Ext.create("PartKeepr.PartStockHistory", { title: "Stock History"}); - - this.detailPanel = Ext.create("Ext.tab.Panel", { - title: i18n("Part Details"), - hidden: true, - region: 'east', - split: true, - width: 300, - items: [ this.detail, this.stockLevel ] - }); - - this.filterPanel = Ext.create("PartKeepr.PartFilterPanel", { - region: 'south', - title: i18n("Filter"), - height: 200, - split: true, - collapsed: true, - collapsible: true, - store: this.store - }); - - this.items = [ this.tree, { - layout: 'border', - border: false, - region: 'center', - items: [ this.grid, this.filterPanel ] - }, this.detailPanel ]; - - - this.callParent(); - }, - /** - * Called when the sync button was clicked. Highlights the category - * of the selected part for a short time. We can't select the category - * as this would affect the parts grid. - */ - onSyncCategory: function () { - var r = this.grid.getSelectionModel().getLastSelected(); - - var rootNode = this.tree.getRootNode(); - var cat = r.get("category"); - - var node = rootNode.findChild("id", cat, true); - - this.tree.getView().ensureVisible(node); - this.tree.getView().scrollIntoView(node); - - var htmlNode = new Ext.Element(this.tree.getView().getNode(node)); - - htmlNode.highlight("2aaad3"); - }, - /** - * Called when the delete button was clicked. - * - * Prompts the user if he really wishes to delete the part. If yes, it calls deletePart. - */ - onItemDelete: function () { - var r = this.grid.getSelectionModel().getLastSelected(); - - Ext.Msg.confirm(i18n("Delete Part"), sprintf(i18n("Do you really wish to delete the part %s?"),r.get("name")), this.deletePart, this); - }, - /** - * Deletes the selected part. - * - * @param {String} btn The clicked button in the message box window. - * @todo We use the current selection of the grid. If for some reason the selection changes during the user is prompted, - * we delete the wrong part. Fix that to pass the selected item to the onItemDelete then to this function. - */ - deletePart: function (btn) { - var r = this.grid.getSelectionModel().getLastSelected(); - - if (btn == "yes") { - var call = new PartKeepr.ServiceCall( - "Part", - "deletePart"); - - call.setLoadMessage(sprintf(i18n("Deleting part %s"), r.get("name"))); - call.setParameter("part", r.get("id")); - call.setHandler(Ext.bind(function () { - this.store.load(); - }, this)); - call.doCall(); - } - }, - /** - * Creates a new, empty part editor window - */ - onItemAdd: function () { - var j = Ext.create("PartKeepr.PartEditorWindow", { - partMode: 'create' - }); - - var defaults = {}; - - var defaultPartUnit = PartKeepr.getApplication().getPartUnitStore().findRecord("default", true); - - defaults.partUnit = defaultPartUnit.get("id"); - defaults.category = this.grid.currentCategory; - - record = Ext.create("PartKeepr.Part", defaults); - - // Inject the defaults to the editor, so the editor can create a new item on its own - j.editor.partDefaults = defaults; - - j.editor.editItem(record); - j.show(); - }, - /** - * Called when a part was edited. Refreshes the grid. - */ - onEditPart: function (id) { - this.loadPart(id, Ext.bind(this.onPartLoaded, this)); - }, - /** - * Called when a part was loaded. Displays the part in the editor window. - */ - onPartLoaded: function (f,g) { - var j = Ext.create("PartKeepr.PartEditorWindow"); - j.editor.on("partSaved", this.onPartSaved, this); - j.editor.editItem(f); - j.show(); - }, - onPartSaved: function (record) { - - var idx = this.grid.store.find("id", record.get("id")); - - // Only reload the grid if the edited record is contained - if (idx !== -1) { - this.grid.store.load(); - } - - this.detail.setValues(record); - }, - /** - * Called when a part was selected in the grid. Displays the details for this part. - */ - onItemSelect: function () { - if (this.grid.getSelectionModel().getCount() > 1) { - this.detailPanel.hide(); - this.tree.syncButton.disable(); - } else if (this.grid.getSelectionModel().getCount() == 1) { - var r = this.grid.getSelectionModel().getLastSelected(); - - this.detailPanel.setActiveTab(this.detail); - this.detailPanel.show(); - this.detail.setValues(r); - this.stockLevel.part = r.get("id"); - - this.tree.syncButton.enable(); - } else { - this.tree.syncButton.disable(); - } - - }, - /** - * Triggers loading of a part - * @param {Integer} id The ID of the part to load - * @param {Function} handler The callback to call when the part was loaded - */ - loadPart: function (id, handler) { - // @todo we have this method duplicated in PartEditor - var model = Ext.ModelManager.getModel("PartKeepr.Part"); - - model.load(id, { - scope: this, - success: handler - }); - }, - /** - * Creates the store - */ - createStore: function (config) { - Ext.Object.merge(config, { - autoLoad: true, - autoSync: false, // Do not change. If true, new (empty) records would be immediately commited to the database. - remoteFilter: true, - remoteSort: true, - pageSize: 50}); - - this.store = Ext.create('Ext.data.Store', config); - - // Workaround for bug http://www.sencha.com/forum/showthread.php?133767-Store.sync()-does-not-update-dirty-flag&p=607093#post607093 - this.store.on('write', function(store, operation) { - var success=operation.wasSuccessful(); - if (success) { - Ext.each(operation.records, function(record){ - if (record.dirty) { - record.commit(); - } - }); - } - }); - }, - /** - * Returns the store - */ - getStore: function () { - return this.store; - } -});- \ No newline at end of file diff --git a/frontend/js/Components/PartUnit/PartUnitEditor.js b/frontend/js/Components/PartUnit/PartUnitEditor.js @@ -1,14 +0,0 @@ -Ext.define('PartKeepr.PartUnitEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.PartUnitEditor', - items: [{ - xtype: 'textfield', - name: 'name', - fieldLabel: i18n("Measurement Unit Name") - },{ - xtype: 'textfield', - name: 'shortName', - fieldLabel: i18n("Short Name") - }], - saveText: i18n("Save Part Measurement Unit") -}); diff --git a/frontend/js/Components/PartUnit/PartUnitEditorComponent.js b/frontend/js/Components/PartUnit/PartUnitEditorComponent.js @@ -1,20 +0,0 @@ -Ext.define('PartKeepr.PartUnitEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.PartUnitEditorComponent', - navigationClass: 'PartKeepr.PartUnitGrid', - editorClass: 'PartKeepr.PartUnitEditor', - newItemText: i18n("New Part Measurement Unit"), - deleteMessage: i18n("Do you really wish to delete the part measurement unit'%s'?"), - deleteTitle: i18n("Delete Part Measurement Unit"), - model: 'PartKeepr.PartUnit', - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/PartUnit/PartUnitGrid.js b/frontend/js/Components/PartUnit/PartUnitGrid.js @@ -1,51 +0,0 @@ -Ext.define('PartKeepr.PartUnitGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.PartUnitGrid', - columns: [ - {header: i18n("Part Measurement Unit"), dataIndex: 'name', flex: 1}, - {header: i18n("Default"), dataIndex: 'default', width: 60, renderer: function (val) { if (val === true) { return "✓"; } else { return ""; }}} - ], - addButtonText: i18n("Add Part Measurement Unit"), - addButtonIcon: "resources/fugue-icons/icons/ruler--plus.png", - deleteButtonText: i18n("Delete Part Measurement Unit"), - deleteButtonIcon: "resources/fugue-icons/icons/ruler--minus.png", - defaultButtonIcon: "resources/fugue-icons/icons/ruler--pencil.png", - initComponent: function () { - this.callParent(); - - this.defaultButton = Ext.create("Ext.button.Button", { - icon: this.defaultButtonIcon, - tooltip: i18n('Mark Part Measurement Unit as Default'), - disabled: true, - handler: this.onDefaultClick, - scope: this - }); - - this.getSelectionModel().on("deselect", - Ext.bind(function (rsm, r, i) { - this.defaultButton.disable(); - }, this)); - - this.getSelectionModel().on("select", - Ext.bind(function (rsm, r, i) { - this.defaultButton.enable(); - }, this)); - this.topToolbar.insert(2, {xtype: 'tbseparator'}); - this.topToolbar.insert(3, this.defaultButton); - }, - onDefaultClick: function () { - var r = this.getSelectionModel().getLastSelected(); - - var call = new PartKeepr.ServiceCall( - "PartUnit", - "setDefault"); - - call.setParameter("id", r.get("id")); - - call.setHandler(Ext.bind(this.onDefaultHandler, this)); - call.doCall(); - }, - onDefaultHandler: function () { - this.store.load(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Statistics/CurrentStatisticsPanel.js b/frontend/js/Components/Statistics/CurrentStatisticsPanel.js @@ -1,92 +0,0 @@ -Ext.define('PartKeepr.CurrentStatisticsPanel', { - extend: 'Ext.panel.Panel', - width: 400, - height: 250, - title: i18n("Current Statistics"), - bodyStyle: { - padding: "5px" - }, - layout: 'fit', - /** - * Initializes the component and adds a template - */ - initComponent: function () { - /** - * Create the template - */ - this.tpl = new Ext.XTemplate( - '<h1>'+i18n("Current Statistics")+'</h1>', - '<table>', - '<tr>', - '<td style="width: 200px;" class="o">'+i18n("Different Parts")+':</td>', - '<td style="width: 200px;" class="o">{partCount}</td>', - '</tr>', - '<tr>', - '<td style="width: 200px;" class="e">'+i18n("Total Part Value")+':</td>', - '<td style="width: 200px;" class="e">{totalPrice}</td>', - '</tr>', - '<tr>', - '<td style="width: 200px;" class="o">'+i18n("Average Part Value")+':</td>', - '<td style="width: 200px;" class="o">{averagePrice}</td>', - '</tr>', - '<tr>', - '<td style="width: 200px;" class="e">'+i18n("Parts with price")+':</td>', - '<td style="width: 200px;" class="e">{partsWithPrice}</td>', - '</tr>', - '<tr>', - '<td style="width: 200px;" class="o">'+i18n("Parts without price")+':</td>', - '<td style="width: 200px;" class="o">{partsWithoutPrice}</td>', - '</tr>', - '<tr>', - '<td class="e">'+i18n("Categories")+':</td>', - '<td class="e">{categoryCount}</td>', - '</tr>', - '</table>', - '<h1>'+i18n("Counts per Unit")+'</h1>', - '<table>', - '<tpl for="units">', - '<tr>', - '<td style="width: 200px;" class="{[xindex % 2 === 0 ? "e" : "o"]}">{name}</td>', - '<td style="width: 200px;" class="{[xindex % 2 === 0 ? "e" : "o"]}">{stockLevel}</td>', - '</tr>', - '</tpl>', - '</table>'); - - this.tbButtons = [{ - text: i18n("Refresh"), - handler: this.loadStats, - scope: this - },{ - text: i18n("Close"), - handler: this.close, - scope: this - }]; - - this.dockedItems = [{ - xtype: 'toolbar', - dock: 'bottom', - ui: 'footer', - items: this.tbButtons - }]; - - this.view = Ext.create("Ext.panel.Panel", { - autoScroll: true - }); - - this.items = this.view; - this.callParent(); - - this.loadStats(); - }, - loadStats: function () { - var call = new PartKeepr.ServiceCall( - "Statistic", - "getCurrentStats"); - - call.setHandler(Ext.bind(this.onStatsLoaded, this)); - call.doCall(); - }, - onStatsLoaded: function (data) { - this.tpl.overwrite(this.view.getTargetEl(), data); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Statistics/StatisticsChart.js b/frontend/js/Components/Statistics/StatisticsChart.js @@ -1,133 +0,0 @@ -Ext.define('PartKeepr.StatisticsChart', { - extend: 'Ext.chart.Chart', - animate: true, - shadow: true, - - style: 'border: 1px solid #AAA;background-color: white;box-shadow: 5px 5px 0px #aaa', - legend: { - position: 'right' - }, - theme: 'Base', - series: [{ - type: 'line', - highlight: { - size: 7, - radius: 7 - }, - axis: 'left', - xField: 'start', - yField: 'parts', - tips: { - trackMouse: true, - width: 170, - height: 28, - renderer: function(storeItem, item) { - this.setTitle(Ext.Date.format(storeItem.get('start'), "Y-m-d") + ": " + storeItem.get("parts") +" " + i18n("Parts")); - } - }, - title: i18n("Parts"), - markerConfig: { - type: 'cross', - size: 4, - radius: 4, - 'stroke-width': 0 - } - }, { - type: 'line', - highlight: { - size: 7, - radius: 7 - }, - tips: { - trackMouse: true, - width: 170, - height: 28, - renderer: function(storeItem, item) { - this.setTitle(Ext.Date.format(storeItem.get('start'), "Y-m-d") + ": " + storeItem.get("categories") +" " + i18n("Categories")); - } - }, - axis: 'left', - title: i18n("Categories"), - smooth: true, - xField: 'start', - yField: 'categories', - markerConfig: { - type: 'circle', - size: 4, - radius: 4, - 'stroke-width': 0 - } - }], - initComponent: function () { - - /** - * Defines the first axis, which indicates the count. - */ - this.axis1 = { - type: 'Numeric', - minimum: 0, - position: 'left', - fields: ['parts', 'categories'], - title: i18n("Count"), - minorTickSteps: 1, - grid: { - odd: { - opacity: 1, - fill: '#eee', - stroke: '#bbb', - 'stroke-width': 0.5 - }, - even: { - opacity: 1, - stroke: '#bbb', - 'stroke-width': 0.5 - } - } - }; - - /** - * Defines the second axis, which indicates the time. - */ - this.axis2 = { - type: 'Time', - dateFormat: 'Y-m-d', - position: 'bottom', - aggregateOp: "avg", - fields: ['start'], - title: i18n("Date"), - grid: true - }; - - this.axes = [ this.axis1, this.axis2 ]; - - this.store = Ext.create("Ext.data.Store", { - model: 'PartKeepr.StatisticSample', - proxy: { - type: 'ajax', - reader: { - type: 'json', - root: 'response.data' - }, - url : 'service.php', - extraParams: { - "service": "Statistic", - "call": "getSampledStatistics", - "startDateTime": "2011-01-01 00:00:00", - "endDateTime": "2011-12-01 00:00:00" - }, - headers: { - session :PartKeepr.getApplication().getSession() - } - }, - autoLoad: false - }); - - this.callParent(); - }, - setStart: function (date) { - this.store.getProxy().extraParams.startDateTime = Ext.Date.format(date, "Y-m-d H:i:s"); - }, - setEnd: function (date) { - this.store.getProxy().extraParams.endDateTime = Ext.Date.format(date, "Y-m-d H:i:s"); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Statistics/StatisticsChartPanel.js b/frontend/js/Components/Statistics/StatisticsChartPanel.js @@ -1,65 +0,0 @@ -Ext.define('PartKeepr.StatisticsChartPanel', { - extend: 'Ext.form.Panel', - title: i18n("Statistics Chart"), - - layout: 'anchor', - bodyStyle: 'background:#DBDBDB;padding: 15px;', - - initComponent: function () { - this.chart = Ext.create("PartKeepr.StatisticsChart", { anchor: '100% -60' }); - - this.dateSelector1 = Ext.create("Ext.form.field.Date", { - style: 'margin-top: 10px', - fieldLabel: i18n("From"), - listeners: { - change: Ext.bind(this.onDateChanged, this) - } - }); - - this.dateSelector2 = Ext.create("Ext.form.field.Date", { - fieldLabel: i18n("To"), - listeners: { - change: Ext.bind(this.onDateChanged, this) - } - }); - - this.items = [ this.chart, this.dateSelector1, this.dateSelector2 ]; - - this.reloadDates(); - - this.callParent(); - }, - onDateChanged: function () { - this.chart.setStart(this.dateSelector1.getValue()); - this.chart.setEnd(this.dateSelector2.getValue()); - this.chart.store.load(); - }, - reloadDates: function () { - var call = new PartKeepr.ServiceCall("Statistic", "getStatisticRange"); - call.setHandler(Ext.bind(this.onReloadDates, this)); - call.doCall(); - }, - onReloadDates: function (data) { - var start = Ext.Date.parse(data.data.start, "Y-m-d H:i:s"); - var end = Ext.Date.parse(data.data.end, "Y-m-d H:i:s"); - - this.dateSelector1.setMinValue(start); - this.dateSelector1.setMaxValue(end); - this.dateSelector1.suspendEvents(); - - this.dateSelector1.setValue(start); - this.dateSelector1.resumeEvents(); - - - this.dateSelector2.setMinValue(start); - this.dateSelector2.setMaxValue(end); - - this.dateSelector2.suspendEvents(); - this.dateSelector2.setValue(end); - this.dateSelector2.resumeEvents(); - - this.chart.setStart(start); - this.chart.setEnd(end); - this.chart.store.load(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Statusbar.js b/frontend/js/Components/Statusbar.js @@ -1,67 +0,0 @@ -Ext.define('PartKeepr.Statusbar', { - extend: 'Ext.ux.statusbar.StatusBar', - - defaultText: i18n("Ready."), - defaultIconCls: 'x-status-valid', - iconCls: 'x-status-valid', - autoClear: 3000, - initComponent: function () { - - this.connectionButton = new PartKeepr.ConnectionButton(); - this.connectionButton.on("click", this.onConnectionButtonClick, this); - this.timeDisplay = new PartKeepr.TimeDisplay(); - this.currentUserDisplay = Ext.create("Ext.toolbar.TextItem"); - - this.currentUserDisplay.setText(i18n("Not logged in")); - - this.showMessageLog = Ext.create("Ext.Button",{ - icon: 'resources/silkicons/application_osx_terminal.png', - cls: 'x-btn-icon', - handler: function () { - PartKeepr.getApplication().toggleMessageLog(); - } - }); - - Ext.apply(this, { - items: [ - this.currentUserDisplay, - {xtype: 'tbseparator'}, - this.timeDisplay, - { xtype: 'tbseparator' }, - this.showMessageLog, - { xtype: 'tbseparator' }, - this.connectionButton - - ] - }); - - - this.callParent(); - }, - getConnectionButton: function () { - return this.connectionButton; - }, - setCurrentUser: function (username) { - this.currentUserDisplay.setText(i18n("Logged in as")+": "+username); - }, - startLoad: function (message) { - if (message !== null) { - this.showBusy({text: message, iconCls: "x-status-busy"}); - } else { - this.showBusy(); - } - }, - endLoad: function () { - this.clearStatus({useDefaults: true}); - }, - onConnectionButtonClick: function () { - if (PartKeepr.getApplication().getSession()) { - PartKeepr.getApplication().logout(); - } else { - var o = new PartKeepr.LoginDialog(); - o.show(); - } - } -}); - - diff --git a/frontend/js/Components/StorageLocation/StorageLocationEditor.js b/frontend/js/Components/StorageLocation/StorageLocationEditor.js @@ -1,79 +0,0 @@ -Ext.define('PartKeepr.StorageLocationEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.StorageLocationEditor', - saveText: i18n("Save Storage Location"), - - layout: 'column', - - initComponent: function () { - var config = {}; - - Ext.Object.merge(config, { - autoLoad: false, - model: "PartKeepr.Part", - autoSync: false, // Do not change. If true, new (empty) records would be immediately commited to the database. - remoteFilter: true, - remoteSort: true, - pageSize: 15}); - - this.store = Ext.create('Ext.data.Store', config); - - this.gridPanel = Ext.create("Ext.grid.Panel", { - store: this.store, - columnLines: true, - columns: [ - { - header: i18n("Name"), - dataIndex: 'name', - flex: 1, - minWidth: 200, - renderer: Ext.util.Format.htmlEncode - } - ] - }); - - var container = Ext.create("Ext.form.FieldContainer", { - fieldLabel: i18n("Contained Parts"), - labelWidth: 110, - layout: 'fit', - height: 246, - items: this.gridPanel - }); - - - - this.items = [{ - columnWidth: 1, - minWidth: 500, - layout: 'anchor', - xtype: 'container', - margin: '0 5 0 0', - items: [{ - xtype: 'textfield', - name: 'name', - labelWidth: 110, - fieldLabel: i18n("Storage Location") - }, - container - ]}, - { - width: 370, - height: 250, - xtype: 'remoteimagefield', - name: 'image_id', - imageType: 'storagelocation', - imageWidth: 256, - imageHeight: 256, - labelWidth: 110, - fieldLabel: i18n("Image") - }]; - - this.on("startEdit", this.onStartEdit, this); - this.callParent(); - }, - onStartEdit: function () { - this.store.getProxy().extraParams.storageLocation = this.record.get("name"); - this.store.load(); - } - -});- \ No newline at end of file diff --git a/frontend/js/Components/StorageLocation/StorageLocationEditorComponent.js b/frontend/js/Components/StorageLocation/StorageLocationEditorComponent.js @@ -1,18 +0,0 @@ -Ext.define('PartKeepr.StorageLocationEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.StorageLocationEditorComponent', - navigationClass: 'PartKeepr.StorageLocationGrid', - editorClass: 'PartKeepr.StorageLocationEditor', - newItemText: i18n("New Storage Location"), - model: 'PartKeepr.StorageLocation', - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/StorageLocation/StorageLocationGrid.js b/frontend/js/Components/StorageLocation/StorageLocationGrid.js @@ -1,45 +0,0 @@ -Ext.define('PartKeepr.StorageLocationGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.StorageLocationGrid', - columns: [ - {header: i18n("Storage Location"), dataIndex: 'name', flex: 1} - ], - addButtonText: i18n("Add Storage Location"), - addButtonIcon: 'resources/fugue-icons/icons/wooden-box--plus.png', - deleteButtonText: i18n("Delete Storage Location"), - deleteButtonIcon: 'resources/fugue-icons/icons/wooden-box--minus.png', - initComponent: function () { - this.callParent(); - - // Adds a button which shows the multi-create window - this.multiCreateButton = Ext.create("Ext.button.Button", { - icon: 'resources/icons/storagelocation_multiadd.png', - tooltip: i18n("Multi-create storage locations"), - handler: this.onMultiCreateClick, - scope: this - }); - - this.topToolbar.insert(2, {xtype: 'tbseparator'}); - this.topToolbar.insert(3, this.multiCreateButton); - }, - /** - * Creates a new storage location multi-create window. - */ - onMultiCreateClick: function () { - var j = Ext.create("PartKeepr.StorageLocationMultiCreateWindow", { - listeners: { - destroy: { - fn: this.onMultiCreateWindowDestroy, - scope: this - } - } - }); - j.show(); - }, - /** - * Reloads the store after the multi-create window was closed - */ - onMultiCreateWindowDestroy: function () { - this.store.load(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/StorageLocation/StorageLocationMultiAddDialog.js b/frontend/js/Components/StorageLocation/StorageLocationMultiAddDialog.js @@ -1,206 +0,0 @@ -/** - * Represents a form which is used to create multiple storage locations at once. - * @class PartKeepr.StorageLocationMultiAddDialog - */ -Ext.define('PartKeepr.StorageLocationMultiAddDialog', { - extend: 'Ext.form.Panel', - - // Layout settings - layout: 'anchor', - defaults: { - anchor: '100%' - }, - - // Styling - border: false, - bodyStyle: 'background:#DBDBDB;padding: 10px;', - - /** - * Initializes the component. Adds all form fields - */ - initComponent: function () { - - /** - * The prefix represents the first part of the storage location name, - * e.g. "A" for storage locations "A0001". - */ - this.storageLocationPrefix = Ext.create("Ext.form.field.Text", { - fieldLabel: i18n("Name Prefix"), - listeners: { - change: { - fn: this.onFormChange, - scope: this - } - } - }); - - /** - * Specifies the start of the numeric range. - */ - this.storageLocationStart = Ext.create("Ext.form.field.Number", { - fieldLabel: i18n("Start"), - value: 1, - minValue: 0, - columnWidth: 0.5, - listeners: { - change: { - fn: this.onFormChange, - scope: this - } - } - }); - - /** - * Specifies the end of the numeric range. - */ - this.storageLocationEnd = Ext.create("Ext.form.field.Number", { - fieldLabel: i18n("End"), - value: 10, - minValue: 1, - columnWidth: 0.5, - margin: "0 0 0 5", - listeners: { - change: { - fn: this.onFormChange, - scope: this - } - } - }); - - /** - * Specifies if the storage locations should be prefixed with a zero (e.g. creates A0001 instead of A1). - */ - this.storageLocationZeroPrefix = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Prefix with zeroes"), - hideEmptyLabel: false, - columnWidth: 0.5, - listeners: { - change: { - fn: this.onFormChange, - scope: this - } - } - }); - - /** - * Specifies the overall length of the storage location name. If you have a prefix "A" and numbers up to - * 100, you can set the overall length to 5 to achieve "A0100", or to 6 to achieve "A00100". - */ - this.storageLocationOverallLength = Ext.create("Ext.form.field.Number", { - fieldLabel: i18n("Length"), - columnWidth: 0.5, - margin: "0 0 0 5", - disabled: true, - listeners: { - change: { - fn: this.onFormChange, - scope: this - } - } - }); - - /** - * Creates a field which displays the storage locations to be created. - */ - this.outputField = Ext.create("Ext.form.field.TextArea", { - fieldLabel: i18n("Sample"), - readOnly: true, - anchor: '100% -70' - }); - - this.items = [ - this.storageLocationPrefix, - { - layout: 'column', - border: false, - bodyStyle: 'background:#DBDBDB;', - items: [ - this.storageLocationStart, - this.storageLocationEnd - ] - }, - { - layout: 'column', - border: false, - plain: true, - bodyStyle: 'background:#DBDBDB;', - items: [ - this.storageLocationZeroPrefix, - this.storageLocationOverallLength - ] - }, - this.outputField - ]; - - this.callParent(); - - this.recalculateDemo(); - }, - /** - * Called when something in the form has changed. - */ - onFormChange: function () { - /** - * If the overall length is less than the prefix plus the length of the highest number, update it - */ - if (this.storageLocationOverallLength.getValue() < this.getMinLength()) { - this.storageLocationOverallLength.setValue(this.getMinLength()); - } - - /** - * Make sure that the end value is bigger than the start value. - */ - if (this.storageLocationStart.getValue() > this.storageLocationEnd.getValue()) { - this.storageLocationEnd.setValue(this.storageLocationStart.getValue()); - } - - /** - * Enable/Disable the length field if zero prefix is wanted - */ - if (this.storageLocationZeroPrefix.getValue()) { - this.storageLocationOverallLength.enable(); - } else { - this.storageLocationOverallLength.disable(); - } - - this.recalculateDemo(); - }, - /** - * Calculates the minimum length possible - * @returns int The minimum length possible - */ - getMinLength: function () { - return strlen(this.storageLocationPrefix.getValue()) + - strlen((this.storageLocationEnd.getValue()).toString()); - }, - /** - * Updates the sample field - */ - recalculateDemo: function () { - this.outputField.setValue(implode("\n", this.getStorageLocations())); - }, - /** - * Returns all storage locations which are to be created - * @returns {Array} The storage locations - */ - getStorageLocations: function () { - var j = []; - - for (var i=this.storageLocationStart.getValue();i<this.storageLocationEnd.getValue()+1;i++) { - if (!this.storageLocationZeroPrefix.getValue()) { - // No padding wanted - j.push(this.storageLocationPrefix.getValue()+i); - } else { - var padLength = this.storageLocationOverallLength.getValue() - - ( strlen(this.storageLocationPrefix.getValue()) + - strlen(i)); - - j.push(this.storageLocationPrefix.getValue() + str_repeat("0", padLength)+ i); - } - - } - - return j; - } - -});- \ No newline at end of file diff --git a/frontend/js/Components/StorageLocation/StorageLocationMultiAddWindow.js b/frontend/js/Components/StorageLocation/StorageLocationMultiAddWindow.js @@ -1,83 +0,0 @@ -/** - * Represents the multi create window. - * @class PartKeepr.StorageLocationMultiCreateWindow - */ -Ext.define("PartKeepr.StorageLocationMultiCreateWindow", { - extend: 'Ext.Window', - - // Layout stuff - layout: 'fit', - width: 500, - height: 250, - - // Title - title: i18n("Multi-Create Storage Locations"), - - /** - * Initializes the window by adding the buttons and the form - */ - initComponent: function () { - this.form = Ext.create("PartKeepr.StorageLocationMultiAddDialog"); - - this.items = [ this.form ]; - - // Creates the add button as instance, so we can disable it easily. - this.addButton = Ext.create("Ext.button.Button", { - text: i18n("Create Storage Locations"), - icon: 'resources/silkicons/add.png', - handler: this.onAddClick, - scope: this - }); - - this.dockedItems = [{ - xtype: 'toolbar', - defaults: {minWidth: 100}, - dock: 'bottom', - ui: 'footer', - pack: 'start', - items: [this.addButton, - { - text: i18n("Close"), - handler: this.onCloseClick, - scope: this, - icon: 'resources/silkicons/cancel.png' - }] - }]; - - this.callParent(); - }, - /** - * Called when the "Add" button was clicked. Sends a call to the server - * to create the storage locations - */ - onAddClick: function () { - this.addButton.disable(); - var call = new PartKeepr.ServiceCall("StorageLocation", "massCreate"); - call.setParameter("storageLocations", this.form.getStorageLocations()); - call.setHandler(Ext.bind(this.onAdded, this)); - call.doCall(); - - }, - /** - * Called when the service call was completed. Displays an error dialog - * if something went wrong. - * @param response The server response - */ - onAdded: function (response) { - this.addButton.enable(); - - - if (response.data.length > 0) { - Ext.Msg.alert(i18n("Errors occured"), implode("<br>", response.data)); - } else { - this.close(); - } - }, - /** - * Close the dialog - */ - onCloseClick: function () { - this.close(); - } - -});- \ No newline at end of file diff --git a/frontend/js/Components/SystemInformation/SystemInformationGrid.js b/frontend/js/Components/SystemInformation/SystemInformationGrid.js @@ -1,101 +0,0 @@ -/** - * This class represents a list of all system information records. - */ -Ext.define('PartKeepr.SystemInformationGrid', { - extend: 'Ext.grid.Panel', - - /* Define the columns */ - columns: [ - { - header: 'Name', - dataIndex: 'name', - width: 200 - },{ - header: 'Value', - dataIndex: 'value', - flex:1 - },{ - header: 'Category', - dataIndex: 'category', - hidden: true - } - ], - - /** - * Initializes the component - */ - initComponent: function () { - - /* Add grouping */ - var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{ - groupHeaderTpl: '{name}' - }); - - this.features = [groupingFeature]; - - /* Create the store using an in-memory proxy */ - this.store = Ext.create("Ext.data.Store", { - model: 'PartKeepr.SystemInformationRecord', - sorters: ['category','name'], - groupField: 'category', - proxy: { - type: 'memory' - } - }); - - - /* Add the refresh button */ - this.refreshButton = Ext.create("Ext.button.Button", { - handler: this.requestSystemInformation, - scope: this, - text: i18n("Refresh") - }); - - this.bottomToolbar = Ext.create("Ext.toolbar.Toolbar", { - dock: 'bottom', - ui: 'footer', - items: [ this.refreshButton ] - }); - - this.dockedItems = [ this.bottomToolbar ]; - - // Initialize the panel - this.callParent(); - - // Retrieve the system information - this.requestSystemInformation(); - - }, - /** - * Requests the system information from the server. - */ - requestSystemInformation: function () { - var call = new PartKeepr.ServiceCall("System", "getSystemInformation"); - call.setHandler(Ext.bind(this.processSystemInformationRecords, this)); - call.doCall(); - }, - /** - * Processes the response given by the getSystemInformation call. - * - * Removes all records from the store and re-creates the records. - * - * @param response The response record - */ - processSystemInformationRecords: function (response) { - this.store.removeAll(); - - // Workaround for removeAll Bug - see http://www.sencha.com/forum/showthread.php?136673-4.0.2-store.removeAll()-does-not-perform-view.all.clear() - this.view.all.clear(); - - for (var i=0;i<response.data.length;i++) { - var rec = new PartKeepr.SystemInformationRecord({ - category: response.data[i].category, - name: response.data[i].name, - value: response.data[i].value - }); - - this.store.insert(0, rec); - - } - } -});- \ No newline at end of file diff --git a/frontend/js/Components/TimeDisplay.js b/frontend/js/Components/TimeDisplay.js @@ -1,29 +0,0 @@ -Ext.define('PartKeepr.TimeDisplay', { - extend: 'Ext.Toolbar.TextItem', - el: null, - dt: null, - enable:Ext.emptyFn, - disable:Ext.emptyFn, - focus:Ext.emptyFn, - constructor: function () { - var s = document.createElement("span"); - s.className = "ytb-text"; - var dt = new Date(); - s.innerHTML = Ext.Date.format(dt, Ext.getDateFormat()); - - Ext.defer(this.onUpdate, 240, this); - this.el = s; - - this.callParent(arguments); - }, - onUpdate: function (obj) { - var dt = new Date(); - this.setText(Ext.Date.format(dt, Ext.getDateFormat())); - delete dt; - /* Sometimes the time display seems to be "stuck" (=skipping one second) - * because of micro-delays due to the "overhead" of calling this method. - */ - Ext.defer(this.onUpdate, 240, this); - } -}); - diff --git a/frontend/js/Components/TipOfTheDay/TipOfTheDayWindow.js b/frontend/js/Components/TipOfTheDay/TipOfTheDayWindow.js @@ -1,318 +0,0 @@ -/** - * This class represents the tip of the day window and its logic. - */ -Ext.define("PartKeepr.TipOfTheDayWindow", { - extend: 'Ext.window.Window', - - /* Defines the title template. */ - titleTemplate: i18n("Tip of the Day"), - - /* Cosmetic settings */ - width: 600, - height: 300, - - minWidth: 600, - minHeight: 300, - - layout: 'fit', - - /** - * Stores the currently displayed tip, or null if none is displayed - * @var Ext.data.Record - */ - currentTip: null, - - /** - * Holds an instance of the TipOfTheDay store. - */ - tipStore: null, - - /** - * Initializes the window. Adds the iframe used for displaying tips, as well - * as the user controls (prev/next buttons, config checkboxes). - */ - initComponent: function () { - // Initialize the window with the title template - this.title = this.titleTemplate; - - // Set the tip store - this.tipStore = PartKeepr.getApplication().getTipOfTheDayStore(); - - // Set the tip display iframe and add it to the items - this.tipDisplay = Ext.create("Ext.ux.SimpleIFrame", { - border: false - }); - - this.items = this.tipDisplay; - - // Initialize previous and next buttons - this.previousButton = Ext.create("Ext.button.Button", { - text: i18n("Previous Tip"), - handler: Ext.bind(this.displayPreviousTip, this), - cls: 'x-btn-text-icon', - icon: 'resources/icons/tip_previous.png', - disabled: true - }); - - this.nextButton = Ext.create("Ext.button.Button", { - text: i18n("Next Tip"), - cls: 'x-btn-text-icon', - icon: 'resources/icons/tip_next.png', - handler: Ext.bind(this.displayNextTip, this) - }); - - // Initializes the "show tips on login" checkbox as well as the "show read tips" checkbox - this.showTipsCheckbox = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Show Tips on login"), - handler: Ext.bind(this.showTipsHandler, this) - }); - - this.displayReadTipsCheckbox = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Show read tips"), - handler: Ext.bind(this.showReadTipsHandler, this) - }); - - // Initialize the "show tips" checkbox with the user preference - if (PartKeepr.getApplication().getUserPreference("partkeepr.tipoftheday.showtips") === false) { - this.showTipsCheckbox.setValue(false); - } else { - this.showTipsCheckbox.setValue(true); - } - - // Append the controls to the bottom toolbar - this.dockedItems = [{ - xtype: 'toolbar', - dock: 'bottom', - ui: 'footer', - defaults: {minWidth: 100}, - pack: 'start', - items: [ - this.previousButton, - this.nextButton, - '->', - this.showTipsCheckbox, - this.displayReadTipsCheckbox - ] - }]; - - // Auto-load the next unread tip on window display - this.on("show", this.displayNextTip, this); - - // Window destroy handler - this.on("destroy", this.onDestroy, this); - this.callParent(); - }, - /** - * If the "show read tips" checkbox was clicked, update the buttons - * to reflect the tip navigation. - */ - showReadTipsHandler: function () { - this.updateButtons(this.currentTip); - }, - /** - * Destroy handler. Removes the "read tip" timer. - */ - onDestroy: function () { - this.cancelReadTimer(); - }, - /** - * Cancels the read timer. - */ - cancelReadTimer: function () { - if (this.markAsReadTask) { - this.markAsReadTask.cancel(); - } - }, - /** - * Handler when the "show tips" checkbox was clicked. - */ - showTipsHandler: function (checkbox, checked) { - PartKeepr.getApplication().setUserPreference("partkeepr.tipoftheday.showtips", checked); - }, - /** - * Displays a specific tip of the day. - * @param record The record which contains the information regarding the tip - */ - displayTip: function (record) { - // Cancel the old read timer - this.cancelReadTimer(); - - // Update buttons to reflect position - this.updateButtons(record); - - // Set the title to the tip name - this.setTitle(this.titleTemplate+ ": " + record.get("name")); - - // Set iframe to the tip url - this.tipDisplay.setSrc(record.get("url")); - - // Fire up delayed task to mark the tip as read - this.markAsReadTask = new Ext.util.DelayedTask(this.markTipRead, this); - this.markAsReadTask.delay(5000); - - }, - /** - * Updates the navigation buttons. - * - * This method has two modes, depending on which state the "show read tips" checkbox is in. - * @param record The currently displayed tip - */ - updateButtons: function (record) { - if (this.displayReadTipsCheckbox.getValue() === true) { - if (this.tipStore.indexOf(record) > 0) { - this.previousButton.enable(); - } else { - this.previousButton.disable(); - } - - if (this.tipStore.indexOf(record) === this.tipStore.getTotalCount() - 1) { - this.nextButton.disable(); - } else { - this.nextButton.enable(); - } - } else { - if (this.tipStore.indexOf(record) > this.getFirstUnreadTip()) { - this.previousButton.enable(); - } else { - this.previousButton.disable(); - } - - - if (this.tipStore.indexOf(record) >= this.getLastUnreadTip()) { - this.nextButton.disable(); - } else { - this.nextButton.enable(); - } - } - - }, - /** - * Returns the index of the first unread tip, or null if there's no unread tip. - * @returns int The index of the first unread tip, or null - */ - getFirstUnreadTip: function () { - for (var i=0;i<this.tipStore.getTotalCount();i++) { - if (this.tipStore.getAt(i).get("read") === false) { - return i; - } - } - - return null; - }, - /** - * Returns the index of the last unread tip, or null if there's no unread tip. - * @returns int The index of the last unread tip, or null - */ - getLastUnreadTip: function () { - for (var i=this.tipStore.getTotalCount()-1;i>-1;i--) { - if (this.tipStore.getAt(i).get("read") === false) { - return i; - } - } - - return null; - }, - /** - * Marks the current tip as read. Commits the information to the server. - */ - markTipRead: function () { - this.currentTip.set("read", true); - this.currentTip.commit(); - - var call = new PartKeepr.ServiceCall("TipOfTheDay", "markTipAsRead"); - call.setLoadMessage(sprintf(i18n("Marking tip %s as read..."), this.currentTip.get("name"))); - call.setParameter("name", this.currentTip.get("name")); - call.doCall(); - }, - /** - * Displays the next tip - */ - displayNextTip: function () { - this.retrieveTip("ASC"); - }, - /** - * Displays the previous tip - */ - displayPreviousTip: function () { - this.retrieveTip("DESC"); - }, - /** - * Displays the next or previous tip. - * - * @param dir string Either "ASC" or "DESC", which denotes the direction to search for the next tip - */ - retrieveTip: function (dir) { - var startIdx = -1, record = null; - - if (this.currentTip) { - startIdx = this.tipStore.indexOf(this.currentTip); - } - - if (dir === "ASC") { - record = this.extractNextTip(startIdx); - } else { - record = this.extractPreviousTip(startIdx); - } - - if (record) { - this.currentTip = record; - this.displayTip(record); - } - }, - /** - * Returns the record with the next tip - * @param startIdx The index to start searching from - * @returns record The record with the next tip - */ - extractNextTip: function (startIdx) { - var record = null, foundRecord = null; - if (this.displayReadTipsCheckbox.getValue() === true) { - var tmpIdx = startIdx + 1; - if (tmpIdx > this.tipStore.getTotalCount() - 1) { - tmpIdx = this.tipStore.getTotalCount() - 1; - } - - foundRecord = this.tipStore.getAt(tmpIdx); - } else { - for (var i = startIdx+1; i < this.tipStore.getTotalCount();i++) { - record = this.tipStore.getAt(i); - if (record.get("read") === false) { - foundRecord = record; - break; - } - } - } - - return foundRecord; - }, - /** - * Returns the record with the previous tip - * @param startIdx The index to start searching from - * @returns record The record with the previous tip - */ - extractPreviousTip: function (startIdx) { - var record = null, foundRecord = null; - if (this.displayReadTipsCheckbox.getValue() === true) { - var tmpIdx = startIdx - 1; - if (tmpIdx < 0) { - tmpIdx = 0; - } - - foundRecord = this.tipStore.getAt(tmpIdx); - } else { - for (var i = startIdx - 1; i > -1;i--) { - record = this.tipStore.getAt(i); - - if (record.get("read") === false) { - foundRecord = record; - break; - } - } - } - - - return foundRecord; - } - - -});- \ No newline at end of file diff --git a/frontend/js/Components/Unit/UnitEditor.js b/frontend/js/Components/Unit/UnitEditor.js @@ -1,67 +0,0 @@ -Ext.define('PartKeepr.UnitEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.UnitEditor', - saveText: i18n("Save Unit"), - initComponent: function () { - - var sm = Ext.create('Ext.selection.CheckboxModel',{ - checkOnly: true - }); - - this.gridPanel = Ext.create("Ext.grid.Panel", { - store: PartKeepr.getApplication().getSiPrefixStore(), - selModel: sm, - columnLines: true, - columns: [ - { text: i18n("Prefix"), dataIndex: "prefix", width: 60 }, - { text: i18n("Symbol"), dataIndex: "symbol", width: 60 }, - { text: i18n("Power"), dataIndex: "power", flex: 1, renderer: function (val) { return "10<sup>"+val+"</sup>"; } } - ] - }); - - var container = Ext.create("Ext.form.FieldContainer", { - fieldLabel: i18n("Allowed SI-Prefixes"), - labelWidth: 150, - items: this.gridPanel - }); - - this.items = [{ - xtype: 'textfield', - name: 'name', - fieldLabel: i18n("Unit Name") - },{ - xtype: 'textfield', - name: 'symbol', - fieldLabel: i18n("Symbol") - }, - container]; - - this.callParent(); - - this.on("startEdit", this.onStartEdit, this); - }, - onStartEdit: function () { - var records = this.record.prefixes().getRange(); - - var toSelect = []; - var pfxStore = PartKeepr.getApplication().getSiPrefixStore(); - - for (var i=0;i<records.length;i++) { - toSelect.push(pfxStore.getAt(pfxStore.find("id", records[i].get("id")))); - } - - // @todo I don't like defer too much, can we fix that somehow? - Ext.defer(function () { this.gridPanel.getSelectionModel().select(toSelect); }, 100, this); - }, - onItemSave: function () { - var selection = this.gridPanel.getSelectionModel().getSelection(); - - this.record.prefixes().removeAll(true); - - for (var i=0;i<selection.length;i++) { - this.record.prefixes().add({id: selection[i].get("id") }); - } - - this.callParent(); - } -}); diff --git a/frontend/js/Components/Unit/UnitEditorComponent.js b/frontend/js/Components/Unit/UnitEditorComponent.js @@ -1,20 +0,0 @@ -Ext.define('PartKeepr.UnitEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.UnitEditorComponent', - navigationClass: 'PartKeepr.UnitGrid', - editorClass: 'PartKeepr.UnitEditor', - newItemText: i18n("New Unit"), - deleteMessage: i18n("Do you really wish to delete the unit'%s'?"), - deleteTitle: i18n("Delete Unit"), - model: 'PartKeepr.Unit', - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'name', - direction:'ASC' - }] - }); - - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Unit/UnitGrid.js b/frontend/js/Components/Unit/UnitGrid.js @@ -1,15 +0,0 @@ -Ext.define('PartKeepr.UnitGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.UnitGrid', - columns: [ - {header: i18n("Unit"), dataIndex: 'name', flex: 1}, - {header: i18n("Symbol"), dataIndex: 'symbol', width: 60} - ], - addButtonText: i18n("Add Unit"), - addButtonIcon: 'resources/icons/unit_add.png', - deleteButtonText: i18n("Delete Unit"), - deleteButtonIcon: 'resources/icons/unit_delete.png', - initComponent: function () { - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/User/TipOfTheDayPreferences.js b/frontend/js/Components/User/TipOfTheDayPreferences.js @@ -1,48 +0,0 @@ -Ext.define('PartKeepr.TipOfTheDayPreferencesPanel', { - extend: 'Ext.form.FormPanel', - title: i18n("Tip of the Day"), - bodyStyle: 'background:#DBDBDB;padding: 10px;', - initComponent: function () { - this.displayTipsOnLoginCheckbox = Ext.create("Ext.form.field.Checkbox", { - boxLabel: i18n("Display tips on login"), - handler: Ext.bind(this.showTipsHandler, this) - }); - - if (PartKeepr.getApplication().getUserPreference("partkeepr.tipoftheday.showtips") === false) { - this.displayTipsOnLoginCheckbox.setValue(false); - } else { - this.displayTipsOnLoginCheckbox.setValue(true); - } - - - this.resetTipsButton = Ext.create("Ext.button.Button", { - text: i18n("Mark all tips unread"), - handler: this.onMarkAllTipsUnreadClick, - scope: this - }); - - this.items = [ this.displayTipsOnLoginCheckbox, - this.resetTipsButton ]; - - this.callParent(); - }, - /** - * Handler when the "show tips" checkbox was clicked. - */ - showTipsHandler: function (checkbox, checked) { - PartKeepr.getApplication().setUserPreference("partkeepr.tipoftheday.showtips", checked); - }, - /** - * Marks all tips as unread - */ - onMarkAllTipsUnreadClick: function () { - var call = new PartKeepr.ServiceCall("TipOfTheDay", "markAllTipsAsUnread"); - call.setLoadMessage(i18n("Marking all tips as unerad...")); - call.setHandler(function () { - var msg = i18n("All tips have been marked as unread"); - Ext.Msg.alert(msg, msg); - }); - call.doCall(); - } -}); - - \ No newline at end of file diff --git a/frontend/js/Components/User/UserEditor.js b/frontend/js/Components/User/UserEditor.js @@ -1,42 +0,0 @@ -Ext.define('PartKeepr.UserEditor', { - extend: 'PartKeepr.Editor', - alias: 'widget.UserEditor', - - saveText: i18n("Save User"), - model: 'PartKeepr.User', - - initComponent: function () { - this.gridPanel = Ext.create("PartKeepr.UserPreferenceGrid"); - - var container = Ext.create("Ext.form.FieldContainer", { - fieldLabel: i18n("User Preferences"), - labelWidth: 150, - layout: 'fit', - height: 200, - items: this.gridPanel - }); - - this.items = [{ - xtype: 'textfield', - name: 'username', - fieldLabel: i18n("User") - },{ - xtype: 'textfield', - inputType: "password", - name: 'password', - fieldLabel: i18n("Password") - }, container ]; - - this.on("startEdit", this.onStartEdit, this); - this.callParent(); - }, - onStartEdit: function () { - this.gridPanel.store.getProxy().extraParams.user_id = this.record.get("id"); - this.gridPanel.store.load(); - }, - onItemSave: function () { - this.gridPanel.syncPreferences(); - - this.callParent(); - } -}); diff --git a/frontend/js/Components/User/UserEditorComponent.js b/frontend/js/Components/User/UserEditorComponent.js @@ -1,22 +0,0 @@ -Ext.define('PartKeepr.UserEditorComponent', { - extend: 'PartKeepr.EditorComponent', - alias: 'widget.UserEditorComponent', - navigationClass: 'PartKeepr.UserGrid', - editorClass: 'PartKeepr.UserEditor', - newItemText: i18n("New User"), - deleteMessage: i18n("Do you really wish to delete the user '%s'?"), - deleteTitle: i18n("Delete User"), - - model: 'PartKeepr.User', - - initComponent: function () { - this.createStore({ - sorters: [{ - property: 'username', - direction:'ASC' - }] - }); - - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/User/UserGrid.js b/frontend/js/Components/User/UserGrid.js @@ -1,11 +0,0 @@ -Ext.define('PartKeepr.UserGrid', { - extend: 'PartKeepr.EditorGrid', - alias: 'widget.UserGrid', - columns: [ - {header: i18n("User"), dataIndex: 'username', flex: 1} - ], - addButtonText: i18n("Add User"), - addButtonIcon: 'resources/silkicons/user_add.png', - deleteButtonText: i18n("Delete User"), - deleteButtonIcon: 'resources/silkicons/user_delete.png' -});- \ No newline at end of file diff --git a/frontend/js/Components/User/UserPasswordChangePanel.js b/frontend/js/Components/User/UserPasswordChangePanel.js @@ -1,75 +0,0 @@ -Ext.define('PartKeepr.UserPasswordChangePanel', { - extend: 'Ext.form.FormPanel', - title: i18n("Change Password"), - bodyStyle: 'background:#DBDBDB;padding: 10px;', - initComponent: function () { - - this.oldPassword = Ext.create("Ext.form.field.Text", { - inputType: "password", - name: 'password', - labelWidth: 150, - style: 'border-bottom: 1px solid grey; padding-bottom: 10px;', - width: 300, - fieldLabel: i18n("Current Password") - }); - - this.newPassword = Ext.create("Ext.form.field.Text", { - style: 'margin-top: 10px', - inputType: "password", - name: 'password', - labelWidth: 150, - width: 300, - fieldLabel: i18n("New Password") - }); - - this.newPasswordConfirm = Ext.create("Ext.form.field.Text", { - inputType: "password", - name: 'password', - labelWidth: 150, - width: 300, - validator: Ext.bind(this.validatePassword, this), - fieldLabel: i18n("New Password (Confirm)") - }); - - this.items = [ - this.oldPassword, - this.newPassword, - this.newPasswordConfirm, - { - xtype: 'fieldcontainer', - hideEmptyLabel: false, - width: 300, - labelWidth: 150, - items: { - xtype: 'button', - handler: this.onChangePassword, - scope: this, - width: 145, - icon: 'resources/silkicons/accept.png', - text: i18n("Change Password") - } - }]; - - this.callParent(); - }, - onChangePassword: function () { - if (this.getForm().isValid()) { - - var call = new PartKeepr.ServiceCall("UserPreference", "changePassword"); - call.setParameter("oldpassword", md5(this.oldPassword.getValue())); - call.setParameter("newpassword", md5(this.newPassword.getValue())); - call.setHandler(Ext.bind(this.onAfterPasswordChange, this)); - call.doCall(); - } - }, - onAfterPasswordChange: function (data) { - Ext.Msg.alert(data.data, data.data); - }, - validatePassword: function () { - if (this.newPassword.getValue() != this.newPasswordConfirm.getValue()) { - return i18n("Passwords don't match"); - } - - return true; - } -});- \ No newline at end of file diff --git a/frontend/js/Components/User/UserPreferences.js b/frontend/js/Components/User/UserPreferences.js @@ -1,14 +0,0 @@ -Ext.define('PartKeepr.UserPreferencePanel', { - extend: 'Ext.tab.Panel', - title: i18n("User Preferences"), - tabPosition: 'bottom', - //bodyStyle: 'background:#DBDBDB;padding: 10px;', - initComponent: function () { - - this.passwordChangePanel = Ext.create("PartKeepr.UserPasswordChangePanel"); - this.tipsPanel = Ext.create("PartKeepr.TipOfTheDayPreferencesPanel"); - - this.items = [ this.tipsPanel, this.passwordChangePanel ]; - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/AttachmentGrid.js b/frontend/js/Components/Widgets/AttachmentGrid.js @@ -1,178 +0,0 @@ -Ext.define('PartKeepr.AttachmentGrid', { - extend: 'Ext.grid.Panel', - alias: 'widget.AttachmentGrid', - border: false, - model: null, - initComponent: function () { - if (this.model === null) { - alert("Error: Model can't be null!"); - } - - this.store = Ext.create("Ext.data.Store", { - model: this.model, - proxy: { - type: 'memory', - reader: { - type: 'json' - } - } - - }); - - this.editing = Ext.create('Ext.grid.plugin.CellEditing', { - clicksToEdit: 1 - }); - - this.plugins = [ this.editing ]; - - this.deleteButton = Ext.create("Ext.button.Button", { - text: i18n('Delete'), - disabled: true, - itemId: 'delete', - scope: this, - icon: 'resources/silkicons/delete.png', - handler: this.onDeleteClick - }); - - this.viewButton = Ext.create("Ext.button.Button", { - text: i18n("View"), - handler: this.onViewClick, - scope: this, - icon: 'resources/silkicons/zoom.png', - disabled: true - }); - - this.webcamButton = Ext.create("Ext.button.Button", { - text: i18n("Take image"), - handler: this.onWebcamClick, - scope: this, - icon: 'resources/fugue-icons/icons/webcam.png' - }); - - this.dockedItems = [{ - xtype: 'toolbar', - items: [{ - text: i18n('Add'), - scope: this, - icon: 'resources/silkicons/attach.png', - handler: this.onAddClick - }, - this.webcamButton, - this.viewButton, - this.deleteButton - ] - }]; - - this.columns = [ - { - dataIndex: 'extension', - width: 30, - renderer: function (val) { - return '<img src="resources/mimetypes/'+val+'.png"/>'; - } - }, - { - header: i18n("Filename"), - dataIndex: 'originalFilename', - width: 200 - }, - { - header: i18n("Size"), - dataIndex: 'size', - width: 80, - renderer: PartKeepr.bytesToSize - }, - { - header: i18n("Description"), - dataIndex: 'description', - flex: 0.4, - editor: { - xtype:'textfield', - allowBlank:true - } - } - ]; - - this.callParent(); - - this.getSelectionModel().on('selectionchange', this.onSelectChange, this); - this.on("itemdblclick", this.onDoubleClick, this); - }, - onWebcamClick: function () { - var wp = Ext.create("PartKeepr.WebcamPanel"); - wp.on("uploadComplete", this.onFileUploaded, this); - - var j = Ext.create("Ext.window.Window", { - title: i18n("Take Webcam Photo"), - items: [ - wp - ] - }); - - wp.on("uploadComplete", function () { j.close(); }); - - j.show(); - }, - onDoubleClick: function (view, record) { - if (record) { - this.viewAttachment(record); - } - }, - onAddClick: function () { - var j = Ext.create("PartKeepr.FileUploadDialog"); - j.on("fileUploaded", this.onFileUploaded, this); - j.show(); - }, - onFileUploaded: function (response) { - this.editing.cancelEdit(); - - this.store.insert(this.store.getCount(), Ext.create(this.model, { - id: "TMP:"+response.id, - extension: response.extension, - size: response.size, - originalFilename: response.originalFilename - })); - - }, - onDeleteClick: function () { - var selection = this.getView().getSelectionModel().getSelection()[0]; - if (selection) { - this.store.remove(selection); - } - }, - onSelectChange: function(selModel, selections){ - this.deleteButton.setDisabled(selections.length === 0); - this.viewButton.setDisabled(selections.length === 0); - }, - onViewClick: function () { - var selection = this.getView().getSelectionModel().getSelection()[0]; - if (selection) { - this.viewAttachment(selection); - } - }, - viewAttachment: function (record) { - var mySrc = "file.php?type="+this.model+"&"; - - if (record.get("id") === 0) { - mySrc += "id=0&tmpId=" + record.get("tmp_id"); - } else { - mySrc += "id=" + record.get("id"); - } - - new Ext.Window({ - title : i18n("Display File"), - width : 640, - height: 600, - maximizable: true, - constrain: true, - layout : 'fit', - items : [{ - xtype : "component", - autoEl : { - tag : "iframe", - src : mySrc - } - }] - }).show(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/CategoryComboBox.js b/frontend/js/Components/Widgets/CategoryComboBox.js @@ -1,131 +0,0 @@ -Ext.define("PartKeepr.CategoryComboBox",{ - extend:"Ext.form.field.Picker", - alias: 'widget.CategoryComboBox', - requires:["Ext.tree.Panel"], - selectedValue: null, - initComponent: function(){ - var self = this; - - Ext.apply(self,{ - pickerAlign:"tl-bl?", - editable: false - - }); - - self.callParent(); - - this.createPicker(); - - }, - createPicker: function(){ - var self = this; - - self.picker = new PartKeepr.CategoryTree({ - height:290, - categoryService: 'PartCategory', - categoryModel: 'PartKeepr.PartCategory', - floating: true, - focusOnToFront: false, - shadow: false, - ownerCt: this.ownerCt - }); - - self.picker.on({ - itemclick: Ext.bind(function(sm, record){ - this.setValue(record.get("name"), true); - this.setSelectedValue(record.get("id")); - this.collapse(); - },this), - show: { - fn: Ext.bind(function(cmp) { - var record = this.picker.getSelectionModel().getLastSelected(); - - this.picker.getView().focusRow(record); - }, this), - delay: 50 - } - }); - - self.picker.getView().on("render", Ext.bind(function () { - var record = this.picker.getSelectionModel().getLastSelected(); - this.picker.getView().ensureVisible(record); - - this.picker.getView().focusRow(record); - },this)); - - return self.picker; - }, - setSelectedValue: function (id) { - this.selectedValue = id; - }, - getValue: function () { - return this.selectedValue; - }, - setValue: function (val, parent) { - if (parent) { - this.callParent([val]); - } - - if (!this.picker) { return; } - - if (!this.picker.loaded) { - this.picker.on("categoriesLoaded", function () { this._setValue(val); }, this); - } else { - this._setValue(val); - } - }, - _setValue: function (val) { - var r = this.findById(val); - - /* We have found a record. Apply it */ - if (r !== null) { - this.setSelectedValue(r.get("id")); - this.setValue(r.get("name"), true); - - if (this.picker.getView().rendered) { - this._selectRecords(r); - } else { - this.picker.getView().on("render", function () { this._selectRecords(r); }, this); - } - - } - }, - _selectRecords: function (r) { - this.picker.getView().select(r); - this.picker.getView().ensureVisible(r); - this.picker.getView().scrollIntoView(r); - }, - findById: function (id) { - return this.picker.getRootNode().findChild("id", id, true); - }, - alignPicker: function() { - // override the original method because otherwise the height of the treepanel would be always 0 - var me = this, - picker, isAbove, - aboveSfx = '-above'; - - if (this.isExpanded) { - picker = me.getPicker(); - if (me.matchFieldWidth) { - // Auto the height (it will be constrained by min and max width) unless there are no records to display. - picker.setWidth( me.bodyEl.getWidth()); - } - if (picker.isFloating()) { - picker.alignTo(me.inputEl, me.pickerAlign, me.pickerOffset); - - // add the {openCls}-above class if the picker was aligned above - // the field due to hitting the bottom of the viewport - isAbove = picker.el.getY() < me.inputEl.getY(); - me.bodyEl[isAbove ? 'addCls' : 'removeCls'](me.openCls + aboveSfx); - picker.el[isAbove ? 'addCls' : 'removeCls'](picker.baseCls + aboveSfx); - } - } - }, - getErrors: function(value) { - if (this.getValue() === null) { - return [ i18n("You need to select a category")]; - } - - return []; - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/DistributorComboBox.js b/frontend/js/Components/Widgets/DistributorComboBox.js @@ -1,27 +0,0 @@ -Ext.define("PartKeepr.DistributorComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.DistributorComboBox', - displayField: 'name', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - forceSelection: true, - editable: true, - initComponent: function () { - this.store = PartKeepr.getApplication().getDistributorStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/FootprintComboBox.js b/frontend/js/Components/Widgets/FootprintComboBox.js @@ -1,27 +0,0 @@ -Ext.define("PartKeepr.FootprintComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.FootprintComboBox', - displayField: 'name', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - forceSelection: true, - editable: true, - initComponent: function () { - this.store = PartKeepr.getApplication().getFootprintStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/ManufacturerComboBox.js b/frontend/js/Components/Widgets/ManufacturerComboBox.js @@ -1,27 +0,0 @@ -Ext.define("PartKeepr.ManufacturerComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.ManufacturerComboBox', - displayField: 'name', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - forceSelection: true, - editable: true, - initComponent: function () { - this.store = PartKeepr.getApplication().getManufacturerStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/PartParameterComboBox.js b/frontend/js/Components/Widgets/PartParameterComboBox.js @@ -1,42 +0,0 @@ -Ext.define("PartKeepr.PartParameterComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.PartParameterComboBox', - displayField: 'name', - valueField: 'name', - autoSelect: false, - allowBlank: false, - queryMode: 'local', - triggerAction: 'all', - forceSelection: false, - editable: true, - initComponent: function () { - //this.store = PartKeepr.getApplication().getPartUnitStore(); - - this.store = Ext.create("Ext.data.Store", { - fields: [{ name: 'name' }], - proxy: { - type: 'ajax', - url: PartKeepr.getBasePath() + "/Part/getPartParameterNames", - reader: { - type: 'json', - root: 'response.data' - } - } - }); - - this.store.load(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/PartUnitComboBox.js b/frontend/js/Components/Widgets/PartUnitComboBox.js @@ -1,27 +0,0 @@ -Ext.define("PartKeepr.PartUnitComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.PartUnitComboBox', - displayField: 'name', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - forceSelection: true, - editable: true, - initComponent: function () { - this.store = PartKeepr.getApplication().getPartUnitStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/RemoteImageField.js b/frontend/js/Components/Widgets/RemoteImageField.js @@ -1,113 +0,0 @@ -/** - * @class PartKeepr.RemoteImageField - * <p>The RemoteImageField is a form field which can be used to upload one image. It automatically - * displays the remote image by id, assigns a temporary ID if it's a new image so the model can be - * syncronized at once. - * - */ -Ext.define('PartKeepr.RemoteImageField', { - extend:'Ext.form.field.Base', - alias: 'widget.remoteimagefield', - - type: 'remoteimagefield', - - // Default width and height - imageWidth: 32, - imageHeight: 32, - - // The field template for rendering this field - fieldSubTpl: [ - '<img id="{id}" style="{size}" class="remoteimagefield"/>', - { - compiled: true, - disableFormats: true - }], - - /** - * Initializes the field - */ - initComponent : function(){ - this.minHeight = this.imageHeight; - this.minWidth = this.imageWidth; - - this.imageId = Ext.id("remoteimagefield"); - this.callParent(); - }, - /** - * Return the template data for this field - */ - getSubTplData: function() { - return { - size: 'height:'+this.imageHeight+"px;width:"+this.imageWidth+"px;", - imageid: this.imageId - }; - }, - /** - * Renders this field. - */ - onRender: function () { - var me = this, - renderSelectors = me.renderSelectors; - - Ext.applyIf(renderSelectors, me.getLabelableSelectors()); - - Ext.applyIf(renderSelectors, { - imgEl: 'img.remoteimagefield' - }); - - me.callParent(arguments); - }, - /** - * Applies the image URL to the element after rendering - */ - afterRender: function () { - this.imgEl.dom.src = this.getImageURL(); - - this.imgEl.on("click", this.onClick, this); - }, - onClick: function () { - var j = Ext.create("PartKeepr.FileUploadDialog", { imageUpload: true }); - j.on("fileUploaded", this.onFileUploaded, this); - j.show(); - }, - onFileUploaded: function (data) { - this.setValue("TMP:"+data.id); - }, - /** - * Returns the URL for the image field. Applies the temporary image if TMP: is - * found within the value. - */ - getImageURL: function () { - var idparam; - - if (strpos(this.value, "TMP:") !== false) { - idparam = "id=0&tmpId="+str_replace("TMP:","",this.value); - } else { - idparam = "id="+this.value; - } - - return PartKeepr.getImagePath() + "?"+idparam+"&type="+this.imageType+"&w="+this.imageWidth+"&h="+this.imageHeight+"&m=fitpadding&_dc="+Ext.Date.now(); - - }, - /** - * Sets a value for the field. If the value is numeric, we call the image service - * with the specified id and the specified type. If the value is a string and prefixed - * with TMP:, we use the type "TempImage" and pass the id which has to be specified after TMP:. - * - * Example - * TMP:12 would retrieve the temporary image with the ID 12 - * @param {Mixed} value The value to set - * @return {Ext.form.field.Field} this - */ - setValue: function(value) { - var me = this; - - this.setRawValue(value); - this.value = value; - if (this.rendered) { - this.imgEl.dom.src = this.getImageURL(); - } - return this; - } -}); - diff --git a/frontend/js/Components/Widgets/RemoteImageFieldLayout.js b/frontend/js/Components/Widgets/RemoteImageFieldLayout.js @@ -1,33 +0,0 @@ -// Not sure if this one is really needed. - -Ext.define('PartKeepr.RemoteImageFieldLayout', { - - /* Begin Definitions */ - - alias: ['layout.remoteimagefield'], - - extend: 'Ext.layout.component.field.Field', - - /* End Definitions */ - - type: 'remoteimagefield', - - sizeBodyContents: function(width, height) { - var me = this, - owner = me.owner, - inputEl = owner.inputEl, - triggerWrap = owner.triggerWrap, - triggerWidth = owner.getTriggerWidth(); - - // If we or our ancestor is hidden, we can get a triggerWidth calculation - // of 0. We don't want to resize in this case. - if (owner.hideTrigger || owner.readOnly || triggerWidth > 0) { - // Decrease the field's width by the width of the triggers. Both the field and the triggerWrap - // are floated left in CSS so they'll stack up side by side. - me.setElementSize(inputEl, Ext.isNumber(width) ? width - triggerWidth : width); - - // Explicitly set the triggerWrap's width, to prevent wrapping - triggerWrap.setWidth(triggerWidth); - } - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/ResistorCalculator.js b/frontend/js/Components/Widgets/ResistorCalculator.js @@ -1,29 +0,0 @@ -Ext.define("PartKeepr.ResistorCalculator",{ - extend:"Ext.window.Window", - alias: 'widget.ResistorCalculator', - - width: 300, - height: 300, - layout: 'fit', - initComponent: function () { - - //this.resistorValueField = Ext.create("Ext.form.field.Number"); - this.resistorDisplay = Ext.create("PartKeepr.ResistorDisplay", { - viewBox: false - }); - - /*this.resistorDisplay = Ext.create('Ext.draw.Component', { - viewBox: false, - items: [{ - type: 'circle', - fill: '#79BB3F', - radius: 100, - x: 100, - y: 100 - }] - });*/ - - this.items = [ this.resistorDisplay ]; - this.callParent(); - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/ResistorDisplay.js b/frontend/js/Components/Widgets/ResistorDisplay.js @@ -1,24 +0,0 @@ -Ext.define("PartKeepr.ResistorDisplay",{ - extend:"Ext.draw.Component", - alias: 'widget.ResistorDisplay', - - viewBox: false, - initComponent: function () { - - this.circle = Ext.create("Ext.draw.Sprite", { - type: 'circle', - fill: '#79BB3F', - radius: 100, - x: 100, - y: 100 - }); - - this.items = [ this.circle ]; - - this.callParent(); - - this.circle = this.surface; - - - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/SiUnitField.js b/frontend/js/Components/Widgets/SiUnitField.js @@ -1,390 +0,0 @@ -/** - * This class represents a field which can handle a number (value) bound to a specific SI prefix. - * - * Internally, we use an object as value. Example: - * - * { - * value: 10 // The base value, in our case 10 - * symbol: "n" // The symbol for display - * power: -9 // The power - * siprefix_id: 5 // The ID of the siprefix record - * } - * - */ -Ext.define("PartKeepr.SiUnitField",{ - extend:"Ext.form.field.Picker", - alias: 'widget.SiUnitField', - - siPrefix: null, - - /** - * @cfg {RegExp} stripCharsRe @hide - */ - /** - * @cfg {RegExp} maskRe @hide - */ - - /** - * @cfg {Boolean} allowDecimals False to disallow decimal values (defaults to true) - */ - allowDecimals : true, - - /** - * @cfg {String} decimalSeparator Character(s) to allow as the decimal separator (defaults to '.') - */ - decimalSeparator : '.', - - /** - * @cfg {Number} decimalPrecision The maximum precision to display after the decimal separator (defaults to 2) - */ - decimalPrecision : 2, - - /** - * @cfg {Number} minValue The minimum allowed value (defaults to Number.NEGATIVE_INFINITY). Will be used by - * the field's validation logic. - */ - minValue: Number.NEGATIVE_INFINITY, - - /** - * @cfg {Number} maxValue The maximum allowed value (defaults to Number.MAX_VALUE). Will be used by - * the field's validation logic. - */ - maxValue: Number.MAX_VALUE, - - /** - * @cfg {String} minText Error text to display if the minimum value validation fails (defaults to 'The minimum - * value for this field is {minValue}') - */ - minText : 'The minimum value for this field is {0}', - - /** - * @cfg {String} maxText Error text to display if the maximum value validation fails (defaults to 'The maximum - * value for this field is {maxValue}') - */ - maxText : 'The maximum value for this field is {0}', - - /** - * @cfg {String} nanText Error text to display if the value is not a valid number. For example, this can happen - * if a valid character like '.' or '-' is left in the field with no number (defaults to '{value} is not a valid number') - */ - nanText : '{0} is not a valid number', - - /** - * @cfg {String} negativeText Error text to display if the value is negative and {@link #minValue} is set to - * <tt>0</tt>. This is used instead of the {@link #minText} in that circumstance only. - */ - negativeText : 'The value cannot be negative', - - /** - * @cfg {String} baseChars The base set of characters to evaluate as valid numbers (defaults to '0123456789'). - */ - baseChars : '0123456789', - - /** - * @cfg {Boolean} autoStripChars True to automatically strip not allowed characters from the field. Defaults to <tt>false</tt> - */ - autoStripChars: false, - - initComponent: function() { - var me = this, - allowed; - - me.callParent(); - - me.setMinValue(me.minValue); - me.setMaxValue(me.maxValue); - - // Build regexes for masking and stripping based on the configured options - if (me.disableKeyFilter !== true) { - allowed = me.baseChars + ''; - - var store = PartKeepr.getApplication().getSiPrefixStore(); - - for (var i=0;i<store.count();i++) { - allowed += store.getAt(i).get("symbol"); - } - - /** - * Fix because the µ-symbol on your keyboard is not greek "Mu" as defined by the Si standard. We wish that - * the user still can enter "µ", which automatically gets converted to "Mu". - */ - allowed += "µ"; - - if (me.allowDecimals) { - allowed += me.decimalSeparator; - } - if (me.minValue < 0) { - allowed += '-'; - } - allowed = Ext.String.escapeRegex(allowed); - me.maskRe = new RegExp('[' + allowed + ']'); - if (me.autoStripChars) { - me.stripCharsRe = new RegExp('[^' + allowed + ']', 'gi'); - } - } - }, - onTriggerClick: function () { - this.expand(); - - var node = this.picker.getNode(this.siPrefix); - - if (node) { - this.picker.highlightItem(node); - this.picker.listEl.scrollChildIntoView(node, false); - } - }, - getStore: function () { - if (this.store) { - return this.store; - } - - return PartKeepr.getApplication().getSiPrefixStore(); - }, - setStore: function (store) { - if (this.picker) { - this.picker.bindStore(store); - } else { - this.store = store; - } - }, - createPicker: function() { - var siprefixtpl = new Ext.XTemplate( - '<tpl for=".">', - '<div class="thumb-wrap">', - '{symbol} {prefix}', - '</div>', - '</tpl>'); - - var tmp = Ext.create('PartKeepr.SiUnitList', { - store: this.getStore(), - singleSelect: true, - ownerCt: this.ownerCt, - renderTo: document.body, - //width: 200, - //height:200, - floating: true, - maxHeight: 300, - shadow: 'sides', - focusOnToFront: false, - hidden: true, - focusOnShow: true, - displayField: 'symbol', - isteners: { - scope: this, - itemclick: this.onSelect - } - }); - - this.mon(tmp, { - itemclick: this.onSelect, - scope: this - }); - return tmp; - }, - onSelect: function (t, rec) { - var val = this.getValue(); - - val.symbol = rec.get("symbol"); - val.power = rec.get("power"); - val.siprefix_id = rec.get("id"); - - //this.siUnit = rec; - this.setValue(val); - this.collapse(); - }, - /** - * Runs all of Number's validations and returns an array of any errors. Note that this first - * runs Text's validations, so the returned array is an amalgamation of all field errors. - * The additional validations run test that the value is a number, and that it is within the - * configured min and max values. - * @param {Mixed} value The value to get errors for (defaults to the current field value) - * @return {Array} All validation errors for this field - */ - getErrors: function(value) { - var me = this, - errors = me.callParent(arguments), - format = Ext.String.format, - num, retVal; - - retVal = Ext.isDefined(value) ? value : this.processRawValue(this.getRawValue()); - - value = retVal.value; - - if (value.length < 1) { // if it's blank and textfield didn't flag it then it's valid - return errors; - } - - value = String(value).replace(me.decimalSeparator, '.'); - - if(isNaN(value)){ - errors.push(format(me.nanText, value)); - } - - num = me.parseValue(value); - - if (me.minValue === 0 && num < 0) { - errors.push(this.negativeText); - } - else if (num < me.minValue) { - errors.push(format(me.minText, me.minValue)); - } - - if (num > me.maxValue) { - errors.push(format(me.maxText, me.maxValue)); - } - - - return errors; - }, - rawToValue: function(rawValue) { - var processValue; - - if (Ext.isObject(rawValue)) { - processValue = rawValue.value; - } else { - processValue = rawValue; - } - - return this.fixPrecision(this.parseValue(processValue)) || processValue || null; - }, - - valueToRaw: function(value) { - var me = this, - decimalSeparator = me.decimalSeparator; - value = me.parseValue(value); - value = me.fixPrecision(value); - value = Ext.isNumber(value) ? value : parseFloat(String(value).replace(decimalSeparator, '.')); - value = isNaN(value) ? '' : String(value).replace('.', decimalSeparator); - - if (Ext.isObject(this.siPrefix) && this.siPrefix.get("symbol") !== "") { - return value + " "+this.siPrefix.get("symbol"); - } else { - return value; - } - - }, - - onChange: function() { - var me = this, - value = me.getValue(), - valueIsNull = value === null; - - me.callParent(arguments); - }, - getValue: function () { - var v = this.callParent(arguments); - - if (this.siPrefix) { - return { - value: v, - symbol: this.siPrefix.get("symbol"), - power: this.siPrefix.get("power"), - siprefix_id: this.siPrefix.get("id") - }; - } else { - return { - value: v, - symbol: "", - power: 1, - siprefix_id: null - }; - } - }, - /** - * Replaces any existing {@link #minValue} with the new value. - * @param {Number} value The minimum value - */ - setMinValue : function(value) { - this.minValue = Ext.Number.from(value, Number.NEGATIVE_INFINITY); - }, - - /** - * Replaces any existing {@link #maxValue} with the new value. - * @param {Number} value The maximum value - */ - setMaxValue: function(value) { - this.maxValue = Ext.Number.from(value, Number.MAX_VALUE); - }, - - // private - parseValue : function(value) { - value = parseFloat(String(value).replace(this.decimalSeparator, '.')); - return isNaN(value) ? null : value; - }, - - /** - * @private - * - */ - fixPrecision : function(value) { - var me = this, - nan = isNaN(value), - precision = me.decimalPrecision; - - if (nan || !value) { - return nan ? '' : value; - } else if (!me.allowDecimals || precision <= 0) { - precision = 0; - } - - return parseFloat(Ext.Number.toFixed(parseFloat(value), precision)); - }, - - beforeBlur : function() { - var me = this, - v = me.parseValue(me.getRawValue()); - - if (!Ext.isEmpty(v)) { - me.setValue(v); - } - }, - findSiPrefix: function (value) { - var store = PartKeepr.getApplication().getSiPrefixStore(); - var symbol; - - for (var i=0;i<store.count();i++) { - - symbol = store.getAt(i).get("symbol"); - - if (symbol !== "") { - if (strpos(value, symbol) !== false) { - return store.getAt(i); - } - } else { - emptyPrefix = store.getAt(i); - } - - } - - if (emptyPrefix) { - return emptyPrefix; - } else { - return null; - } - }, - setValue: function (v) { - if (Ext.isObject(v)) { - this.siPrefix = PartKeepr.getApplication().getSiPrefixStore().getById(v.siprefix_id); - - return this.callParent([v.value]); - } else { - return v; - } - }, - processRawValue: function (value) { - var prefix; - - value = PartKeepr.getApplication().convertMicroToMu(value); - - var siPrefix = this.findSiPrefix(value); - - this.siPrefix = siPrefix; - - if (siPrefix !== null) { - value = str_replace(siPrefix.get("symbol"), "", value); - return { value: value, symbol: siPrefix.get("symbol"), power: siPrefix.get("power"), siprefix_id: siPrefix.get("id") }; - } else { - return { value: value, symbol: "", power: 0, siprefix_id: null }; - } - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/SiUnitList.js b/frontend/js/Components/Widgets/SiUnitList.js @@ -1,7 +0,0 @@ -Ext.define('PartKeepr.SiUnitList', { - extend: 'Ext.view.BoundList', - alias: 'widget.siunitlist', - getInnerTpl: function(displayField) { - return '<span style="display: inline-block; width: 15px;">{' + displayField + '}</span><span style="display: inline-block; width: 40px;">{prefix}</span>(10<sup>{power}</span>)'; - } -});- \ No newline at end of file diff --git a/frontend/js/Components/Widgets/StorageLocationComboBox.js b/frontend/js/Components/Widgets/StorageLocationComboBox.js @@ -1,26 +0,0 @@ -Ext.define("PartKeepr.StorageLocationComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.StorageLocationComboBox', - displayField: 'name', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - - initComponent: function () { - this.store = PartKeepr.getApplication().getStorageLocationStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/UnitComboBox.js b/frontend/js/Components/Widgets/UnitComboBox.js @@ -1,27 +0,0 @@ -Ext.define("PartKeepr.UnitComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.UnitComboBox', - displayField: 'name', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - forceSelection: true, - editable: true, - initComponent: function () { - this.store = PartKeepr.getApplication().getUnitStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/UserComboBox.js b/frontend/js/Components/Widgets/UserComboBox.js @@ -1,27 +0,0 @@ -Ext.define("PartKeepr.UserComboBox",{ - extend:"Ext.form.field.ComboBox", - alias: 'widget.UserComboBox', - displayField: 'username', - valueField: 'id', - autoSelect: true, - queryMode: 'local', - triggerAction: 'all', - forceSelection: true, - editable: true, - initComponent: function () { - this.store = PartKeepr.getApplication().getUserStore(); - - /* Workaround to remember the value when loading */ - this.store.on("beforeload", function () { - this._oldValue = this.getValue(); - }, this); - - /* Set the old value when load is complete */ - this.store.on("load", function () { - this.setValue(this._oldValue); - }, this); - - this.callParent(); - } -}); - diff --git a/frontend/js/Components/Widgets/UserPreferenceGrid.js b/frontend/js/Components/Widgets/UserPreferenceGrid.js @@ -1,71 +0,0 @@ -Ext.define('PartKeepr.UserPreferenceGrid', { - extend: 'Ext.grid.Panel', - - columnLines: true, - - columns: [{ - header: i18n("Key"), - dataIndex: 'key', - flex: 0.3, - minWidth: 200, - renderer: Ext.util.Format.htmlEncode - },{ - header: i18n("Value"), - dataIndex: 'value', - flex: 0.7, - minWidth: 200, - renderer: Ext.util.Format.htmlEncode - }], - userId: null, - - initComponent: function () { - this.deleteButton = Ext.create("Ext.button.Button", { - text: i18n('Delete'), - disabled: true, - itemId: 'delete', - scope: this, - icon: 'resources/silkicons/delete.png', - handler: this.onDeleteClick - }); - - this.dockedItems = [{ - xtype: 'toolbar', - items: [ - this.deleteButton - ] - }]; - this.store = Ext.create("Ext.data.Store", { - model: 'PartKeepr.UserPreference', - pageSize: -1 - }); - - this.callParent(); - - this.getSelectionModel().on('selectionchange', this.onSelectChange, this); - }, - onDeleteClick: function () { - var selection = this.getView().getSelectionModel().getSelection()[0]; - if (selection) { - // Set phantom to false because ExtJS has problems with PK-less thingies - selection.phantom = false; - this.store.remove(selection); - } - }, - onSelectChange: function(selModel, selections){ - this.deleteButton.setDisabled(selections.length === 0); - }, - syncPreferences: function () { - /* Iterate through all removed records and issue an AJAX - * call. This is necessary because the server side doesn't suport string - * keys and ExtJS can't handle composite keys. - */ - for (var j=0;j<this.store.removed.length;j++) { - var call = new PartKeepr.ServiceCall("UserPreference", "destroy"); - call.setParameter("key", this.store.removed[j].get("key")); - call.setParameter("user_id", this.store.removed[j].get("user_id")); - call.doCall(); - } - - this.store.removed = []; - } -}); diff --git a/frontend/js/Components/Widgets/WebcamPanel.js b/frontend/js/Components/Widgets/WebcamPanel.js @@ -1,62 +0,0 @@ -/** - * Creates a panel with a webcam widget. The webcam widget is - * a flash (jpegcam). - */ -Ext.define('PartKeepr.WebcamPanel', { - extend: 'Ext.panel.Panel', - alias: 'widget.WebcamPanel', - initComponent: function () { - - this.takePhotoButton = Ext.create("Ext.button.Button", { - text: i18n("Take picture and upload"), - icon: 'resources/fugue-icons/icons/webcam.png', - handler: this.takePhoto - }); - - // Create a toolbar with the "take photo" button - this.bbar = Ext.create("Ext.toolbar.Toolbar", { - enableOverflow: true, - items: [ this.takePhotoButton ] - }); - - // Render the SWF - this.on("afterrender", this.renderWebcam, this); - - // Fires when the image upload is complete - this.addEvents("uploadComplete"); - this.callParent(); - }, - /** - * Renders the webcam swf. - * @param e The element for this component - */ - renderWebcam: function (e) { - webcam.set_swf_url("resources/webcam.swf"); - webcam.set_quality(90); - webcam.set_api_url(PartKeepr.getBasePath()+"?service=TempFile&call=uploadCam&session="+PartKeepr.getApplication().getSession()); - webcam.set_shutter_sound(false); - webcam.set_hook('onComplete', Ext.bind(this.onUploadComplete, this)); - - e.body.insertHtml('beforeEnd', webcam.get_html(640,480, 640, 480)); - }, - /** - * Takes a photo using the webcam. - */ - takePhoto: function () { - webcam.snap(); - this.takePhotoButton.disable(); - this.takePhotoButton.setText(i18n("Uploading...")); - }, - /** - * Called when the upload is complete. Resumes webcam operation - * and fires the event. 'uploadComplete' - * @param message The server side message - */ - onUploadComplete: function (message) { - var response = Ext.decode(message); - - webcam.reset(); - this.fireEvent("uploadComplete", response.response); - - } -});- \ No newline at end of file diff --git a/frontend/js/Dialogs/Auth/LoginDialog.js b/frontend/js/Dialogs/Auth/LoginDialog.js @@ -1,117 +0,0 @@ -Ext.define('PartKeepr.LoginDialog', { - extend: 'Ext.Window', - title: i18n("PartKeepr: Login"), - loginField: null, - - width: 400, - height: 125, - - modal: true, - resizable: false, - - layout: 'anchor', - - initComponent: function () { - - this.loginField = Ext.ComponentMgr.create({ - xtype: 'textfield', - value: "", - fieldLabel: i18n("Username"), - anchor: '100%' - }); - - this.passwordField = Ext.ComponentMgr.create({ - xtype: 'textfield', - inputType: "password", - value: "", - fieldLabel: i18n("Password"), - anchor: '100%' - }); - - Ext.apply(this, { - - keys: [{ - key: Ext.EventObject.ENTER, - handler: this.login, - scope: this - }], - bodyStyle: 'padding: 5px;', - items: [ - this.loginField, - this.passwordField - ], - dockedItems: [{ - xtype: 'toolbar', - enableOverflow: true, - dock: 'bottom', - ui: 'footer', - pack: 'start', - defaults: {minWidth: 100}, - items: [ - { - cls: 'x-btn-text-icon', - text: i18n("Connect"), - icon: 'resources/silkicons/connect.png', - handler: Ext.bind(this.login, this) - },{ - cls: 'x-btn-text-icon', - text: i18n("Close"), - handler: Ext.bind(this.close, this), - icon: 'resources/silkicons/cancel.png' - }] - }] - }); - - this.callParent(arguments); - - this.on("show", function () { this.loginField.focus(); }, this); - - if (PartKeepr.autoLoginUsername) { - this.loginField.setValue(PartKeepr.autoLoginUsername); - this.passwordField.setValue(PartKeepr.autoLoginPassword); - this.login(); - - PartKeepr.autoLoginUsername = null; - } - }, - login: function () { - var call = new PartKeepr.ServiceCall("Auth", "login"); - - call.setParameter("username", this.loginField.getValue()); - call.setParameter("password", md5(this.passwordField.getValue())); - call.setLoadMessage(i18n("Logging in...")); - call.enableAnonymous(); - call.setHandler(Ext.bind(this.onLogin, this)); - call.doCall(); - }, - /** - * Callback after the login call was completed. - * - * @param obj The response object from the server - */ - onLogin: function (obj) { - // Set session + username - PartKeepr.getApplication().setSession(obj.sessionid); - PartKeepr.getApplication().setUsername(obj.username); - - // @todo Disable the "edit users" menu somehow else - if (!obj.admin) { - Ext.getCmp("edit-users").hide(); - } else { - Ext.getCmp("edit-users").show(); - } - - // Set the admin flag - PartKeepr.getApplication().setAdmin(obj.admin); - - // Call the "login" method, which initializes the system with the user - PartKeepr.getApplication().login(); - - // Write out a logging message - PartKeepr.log(i18n("Logged in as")+" "+obj.username); - - // Close the window - this.close(); - - } -});- \ No newline at end of file diff --git a/frontend/js/Dialogs/ExceptionWindow.js b/frontend/js/Dialogs/ExceptionWindow.js @@ -1,132 +0,0 @@ -Ext.define('PartKeepr.ExceptionWindow', { - extend: 'Ext.window.Window', - autoScroll: true, - resizable: true, - layout: 'anchor', - width: 500, - height: 300, - cls: Ext.baseCSSPrefix + 'message-box', - initComponent: function () { - - this.iconComponent = Ext.create('Ext.Component', { - cls: 'ext-mb-icon', - width: 40, - height: 35, - style: { - 'float': 'left' - } - }); - - this.messageDiv = Ext.create('Ext.Component', { autoEl: { tag: 'div' }, - cls: 'ext-mb-text', - style: 'margin-left: 40px;' - }); - - this.detailDiv = Ext.create('Ext.Component', { autoEl: { tag: 'div' }, - cls: 'ext-mb-text', - style: 'margin-left: 40px; margin-top: 20px;' - }); - - this.exceptionDiv = Ext.create('Ext.Component', { autoEl: { tag: 'div' }, - cls: 'ext-mb-text' - }); - - this.traceDiv = Ext.create('Ext.Component', { autoEl: { tag: 'div' }, - cls: 'ext-mb-text' - }); - - this.exceptionDetails = Ext.create('Ext.form.FieldSet', { - style: 'margin-left: 40px; margin-top: 20px', - title: 'Exception Details', - collapsible: true, - collapsed: true, - items: this.exceptionDiv - }); - - this.backtraceDetails = Ext.create('Ext.form.FieldSet', { - style: 'margin-left: 40px', - title: 'Backtrace', - collapsible: true, - collapsed: true, - items: this.traceDiv - }); - - this.topContainer = Ext.create("Ext.container.Container", { - xtype: 'container', - style: 'padding: 10px', - layout: 'anchor', - anchor: '100% 100%', - items: [this.iconComponent, this.messageDiv, this.detailDiv, - this.exceptionDetails, this.backtraceDetails] - }); - - this.items = this.topContainer; - - this.dockedItems = [{ - xtype: 'toolbar', - dock: 'bottom', - ui: 'footer', - defaults: {minWidth: 80}, - layout: { - pack: 'center' - }, - items: [ - { xtype: 'button', text: 'OK', handler: Ext.bind(function () { this.hide(); }, this) } - //{ xtype: 'button', text: 'Details >>', handler: Ext.bind(function () { this.showDetails(); }, this) } - ] - }]; - - this.callParent(); - }, - setIcon : function(icon) { - this.iconComponent.removeCls(this.iconCls); - - if (icon) { - this.iconComponent.show(); - this.iconComponent.addCls(Ext.baseCSSPrefix + 'dlg-icon'); - this.iconComponent.addCls(icon); - } else { - this.iconComponent.removeCls(Ext.baseCSSPrefix + 'dlg-icon'); - this.iconComponent.hide(); - } - }, - _showException: function (exception) { - this.setIcon(Ext.MessageBox.ERROR); - - this.messageDiv.update(exception.message); - this.setTitle(exception.message); - - if (exception.detail) { - this.detailDiv.update(exception.detail); - } else { - this.detailDiv.update(""); - } - - - if (exception.exception) { - this.exceptionDiv.update(exception.exception); - } else { - this.exceptionDiv.update("No information available"); - } - - if (exception.backtrace) { - this.traceDiv.update(exception.backtrace); - } else { - this.traceDiv.update("No backtrace available"); - } - - this.show(); - - }, - - statics: { - showException: function (exception) { - if (!PartKeepr.ExceptionWindow.activeInstance) { - PartKeepr.ExceptionWindow.activeInstance = new PartKeepr.ExceptionWindow(); - } - - PartKeepr.ExceptionWindow.activeInstance._showException(exception); - } - - } -});- \ No newline at end of file diff --git a/frontend/js/Dialogs/FileUploadDialog.js b/frontend/js/Dialogs/FileUploadDialog.js @@ -1,141 +0,0 @@ -Ext.define('PartKeepr.FileUploadDialog', { - extend: 'Ext.window.Window', - - title: i18n("File Upload"), - fileFieldLabel: i18n("File"), - uploadButtonText: i18n('Select File...'), - uploadURL: PartKeepr.getBasePath()+"/TempFile", - layout: 'fit', - resizable: false, - modal: true, - iconCls: 'icon-drive-upload', - initComponent: function () { - - if (this.imageUpload) { - this.uploadURL = PartKeepr.getBasePath()+"/TempImage"; - } - - this.addEvents("fileUploaded"); - - this.uploadButton = Ext.create("Ext.button.Button", - { - text: i18n('Upload'), - iconCls: 'icon-drive-upload', - width: 120, - handler: Ext.bind(function() { - var form = this.form.getForm(); - - var values = form.getValues(); - - if (this.fileField.getValue() === "" && this.urlField.getValue() === "") { - Ext.Msg.alert(i18n("Error"), i18n("Please select a file to upload or enter an URL")); - return; - } - - - if(form.isValid()){ - form.submit({ - url: this.uploadURL, - params: { - call: "upload", - session: PartKeepr.getApplication().getSession() - }, - success: Ext.bind(function(fp, o) { - this.fireEvent("fileUploaded", o.result.response); - this.close(); - },this), - failure: function(form, action) { - } - }); - } - }, this) - }); - - this.urlField = Ext.create("Ext.form.field.Text", { - fieldLabel: i18n("URL"), - labelWidth: 50, - name: "url", - anchor: '100%' - }); - - this.tbButtons = [ this.uploadButton ]; - - if (this.imageUpload) { - - this.title = i18n("Image Upload"); - this.fileFieldLabel = i18n("Image"); - this.uploadButtonText = i18n("Select Image..."); - - this.fileFormatButton = Ext.create("Ext.button.Button", { - text: i18n("Available Formats"), - width: 120, - iconCls: 'icon-infocard', - handler: this.showAvailableFormats, - scope: this - }); - - this.tbButtons.push(this.fileFormatButton); - } - - this.fileField = Ext.create("Ext.form.field.File",{ - xtype: 'filefield', - name: 'userfile', - fieldLabel: this.fileFieldLabel, - labelWidth: 50, - msgTarget: 'side', - anchor: '100%', - buttonText: this.uploadButtonText - }); - - this.form = Ext.create('Ext.form.Panel', { - width: 400, - bodyPadding: 10, - border: false, - items: [{ - html: i18n("Select a file to upload or enter an URL to load the file from"), - border: false, - style: "margin-bottom: 20px;" - }, - this.fileField, - { - html: sprintf(i18n("Maximum upload size: %s"), PartKeepr.bytesToSize(PartKeepr.getMaxUploadSize())), - style: 'margin-bottom: 10px;', - border: false - }, - this.urlField], - - buttons: this.tbButtons - }); - - this.on("beforedestroy", this.onBeforeDestroy, this); - - this.items = this.form; - this.callParent(); - }, - /** - * Shows a tooltip for all available image formats. - */ - showAvailableFormats: function () { - if (!this.tip) { - this.tip = Ext.create("Ext.tip.ToolTip", { - title: i18n("Available Image Formats"), - anchor: 'left', - width: 200, - height: 300, - autoScroll: true, - target: this.fileFormatButton.getEl(), - closable: true, - html: implode("<br>", PartKeepr.getAvailableImageFormats()), - autoHide: false - }); - } - - - this.tip.show(); - }, - onBeforeDestroy: function () { - if (this.tip) { - this.tip.destroy(); - } - } -}); diff --git a/frontend/js/Ext.ux/ClearableComboBox.js b/frontend/js/Ext.ux/ClearableComboBox.js @@ -1,29 +0,0 @@ -Ext.define('Ext.ux.ClearableComboBox', { - extend: "Ext.form.ComboBox", - alias: "widget.clearcombo", - initComponent: function() { - this.triggerConfig = { - tag:'span', cls:'x-form-twin-triggers', cn:[ - {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger x-form-clear-trigger"}, - {tag: "img", src: Ext.BLANK_IMAGE_URL, cls: "x-form-trigger"} - ]}; - - this.callParent(); - }, - onTrigger1Click : function() - { - this.collapse(); - this.setValue(''); - this.fireEvent('cleared'); - }, - setValue : function(v){ - Ext.form.ClearableComboBox.superclass.setValue.call(this, v); - if (this.rendered) { - this.triggers[0][!Ext.isEmpty(v) ? 'show': 'hide'](); - } - }, - onDestroy: function(){ - Ext.destroy(this.triggers); - Ext.form.ClearableComboBox.superclass.onDestroy.apply(this, arguments); - } -}); diff --git a/frontend/js/Ext.ux/Iframe.js b/frontend/js/Ext.ux/Iframe.js @@ -1,119 +0,0 @@ -// vim: sw=2:ts=2:nu:nospell:fdc=2:expandtab -/** -* @class Ext.ux.SimpleIFrame -* @extends Ext.Panel -* -* A simple ExtJS 4 implementaton of an iframe providing basic functionality. -* For example: -* -* var panel=Ext.create('Ext.ux.SimpleIFrame', { -* border: false, -* src: 'http://localhost' -* }); -* panel.setSrc('http://www.sencha.com'); -* panel.reset(); -* panel.reload(); -* panel.getSrc(); -* panel.update('<div><b>Some Content....</b></div>'); -* panel.destroy(); -* -* @author Conor Armstrong -* @copyright (c) 2011 Conor Armstrong -* @date 12 April 2011 -* @version 0.1 -* -* @license Ext.ux.SimpleIFrame.js is licensed under the terms of the Open Source -* LGPL 3.0 license. Commercial use is permitted to the extent that the -* code/component(s) do NOT become part of another Open Source or Commercially -* licensed development library or toolkit without explicit permission. -* -* <p>License details: <a href="http://www.gnu.org/licenses/lgpl.html" -* target="_blank">http://www.gnu.org/licenses/lgpl.html</a></p> -* -*/ - -Ext.require([ - 'Ext.panel.*' -]); - -Ext.define('Ext.ux.SimpleIFrame', { - extend: 'Ext.Panel', - alias: 'widget.simpleiframe', - src: 'about:blank', - loadingText: 'Loading ...', - initComponent: function(){ - this.updateHTML(); - this.callParent(arguments); - }, - updateHTML: function() { - this.html='<iframe id="iframe-'+this.id+'"'+ - ' style="overflow:auto;width:100%;height:100%;"'+ - ' frameborder="0" '+ - ' src="'+this.src+'"'+ - '></iframe>'; - }, - reload: function() { - this.setSrc(this.src); - }, - reset: function() { - var iframe=this.getDOM(); - var iframeParent=iframe.parentNode; - if (iframe && iframeParent) { - iframe.src='about:blank'; - iframe.parentNode.removeChild(iframe); - } - - iframe=document.createElement('iframe'); - iframe.frameBorder=0; - iframe.src=this.src; - iframe.id='iframe-'+this.id; - iframe.style.overflow='auto'; - iframe.style.width='100%'; - iframe.style.height='100%'; - iframeParent.appendChild(iframe); - }, - setSrc: function(src, loadingText) { - this.src=src; - var iframe=this.getDOM(); - if (iframe) { - iframe.src=src; - } - }, - getSrc: function() { - return this.src; - }, - getDOM: function() { - return document.getElementById('iframe-'+this.id); - }, - getDocument: function() { - var iframe=this.getDOM(); - iframe = (iframe.contentWindow) ? iframe.contentWindow : (iframe.contentDocument.document) ? iframe.contentDocument.document : iframe.contentDocument; - return iframe.document; - }, - destroy: function() { - var iframe=this.getDOM(); - if (iframe && iframe.parentNode) { - iframe.src='about:blank'; - iframe.parentNode.removeChild(iframe); - } - this.callParent(arguments); - }, - update: function(content) { - var doc; - - this.setSrc('about:blank'); - try { - doc=this.getDocument(); - doc.open(); - doc.write(content); - doc.close(); - } catch(err) { - // reset if any permission issues - this.reset(); - doc=this.getDocument(); - doc.open(); - doc.write(content); - doc.close(); - } - } -});- \ No newline at end of file diff --git a/frontend/js/Ext.ux/SearchField.js b/frontend/js/Ext.ux/SearchField.js @@ -1,65 +0,0 @@ -Ext.define('Ext.ux.form.SearchField', { - extend: 'Ext.form.field.Trigger', - - alias: 'widget.searchfield', - - trigger1Cls: Ext.baseCSSPrefix + 'form-clear-trigger', - - trigger2Cls: Ext.baseCSSPrefix + 'form-search-trigger', - - hasSearch : false, - paramName : 'query', - - initComponent: function(){ - this.callParent(arguments); - this.on('specialkey', function(f, e){ - if(e.getKey() == e.ENTER){ - this.onTrigger2Click(); - } - }, this); - }, - - afterRender: function(){ - this.callParent(); - this.triggerEl.item(0).setDisplayed('none'); - this.doComponentLayout(); - }, - - onTrigger1Click : function(){ - var me = this,